XilinxFPGA設計基礎VHDL版_第1頁
XilinxFPGA設計基礎VHDL版_第2頁
XilinxFPGA設計基礎VHDL版_第3頁
XilinxFPGA設計基礎VHDL版_第4頁
XilinxFPGA設計基礎VHDL版_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第一章開發(fā)軟件ISE與開發(fā)流程LUT主要適合SRAM工藝生產(chǎn),因此FPGA都是基于SRAM工藝的,掉電就會喪失。1.1 設計輸入除了常見的文本輸入,還可以采用圖形輸入方式:單擊DesignUtilities->CreatSchematicSymbol,那么會在工程文件夾下生成一個MY_AND2.sym文件,同時這個生成的符號被參加到符號庫中。這樣可以添加元件。用戶約束文件UCF的編寫:管腳約束:如NET"SignalName>"LOC=<PinName>-將信號鎖定到fpga的管腳。時鐘約束:如NET“<NetName>"PER

2、IOD=periodHIGH/LOWhighorlowtime。采用圖形化方法輸入約束文件:創(chuàng)立ucf文件,選擇ucf文件,然后點擊Processes->UseConstrains->CreateTimingConstraints添力口時序約束;點擊Processes->UserConstrains->I/OPinPlanning加管腳約束。1.2 設計綜合Synthesize)綜合將概念性硬件描述語言HDL的設計定義轉換成針對目標器件的邏輯或者物理表示。XST(XilinxSynthesisTools)就是綜合工具,其輸出為Xilinx特有的NGC網(wǎng)表文件,NGC包含

3、轉化后的邏輯數(shù)據(jù)和約束信息。綜合是設計流程中的根本步驟,它將概念性硬件描述語言的設計定義轉換為針對器件的邏輯或物理表示。在綜合過程中,狀態(tài)機是單獨處理、獨立分析的,根據(jù)綜合的選項,綜合器選擇狀態(tài)機在綜合過程中選用的實現(xiàn)算法。綜合完成后,綜合器會根據(jù)綜合選項和XCF(XSTConstraintFile,綜合約束文件),對綜合結果做一些根底的優(yōu)化。HDL文件NGR5:件NGC5:件LO©件1.3 功能仿真Simulation->behavioral功能仿真可以對工程設計文件進展初步的功能驗證。仿真軟件將HDL語言轉換為抽象的邏輯電路,忽略信號在邏輯器件和傳輸線上的延時,并對應各種可

4、能的輸入信號仿真得到設計工程的輸出信號,檢驗輸出信號是否滿足預期的要求。功能仿真需要創(chuàng)立TestBench文件。1.4 工程實現(xiàn)Implementation工程實現(xiàn)包含以下四個步驟:Translate將綜合后的網(wǎng)表文件NGC和約束文件UCF融合到同一個Xilinx的設計文件PCF中。Map一將設計中的功能器件映射到工程設計的目標器件資源中。PlaceandRoute-對映射后的目標器件資源進展布局和布線,滿足時序約束。GenerateProgrammingFile-生成可以下載到器件中的比特流文件,對器件進展編程配置。1.5 時序仿真Simulation->PostRoute對經(jīng)過布局布

5、線后的仿真模型參加延時文件進展仿真的過程,他將最根本的門級延時計算在,模擬工程設計在FPGA器件的實現(xiàn)過程。經(jīng)過時序仿真后的設計根本上與實際電路是一致的。時序仿真的根本參數(shù):時鐘周期Period:最小時鐘周期是指信號從一個觸發(fā)器或鎖存器的輸入端,經(jīng)過一系列的組合邏輯單元和信號線,到達下一個同步器件,所用的最長時間。端口到建立時間Padtosetuptime:信號從進入fpga芯片,經(jīng)過一系列的邏輯元件和連線,到達一個同步器件觸發(fā)器、鎖存器或存儲器的輸入端所用的最長時間。時鐘到端口時間Clocktopadtime:數(shù)據(jù)信號從觸發(fā)器或鎖存器的輸入端口,經(jīng)過邏輯單元和連線時延,到達fpga芯片的輸出

6、管腳的最長時間。這個時間在約束文件中稱為OFFSETOUTAFTER約束。端口到端口時間Padtopadtime:數(shù)據(jù)信號從輸入端口進入fpga芯片,經(jīng)過一系列邏輯元件和連線延時后到達fpga的輸出端口的最大時間。1.6 器件配置利用iMPACT工具將比特流文件編程到fpga中。第二章VHDL硬件描述語言2.1 根底知識fpga電路設計的四個層次:行為層次(Behavioral)、存放器傳輸層次(RTL,RegisterTransferLevel)、邏輯門層次(Logic)和布圖層次(Layout)。行為層次主要關注模塊的功能描述和仿真驗證,存放器傳輸層次要關注模塊的可綜合電路的實現(xiàn),邏輯門層

7、次考慮如何用門級電路實現(xiàn)給定功能,布圖層次考慮如何將電路適配到fpga的資源中。2.2 VHDL根本構造2.2.1 實體與構造體實體與C+中的類相似。構造體的行為描述通常采用process進程語句實現(xiàn)。構造體的數(shù)據(jù)流描述方式主要使用VHDL語言中的標準布爾函數(shù),將信號之間的布爾代數(shù)關系用布爾方程式來表示。構造體的構造描述主要通過下層模塊的聲明和調(diào)用及端口映射將下層模塊相連。Generic參數(shù)聲明類似于C+語言中的類屬參數(shù)聲明。librarylEEE;uselEEE.STD_LOGIC_1164.all;entityCOUNTERisgeneric(COUNT_WIDTHINTEGER:=7);

8、port(RST,SET,CLR:inSTD_LOGIC;SETVALUE:inSTD_LOGIC_VECTOR(COUNT_WIDTHdownto0);COUNTOUT:outSTD_LOGIC_VECTOR(COUNT_WIDTHdownto0);endCOUNTER;2.2.2 庫用戶自定義庫時,先用關鍵字library說明要引用的庫名,然后用use語句翻開庫中程序包。在計算機中新建一個文件夾,將文件夾名改為用戶自定義"庫名,將編輯的程序包等以文件形式存在該文件下,此時該文件夾即為用戶自定義庫。在ise中自定義library時,首先要新建library,然后編寫相應的程序包,并

9、將程序包移到movetolibrary該library中,然后就可以使用use庫名之類的語句了。2.2.3 程序包程序包的作用是收集被多個VHDL實體共享的數(shù)據(jù)類型、子程序或數(shù)據(jù)對象,使其適用于更一般的訪問和調(diào)用圍。2.2.4 配置一個實體可以聲明多個構造體,但形成最終電路時,只能使用一種構造體作為功能實現(xiàn)的描述,這時就需要使用配置將實體與構造體連接起來。配置不是附屬單元,可以獨立存在。通常在使用時都會將配置單獨寫入一個文件中。1、默認配置語法如下。當實體選擇的構造體中,不包含BLOCK語句和PONENT語句時,可采用默認配置為實體選擇不同的構造體和對VHDL程序的性能評估。configura

10、tion配置名稱of實體名稱isfor構造體名稱use配置項;endforend配置名稱;2、元件配置。在層次化設計中,應用庫中的元件是設計人員經(jīng)常采用的一種效率比擬高的工作方式。引用元件的方法有兩種:使用元件例化語句;使用元件配置。元件配置語句的語法構造有兩種形式,分別是低層次的配置和實體一構造體對的配置。低層次的配置語法為:configuration配置名of實體名isfor選擇的構造體名for例化標號:元件名useconfiguration庫名.元件配置名;endfor;.endfor;end配置名;實體一構造體對的配置的語法構造如下:configuration配置名of實體名isfor

11、選擇的構造體名for例化標號:元件名useentity庫名.實體(構造體);endfor;.endfor;end配置名;顯然,實體一構造體比照低層次的配置要好。3、構造體配置。雖然元件配置語句配置實體具有一定的優(yōu)勢,這種方法易寫也易懂;但是書寫過于臃腫,于是引出了第三種配置語句一構造體配置語句。構造體配置語句必須放在所要配置的實體中的構造體中。其語法如下:for<元件例化標號>:<元件名>useentity<庫名>:<實體名(構造體名)>【舉例】采用構造體配置實現(xiàn)全加器libraryieeeuseieeestd_logic_1164all;ent

12、ityconfig_exampleisport(A,B,Cin:instd_logic;Co,S:outstd_logic);endconfig_example;architecturestructureofconfig_exampleisponentaddport(a:instd_logic;b:instd_logic;y:outstd_logic);endponent;signaltmp1,tmp2,tmp3:std_logic;forU1,U2:adduseentitywork.add(xor_str);forU3,U4:adduseentitywork.add(and_str);for

13、U5:adduseentitywork.add(or_str);beginU1:addportmap(A,B,tmp1);U2:addportmap(tmp1,Cin,S);U3:addportmap(tmp1,Cin,tmp2);U4:addportmap(A,B,tmp3);U5:addportmap(tmp2,tmp3,Co);endstructure;2.3 語法要素2.3.1 對象類型Port、Constant、SignalVariable變量在綜合后可以是一個連線(wire),也可以是一個存放器(register),綜合的結果取決于變量在時序電路中是否用于保存信號值。變量雖然可以賦

14、初始值,但是在綜合時,綜合器會忽略掉。信號在聲明構造中被賦予的初始值,與變量一樣,在綜合時也會被忽略。信號的賦值可以參加延時,如A<=Bafter5ns;但是,延時語句只在行為建模時起作用,而在綜合時也會被完全忽略。2.3.2 數(shù)據(jù)類型標量類型1、bit類型是二值系統(tǒng)中的最根本單元,分別表示低電平和高電平。2、Boolean類型沒有數(shù)值的含義,也不能進展算術運算,只能作為關系運算的結果,在判斷語句中判斷使用。3、 Integer類型的數(shù)據(jù)在底層電路中用一系列二進制位表示。使用時要指定range圍,這樣綜合器才能綜合。4、real類型的數(shù)據(jù)很多公司的綜合工具不支持。5、物理類型用于表示一些

15、物理量,完整的物理數(shù)據(jù)類型包含數(shù)值和單位兩局部。定義物理類型時必須先給出一個基準單位。如VHDL只定義了一個物理類型:typeTIMEisrange2147483647to2147483647unitsfs;ps=1000fs;ns=1000ps;us=1000ns;ms=1000us;sec=1000ms;min=60sechr=60min;endunits6、符號類型character通常用單引號括起來,如'Z77、標準邏輯類型STD_LOGIC與bit類型相似,也是表示單個數(shù)字信號邏輯的,每個STD_LOGIC都有9種不同的狀態(tài)。8、枚舉類型enumerate在狀態(tài)機和復雜系統(tǒng)的

16、描述中尤其有用。9、錯誤等級severity_level共有四種狀態(tài)可用:note、warning、error>failureo錯誤等級通常與assert句配合使用。復合類型1、位矢量類型BIT_VECTOR是由多個位型數(shù)據(jù)組合起來的一組數(shù)據(jù)。例子如下:signalA_WORD:bit_vector(7downto0);A_WORD<=X"0101_1100"2、標準邏輯矢量型STD二LOGIC_VECTOR一是由多個標準邏輯數(shù)據(jù)組合起來的。3、字符串類型是由多個字符類型的數(shù)據(jù)組合起來的。4、數(shù)組array是由多個一樣類型的數(shù)據(jù)組成的集合。VHDL中有兩種定義矩

17、陣的方法,一種稱為Constrained,另一種稱為Unconstrained,兩者之間的不同在于定義數(shù)組時索引值的圍不同。Constrained在數(shù)組定義時就已經(jīng)確定了索引值的取值圍,例如:typeWORDisARRAY(3downto0)ofSTD_LOGIC;Unconstrained類型在定義數(shù)組時不給定具體的取值圍,而是在用數(shù)組類型定義一個對象時才""給定索引圍,例如:typeBIT_VECTORisARRAY(NATURALrange<>)ofBIT;typeSTD_LOGIC_VECTORisARRAY(NATURALrange<>)o

18、fSTD_LOGIC;typeSTRINGisARRAY(POSITIVErange<>)ofCHARACTER;在工程中,大型的數(shù)組一般用變量或常量定義,用信號定義時,會影響仿真速度。在VHDL做工程仿真時,經(jīng)常會用ARRAY類型對存儲器進展建模。多維數(shù)組沒有對應的底層硬件邏輯,因此多用于仿真和建模。數(shù)組的賦值方法為:signalH_BYTE:STD_LOGIC_VECTOR(0to7);H_BYTE<=(7|6|0|1=>'1',2to5=>'0');5、記錄型RECORD并不是所有綜合器都支持記錄類型,組成集合的數(shù)據(jù)至少要有兩

19、種以上不同的類型。2.3.3文件類型(File)目前常用的文件類型只有TEXT類型,IEEE的TEXTIO包集合中包含了TEXT文件常用的一些讀寫函數(shù),方便設計者在開發(fā)時調(diào)用。綜合器不支持,只能用于仿真。(1) .首先需要聲明TextIO的包集useieeestd_logic_textio.all;usestd.textio.all;(2) .聲明輸入、輸出文件filestim_a:textopenread_modeis"stimu1.txt"fileresp_out:textopenwrite_modeis"resp_out.txt"(3).聲明讀寫文

20、件的行變量variableline_in:line;variableline_outline;(4).聲明用于保存行變量中值的數(shù)據(jù)變量variablea_tmp:integer;variablersp_tmp:integer;(5).最后進展文件的讀寫。讀文件時,先從文件中按行讀出一行數(shù)據(jù),再將行中的數(shù)據(jù)讀到數(shù)據(jù)變量中。寫文件時,先將數(shù)據(jù)變量組合成一行,再將行變量中的數(shù)據(jù)寫入文件。需要注意的是只有variable型才是文件存取類型,不能使用signal型。TextIO包集中定義了一些常用的文件操作過程:readline(file_var,line_var);-用于從文件file_var中讀取一

21、行數(shù)據(jù)到line_varread(line_var,data_var);-用于從line_var中讀取數(shù)據(jù)保存到data_var中writeline(file_var,line_var);-用于將line_var寫入至Ufile_var中write(line_var,data_var);一用于?各data_var寫入至Uline_var中endfile(file_var);一判斷file_var是否已經(jīng)到文件末尾2.3.4屬性屬性是指實體、構造體、類型及信號的一些表現(xiàn)特征。大局部信號類屬性僅用于仿真,只有兩個信號類屬性EVENT和STABLE是可以綜合的。2.4運算符邏輯運算符符號AND,OR

22、,NAND,NOR,XOR,XNOR,NOT支持的數(shù)據(jù)對象類型BIT,BOOLEAN,STD_LOGIC關系運算符=,/=任何數(shù)據(jù)類型<,>,<=,>=枚舉和整數(shù)類型以及對應的一維數(shù)組算術運算符+,-,*,ABS整數(shù)類型*,/,MOD,REM整數(shù)類型,操作數(shù)必須是2的乘方移位運算符SLL,SRL,SLA,SRA,ROL,RORBIT型一維數(shù)組或布爾型一維數(shù)組并置運算符符號運算符&,(,)正負:+,-BIT或一維數(shù)組整數(shù)類型關系運算符返回值一定是BOOLEAN類型。關系運算的比擬按以下方式進展:從最左邊按位比擬,直到發(fā)現(xiàn)不相等的元素位,長數(shù)組大于短數(shù)組。如:&qu

23、ot;1011">"10101”;"101"<"1010"IEEE中只定義了SIGNED和UNSIGNED類型的移位運算,其他類型可以換一種寫法實現(xiàn):Asll2描述為A<=A(5downto0)&"00"算術運算符中真正能夠綜合的只有“+”、”-"、和"*,對于"/''、"mod”、“rem”,在分母為2的乘方次常數(shù)時,可以將這些操作用位運算實現(xiàn),因此是可以綜合的。2.5 VHDL的構造體描述方式行為描述方式是從功能或算法方面對構造體

24、進展描述,不需要包含任何構造信息。其抽象程度高,主要采用函數(shù)、過程、進程語句的形式來表示。數(shù)據(jù)流方式源于傳統(tǒng)的布爾表達式設計思想,通過邏輯或算術表達式對信號或變量賦值,表示信號在電路中的流動方向。數(shù)據(jù)流描述主要建立在并行信號賦值語句根底上。這種方式對硬件水平要求高,易于綜合,但不利于描述復雜邏輯事件。構造化方式類似于文本方式的原理圖設計。Fpga相對于CPU模式的信號處理,最大的優(yōu)勢在于它能夠并行地處理信號,而并發(fā)描述語句是實現(xiàn)并行信號處理的主要底層描述方法。如果信號在多個進程中被賦值,這些驅(qū)動器的結果將會被連接在一起,形成多驅(qū)動的情況,應防止出現(xiàn)此情況。Rtl級的VHDL也就是我們常說的可綜

25、合的那局部,所謂的rtl級建模,其實也就是用VHDL語言去描述實時電路的行為。在該層次上,最重要的思想就是“硬件意識。2.6 VHDL典型語句2.6.1 賦值語句中的延時在VHDL中存在慣性延時和傳輸延時兩種類型。慣性延時的特性與信號脈沖持續(xù)時間有關,當信號持續(xù)時間小于慣性延時,輸出信號將忽略該脈沖的存在。傳輸延時不是默認的,必須用關鍵詞TRANSPORT明確說明。傳輸延時常用于描述總線延時、連接線的延時及ASIC芯片中的路徑延時。不管哪種延時,都是電路固有的特性,與電路的材料、生產(chǎn)工藝、制作溫度等相關。帶入語句中的延時子句只能根據(jù)這些條件去模擬電路的延遲特性,而不能根據(jù)語句中的延時時間參數(shù)去

26、綜合生成具有指定延遲時間的電路。換言之,延遲子句是不可綜合的,綜合器會忽略掉該延時。如a<=notb,a<=notbafter2ns,a<=transportnotbafter2ns這三條語句最后生成的電路完全一樣。2.6.2 順序語句1、使用不帶else子句的if語句時,電路可能會引入鎖存器。2、Case語句沒有優(yōu)先級,其when后面的選擇值可以選擇并列數(shù)值,如3|5。3、Forloop循環(huán)語句中,循環(huán)變量在使用前不需要聲明。循環(huán)可以采用遞增模式、遞減模式以及循環(huán)次數(shù)圍三種方式。如:for循環(huán)變量inx'RANGEloop順序語句;endloop;4、Wait語句的

27、綜合:waiton、waitfor和wait語句是不可綜合的。Waituntil語句只有在條件表達式為時鐘的邊緣時,如waituntilCLOCK='1'時,是可綜合期那么也不可綜合。由于在使用waituntil語句時,process沒有敏感信號列表,所以它必須是process的第一條語句。ISE中的XST,不支持任何wait語句的綜合。5、空操作NULL語句類似于計算機匯編語句中的NOP指令,執(zhí)行該語句不進展任何操作,只是使程序執(zhí)行下一個操作。6、變量的綜合:根據(jù)變量在程序中的使用情況的不同,變量綜合后的結果可能是連線wire、鎖存器Latch或存放器Register。在時序

28、電路的順序描述語句中,如果變量在被賦值之前被讀取,那么綜合后將產(chǎn)生一個存放器;如果這種情況發(fā)生在組合邏輯電路中,那么綜合后將會產(chǎn)生一個鎖存器。7、斷言語句ASSERT:VHDL的斷言語句類似于C語言中的斷言語句,它是人機對話的一種重要手段。語法構造為:assert條件表達式report字符串信息severity級另1J;assert語句不描述任何硬件邏輯,通常綜合器都會將其忽略,或給出一個警告,但它在系統(tǒng)調(diào)試時很有用,可以幫助設計者很快找到設計中出現(xiàn)的問題。2.6.3 并發(fā)語句1、進程語句一個進程語句只允許描述對應于一個時鐘信號的同步時序邏輯。一個進程中只能描述針對于同一時鐘的同步時序邏輯,而

29、異步時序邏輯必須由多個進程來表達。同步電路可由構造體中的多個進程描述,這是因為進程之間的通信可以通過傳遞信號和共享變量值來實現(xiàn)。除非使用決斷函數(shù),否那么在多個進程中,不允許對同一個信號賦值,但在同一個進程中可以對一個信號屢次賦值。進程部是順序語句,但進程語句本身是并行語句。2、并行信號賦值語句每一個信號賦值語句都相當于一條縮寫的進程語句,而這條語句的所有輸入信號都被隱性地列入此過程的敏感信號表中。條件式信號代入語句是有優(yōu)先級的,即使有多個條件為真,也只有第一個滿足條件的表達式會被執(zhí)行。條件信號賦值語句雖然可以寫的很長,實際上是一條語句。目標信號<=表達式1when條件lelse表達式2w

30、hen條件2else表達式n;選擇式信號代入語句,多路信號之間是并行的,沒有優(yōu)先級別。with選擇表達式select目標信號<=表達式1when選擇條件1,表達式2when選擇條件2,表達式nwhen選擇條件n;3、元件說明和元件例化語句元件說明語句的功能是將一個現(xiàn)成的設計實體定義或聲明為一個元件;元件例化語句,它的功能是將調(diào)用的元件或模塊的端口信號與構造體中的相應端口信號進展正確的連接,從而到達引用元件的目的。其中標號名也稱為例化名相當于電路板中的一個插座名。4、生成語句生成語句的典型應用是生成存儲器陣列和存放器陣列。從軟件運行結果來看,forgenerate語句的循環(huán)變量雖然有順序性

31、,但最終結果是完全并行的。5、塊語句塊語句主要用于參數(shù)定義和信號的映射,包括Generic和GenericMap語句以及Port和PortMap語句。使用VHDL進展建模時,一般設計者很少使用塊語句,尤其是衛(wèi)式表達式語句,而且很多商用的綜合器不支持塊語句。通常情況下,選用進程語句更加高效。從綜合的角度看,block語句的存在毫無意義,因為將設計實體劃分為多個塊,只是形式上的改變并非功能上的改變。2.7 并發(fā)語句的仿真模型雖然并發(fā)語句在綜合成底層電路后是并行的,但是并發(fā)語句的仿真是使用類似于PC機的處理器進展的,因此,理解并發(fā)語句的仿真模型,有助于更好的理解并發(fā)語句的執(zhí)行過程。VHDL的仿真器是由事件觸發(fā)的,敏

溫馨提示

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

評論

0/150

提交評論