組合電路設計_第1頁
組合電路設計_第2頁
組合電路設計_第3頁
組合電路設計_第4頁
組合電路設計_第5頁
已閱讀5頁,還剩81頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第六章面向仿真和綜合的VHDL設計描述在可編程ASIC設計過程中仿真和綜合是兩個功效不同的過程仿真是驗證,而綜合是生成。如果由設計要求到設計實現的整個過程,是靠人工完成,通常簡單地稱之為設計。如果依靠EDA工具軟件自動生成,則通常稱之為綜合。在VHDL設計中可以用行為、RTL和結構化三種描述方式對一個硬件系統進行不同風格的描述。在當前情況下,采用RTL、結構化描述的VHDL語言程序可以進行邏輯綜合。而采用行為描述的VHDL程序,大部分只能用于系統仿真,少數的也可以進行邏輯綜合。

§6.1面向仿真的VHDL設計描述所謂仿真(即模擬:Simulation)是從電路的描述(語言描述或圖形描述)抽象出模型,然后將外部激勵信號或數據施加于此模型,通過觀察該模型在外部激勵信號作用下的反應來判斷該電路系統是否能實現預期的功能。仿真方法是目前最常用的驗證方法,根據不同的電路級別,有不同的模擬工具。通常仿真是對電路設計的一種間接的檢測方法,對電路設計的邏輯行為和運行功能進行模擬測試,可以獲得許多對原設計進行排錯、改進的信息。對于利用VHDL設計的大型系統,能進行可靠、快速、全面的仿真測試尤為重要。驗證的目的有三個:電路設計都需要進行驗證,驗證的目的如下:驗證原始描述的正確性;驗證設計結果的邏輯功能符合原始規定的邏輯功能;驗證設計結果中不含有違反設計規則的錯誤。對于純硬件的電路系統如純模擬或數字電路系統,其仿真較簡單,設計者可以對它們作直接的硬件系統測試。但是,如果發現有問題,特別是當問題比較大或根本無法運行時,就只能全部推翻從頭開始設計。對于具有微處理器的系統如單片機系統,可以在一定程度上進行仿真測試。如果希望得到可靠的仿真結果,通常必須利用單片機仿真器進行硬件仿真,以便了解軟件程序對外圍接口的操作情況。這類仿真耗時長,成本高,而且獲得的仿真信息不全面。因為單片機主要是對軟件程序的檢測和排錯,對于硬件系統中的設計問題和錯誤則難以檢查,這種方法通常只適用于小系統的設計調試。

利用VHDL完成的系統設計的電路規模往往達到數萬、數十萬乃至上千萬個等效邏輯門構成的規模。顯然,必須利用先進的仿真工具才能快速、有效地完成所必需的測試工作基于EDA工具和FPGA的關于VHDL設計的仿真有多種形式如VHDL行為仿真、時序仿真以及硬件仿真等。VHDL行為仿真:這是進行系統級仿真的有效工具,它既可以在早期對系統的設計可行性進行評估和測試,也可以在短時間內以極低的代價對多種方案進行測試比較、系統模擬和方案論證,以獲得最佳系統設計方案:時序仿真可獲得與實際目標器件電氣性能最為接近的設計模擬結果,但由于針對具體器件的邏輯分割和布局布線的適配過程耗時過大,不適合大系統進行仿真:硬件仿真在VHDL設計中也有其重要地位最后的設計必須用硬件電路實現硬件仿真的工具除必須依賴EDA軟件外還依賴于良好的開發模型系統和規模比較大的SRAM型FPGA器件。一項較大規模的VHDL系統設計的最后完成必須經歷多層次的仿真測試過程,其中將包括:1、針對系統的VHDL行為仿真2、分模塊的時序仿真和硬件仿真3、直至最后系統級的硬件仿真。VHDL源程序可以直接用于仿真。這是VHDL的重要特性。完成VHDL仿真功能的軟件工具稱為VHDL—仿真器目前PC機上流行的VHDL仿真器有ModelTechnology公司的ModelSimAldec公司的Active—VHDL等,這些軟件都可以在Windows上運行

VHDL仿真的一般過程如圖6-1所示工程上VHDL仿真類型可分為功能仿真(或稱:前仿真)和時序仿真(或稱:后仿真)功能仿真:是在未經布線和適配之前,使用VHDL源程序綜合后的文件進行仿真時序仿真則是將VHDL設計綜合之后,再由FPGA/CPLD適配器(完成芯片內自動布線等功能),映射于具體芯片后得到的文件進行仿真。目前大規模IC器件供應商提供的大多數適配器都配有一個輸出選項功能,可以生成VHDL網表文件,用戶可用VHDL仿真器針對網表文件進行仿真。

VHDL網表文件實際上也是VHDL程序,不過程序中只使用門級元件進行低級結構描述。門級電路網絡完全根據適配器布線的結果生成,因此,VHDL網表文件中包含了精確的仿真延時信息,因而仿真的結果將非常接近實際。當設計者描述或設計了一個電路時需要驗證其正確性對大規模集成電路一般分階段自上而下地進行每一個階段都要進行正確性驗證以保證設計中的錯誤早期發現、早期消除否則將造成不可彌補的損失。§6.2面向綜合的VHDL設計描述綜合:就是針對給定的電路應實現的功能和實現此電路的約束條件,如速度、功耗、成本及電路類型等,通過計算機的優化處理,獲得一個滿足上述要求的電路設計方案。這就是說被綜合的文件是VHDL程序。綜合的依據是邏輯設計的描述和上述各種約束條件。綜合的結果則是一個硬件電路的實現方案該方案必須同時滿足,預期的功能和約束條件的要求。對于綜合來說滿足要求的方案可能有多個綜合器將產生一個最優的或接近最優的結果因此,綜合的過程同時也是設計目標的優化過程最后獲得的結果與綜合器的工作性能有關§6.2.1邏輯綜合在集成電路設計領域綜合(Synthesis)是指把一個比較概念化的設計形式轉化為比較具體、比較實在的設計形式,這通常稱作自頂向下的過程。早期的綜合全靠人的腦力勞動完成。這里所說的綜合是指靠計算機完成的自動綜合自動綜合邏輯綜合的作用:是根據一個系統邏輯功能與性能的要求,在一個包含眾多結構、功能、性能均已知的邏輯元件的邏輯單元庫的支持下,尋找出一個邏輯網絡結構的最佳的實現方案。一般的邏輯綜合過程如圖6-2所示:設計實現即:利用給定的邏輯單元工藝庫對已生成的邏輯網絡進行元件配置進而估算性能與成本這里,性能主要指芯片的速度成本主要指芯片的面積與功耗從而允許使用者對速度與面積或速度與功耗互相矛盾的指標進行性能與成本的折衷

§6.2.2面向綜合的VHDL設計描述的特點

在EDA過程中綜合(Synthesis)是將軟件描述(VHDL就其描述方式來說,仍屬軟件描述)與硬件結構相聯系的關鍵步驟,是文字描述與硬件實現的一座橋梁。綜合就是將電路的高級語言(如行為描述)轉換成低級的、可與FPGA/CPLD或構成ASIC的門陣列基本結構相映射的網表文件或程序。EDA的實現在很大程度上依賴于性能良好的綜合器。VHDL程序設計必須完全適應VHDL綜合器的要求,使軟件設計牢固植根于可行的硬件實現中;另一方面,并非所有可綜合的VHDL程序都能在硬件中實現。這涉及到兩方面的問題1、首先要看此程序將對哪一系列的目標器件進行綜合。例如,含有內部三態門描述的VHDL程序,原則上是可綜合的,但對于特定的目標器件系列卻不一定支持,即無法在硬件中實現;2、其次是資源問題這是實用VHDL面臨的最尖銳的問題例如在VHDL程序中,直接使用乘法運算符。盡管綜合器和絕大多數目標器件都是支持的,但即使是一個16位乘16位的組合邏輯乘法器,在普通規模的PLD器件(1萬門左右)中也是難以實現的。因此,實用的VHDL程序設計中必須注意硬件資源的占用問題。對于綜合來說滿足要求的方案可能有多個綜合器將產生一個最優的或接近最優的結果。因此綜合的過程同時也是設計目標的優化過程最后獲得的結果與綜合器的工作性能有關VHDL綜合器將根據設定的系列目標器件的特點對綜合的VHDL程序進行面向目標器件優化從而生成利于映射到具體目標芯片的元件模塊目前的綜合工具都可以設置一些優化選項,以滿足不同的需要。由于VHDL是高級設計語言它的電路描述與具體器件和綜合器都無關,不同公司的綜合器也不完全兼容,而且,針對不同的目標器件系列,綜合后的結果有所不同。因而,同一個VHDL程序,經由不同的綜合器綜合后生成的電路,其邏輯功能雖然在總體上是相同的,但電路結構卻不盡相同。目前流行的EDA綜合工具Synopsys公司的DesignCompiler、FPGAExpress、FPGACompilerII;Synplicity公司的Synplicity;Candence公司的Synergy;MentorGraphics公司的AutologicII等此外,DATAI/O公司的Synario、Viewlogic公司的WorkviewOfficeAltera公司的MAX+plusII等綜合工具都集成了VHDL綜合器在工程中,支持FPGA/CPLD的VHDL設計工具,綜合后最終生成EDIF網表文件。EDIF(電子數據交換格式的簡稱)是一種網表文件格式標準由一些EDA廠商及PLD廠商制訂是為了解決當前各種EDA工具生成的電路網表文件不兼容的問題而設的目前最常用的版本是EDIF200從VHDL設計描述到具體實現成為集成電路芯片,受到許多因素的影響首先是該描述能否被綜合;其次是包括有硬件、軟件及物理特性的系統級模型能否被綜合;再次是綜合的質量問題,這和VHDL的書寫風格、編碼約定、優化選擇、工藝技術選擇等有關。兩種設計描述的比較面向綜合的VHDL設計描述和面向仿真的VHDL設計描述相比,前者受到更多的約束。例如,對于一個向計算機寫入數據的選通脈沖,在面向仿真的VHDL描述中就不必考慮該脈沖有沒有“毛刺”的問題,而面向綜合的VHDL描述就必須要保證該選通脈沖,必須適應某特定的存儲器的具體要求。面向仿真的VHDL描述中一般都使用關鍵字AFTER或TRANSPORT對延時加以規定而綜合器對此不予理解因為作為綜合的結果實際電路的延時不僅取決于VHDL描述還取決于所采用的工藝技術。在仿真模型中可能出現無限循環或無范圍限制的整數但不可能存在與之對應的硬件故各綜合器對此問題的處理方法也不盡相同面向仿真的VHDL描述可能用到枚舉類型用來表示一組方式的編碼例如表示符號形式的有限狀態機的狀態或者表示信號線所處的電信號狀態(高阻級、低阻級、深度級)在這種情況下VHDL綜合器無法知道這些枚舉類型值的真正含義為此綜合器必須有一些約定(默認編碼方式)為了編寫一個能被綜合器所接受的VHDL描述通常可使用下面的描述方式:如用并行賦值語句的簡單門IF控制流語句CASE控制流語句順序語句等等。一般來說VHDL語句描述的運算的綜合結果一般對應于組合邏輯;條件控制語句(IF、CASE)的綜合結果是類似于多路開關的功能塊;對時序邏輯的VHDL描述常用IF-THEN語句和WAIT語句§6.3組合邏輯電路設計從VHDL設計描述到具體實現成為集成電路,受到許多因素的影響首先是該描述能否被綜合,例如測試基準(testbench)就是來供仿真之用,不能被綜合;其次是包含有硬件、軟件的物理特性的系統級模型也不能被綜合;再次,是綜合的質量問題。這是和VHDL書寫風格、編碼約定、優化選擇、工藝技術選擇等因素有關按照數字系統的組成從組合邏輯設計開始通過不同的設計例子分別介紹VHDL設計方法、包括編寫VHDL程序的要求和格式、各個指令之間的一些特點和差別。所有的例子是以綜合為目的來列舉的。VHDL語句描述的運算的綜合結果一般對應于組合邏輯,而VHDL中的運算符和常見的程序設計語句中的運算符沒有多少區別。但不同的硬件實現所對應的成本(硬件資源花費)和運行速度有著很大的差異因此,我們主要研究如何用并發語句和順序語句,并結合一些簡單的例子來描述組合邏輯電路。§6.3.1用并行語句中的布爾方程來描述組合邏輯例6-1:利用一個布爾算符設計二選一多路轉換器()LIBRARYIEEE;USEIEEE.std_logic_1164.all;ENTITYMUX2to1ISPORT(S:INSTD_LOGIC;Zero:INSTD_LOGIC_VECTOR(7DOWNTO0);One:INSTD_LOGIC_VECTOR(7DOWNTO0);Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDMUX2to1;例6-1ARCHITECTUREbehaviorOFMUX2to1ISsignaltemp:STD_LOGIC_VECTOR(7DOWNTO0);BEGINtemp<=(s,s,s,s,others=>s);Y<=(tempandOne)or(nottempandZero);ENDbehavior;即:當temp=(0,…,0)時,Y=Zero

當temp=(1,…,1)時,Y=One例6-1中布爾算符用來在一個賦值語句中產生mux運算因為類型不匹配,信號s不能用在具有信號One或Zero的布爾運算中信號s是std_logic類型,信號One/Zero是std_logic_vector類型。一個類型為std_logic_vector的內部信號temp被采用,注意對內部信號沒有模式說明Temp信號用在與One/Zero信號的布爾運算中temp的每個位設置成等于s信號值。數組賦值將被利用,它可以取以下幾種形式:1、temp<=(others=>s),關鍵字others給予缺省值;2、Temp<=(s,s,s,s,s,s,s,s),位置賦值7DOWNTO0;3、Temp<=(4=>s,7=>s,2=>s,5=>s,3=>s,1=>s,6=>s,0=>s,),名稱賦值或位置賦值與名稱賦值結合例6-2用VHDL描述的半加器。半加器的真值表和電路符號如圖6-3所示圖6-3半加器的真值表和電路符號

例6-2LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYhalf_adderIS PORT(a,b:INSTD_LOGIC;

c0,s:OUTSTD_LOGIC);ENDhalf_adder;例6-2ARCHITECTUREhalfOFhalf_adderISSIGNALc,d:STD_LOGIC;

BEGINc<=aORb;

d<=aNANDb;

c0<=NOTd;

s<=cANDd;ENDhalf;例6-3:描述全加器的程序基于上例中半加器的描述用兩個半加器就可以構成一個全加器全加器的電路圖如圖6-4所示:圖6-4全加器的電路圖例6-3LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYfull_adderIS PORT(a,b,cin:

INSTD_LOGIC;

s,c0:INSTD_LOGIC);ENDfull_adder;ARCHITECTUREfullOFfull_adderISCOMPONENThalf_adderPORT(a,b:INSTD_LOGIC;

s,c0:INSTD_LOGIC);

ENDCOMPONENT;例6-3SIGNALu0_c0,u0_s,u1_s0:STD_LOGIC;BEGINu0:half_adderPORTMAP(a,b,u0_s,u0_c0);u1:half_adderPORTMAP(u0_s,cin,s,u1_c0);c0<=u0_c0ORu1_c0;ENDfull;§6.3.2用順序語句描述組合邏輯下面討論如何用進程和順序語句來描述組合邏輯。但不要將順序語句與時序語句相混淆。例6-5:利用WHEN,ELSE語句設計二選一多路轉換器例6-5二選一多路轉換器LIBRARYIEEE;USEIEEE.std_logic_1164.all;

ENTITYMUX2to1ISPORT(S:INSTD_LOGIC;Zero:INSTD_LOGIC_VECTOR(7DOWNTO0);One:INSTD_LOGIC_VECTOR(7DOWNTO0);Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDMUX2to1;

ARCHITECTUREbehaviorOFMUX2to1ISBEGINY<=OneWHEN(S='1')ELSEZero;ENDbehavior;例6-6:譯碼器已知一個16位地址描述的存儲器區映象如圖6-6所示設計一個譯碼器來選頂相應的地址空間圖6-6譯碼器例6-6LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecodeIS PORT(address:INSTD_LOGIC_VECTOR(15DOWNTO0);

valid,boot_up:INSTD_LOGIC;

sram,prom,eeprom,shadow,periph1,

perph2:OUTSTD_LOGIC);ENDdecode;例6-6ARCHITECTUREmem_decodeOFdecodeISBEGINmapper:

PROCESS(address,valid,boot_up)

BEGIN shadow<=’0’;

prom<=’0’;

periph1<=’0’;

periph2<=’0’;

sram<=’0’;

eeprom<=’0’;例6-6

IFvalid=’1’THEN IFaddress>=”0000”ANDaddress<x”4000”THEN IFboot_up=’1’THEN shadow<=’1’;

ELSE prom<=’1’;

ENDIF;

ELSIFaddress>=”4000”ANDaddress<x”4008”THENperiph1<=’1’;例6-6ELSIFaddress>=”4008”ANDaddress<”4010”THENperiph2<=’1’;ELSIFaddress>=”8000”ANDaddress<=”c000”THENsram<=’1’;ELSIFaddress>=”c000”THENeeprom<=’1’;ENDIF;ENDPROCESS;ENDmem_decode;§6.3.4其它組合邏輯設計舉例

例6-8:IF語句和CASE語句應用舉例1、IF語句

IFsel=“00”THENp_encoder_out<=IN0;ELSIFsel=“01”THENp_encoder_out<=IN1;ELSIFsel=“10”THENp_encoder_out<=IN2;ELSEp_encoder_out<=IN3;ENDIF;2、CASE語句

CASESELIS WHEN“00”=>mux_out<=IN0; WHEN“01”=>mux_out<=IN1; WHEN“10”=>mux_out<=IN2; WHENothers=>mux_out<=IN3;ENDCASE;圖

6-8(a)利用IF語句

(b)利用CASE語句

圖6-7(a)和(b)分別給出利用IF和CASE語句的例8(a)和例8(b)的實現結構通常,“IF_THEN_ELSE”語句實現的速度較慢,除非要求建立優先權的編碼器才利用它,并應分配最高的特權到后到達的關鍵信號,嵌套的“IF_THEN_ELSE”語句可能增加面積和延時。如果可能應該盡量用“CASE語句”來描述相同的功能“CASE”語句的所有分支必須定義CASE語句的優點是緊湊且延時優化,可以在單個CLB中實現。但是CASE語句使用時必須注意,有限的狀態都要被定義。std_logic并非只有‘0’,‘1’;當出現“不考慮‘-’”時也可以采用。而邏輯化簡是選擇‘0’或‘1’,和std_logic的‘-’求素覆蓋來實現的。 對于“CASE”語句說明“不考慮‘-’”的條件是十分重要的,這個說明可能在綜合時消除好幾層邏輯。三態門及總線緩沖器是接口電路和總線驅動電路經常用到的器件。(它們不屬于組合電路)三態門電路圖及真值表如圖6-9所示:圖6-9三態門電路圖及真值表例6-9:三態門電路

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYrei_gateIS PORT(din,en:INSTD_LOGIC;

dout:OUTSTD_LOGIC);ENDtri_gate;ARCHITECTUREtri_gateOFtri_gateISBEGINtri_gate1:PROCESS(din,en)

BEGIN IF(en=’1’)THENdout<=din;

ELSEdout<=’z’;

ENDIF;

ENDPROCESS;

ENDtri_gate;例:雙向總線緩沖器雙向總線緩沖器用于對數據總線的驅動和緩沖,如下圖所示。雙向緩沖器有兩個數據輸入輸出端a和b,一個方向控制端dr和一個選通端en。當en=1時緩沖器未被選通,a和b都呈現高阻;en=0時,緩沖器被選通,如果dr=0,那么a=b;如果dr=1,那么b=a。雙向總線緩沖器

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtri_bigateISPORT(a,b:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);en,dr:INSTD_LOGIC);ENDtri_bigate;ARCHITECTURErtlOFtri_bigateISSIGNALaout:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALbout:STD_LOGIC_VECTOR(7DOWNTO0);BEGIN

PROCESS(a,dr,en)BEGINIF((en=‘0’)AND(dr=‘1’))THENbout<=a;ELSEbout<=“ZZZZZZZZ”;ENDIF;b<=bout;ENDPROCESS

PROCESS(b,dr,en)BEGINIF((en=‘0’)AND(dr=‘0’))THEN

aout<=b;ELSE

aout<=“ZZZZZZZZ”;ENDIF;a<=aout;ENDPROCESS;ENDrtl;

由上面的程序可以看出,雙向緩沖器是由兩組三態門構成的,利用信號aout和bout將兩組三態門連接起來。例6-13:八級優先權編碼器(利用ELSIF結構)LIBRARYIEEE;USEIEEE.std_logic_1164.all;ENTITYpriorityISPORT(input:INSTD_LOGIC_vector(7downto0);

vec:OUTSTD_LOGIC_VECTOR(2downto0));ENDpriority;例6-13

ARCHITECTUREpriority_archOFpriorityISBEGINPROCESS(input)BEGINIF(input(7)='1')THENvec<="111";ELSIF(input(6)='1')THENvec<="110";ELSIF(input(5)='1')THENvec<="101";ELSIF(input(4)='1')THENvec<="100";ELSIF(input(3)='1')THENvec<="011";ELSIF(input(2)='1')THENvec<="010";ELSIF(input(1)='1')THENvec

溫馨提示

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

評論

0/150

提交評論