采用VHDL進(jìn)行高層次設(shè)計(jì)_第1頁
采用VHDL進(jìn)行高層次設(shè)計(jì)_第2頁
采用VHDL進(jìn)行高層次設(shè)計(jì)_第3頁
采用VHDL進(jìn)行高層次設(shè)計(jì)_第4頁
采用VHDL進(jìn)行高層次設(shè)計(jì)_第5頁
已閱讀5頁,還剩357頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、使用VHDL進(jìn)行數(shù)字電路設(shè)計(jì) ASIC技術(shù)的發(fā)展技術(shù)的發(fā)展 電路系統(tǒng)設(shè)計(jì)方法電路系統(tǒng)設(shè)計(jì)方法 自定向下的設(shè)計(jì)流程自定向下的設(shè)計(jì)流程 設(shè)計(jì)描述風(fēng)格設(shè)計(jì)描述風(fēng)格高層次設(shè)計(jì)方法ASIC技術(shù)的發(fā)展 由于所設(shè)計(jì)的系統(tǒng)的規(guī)模已從幾十幾百由于所設(shè)計(jì)的系統(tǒng)的規(guī)模已從幾十幾百門增加到幾萬幾十萬門,使得從前電子門增加到幾萬幾十萬門,使得從前電子工程師所熟悉的畫電路圖、真值表和卡工程師所熟悉的畫電路圖、真值表和卡諾圖的設(shè)計(jì)方法已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足數(shù)字諾圖的設(shè)計(jì)方法已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足數(shù)字系統(tǒng)的復(fù)雜性要求系統(tǒng)的復(fù)雜性要求ASIC技術(shù)的發(fā)展 高層次設(shè)計(jì)方法高層次設(shè)計(jì)方法HLD( (High Level Design) )是從八

2、十年代末以來,最新專用是從八十年代末以來,最新專用集成電路設(shè)計(jì)的、最先進(jìn)的設(shè)計(jì)方法,集成電路設(shè)計(jì)的、最先進(jìn)的設(shè)計(jì)方法,它為用戶設(shè)計(jì)更大規(guī)模、更高水平、性它為用戶設(shè)計(jì)更大規(guī)模、更高水平、性能優(yōu)良的能優(yōu)良的數(shù)字系統(tǒng)數(shù)字系統(tǒng)提供了可靠的保證提供了可靠的保證HLD符合目前對(duì)電路的兩個(gè)要求 Time to Market:對(duì)于通信領(lǐng)域來說,快:對(duì)于通信領(lǐng)域來說,快速推出市場(chǎng)需要的系統(tǒng)具有非常重要的速推出市場(chǎng)需要的系統(tǒng)具有非常重要的價(jià)值,價(jià)值,HLD使得快速設(shè)計(jì)較大的芯片成使得快速設(shè)計(jì)較大的芯片成為可能。為可能。 SOC:目前對(duì)數(shù)子系統(tǒng)的需求是規(guī)模越:目前對(duì)數(shù)子系統(tǒng)的需求是規(guī)模越來越大,來越大,HLD非集成

3、電路專業(yè)背景的通非集成電路專業(yè)背景的通信廠商設(shè)計(jì)大規(guī)模芯片提供了可能信廠商設(shè)計(jì)大規(guī)模芯片提供了可能設(shè)計(jì)技術(shù)的發(fā)展使得HLD成為可能 1,000,000 High Level Design gates 1990s Synthesis 100,000 gates Gate Level Design 1980s Place & Route1,000 gates Layout Design 1970s設(shè)計(jì)技術(shù)的發(fā)展使得HLD成為可能 采用最原始的版圖設(shè)計(jì)只需要相應(yīng)的圖形編輯采用最原始的版圖設(shè)計(jì)只需要相應(yīng)的圖形編輯工具工具 采用電路圖設(shè)計(jì)就需要相應(yīng)的布局布線工具采用電路圖設(shè)計(jì)就需要相應(yīng)的布局布線

4、工具 采用采用HDL語言設(shè)計(jì)電路就需要相應(yīng)的綜合工具語言設(shè)計(jì)電路就需要相應(yīng)的綜合工具支持支持 結(jié)論結(jié)論:正是綜合技術(shù)的提出使得:正是綜合技術(shù)的提出使得HLD成為可能成為可能電路設(shè)計(jì)方法 由底向上的設(shè)計(jì)(由底向上的設(shè)計(jì)(Bottom- -up):從結(jié)):從結(jié)構(gòu)層開始,采用結(jié)構(gòu)化單元和由少數(shù)行構(gòu)層開始,采用結(jié)構(gòu)化單元和由少數(shù)行為級(jí)模塊構(gòu)成的層次式模型,逐級(jí)向上為級(jí)模塊構(gòu)成的層次式模型,逐級(jí)向上搭建出符合要求的系統(tǒng)。搭建出符合要求的系統(tǒng)。 自頂而下的設(shè)計(jì)(自頂而下的設(shè)計(jì)(Top- -Down):先對(duì)所):先對(duì)所要設(shè)計(jì)的系統(tǒng)進(jìn)行功能描述,然后逐步要設(shè)計(jì)的系統(tǒng)進(jìn)行功能描述,然后逐步分塊細(xì)化,直至結(jié)構(gòu)化最

5、底層的具體實(shí)分塊細(xì)化,直至結(jié)構(gòu)化最底層的具體實(shí)現(xiàn)現(xiàn)Top-Down的優(yōu)越性 提高設(shè)計(jì)生產(chǎn)的效率:自頂向下的設(shè)計(jì)提高設(shè)計(jì)生產(chǎn)的效率:自頂向下的設(shè)計(jì)方法允許設(shè)計(jì)者從一個(gè)高抽象層次上對(duì)方法允許設(shè)計(jì)者從一個(gè)高抽象層次上對(duì)系統(tǒng)的功能進(jìn)行定制,而不需要考慮門系統(tǒng)的功能進(jìn)行定制,而不需要考慮門級(jí)的具體實(shí)現(xiàn)方法,這充分體現(xiàn)了工藝級(jí)的具體實(shí)現(xiàn)方法,這充分體現(xiàn)了工藝無關(guān)性的基本設(shè)計(jì)思想。設(shè)計(jì)者只需要無關(guān)性的基本設(shè)計(jì)思想。設(shè)計(jì)者只需要寫出設(shè)計(jì)中所需部件的硬件描述語言代寫出設(shè)計(jì)中所需部件的硬件描述語言代碼或者是其它類型的模型,設(shè)計(jì)工具就碼或者是其它類型的模型,設(shè)計(jì)工具就會(huì)根據(jù)編寫的高層描述生成門級(jí)的實(shí)現(xiàn),會(huì)根據(jù)編寫的

6、高層描述生成門級(jí)的實(shí)現(xiàn),這就大大減少了設(shè)計(jì)者以往必須花費(fèi)在這就大大減少了設(shè)計(jì)者以往必須花費(fèi)在設(shè)計(jì)細(xì)節(jié)上的時(shí)間設(shè)計(jì)細(xì)節(jié)上的時(shí)間Top-Down的優(yōu)越性 增加了設(shè)計(jì)的重用性:增加了設(shè)計(jì)的重用性:在大多數(shù)的自頂在大多數(shù)的自頂向下設(shè)計(jì)過程中,對(duì)設(shè)計(jì)的描述都保持向下設(shè)計(jì)過程中,對(duì)設(shè)計(jì)的描述都保持在一個(gè)通用的工藝水平上,它不是為某在一個(gè)通用的工藝水平上,它不是為某一廠家的工藝庫而特意定制的,也就是一廠家的工藝庫而特意定制的,也就是說,設(shè)計(jì)是與工藝無關(guān)的,所以在實(shí)現(xiàn)說,設(shè)計(jì)是與工藝無關(guān)的,所以在實(shí)現(xiàn)設(shè)計(jì)時(shí)不必使用某一特定廠家的工藝,設(shè)計(jì)時(shí)不必使用某一特定廠家的工藝,這樣就極大的提高了設(shè)計(jì)的可重用性,這樣就極

7、大的提高了設(shè)計(jì)的可重用性,如果需要改變?cè)O(shè)計(jì)所使用的工藝,只需如果需要改變?cè)O(shè)計(jì)所使用的工藝,只需要將設(shè)計(jì)在相應(yīng)的工藝庫上映設(shè)即可。要將設(shè)計(jì)在相應(yīng)的工藝庫上映設(shè)即可。Top-Down的優(yōu)越性 錯(cuò)誤的早期發(fā)覺:可以帶來好處錯(cuò)誤的早期發(fā)覺:可以帶來好處 1 1、減少產(chǎn)品開發(fā)周期、減少產(chǎn)品開發(fā)周期 2 2、降低開發(fā)成本降低開發(fā)成本 3、增加設(shè)計(jì)一次成功通過的可能性、增加設(shè)計(jì)一次成功通過的可能性電路設(shè)計(jì)應(yīng)該采用的方法 強(qiáng)調(diào)進(jìn)行系統(tǒng)開發(fā)的方式:首先進(jìn)行系統(tǒng)分析,給出Specification,劃分模塊,明確模塊接口,確定模塊內(nèi)部功能,此時(shí)應(yīng)該編寫詳細(xì)的設(shè)計(jì)說明文檔,之后才是編程,調(diào)試。 目前國(guó)內(nèi)很難達(dá)到這個(gè)

8、層次,但一般較大的設(shè)計(jì)都是多個(gè)設(shè)計(jì)者完成,因此模塊劃分和確定接口信號(hào)是非常重要的,可以極大的減少設(shè)計(jì)的調(diào)試時(shí)間。模塊盡量以寄存器為邊界,這樣對(duì)于聯(lián)調(diào)和最后的系統(tǒng)集成非常方便。 建立合理的設(shè)計(jì)習(xí)慣對(duì)于今后的工作的效率會(huì)有巨大幫助設(shè)計(jì)技術(shù)的發(fā)展 CAD:Schematics EDA:HDL VHDL和和Verilog是影響最廣的兩種是影響最廣的兩種HDL。 VHDL相對(duì)于相對(duì)于Veirlog而言,它在語法上而言,它在語法上更嚴(yán)謹(jǐn)一些,雖然這樣也使它失去了一更嚴(yán)謹(jǐn)一些,雖然這樣也使它失去了一些靈活性和多樣性,但從文檔紀(jì)錄、綜些靈活性和多樣性,但從文檔紀(jì)錄、綜合以及器件和系統(tǒng)級(jí)的仿真上講合以及器件和系

9、統(tǒng)級(jí)的仿真上講VHDL是一種更好的選擇。是一種更好的選擇。VHDL語言 在在1981年,美國(guó)國(guó)防部提出了一種新的硬件描述語言,年,美國(guó)國(guó)防部提出了一種新的硬件描述語言,稱之為稱之為VHSIC Hardware Description Language,也就,也就是我們現(xiàn)在所說的是我們現(xiàn)在所說的VHDL,它是美國(guó)國(guó)防部委托,它是美國(guó)國(guó)防部委托IBM和和Texas Instruments聯(lián)合開發(fā)的聯(lián)合開發(fā)的。 19861986年年,VHDL被建議作為被建議作為IEEE標(biāo)標(biāo)準(zhǔn),準(zhǔn),經(jīng)過了多次更經(jīng)過了多次更改后改后,直到,直到1987年年12月,它才被接納為月,它才被接納為IEEE1076IEEE10

10、76標(biāo)準(zhǔn)。標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)經(jīng)過不斷完善和更新,目前的標(biāo)準(zhǔn)為該標(biāo)準(zhǔn)經(jīng)過不斷完善和更新,目前的標(biāo)準(zhǔn)為IEEE1164,它已被絕大多數(shù)它已被絕大多數(shù)IC生產(chǎn)廠家和生產(chǎn)廠家和EDA工具工具供應(yīng)商所接受。供應(yīng)商所接受。當(dāng)前幾乎所有的當(dāng)前幾乎所有的EDA軟軟件,象件,象Synopsys、Mentor Graphics、InovaEDA、Cadence等,均支持該標(biāo)準(zhǔn)等,均支持該標(biāo)準(zhǔn)。VHDL語言的特點(diǎn) VHDL是工業(yè)標(biāo)準(zhǔn)的文本格式語言是工業(yè)標(biāo)準(zhǔn)的文本格式語言 VHDL能能同時(shí)支持仿真和綜合同時(shí)支持仿真和綜合 VHDL是一是一種并發(fā)執(zhí)行的語言種并發(fā)執(zhí)行的語言 VHDL支持支持結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化設(shè)計(jì)和TOP- -

11、DOWN設(shè)設(shè)計(jì)方計(jì)方法法 VHDL的描述與工藝無關(guān)的描述與工藝無關(guān) 支持多風(fēng)格的描述方法支持多風(fēng)格的描述方法數(shù)字系統(tǒng)描述的Gajski圖結(jié)構(gòu)特性行為特性物理/幾何特性算法描述寄存器傳輸級(jí)邏輯電路處理器硬件模塊ALU和寄存器門電路晶體管系統(tǒng)算法寄存器傳輸邏輯傳輸方程矩形單元平面布局物理劃分簇VHDL描述數(shù)字電路的層次 采用VHDL語言描述電路時(shí),我們將電路的描述分為行為(Behavioral)和寄存器傳輸級(jí)(Register Transfer Level)和門級(jí)描述(Gate Level)三個(gè)層次。這樣的劃分是根據(jù)寄存器和組合邏輯的確定性而言的 行為級(jí):寄存器和組合邏輯都不明確 RTL級(jí):寄存器

12、明確,組合邏輯不明確。 門級(jí):寄存器和組合邏輯都明確三種描述層次的比較 在目前的實(shí)際設(shè)計(jì)工作中,行為描述和門級(jí)描述都很少用到。門級(jí)描述投入大量精力描述電路的具體細(xì)節(jié),無法體現(xiàn)出高層描述的優(yōu)點(diǎn)。行為描述的抽象層次太高,綜合工具無法很好的理解設(shè)計(jì)者的意圖,綜合出的電路距離設(shè)計(jì)者的實(shí)際要求有很大差距,并且目前主流的綜合工具都不具有這種功能,目前有一些推出的行為綜合器如Synopsys的Behavioral Complier,但用戶的反映都不是很良好使用VHDL描述組合邏輯的方法 在使在使用用VHDL描描述組合邏輯電路時(shí),根據(jù)描述風(fēng)格的述組合邏輯電路時(shí),根據(jù)描述風(fēng)格的不同,我們將它分為行為級(jí)描述、結(jié)構(gòu)

13、流不同,我們將它分為行為級(jí)描述、結(jié)構(gòu)流( (Data Flow) )描述和結(jié)構(gòu)級(jí)(描述和結(jié)構(gòu)級(jí)(Structural Level)描述。這里的行為)描述。這里的行為級(jí)(級(jí)(Behavioral Level)描述和前面的行為描述)描述和前面的行為描述(Behavioral)從概念上是有區(qū)別的,或者說是行為描)從概念上是有區(qū)別的,或者說是行為描述具體在組合邏輯中的定義。行為級(jí)描述是指一個(gè)組述具體在組合邏輯中的定義。行為級(jí)描述是指一個(gè)組合邏輯的功能已經(jīng)明確,但它的具體實(shí)現(xiàn)結(jié)構(gòu)沒有確合邏輯的功能已經(jīng)明確,但它的具體實(shí)現(xiàn)結(jié)構(gòu)沒有確定,但限定使用組合邏輯實(shí)現(xiàn)定,但限定使用組合邏輯實(shí)現(xiàn)。高層次設(shè)計(jì)流程功 能

14、 正 確 嗎 ?否修 改 源 程 序或 修 改 結(jié) 構(gòu)否 結(jié) 構(gòu) 設(shè) 計(jì) 系 統(tǒng) 分 析 系 統(tǒng) 描 述 系 統(tǒng) 功 能 仿 真系 統(tǒng) 綜 合 優(yōu) 化 門 級(jí) 仿 真 速 度 、 面 積 、 滿 足 要 求 嗎 ? 布 局 布 線 時(shí) 序 仿 真 時(shí) 序 滿 足 要 求 嗎 ?修改綜合約束條件或修改 結(jié) 構(gòu) 修 改 綜 合 約束條 件 , 或 修 改結(jié) 構(gòu)圖1 - 3 自 頂 向 下 技 術(shù) 設(shè) 計(jì) 流 程否是是是 系 統(tǒng) 設(shè) 計(jì) 階 段 綜 合 優(yōu) 化 階 段 系 統(tǒng) 實(shí) 現(xiàn) 階 段一、系統(tǒng)功能分析 進(jìn)行系統(tǒng)功能分析的目的是在進(jìn)行系統(tǒng)設(shè)計(jì)之前明確進(jìn)行系統(tǒng)功能分析的目的是在進(jìn)行系統(tǒng)設(shè)計(jì)之前明確

15、系統(tǒng)的需求,也就是確定系統(tǒng)所要完成的功能、系統(tǒng)系統(tǒng)的需求,也就是確定系統(tǒng)所要完成的功能、系統(tǒng)的輸入輸出、以及這些輸入輸出之間的關(guān)系等,并且的輸入輸出、以及這些輸入輸出之間的關(guān)系等,并且要確定系統(tǒng)的時(shí)序要求。要確定系統(tǒng)的時(shí)序要求。 系統(tǒng)功能分析的另外一個(gè)目的,就是系統(tǒng)的模塊劃分。系統(tǒng)功能分析的另外一個(gè)目的,就是系統(tǒng)的模塊劃分。在系統(tǒng)分析時(shí),應(yīng)根據(jù)功能的耦合程度,將系統(tǒng)劃分在系統(tǒng)分析時(shí),應(yīng)根據(jù)功能的耦合程度,將系統(tǒng)劃分為不同的功能模塊,每一個(gè)功能都映射到一個(gè)模塊,為不同的功能模塊,每一個(gè)功能都映射到一個(gè)模塊,同時(shí)還需要確定模塊之間的相互關(guān)系,這是模塊化設(shè)同時(shí)還需要確定模塊之間的相互關(guān)系,這是模塊化

16、設(shè)計(jì)的基本要求。計(jì)的基本要求。二、體系結(jié)構(gòu)設(shè)計(jì) 體系結(jié)構(gòu)設(shè)計(jì)又是整個(gè)系統(tǒng)設(shè)計(jì)階段最重要的工作,體系結(jié)構(gòu)設(shè)計(jì)又是整個(gè)系統(tǒng)設(shè)計(jì)階段最重要的工作,它的首要任務(wù)就是數(shù)據(jù)通路和控制通路的設(shè)計(jì)。在數(shù)它的首要任務(wù)就是數(shù)據(jù)通路和控制通路的設(shè)計(jì)。在數(shù)字系統(tǒng)的設(shè)計(jì)中,系統(tǒng)的控制是建立在數(shù)據(jù)通路的基字系統(tǒng)的設(shè)計(jì)中,系統(tǒng)的控制是建立在數(shù)據(jù)通路的基礎(chǔ)之上的,不同的數(shù)據(jù)通路對(duì)應(yīng)了不同的控制通路。礎(chǔ)之上的,不同的數(shù)據(jù)通路對(duì)應(yīng)了不同的控制通路。數(shù)據(jù)通路的設(shè)計(jì)包括被處理數(shù)據(jù)的類型分析、處理單數(shù)據(jù)通路的設(shè)計(jì)包括被處理數(shù)據(jù)的類型分析、處理單元的劃分、以及處理單元之間的關(guān)聯(lián)程度等??刂仆ㄔ膭澐?、以及處理單元之間的關(guān)聯(lián)程度等。控制通

17、路是數(shù)據(jù)通路上數(shù)據(jù)傳輸?shù)目刂茊卧?,用于協(xié)調(diào)數(shù)據(jù)路是數(shù)據(jù)通路上數(shù)據(jù)傳輸?shù)目刂茊卧?,用于協(xié)調(diào)數(shù)據(jù)處理單元之間的關(guān)系,控制通路的設(shè)計(jì)主要包括數(shù)據(jù)處理單元之間的關(guān)系,控制通路的設(shè)計(jì)主要包括數(shù)據(jù)的調(diào)度、數(shù)據(jù)的處理算法和正確的時(shí)序安排等。的調(diào)度、數(shù)據(jù)的處理算法和正確的時(shí)序安排等。 數(shù)據(jù)通路和控制通路的設(shè)計(jì)并不是截然分開的,有時(shí)數(shù)據(jù)通路和控制通路的設(shè)計(jì)并不是截然分開的,有時(shí)在確定好數(shù)據(jù)通路后,由于時(shí)序或數(shù)據(jù)的調(diào)度等問題,在確定好數(shù)據(jù)通路后,由于時(shí)序或數(shù)據(jù)的調(diào)度等問題,而不得不重新修改數(shù)據(jù)通路。所以數(shù)據(jù)通路與控制通而不得不重新修改數(shù)據(jù)通路。所以數(shù)據(jù)通路與控制通路的設(shè)計(jì)往往要經(jīng)過許多次反復(fù)才能達(dá)到最優(yōu)的效果路的

18、設(shè)計(jì)往往要經(jīng)過許多次反復(fù)才能達(dá)到最優(yōu)的效果三、系統(tǒng)描述 謂系統(tǒng)描述也就是使謂系統(tǒng)描述也就是使用用VHDL語言對(duì)語言對(duì)系統(tǒng)進(jìn)行系統(tǒng)進(jìn)行編碼。在進(jìn)行大型軟件的開發(fā)時(shí),編碼相對(duì)于編碼。在進(jìn)行大型軟件的開發(fā)時(shí),編碼相對(duì)于前面所進(jìn)行的系統(tǒng)劃分工作相比就顯得不是那前面所進(jìn)行的系統(tǒng)劃分工作相比就顯得不是那么重要,但在使用硬件描述語言進(jìn)行數(shù)字電路么重要,但在使用硬件描述語言進(jìn)行數(shù)字電路描述時(shí),情況則完全不同,因?yàn)檎Z言的描述直描述時(shí),情況則完全不同,因?yàn)檎Z言的描述直接決定著電路的性能,不好的編碼將無法反映接決定著電路的性能,不好的編碼將無法反映所確定的體系結(jié)構(gòu),可能導(dǎo)致前面所做的工作所確定的體系結(jié)構(gòu),可能導(dǎo)致前

19、面所做的工作完全浪完全浪四、系統(tǒng)功能仿真 系統(tǒng)的功能仿真(系統(tǒng)的功能仿真(Functional Simulation)是用來驗(yàn)證)是用來驗(yàn)證設(shè)計(jì)者所編寫的設(shè)計(jì)者所編寫的VHDL代碼是否完成了預(yù)定的功能代碼是否完成了預(yù)定的功能。幾乎所有的高層設(shè)計(jì)軟件都支持語言級(jí)的系統(tǒng)仿真,幾乎所有的高層設(shè)計(jì)軟件都支持語言級(jí)的系統(tǒng)仿真,這樣在系統(tǒng)綜合前就可以通過系統(tǒng)功能仿真來驗(yàn)證所這樣在系統(tǒng)綜合前就可以通過系統(tǒng)功能仿真來驗(yàn)證所設(shè)計(jì)系統(tǒng)的功能正確與否。設(shè)計(jì)系統(tǒng)的功能正確與否。 在語言級(jí)系統(tǒng)仿真時(shí),要求設(shè)計(jì)者使用在語言級(jí)系統(tǒng)仿真時(shí),要求設(shè)計(jì)者使用VHDL語言所語言所提供的豐富的仿真語句來編寫系統(tǒng)的測(cè)試基準(zhǔn)程序提供的豐

20、富的仿真語句來編寫系統(tǒng)的測(cè)試基準(zhǔn)程序(Testbench)。測(cè)試基準(zhǔn)程序在高層次設(shè)計(jì)中占有非)。測(cè)試基準(zhǔn)程序在高層次設(shè)計(jì)中占有非常重要的地位,不僅在系統(tǒng)功能仿真時(shí)被用來作為功常重要的地位,不僅在系統(tǒng)功能仿真時(shí)被用來作為功能驗(yàn)證的基準(zhǔn),而且在門級(jí)仿真與后時(shí)序仿真都要以能驗(yàn)證的基準(zhǔn),而且在門級(jí)仿真與后時(shí)序仿真都要以此為基準(zhǔn)。此為基準(zhǔn)。綜合優(yōu)化階段 綜合器對(duì)系統(tǒng)的綜合優(yōu)化主要分為兩步:第一步是將綜合器對(duì)系統(tǒng)的綜合優(yōu)化主要分為兩步:第一步是將硬件描述語言翻譯成門電路,第二步是對(duì)產(chǎn)生的電路硬件描述語言翻譯成門電路,第二步是對(duì)產(chǎn)生的電路進(jìn)行優(yōu)化。主要工作是在第二步進(jìn)行的,判斷一個(gè)綜進(jìn)行優(yōu)化。主要工作是在第

21、二步進(jìn)行的,判斷一個(gè)綜合器性能的標(biāo)準(zhǔn)也是基于這一方面的。合器性能的標(biāo)準(zhǔn)也是基于這一方面的。 系統(tǒng)優(yōu)化的目的就是花費(fèi)最小的硬件資源滿足最大的系統(tǒng)優(yōu)化的目的就是花費(fèi)最小的硬件資源滿足最大的時(shí)序要求,所以系統(tǒng)優(yōu)化就是在系統(tǒng)的速度(時(shí)序要求,所以系統(tǒng)優(yōu)化就是在系統(tǒng)的速度(Speed)和面積(和面積(Area)之間找到一個(gè)最佳方案()之間找到一個(gè)最佳方案(Trade-off)。)。系統(tǒng)優(yōu)化的關(guān)鍵在于系統(tǒng)約束條件(系統(tǒng)優(yōu)化的關(guān)鍵在于系統(tǒng)約束條件(Constraints)的)的設(shè)定,施加到系統(tǒng)的約束條件將使綜合器對(duì)系統(tǒng)的優(yōu)設(shè)定,施加到系統(tǒng)的約束條件將使綜合器對(duì)系統(tǒng)的優(yōu)化按照設(shè)計(jì)者所期望的目標(biāo)進(jìn)行?;凑赵O(shè)計(jì)

22、者所期望的目標(biāo)進(jìn)行。系統(tǒng)實(shí)現(xiàn) 如果系統(tǒng)綜合優(yōu)化的結(jié)果滿足設(shè)計(jì)者的如果系統(tǒng)綜合優(yōu)化的結(jié)果滿足設(shè)計(jì)者的要求,就可以進(jìn)行系統(tǒng)實(shí)現(xiàn)的工作。在要求,就可以進(jìn)行系統(tǒng)實(shí)現(xiàn)的工作。在一般的一般的ASIC設(shè)計(jì)中,設(shè)計(jì)者應(yīng)該將綜合設(shè)計(jì)中,設(shè)計(jì)者應(yīng)該將綜合后電路的網(wǎng)表(后電路的網(wǎng)表(Netlist)文件和設(shè)計(jì)的)文件和設(shè)計(jì)的時(shí)序要求,交給時(shí)序要求,交給IC生產(chǎn)廠家進(jìn)行下一步生產(chǎn)廠家進(jìn)行下一步的工作。這是國(guó)內(nèi)一般的做法,專業(yè)的的工作。這是國(guó)內(nèi)一般的做法,專業(yè)的微電子公司將會(huì)參與更多的后面的微電子公司將會(huì)參與更多的后面的layoutlayout的工作。的工作。設(shè)計(jì)風(fēng)格描述 設(shè)計(jì)描述的風(fēng)格直接控制著設(shè)計(jì)描述的風(fēng)格直接控制

23、著EDA工具綜工具綜合的結(jié)果。描述同一功能的兩段合的結(jié)果。描述同一功能的兩段RTL描描述能產(chǎn)生出時(shí)序和面積上完全不同的電述能產(chǎn)生出時(shí)序和面積上完全不同的電路,好的描述方式就是易于被綜合器識(shí)路,好的描述方式就是易于被綜合器識(shí)別并可以被綜合出設(shè)計(jì)者期望的電路,別并可以被綜合出設(shè)計(jì)者期望的電路,電路的質(zhì)量取決于工程師使用的描述風(fēng)電路的質(zhì)量取決于工程師使用的描述風(fēng)格和綜合工具的能力。我將會(huì)在外面介格和綜合工具的能力。我將會(huì)在外面介紹。紹。我個(gè)人對(duì)高層次設(shè)計(jì)方法的理解 硬件描述語言-schematic(netlist)-版圖 綜合工具 布局布線工具 高級(jí)語言-匯編語言-機(jī)器語言 高級(jí)語言編譯器 機(jī)器語言

24、編譯器(assembler) 目前國(guó)內(nèi)還有很多人不認(rèn)同采用HDL的高層次設(shè)計(jì)方法,其實(shí)就是不能理解綜合工具的作用,但映射到不認(rèn)同C編譯器或BASIC編譯器的作用確是荒謬的。 我認(rèn)為高層次設(shè)計(jì)方法實(shí)際就是犧牲描述精確度來換取描述效率,在某些具體應(yīng)用中是不適用的,比如最先進(jìn)的處理器研究。但對(duì)于通常應(yīng)用背景的數(shù)字系統(tǒng)來說Time to Market是非常重要的,高層次設(shè)計(jì)方法可以極大的提高設(shè)計(jì)的效率。 隨著綜合工具性能的不斷提高,高層設(shè)計(jì)方法的應(yīng)用范圍會(huì)越來越廣。VHDL語言基礎(chǔ)設(shè)計(jì)實(shí)體和結(jié)構(gòu)體的概念 VHDL把一個(gè)電路模塊看作一個(gè)單元,對(duì)任何一個(gè)單把一個(gè)電路模塊看作一個(gè)單元,對(duì)任何一個(gè)單元的描述包

25、括接口描述和內(nèi)部特性描述兩個(gè)部分。接元的描述包括接口描述和內(nèi)部特性描述兩個(gè)部分。接口描述稱為設(shè)計(jì)實(shí)體口描述稱為設(shè)計(jì)實(shí)體(entity),它提供該單元的公共信,它提供該單元的公共信息,如名稱、端口等;內(nèi)部特性描述稱為結(jié)構(gòu)體息,如名稱、端口等;內(nèi)部特性描述稱為結(jié)構(gòu)體(architecture),它定義單元的內(nèi)部操作特性。,它定義單元的內(nèi)部操作特性。 一個(gè)結(jié)構(gòu)體可以對(duì)應(yīng)多個(gè)實(shí)體,結(jié)構(gòu)體和實(shí)體的綁定一個(gè)結(jié)構(gòu)體可以對(duì)應(yīng)多個(gè)實(shí)體,結(jié)構(gòu)體和實(shí)體的綁定關(guān)系稱為配置(關(guān)系稱為配置(configuration)。)。 一個(gè)電路單元只能有一個(gè)一個(gè)電路單元只能有一個(gè)entity,下面是一個(gè)最簡(jiǎn)單的,下面是一個(gè)最簡(jiǎn)單的

26、例子,描述的電路是一個(gè)半加器例子,描述的電路是一個(gè)半加器一個(gè)半加器的VHDL描述entity halfadder is port (a, b: in bit; sum, carry: out bit);end halfadder;architecture behavior of halfadder is beginprocess(a, b) beginif (a=1 and b=1) then carry=1;else carry=0;end if; if (a /= b) then sum=1; else sum=0; end if;end process;end behavior;Enti

27、ty的描述entity 實(shí)體名實(shí)體名 is 類屬參數(shù)說明類屬參數(shù)說明 端口說明端口說明end 實(shí)體名;實(shí)體名;entity mux isgeneric ( m : time := 1ns);port (d0, d1, sel : in bit;q: out bit);end mux;端口的方向 in(輸入)、(輸入)、out(輸出,結(jié)構(gòu)體內(nèi)部不(輸出,結(jié)構(gòu)體內(nèi)部不能再使用)、能再使用)、inout(輸入輸出雙向)、(輸入輸出雙向)、buffer(輸出,結(jié)構(gòu)體內(nèi)可再使用)(輸出,結(jié)構(gòu)體內(nèi)可再使用) 不提倡使用不提倡使用buffer型,可以在內(nèi)部在起一型,可以在內(nèi)部在起一個(gè)名字)個(gè)名字)結(jié)構(gòu)體的框

28、架architecture 結(jié)構(gòu)體名結(jié)構(gòu)體名 of 實(shí)體名實(shí)體名 is定義語句定義語句begin 并行處理語句并行處理語句end 結(jié)構(gòu)體名;結(jié)構(gòu)體名;定義語句位于定義語句位于architecture和和begin之間,用于對(duì)結(jié)構(gòu)體內(nèi)部所使用之間,用于對(duì)結(jié)構(gòu)體內(nèi)部所使用的信號(hào)、常數(shù)、數(shù)據(jù)類型、函數(shù)等進(jìn)行定義。信號(hào)定義和端口說明的信號(hào)、常數(shù)、數(shù)據(jù)類型、函數(shù)等進(jìn)行定義。信號(hào)定義和端口說明一樣,應(yīng)有信號(hào)名和數(shù)據(jù)類型,因它是內(nèi)部使用,不需要有方向的一樣,應(yīng)有信號(hào)名和數(shù)據(jù)類型,因它是內(nèi)部使用,不需要有方向的說明。說明。并行處理語句處于語句并行處理語句處于語句begin和和end之間,具體描述了結(jié)構(gòu)體的行為

29、之間,具體描述了結(jié)構(gòu)體的行為及其連接關(guān)系。在結(jié)構(gòu)體中的語句都是可以并行執(zhí)行的,語句的執(zhí)及其連接關(guān)系。在結(jié)構(gòu)體中的語句都是可以并行執(zhí)行的,語句的執(zhí)行順序不以書寫的語句順序?yàn)閳?zhí)行順序。行順序不以書寫的語句順序?yàn)閳?zhí)行順序。Entity和architecture 總結(jié) 一個(gè)單元只有一個(gè)設(shè)計(jì)實(shí)體,而結(jié)構(gòu)體一個(gè)單元只有一個(gè)設(shè)計(jì)實(shí)體,而結(jié)構(gòu)體的個(gè)數(shù)可以不限。也就是說,一個(gè)設(shè)計(jì)的個(gè)數(shù)可以不限。也就是說,一個(gè)設(shè)計(jì)實(shí)體可以對(duì)應(yīng)于多個(gè)結(jié)構(gòu)體。這種方式實(shí)體可以對(duì)應(yīng)于多個(gè)結(jié)構(gòu)體。這種方式的意義在于:每個(gè)結(jié)構(gòu)體代表該電路的的意義在于:每個(gè)結(jié)構(gòu)體代表該電路的某一方面的特性(如行為特性、結(jié)構(gòu)特某一方面的特性(如行為特性、結(jié)構(gòu)

30、特性等),而且,即使是同一特性的描述,性等),而且,即使是同一特性的描述,也可以有不同的抽象層次。也可以有不同的抽象層次。在一個(gè)單元中引用另外一個(gè)單元architecture structure of fulladder issignal ts: bit;signal tc1, tc2: bit;component halfadderport (a, b: in bit; sum, carry: out bit);end component; beginU0: halfadder port map (a, b, ts, tc1);U1: halfadder port map (ts, cin,

31、 sum, tc2)end structure;設(shè)計(jì)庫 庫庫(library)是經(jīng)過編譯后的數(shù)據(jù)的集合,它存放程序包是經(jīng)過編譯后的數(shù)據(jù)的集合,它存放程序包定義、設(shè)計(jì)實(shí)體定義、結(jié)構(gòu)體定義和配置定義。定義、設(shè)計(jì)實(shí)體定義、結(jié)構(gòu)體定義和配置定義。 在在VHDL中,庫的說明總是放在設(shè)計(jì)單元的最前面,中,庫的說明總是放在設(shè)計(jì)單元的最前面,如:如: library IEEE; use IEEE.std_logic_1164.all; 這樣,在設(shè)計(jì)單元內(nèi)就可以使用庫中的數(shù)據(jù)。這樣,在設(shè)計(jì)單元內(nèi)就可以使用庫中的數(shù)據(jù)。 在在VHDL中,可以存在多個(gè)不同的庫,但是庫與庫之中,可以存在多個(gè)不同的庫,但是庫與庫之間是獨(dú)

32、立的,不能互相嵌套。當(dāng)前在間是獨(dú)立的,不能互相嵌套。當(dāng)前在VHDL中存在的中存在的庫大致包括:標(biāo)準(zhǔn)庫、工藝庫、用戶自定義的庫和庫大致包括:標(biāo)準(zhǔn)庫、工藝庫、用戶自定義的庫和WORK庫。其中,庫。其中, WORK庫是現(xiàn)行工作庫,設(shè)計(jì)者庫是現(xiàn)行工作庫,設(shè)計(jì)者描述的描述的VHDL不需要任何說明,都可以存放在不需要任何說明,都可以存放在WORK庫中庫中 ,而且對(duì),而且對(duì)WORK庫的使用不需要任何說明。庫的使用不需要任何說明。常用的數(shù)據(jù)類型 在設(shè)計(jì)可綜合電路是常用的類型在設(shè)計(jì)可綜合電路是常用的類型 整形(一般只在作下標(biāo)時(shí)用,內(nèi)部)整形(一般只在作下標(biāo)時(shí)用,內(nèi)部) std_logic,std_logic_v

33、ector(9值邏輯),端口都值邏輯),端口都用這兩種類型用這兩種類型 類型之間的轉(zhuǎn)化類型之間的轉(zhuǎn)化 首先說明首先說明IEEE.std_logic_unsigned庫庫 conv_integer(),conv_std_logic_vector(integer,n)Std_logic和std_logic_vector Std_logic信號(hào)用單引號(hào)信號(hào)用單引號(hào),比如比如a=1; std_logic_vector用雙引號(hào)用雙引號(hào),比如比如a=“111”; 對(duì)于所有對(duì)于所有bit都相同的都相同的std_logic_vector,可可以使用以使用1)來賦值來賦值 使用使用&可以將位數(shù)較短的可以

34、將位數(shù)較短的std_logic_vector型組合為數(shù)位較長(zhǎng)的型組合為數(shù)位較長(zhǎng)的std_logic_vector型型九值邏輯 1-force 1 0-force 0 X-Force Unknown Z-High Impedance U-Uninitialized W-Weak unknown H-Weak 1 L-Weak 0 - dont care在可綜合電路中設(shè)計(jì)中需要的:1,0,Z,X,-Z用來描述三態(tài)X用來賦不可能出現(xiàn)的缺省值-用來賦無關(guān)值,利于優(yōu)化U在仿真中會(huì)遇到,沒有初始化,在功能仿真中按照else來計(jì)算,在后仿真中則會(huì)傳遞,導(dǎo)致錯(cuò)誤常用的運(yùn)算符 邏輯運(yùn)算符邏輯運(yùn)算符 not、an

35、d、or、nand、nor、xor 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 +和和-,其它運(yùn)算符,其它運(yùn)算符,/,*,mod對(duì)于一般的可綜合電對(duì)于一般的可綜合電路來講,都不使用,因?yàn)樗鼈兊乃惴ǘ急容^復(fù)雜,綜路來講,都不使用,因?yàn)樗鼈兊乃惴ǘ急容^復(fù)雜,綜合器綜合的效果不好,需要是用戶自己設(shè)計(jì)算法,比合器綜合的效果不好,需要是用戶自己設(shè)計(jì)算法,比如采用如采用booth算法實(shí)現(xiàn)乘法算法實(shí)現(xiàn)乘法 連接運(yùn)算符連接運(yùn)算符&,比較常用,比較常用 關(guān)系運(yùn)算符關(guān)系運(yùn)算符=、/=、=都非常常用都非常常用 賦值運(yùn)算符賦值運(yùn)算符=,:=邏輯運(yùn)算 And or nand xor nor not 操作數(shù)必須類型和長(zhǎng)度都相同操作數(shù)必

36、須類型和長(zhǎng)度都相同 注意使用括號(hào)注意使用括號(hào) c=a and b and c c=(a and b) and c -?一樣一樣不一定一樣關(guān)系運(yùn)算符 ,= 只要是同一類型只要是同一類型,長(zhǎng)度不同可以比較在長(zhǎng)度不同可以比較在synopsys中是可以的中是可以的,比如比如“11111”“1100” 這是因?yàn)槎x了這是因?yàn)槎x了IEEE.std_logic_unsigned庫庫Std_logic_unsigned庫function =(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VEC

37、TOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function =(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;function (L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function (L: ST

38、D_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function (L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function (L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function (L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;function (L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: ST

39、D_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function =(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;fun

40、ction =(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) retur

41、n BOOLEAN;function =(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;加法運(yùn)算 最常見的加一計(jì)數(shù)器可以寫成最常見的加一計(jì)數(shù)器可以寫成: A=A+1這是因?yàn)樵谶@是因?yàn)樵趗nsigned 中定義了中定義了function +(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;function +(L: STD_LOGIC_VECTOR

42、; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function +(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR; function +(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR; function +(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function +(L: INTEGER; R: STD_LOGIC_VECTOR) r

43、eturn STD_LOGIC_VECTOR; function +(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR;function +(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR; function +(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function +(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_V

44、ECTOR;引用庫文件 這個(gè)預(yù)先定義的包文件這個(gè)預(yù)先定義的包文件std_logic_unsigned.vhd被被已經(jīng)被預(yù)先編譯的已經(jīng)被預(yù)先編譯的IEEE庫中庫中,因此設(shè)計(jì)者在使用上因此設(shè)計(jì)者在使用上面的操作時(shí)面的操作時(shí),需要使用需要使用IEEE.std_logic_unsigned.all;否則編譯時(shí)就會(huì)出錯(cuò)否則編譯時(shí)就會(huì)出錯(cuò). 用戶可以自己包文件用戶可以自己包文件,編譯到指定庫中編譯到指定庫中,并在源文件并在源文件中引用這個(gè)包文件中引用這個(gè)包文件: use my_library.my_package.all進(jìn)程process 一個(gè)進(jìn)程就相當(dāng)于一個(gè)并行的語句,它一個(gè)進(jìn)程就相當(dāng)于一個(gè)并行的語句,

45、它的內(nèi)部時(shí)串行的的內(nèi)部時(shí)串行的進(jìn)程名進(jìn)程名:process (進(jìn)程敏感信號(hào)列表進(jìn)程敏感信號(hào)列表)begin順序描述語句;順序描述語句;end process process語句從語句從process開始,到開始,到end process結(jié)束,進(jìn)程名可以省略。結(jié)束,進(jìn)程名可以省略。Process的例子mux2: process(a, b, s)beginif (s=0) then f=a;else f=b;end if;end process; 進(jìn)程的所有輸入信號(hào)應(yīng)該放在敏感表內(nèi),進(jìn)程的所有輸入信號(hào)應(yīng)該放在敏感表內(nèi),否則會(huì)造成前后仿真不符否則會(huì)造成前后仿真不符信號(hào)和變量 信號(hào)在電路模塊之間傳遞信

46、息,信號(hào)在電路模塊之間傳遞信息,signal用用在模塊內(nèi)部,具體表現(xiàn)在變量在在模塊內(nèi)部,具體表現(xiàn)在變量在entity的的端口和端口和architecture內(nèi)說明,內(nèi)說明,variable在在process內(nèi)部說明,無法傳遞到內(nèi)部說明,無法傳遞到process外外面面 賦給變量的值則立即成為當(dāng)前值,而賦賦給變量的值則立即成為當(dāng)前值,而賦給信號(hào)的值必須在進(jìn)程結(jié)束后才能成為給信號(hào)的值必須在進(jìn)程結(jié)束后才能成為當(dāng)前值。當(dāng)前值。順序語句 Wait if ; case loop 對(duì)于一般的可綜合電路描述,這四種順對(duì)于一般的可綜合電路描述,這四種順序語句已經(jīng)足夠了序語句已經(jīng)足夠了Wait 語句 Wait u

47、ntil clkevent and clk=1 then 用來描述寄存器用來描述寄存器 在在testbench中描述延遲時(shí)可以使用中描述延遲時(shí)可以使用wait for xxx ns; 敏感表相當(dāng)于一個(gè)敏感表相當(dāng)于一個(gè)wait on語句語句進(jìn)程的啟動(dòng) process(a, b, s)beginif (s=0) then f=a;else f=b;end if;-wait on a,b,s進(jìn)程在這個(gè)地方掛起進(jìn)程在這個(gè)地方掛起end process;IF語句 IF condition1 THEN sequence_of_statements1ELSIF ELSIF condition2 THENTH

48、EN sequence_of_statements2 ELSEELSE sequence_of_statements3 END IF END IF; 其中括號(hào)內(nèi)為可選部分,它表示當(dāng)條件其中括號(hào)內(nèi)為可選部分,它表示當(dāng)條件1 1成立時(shí),執(zhí)行成立時(shí),執(zhí)行順序語句序列順序語句序列1 1;當(dāng)條件;當(dāng)條件2 2成立時(shí),執(zhí)行順序語句序列成立時(shí),執(zhí)行順序語句序列2 2;否則執(zhí)行順序語句序列否則執(zhí)行順序語句序列3 3。ELSEIFELSEIF付句可以重復(fù),但付句可以重復(fù),但ELSEELSE付句只能有一條。付句只能有一條。IF語句 注意如果注意如果if引導(dǎo)引導(dǎo)event代表時(shí)鐘,此時(shí)不能代表時(shí)鐘,此時(shí)不能有有el

49、se復(fù)句復(fù)句 用戶組合邏輯的用戶組合邏輯的if,如果沒有,如果沒有else付句,付句,一定要在一定要在IF語句前面有缺省賦值,否則會(huì)語句前面有缺省賦值,否則會(huì)造成不需要的造成不需要的latchIF語句 IFIF語句對(duì)應(yīng)的電路就是多選電路語句對(duì)應(yīng)的電路就是多選電路, ,比如比如 if select=1 then if select=1 then output=a; output=a; else else output=b; output WHEN choices1= sequence_of_statements1; sequence_of_statements1; WHEN choices2=W

50、HEN choices2= sequence_of_statements1; sequence_of_statements1; END CASE END CASE 其中條件有如下四種表達(dá)方法:其中條件有如下四種表達(dá)方法: WHENWHEN 值值 = WHENWHEN 值值值值值值 = = WHEN WHEN 值值 TOTO 值值 = WHENWHEN othersothers = 選擇項(xiàng)必須覆蓋表達(dá)式所有選項(xiàng),不足時(shí)其它選項(xiàng)包括在選擇項(xiàng)必須覆蓋表達(dá)式所有選項(xiàng),不足時(shí)其它選項(xiàng)包括在others項(xiàng)項(xiàng)中。中。Case語句 Case語句對(duì)應(yīng)的是無優(yōu)先級(jí)的多選語句對(duì)應(yīng)的是無優(yōu)先級(jí)的多選 如果在如果在ca

51、se中給多個(gè)信號(hào)賦值一定要在中給多個(gè)信號(hào)賦值一定要在前面有缺省賦值前面有缺省賦值. 大家看下面的程序有什么問題大家看下面的程序有什么問題?Case語句Process(decoder_in)beginCASE decoder_in IS WHEN “000” = decoder_out decoder_out decoder_out decoder_out decoder_out decoder_out decoder_out decoder_out decoder_outX);Loop語句FOR identifier IN discrete_range LOOP sequence_of_sta

52、temetns END LOOP ; LOOP語句適用于描述有重復(fù)操作,或模塊需要很語句適用于描述有重復(fù)操作,或模塊需要很強(qiáng)的迭代能力時(shí)使用。如下電路完成對(duì)輸入的強(qiáng)的迭代能力時(shí)使用。如下電路完成對(duì)輸入的8位位向量的翻轉(zhuǎn),即信號(hào)的高位與低位對(duì)調(diào):向量的翻轉(zhuǎn),即信號(hào)的高位與低位對(duì)調(diào): FOR i IN 0 TO 7 LOOP output_vector(i)=input_vector(7-i);); END LOOP;loop語句 上述程序中上述程序中i為循環(huán)變量,在為循環(huán)變量,在VHDL中不中不允許任何對(duì)循環(huán)變量的賦值,也就是說允許任何對(duì)循環(huán)變量的賦值,也就是說不允許在任何函數(shù)返回值中存在循環(huán)變

53、不允許在任何函數(shù)返回值中存在循環(huán)變量,或在任何過程的輸出與雙向參量中量,或在任何過程的輸出與雙向參量中存在循環(huán)變量。并且循環(huán)變量不用顯式存在循環(huán)變量。并且循環(huán)變量不用顯式說明,它的作用域僅存在于循環(huán)語句內(nèi)說明,它的作用域僅存在于循環(huán)語句內(nèi)部,因此不允許在循環(huán)語句內(nèi)部存在于部,因此不允許在循環(huán)語句內(nèi)部存在于循環(huán)變量同名的變量或信號(hào)循環(huán)變量同名的變量或信號(hào)進(jìn)制 B(binary) O(octal) X(Hexadecimal) 通常情況下我們都用二進(jìn)制通常情況下我們都用二進(jìn)制 對(duì)于位寬為對(duì)于位寬為4n的用的用16進(jìn)制極為方便進(jìn)制極為方便,在在VHDL的語言規(guī)定中的語言規(guī)定中,可以使用可以使用=X”

54、0F”賦值賦值,但但synopsys到到9910才支持才支持,如果工具如果工具不支持只能使用不支持只能使用2進(jìn)制進(jìn)制.理解并行的概念 在在architecture中的語句都是并行的中的語句都是并行的,它們的執(zhí)行順序和它們的執(zhí)行順序和位置無關(guān)位置無關(guān),一個(gè)一個(gè)process相當(dāng)于一個(gè)并行語句相當(dāng)于一個(gè)并行語句. 比如在比如在architecture 中存在中存在: D=A+E; A=B+C; 將產(chǎn)生兩個(gè)加法器將產(chǎn)生兩個(gè)加法器,第二個(gè)輸出作為第一個(gè)的一個(gè)輸入第二個(gè)輸出作為第一個(gè)的一個(gè)輸入在仿真時(shí)在仿真時(shí),當(dāng)當(dāng)B或或C變化時(shí)變化時(shí),激活語句激活語句2,當(dāng)當(dāng)A或或E變化時(shí)變化時(shí),激活激活語句語句2.

55、本質(zhì)本質(zhì):在現(xiàn)實(shí)電路中在現(xiàn)實(shí)電路中,各個(gè)部件是并行工作的各個(gè)部件是并行工作的,一個(gè)部件一個(gè)部件的輸入變化的輸入變化,才會(huì)引起這個(gè)部件的輸出變換才會(huì)引起這個(gè)部件的輸出變換.避免組合環(huán) 在一般情況下不要使用組合環(huán)在一般情況下不要使用組合環(huán),尤其是不尤其是不要用行為級(jí)描述組合環(huán)要用行為級(jí)描述組合環(huán),如果需要使用電如果需要使用電路圖形式路圖形式,并在設(shè)計(jì)中不要優(yōu)化這個(gè)模塊并在設(shè)計(jì)中不要優(yōu)化這個(gè)模塊練習(xí) 寫一個(gè)帶有異步復(fù)位同步置數(shù)的增量計(jì)數(shù)器Clk Clk 時(shí)鐘時(shí)鐘load load 同步置數(shù)信號(hào)同步置數(shù)信號(hào)rst rst 異步清零異步清零data data 置入數(shù)據(jù)置入數(shù)據(jù)count count 計(jì)數(shù)

56、器輸出計(jì)數(shù)器輸出lIBRARY IEEE;lIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter ISENTITY counter IS PORT (clk :IN std_logic; PORT (clk :IN std_logic; load :IN std_logic; load :IN std_logic; rst :IN std_logic; rs

57、t :IN std_logic; data :IN std_logic_vector(7 downto 0); data :IN std_logic_vector(7 downto 0); count :OUT std_logic_vector(7 downto 0); count :OUT std_logic_vector(7 downto 0);END counter;END counter;ARCHITECTURE arc_counter OF counter ISARCHITECTURE arc_counter OF counter IS SIGNAL cnt :std_logic_v

58、ector(7 downto 0); SIGNAL cnt :std_logic_vector(7 downto 0); BEGIN BEGIN PROCESS(clk,rst) PROCESS(clk,rst) BEGIN BEGIN IF rst =1 THEN IF rst =1 THEN cnt0); cnt0); ELSIF clkevent AND clk=1 THEN ELSIF clkevent AND clk=1 THEN IF load=1 THEN IF load=1 THEN cnt=data; cnt=data; ELSE ELSE cnt=cnt-1; cnt=cn

59、t-1; END IF; END IF; END IF; END IF; END PROCESS; END PROCESS; count=cnt; count=cnt;END arc_counter;END arc_counter;敏感表Process(a,b) begin s=a; t=b; v=s or t; end processProcess(a,b,s,t) begin s=a; t=b; v=s or t; end process仿真和綜合的區(qū)別?結(jié)論:出現(xiàn)在賦值號(hào)左邊的都應(yīng)該寫在敏感表中LatchProcess(x,z) begin if x=1 then y=z; end if

60、;end process;X=0時(shí)需要保存原值,導(dǎo)致產(chǎn)生一個(gè)latch使用VHDL描述基本電路原因 采用采用HDL語言進(jìn)行數(shù)字電路設(shè)計(jì)的流程中最重要的環(huán)語言進(jìn)行數(shù)字電路設(shè)計(jì)的流程中最重要的環(huán)節(jié)就是將語言描述轉(zhuǎn)化為電路,將你的設(shè)計(jì)付諸實(shí)現(xiàn),節(jié)就是將語言描述轉(zhuǎn)化為電路,將你的設(shè)計(jì)付諸實(shí)現(xiàn),因此你必須知道所描述的語言對(duì)應(yīng)的電路,只有這樣因此你必須知道所描述的語言對(duì)應(yīng)的電路,只有這樣綜合工具才會(huì)輸出一個(gè)可預(yù)知的、準(zhǔn)確的、高質(zhì)量的綜合工具才會(huì)輸出一個(gè)可預(yù)知的、準(zhǔn)確的、高質(zhì)量的結(jié)果,滿足設(shè)計(jì)者對(duì)電路功能、時(shí)序和面積上的要求。結(jié)果,滿足設(shè)計(jì)者對(duì)電路功能、時(shí)序和面積上的要求。數(shù)字電路都是由一些基本單元連接而成的,只有能準(zhǔn)數(shù)字電路都

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論