【文章內(nèi)容簡(jiǎn)介】
011510110156110011371111117實(shí)際運(yùn)算中,總是先按自然順序?qū)⑤斎胄蛄写嫒氪鎯?chǔ)單元,要實(shí)現(xiàn)FFT算法,首先將按自然順序存放的序列經(jīng)變址運(yùn)算變換得到倒位序的排列。第3章 硬件描述語(yǔ)言及MAX+PLUSⅡ平臺(tái) 硬件描述語(yǔ)言(HDL) HDL概述硬件描述語(yǔ)言(HDL)是相對(duì)于一般的計(jì)算機(jī)軟件語(yǔ)言如C,PASCAL而言的。硬件描述語(yǔ)言HDL是一種用形式化方法描述數(shù)字電路和系統(tǒng)的語(yǔ)言,它描述電子系統(tǒng)的邏輯功能、電路結(jié)構(gòu)和連接方式。利用這種語(yǔ)言,數(shù)字電路系統(tǒng)的設(shè)計(jì)可以從上層到下層(從抽象到具體)逐層描述自己的設(shè)計(jì)思想,用一系列分層次的模塊來(lái)表示極其復(fù)雜的數(shù)字系統(tǒng)。然后,利用電子設(shè)計(jì)自動(dòng)化(EDA)工具,逐層進(jìn)行仿真驗(yàn)證,再把其中需要變?yōu)閷?shí)際電路的模塊組合,經(jīng)過(guò)自動(dòng)綜合工具轉(zhuǎn)換到門(mén)級(jí)電路網(wǎng)表。接下去,再用專(zhuān)用集成電路ASIC或現(xiàn)場(chǎng)可編程門(mén)陣列FPGA自動(dòng)布局布線(xiàn)工具,把網(wǎng)表轉(zhuǎn)換為要實(shí)現(xiàn)的具體電路布線(xiàn)結(jié)構(gòu)。硬件描述語(yǔ)言具有以下幾個(gè)優(yōu)點(diǎn):(1)設(shè)計(jì)技術(shù)齊全,方法靈活;(2)加快了硬件電路的設(shè)計(jì)周期,降低了硬件電路的設(shè)計(jì)難度;(3)采用系統(tǒng)早期仿真,在系統(tǒng)設(shè)計(jì)早期就可發(fā)現(xiàn)并排除存在的問(wèn)題;(4)語(yǔ)言設(shè)計(jì)可與工藝技術(shù)無(wú)關(guān);(5)語(yǔ)言標(biāo)準(zhǔn)、規(guī)范,易共享和復(fù)用。目前,采用硬件描述語(yǔ)言進(jìn)行數(shù)字系統(tǒng)的設(shè)計(jì)己被廣泛采用。據(jù)統(tǒng)計(jì),目前在美國(guó)硅谷約有90%以上的ASIC和FPGA采用硬件描述語(yǔ)言進(jìn)行設(shè)計(jì)。硬件描述語(yǔ)言HDL的發(fā)展至今已有20多年的歷史,并成功地應(yīng)用于設(shè)計(jì)的各個(gè)階段:建模、仿真、驗(yàn)證和綜合等。到20世紀(jì)80年代,已出現(xiàn)了上百種硬件描述語(yǔ)言,對(duì)設(shè)計(jì)自動(dòng)化曾起到了極大的促進(jìn)和推動(dòng)作用。但是,這些語(yǔ)言一般各自面向特定的設(shè)計(jì)領(lǐng)域和層次,而且眾多的語(yǔ)言使用戶(hù)無(wú)所適從。因此,急需一種面向設(shè)計(jì)的多領(lǐng)域、多層次并得到普遍認(rèn)同的標(biāo)準(zhǔn)硬件描述語(yǔ)言。20世紀(jì)80年代后期,VHDL和Verilog HDL語(yǔ)言適應(yīng)了這種趨勢(shì)的要求,先后成為IEEE標(biāo)準(zhǔn)。就FPGA/CPLD開(kāi)發(fā)而言,VHDL語(yǔ)言是最常用和流行的硬件描述語(yǔ)言之一,在數(shù)字信號(hào)處理的FPGA設(shè)計(jì)中得到了廣泛的使用。 HDL設(shè)計(jì)方法HDL設(shè)計(jì)方法基本上包含3方面:(1)設(shè)計(jì)描述的開(kāi)發(fā),這種描述必須是有效的;(2)綜合,將設(shè)計(jì)描述轉(zhuǎn)換成優(yōu)化的門(mén)級(jí)表示,目前的綜合工具只是將輸入的寄存器傳輸級(jí)(RTL)的HDL描述轉(zhuǎn)換為門(mén)級(jí)的網(wǎng)表,再由門(mén)級(jí)的網(wǎng)表實(shí)現(xiàn)互連的門(mén)級(jí)宏單元結(jié)構(gòu)。因?yàn)閺S家所支持的各個(gè)工藝庫(kù)中有門(mén)級(jí)宏單元模塊,所以有了門(mén)級(jí)網(wǎng)表就能按照技術(shù)條件進(jìn)行優(yōu)化,得到一個(gè)優(yōu)化了的門(mén)級(jí)結(jié)構(gòu);(3)對(duì)設(shè)計(jì)加以驗(yàn)證。,其中的綜合部分是HDL設(shè)計(jì)方法中的關(guān)鍵。RTL VHDL源文件RTL仿真功能仿真轉(zhuǎn)化成門(mén)級(jí)優(yōu)化門(mén)級(jí)仿真工作速度與功能仿真門(mén)級(jí)結(jié)束YNNY綜合 HDL設(shè)計(jì)方法流程框圖HDL綜合設(shè)計(jì)方法優(yōu)點(diǎn)如下:(1)提高設(shè)計(jì)效率:設(shè)計(jì)者不需人工進(jìn)行門(mén)級(jí)描述,節(jié)省了設(shè)計(jì)時(shí)間;(2)設(shè)計(jì)是在較高的抽象層次上進(jìn)行,設(shè)計(jì)者不用更多地考慮門(mén)級(jí),可花費(fèi)更多的時(shí)間考慮概念級(jí)方面;(3)利用HDL具有的自動(dòng)優(yōu)化和快速探索各種設(shè)計(jì)方案的能力,可使設(shè)計(jì)者迅速而成功地得到高質(zhì)量設(shè)計(jì)的最終結(jié)果,從而改善了設(shè)計(jì)質(zhì)量;(4)設(shè)計(jì)與工藝無(wú)關(guān),便于設(shè)計(jì)的再利用。 VHDL語(yǔ)言 VHDL語(yǔ)言簡(jiǎn)介VHDL的英文全名是VeryHighSpeed Integrated Circuit Hardware Description Language(超高速集成電路硬件描述語(yǔ)言),VHDL語(yǔ)言是美國(guó)國(guó)防部資助的VHSIC(Very High Speed Integrated Circuit超高速集成電路)項(xiàng)目開(kāi)發(fā)的產(chǎn)品,誕生于1982年。1987年底VHDL被IEEE和美國(guó)國(guó)防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語(yǔ)言。自IEEE公布了VHDL的標(biāo)準(zhǔn)版本(IEEE std 10761987)之后,各EDA公司相繼推出了自己的VHDL設(shè)計(jì)環(huán)境。此后,VHDL在電子設(shè)計(jì)領(lǐng)域受到了廣泛的接受,并逐步取代了原有的非標(biāo)準(zhǔn)HDL。1993年,IEEE對(duì)VHDL進(jìn)行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴(kuò)展VHDL的內(nèi)容,公布了新版本的VHDL,即ANSI/IEEE std 10761993版本。1996年IEEE 。VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口,非常適用于可編程邏輯芯片的應(yīng)用設(shè)計(jì)。與其它的HDL相比,VHDL具有更強(qiáng)的行為描述能力,從而決定了它成為系統(tǒng)設(shè)計(jì)領(lǐng)域最佳的硬件描述語(yǔ)言。強(qiáng)大的行為描述能力是避開(kāi)具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計(jì)大規(guī)模電子系統(tǒng)的重要保證。就目前流行的EDA工具和VHDL綜合器而言,將基于抽象的行為描述風(fēng)格的VHDL程序綜合成為具體的FPGA和CPLD等目標(biāo)器件的網(wǎng)表文件已不成問(wèn)題。VHDL語(yǔ)言可以支持自上而下和基于庫(kù)的設(shè)計(jì)方法,并支持同步電路、異步電路、FPGA以及其它隨機(jī)電路的設(shè)計(jì)。目前大多數(shù)EDA工具幾乎在不同程度上都支持VHDL語(yǔ)言。這給VHDL語(yǔ)言進(jìn)一步推廣和應(yīng)用創(chuàng)造了良好的環(huán)境。VHDL具有多層次描述系統(tǒng)硬件功能的能力,可以描述系統(tǒng)模型直到門(mén)級(jí)電路。VHDL語(yǔ)言在硬件設(shè)計(jì)領(lǐng)域的作用將與C和C++在軟件設(shè)計(jì)領(lǐng)域的作用一樣,在大規(guī)模數(shù)字系統(tǒng)的設(shè)計(jì)中,它將逐步取代如邏輯狀態(tài)表和邏輯電路圖等級(jí)別較低的繁瑣的硬件描述方法,而成為主要的硬件描述工具,它將成為數(shù)字系統(tǒng)設(shè)計(jì)領(lǐng)域中所有技術(shù)人員必須掌握的一種語(yǔ)言。VHDL和可編程邏輯器件的結(jié)合成為一種強(qiáng)有力的設(shè)計(jì)方式,將為設(shè)計(jì)者的產(chǎn)品上市帶來(lái)創(chuàng)記錄的速度。 VHDL的優(yōu)點(diǎn)VHDL是一種全方位的硬件描述語(yǔ)言,包括系統(tǒng)行為級(jí)、寄存器傳輸級(jí)和邏輯門(mén)級(jí)多個(gè)設(shè)計(jì)層次,支持結(jié)構(gòu)、數(shù)據(jù)流和行為三種描述形式的混合描述,因此VHDL幾乎覆蓋了以往各種硬件描述語(yǔ)言的功能,整個(gè)自頂向下或自底向上的電路設(shè)計(jì)過(guò)程都可以用VHDL來(lái)完成。VHDL還具有以下優(yōu)點(diǎn):(1)VHDL的寬范圍描述能力使它成為高層次設(shè)計(jì)的核心,將設(shè)計(jì)人員的工作重心提高到了系統(tǒng)功能的實(shí)現(xiàn)與調(diào)試,而花較少的精力于物理實(shí)現(xiàn)。(2)VHDL可以用簡(jiǎn)潔明確的代碼描述來(lái)進(jìn)行復(fù)雜控制邏輯的設(shè)計(jì),靈活且方便,而且也便于設(shè)計(jì)結(jié)果的交流、保存和重用。(3)VHDL的設(shè)計(jì)不依賴(lài)于特定的器件,方便了工藝的轉(zhuǎn)換。(4)VHDL是一個(gè)標(biāo)準(zhǔn)語(yǔ)言,為眾多的EDA廠商支持,因此移植性好。VHDL通常由以下幾部分組成:(1)實(shí)際用的VHDL語(yǔ)言。(2)含有STANDARD包和TEXTIO包的STD庫(kù)。在STANDARD包內(nèi)存有一些預(yù)定義的數(shù)據(jù)類(lèi)型說(shuō)明和函數(shù);在TEXTIO包內(nèi)含有支持格式化ASCII I/O操作的數(shù)據(jù)和子程序的說(shuō)明。(3)買(mǎi)方專(zhuān)用的庫(kù)和程序包。(4)用戶(hù)專(zhuān)用的庫(kù)和程序包。(5)保存用戶(hù)設(shè)計(jì)用的WORK庫(kù)。 VHDL設(shè)計(jì)特點(diǎn)VHDL語(yǔ)言只所以在電子設(shè)計(jì)領(lǐng)域應(yīng)用廣泛與它的設(shè)計(jì)特點(diǎn)是密不可分的??偟膩?lái)說(shuō),VHDL語(yǔ)言具有如下三個(gè)設(shè)計(jì)特點(diǎn):(1)VHDL描述就是將一個(gè)待設(shè)計(jì)系統(tǒng)的部件和互連關(guān)系列成網(wǎng)表,并對(duì)該系統(tǒng)設(shè)計(jì)的行為提供證據(jù)。VHDL可在各個(gè)抽象層次上進(jìn)行,如算法級(jí)、寄存器傳輸級(jí)、具有單位時(shí)間延遲的門(mén)級(jí)和詳細(xì)定時(shí)的門(mén)級(jí)等。通常在自頂向下(topdown)的設(shè)計(jì)方法中,設(shè)計(jì)者首先對(duì)所設(shè)計(jì)的系統(tǒng)提出比較抽象的概念性描述,而后進(jìn)入到系統(tǒng)的細(xì)節(jié)考慮。(2)一個(gè)用VHDL語(yǔ)言描述的系統(tǒng)模型,通常要在VHDL仿真器上運(yùn)行,以驗(yàn)證所模擬系統(tǒng)的行為。對(duì)一個(gè)VHDL設(shè)計(jì)模型的仿真,需加激勵(lì)以提供在仿真過(guò)程中觀察該模型的手段,得到最終所要檢查的仿真結(jié)果。這就要求設(shè)計(jì)者給出測(cè)試條件(提供一組功能測(cè)試向童)作為輸入,用以檢驗(yàn)所設(shè)計(jì)系統(tǒng)的功能。(3)VHDL設(shè)計(jì)可通過(guò)邏輯綜合工具產(chǎn)生其物理設(shè)計(jì),特別是許多生產(chǎn)銷(xiāo)售VLSI門(mén)陣芯片的廠家,可將VHDL設(shè)計(jì)描述轉(zhuǎn)換成門(mén)級(jí)網(wǎng)表,從而可制造出一個(gè)專(zhuān)用的集成電路芯片。由此可見(jiàn),VHDL的應(yīng)用可對(duì)一個(gè)設(shè)計(jì)提供文檔、對(duì)所設(shè)計(jì)系統(tǒng)的行為進(jìn)行仿真、繼而直接進(jìn)行邏輯綜合。總之,VHDL語(yǔ)言不但可用于對(duì)一電子系統(tǒng)的行為特征和元件間的互連關(guān)系建立文檔;也可將一個(gè)VHDL設(shè)計(jì)描述輸入到仿真器中,在給定的測(cè)試條件下運(yùn)行,以檢驗(yàn)設(shè)計(jì)的正誤;還可將VHDL設(shè)計(jì)輸入到邏輯綜合工具中,產(chǎn)生所要設(shè)計(jì)的電路結(jié)構(gòu);VHDL也可將設(shè)計(jì)分成若干個(gè)抽象層次加以描述。 VHDL基本設(shè)計(jì)流程用VHDL/Verilog HDL開(kāi)發(fā)CPLD/FPGA的完整流程為:(1)文本編輯:用任何文本編輯器都可以進(jìn)行,也可以用專(zhuān)用的文本編輯環(huán)境。(2)功能仿真:將文件調(diào)入HDL仿真軟件進(jìn)行功能仿真,檢查邏輯功能是否正確(也稱(chēng)為前仿真,對(duì)簡(jiǎn)單的電路可以跳過(guò)這一步,只在布線(xiàn)完成后進(jìn)行時(shí)序仿真)。(3)邏輯綜合:將源文件調(diào)入邏輯綜合軟件進(jìn)行綜合,即把語(yǔ)言綜合成最簡(jiǎn)的布爾表達(dá)式和信號(hào)的連接關(guān)系。(4)布局布線(xiàn): D廠家提供的軟件中進(jìn)行布線(xiàn),即把設(shè)計(jì)好的邏輯安放到CPLD/FPGA內(nèi)。(5)時(shí)序仿真:需要利用在布局布線(xiàn)中獲得的精確參數(shù),用仿真軟件驗(yàn)證電路的時(shí)序。(也稱(chēng)為后仿真)。(6)仿真下載:確認(rèn)仿真無(wú)誤后,將文件下載到芯片中。 VHDL設(shè)計(jì)單元模型VHDL設(shè)計(jì)可由4個(gè)分立的設(shè)計(jì)單元組成,每個(gè)設(shè)計(jì)單元經(jīng)編輯后保存在WORK庫(kù)中。這4個(gè)可編輯的源設(shè)計(jì)單元分別是:實(shí)體(entity)、結(jié)構(gòu)體(architecture)、配置(configuration)和程序包(package)。下面逐一介紹這4個(gè)設(shè)計(jì)單元。1.實(shí)體實(shí)體是用來(lái)描述一個(gè)設(shè)計(jì)對(duì)外部的接口信號(hào)、端口數(shù)目、端口的方向和數(shù)據(jù)類(lèi)型等,還包括一些其它的信息,如屬性等。一切通信均由實(shí)體中的端口說(shuō)明來(lái)產(chǎn)生。實(shí)體定義了硬件的輸入輸出端口,定義了硬件與外部環(huán)境的接口。從這種意義上來(lái)講,實(shí)體定義的其實(shí)是一個(gè)黑盒子,黑盒子上帶有輸入和輸出的端口說(shuō)明,但并不包含如何將輸入映射到輸出的信息。下面的 VHDL源代碼定義了一個(gè)實(shí)體BUBBLE,它的輸入端口為DATA_IN,DATA_ READY和START,輸出端口為DATA_OUT。,但沒(méi)有定義輸入信號(hào)和輸出信號(hào)之間的關(guān)系。簡(jiǎn)單地講,實(shí)體定義了一個(gè)“插座”,這個(gè)插座只定義了硬件的端口,可以在這個(gè)插座上插上任何端口匹配的硬件。entity bubble isport(data_ready: in boolean。 data in: in integer。 start: in std_logic。 data_ out: out inteager)。end bubble。2.結(jié)構(gòu)體結(jié)構(gòu)體定義了硬件設(shè)計(jì)的輸入端口和輸出端口之間的映射關(guān)系,用來(lái)說(shuō)明相應(yīng)的硬件的行為。換句話(huà)說(shuō),結(jié)構(gòu)體定義了插座(實(shí)體)上插入了什么器件。設(shè)計(jì)者可以在任何層次定義結(jié)構(gòu)體,算法級(jí)、RTL級(jí)或者邏輯門(mén)級(jí)都可以寫(xiě)出相應(yīng)的結(jié)構(gòu)體。結(jié)構(gòu)體通常由說(shuō)明部分和算法部分組成,算法部分通常是一些并發(fā)執(zhí)行的語(yǔ)句。下面的VHDL源代碼是實(shí)體BUBBLE的一種行為描述。結(jié)構(gòu)體BEHAVIOR中的算法部分只有一個(gè)并發(fā)執(zhí)行的進(jìn)程語(yǔ)句SORT。其中,進(jìn)程實(shí)際上是包含在begin和end之間的無(wú)限循環(huán)語(yǔ)句。architecture behavior of bubble is 結(jié)構(gòu)體的說(shuō)明部分 type memory is array(1 to 256) of integer。 procedure read_mem(data_ready: in boolean。 data_in: in inteager。 ram: out memory) is begin for i in 1 to 256 loop wait until data_ready。 ram(i):=data_in。 end loop。 end read_mem。 procedure write_mem(data_ready: in boolean。 data_out: out inteager。 ram: in memory) is begin for i in 1 to 256 loop wait until data_ready。 data_out= ram(i)。 end loop。 end write_mem。begin算法部分,只包含一個(gè)進(jìn)程sort: processvariable ram: memory:variable tmp,ti,t2: integer。begin wait until(start=’1’)。 read_mem(data_ready,data_in,ram) for i in 1 to 255 loop t1:=257。 when t1i loop t2:=t12。 t1:=t11。 if ram(t1)ram(t2) then tmp:=ram(t 1)。 ram(t1):=ram(t2)。 ram(t2):=tmp。 end if。 end loop end loop。