VHDL學習筆記_第1頁
VHDL學習筆記_第2頁
VHDL學習筆記_第3頁
VHDL學習筆記_第4頁
VHDL學習筆記_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第二章 語法基礎1、基本標識符不區(qū)分大小寫2、擴展標識符與基本標識符不同,例如:COMPUTER與Computer和computer都不相同。3、VHDL語言中的對象有4類:常量(Constant)、信號(Signal)、變量(Variable)和文件(File)。4、VHDL語言中的數(shù)據(jù)類型有5類:標量類型(Scalar Types)、復合類型(Composite Types)、存取類型(Access Types)、文件類型(File Types)和隱含類型(Protected Types)。5、package封裝庫的時候可以將所有的程序包封裝放在單獨的一個.vhd文件內(nèi)。(而不是直接單獨編

2、譯這個.vhd文件)這樣操作也是可以調(diào)用封裝庫的。6、在信號賦值中,當在同一個進程中同一個信號賦值目標有多個賦值源時,信號賦值目標獲得的是最后一個賦值源的賦值,其前面相同的賦值目標不作任何變化; 特別注意:信號賦值發(fā)生在一個進程結束時。7、VGA使用時要把不用的 Blank_n 和 sync_n 都默認接地,不然會出現(xiàn) 疊影。8、時鐘PLL的不合理使用會影響到其他區(qū)域功能塊的數(shù)據(jù)。9、網(wǎng)口經(jīng)88e1111在未接收到數(shù)據(jù)的時候,在RGMII模式下默認為”1101”輸出,即xD;復位的狀態(tài)下是x5;10、VGA顯示時,要嚴格按照VGA的顯示標準要求;例如:640*48060Hz 的輸入頻率必須為2

3、5Mhz左右,以滿足顯示要求, 頻率過低VGA將沒有響應,頻率過高將顯示 輸入信號超過范圍。11、vhdl中信號和變量在描述和使用時有哪些主要區(qū)別:符號不同:變量:= 信號 <=延時:變量無延時 信號有延時位置:孌量在PROCESS 信號ARCHITECTUUE SIGNAL BEGIN 信號可以是全局量,只要在構造體中已定義,那么構造體內(nèi)的所有地方都可以使用;變量是局部量,只能在進程、子程序中定義和使用。如果將結果帶出外部,則必須將變量付給一個信號量才行。12、處理不同位數(shù)的std_logic_vector類型數(shù)據(jù)相加,使用conv_integer(變量)轉換成整型,再進行相加, 再用

4、conv_std_logic_vector(變量,位數(shù)) 來轉換成更多位數(shù)的;如:library ieee; - 可以實現(xiàn)兩個16位數(shù)相加,輸出帶進位的32位use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity vector_add_test isport(ivector1, ivector2 : in std_logic_vector(15 downto 0);ovector : out std_logic_vector(31 downto 0);end

5、vector_add_test;architecture one of vector_add_test isshared variable outv : integer;beginprocess(ivector1, ivector2)beginoutv := conv_integer(ivector1) + conv_integer(ivector2);end process;ovector <= conv_std_logic_vector(outv, 32);end one; 13、signal tap 使用時注意 下圖的打鉤都需要:14、 VHDL設計中如果使用elsif count

6、 > Mactype_offset then 。 則編譯出來的結果會有錯誤產(chǎn)生,其中是由于 綜合成電路的時候 判斷條件不夠明確, 因此需要進行如下的設計:elsif count < Mactype_offset and count >= (Mactype_offset - 2) then ;15、16、 第三章 VHDL語言的程序結構1、實體 一般格式:ENTITY 實體名 IS GENERIC語句; - 類型說明(可選項) PORT語句; - 端口說明(必需項) 實體說明部分; (可選項) BEGIN 實體語句部分;END ENTITY 實體名;(1) 端口說明部分PORT

7、(端口名, 端口名: 模式 數(shù)據(jù)類型。 端口名, 端口名: 模式 數(shù)據(jù)類型);端口名是賦予每個引腳的名字,其含義要明確,如D開頭的端口名表示數(shù)據(jù),A開頭的端口名表示地址等。端口的模式有:In 、Out 、 Buffer 、 Inout 、 Linkage ;2、 結構體 一般格式:ARCHITECTURE 結構體名 OF 實體名 IS 結構體說明部分BEGIN 結構體語句END ARCHITECTURE結構體名;注:模塊中所描述的各個語句是可以并發(fā)執(zhí)行的,與模塊中的語句書寫順序無關;在模塊之外,結構體內(nèi)直接書寫的語句也是并發(fā)執(zhí)行的。(1) 用VHDL語言描述結構體有以下4種方法: 1)、行為描

8、述法: 采用進程語句,順序執(zhí)行;2)、數(shù)據(jù)流描述法:采用進程語句,順序執(zhí)行;3)、結構描述法:采用并行處理語句;4)、采用多個進程、多個模塊、多個子程序的方法;(2)進程語句 一般書寫形式進程名:PROCESS敏感信號表變量聲明語句。BEGIN。順序語句。END PROCESS 進程名;注:1)進程內(nèi)部的所有語句都是順序執(zhí)行的;2) 多個進程之間是并行執(zhí)行的,并可通過敏感信號訪問結構體或?qū)嶓w中定義的信號。3) 進程依靠敏感信號表中指定的信號來觸發(fā)啟動,也可以用WAIT語句描述觸發(fā)條件。(但是敏感信號表和WAIT語句不能共存)4) 進程之間的通信是由信號來傳遞的。(3) WAIT語句的書寫格式為

9、:WAITON 敏感信號列表 UNTIL 表達式FOR 時間表達式;(4) 模塊語句 一般格式如下塊名:BLOCK 控制條件的布爾表達式 ISGENERIC 子句 GENERTIC映射; 端口子句 端口映射; 塊說明部分BEGIN并行語句A ; 并行語句B ;.END BLOCK塊名;結構體可以看做兩部分:第一部分:結構體說明語句可以包含有以下幾種說明語句:常數(shù)說明(constant)數(shù)據(jù)類型說明信號說明(signal)例化元件說明(component)子程序說明(subprogram)第二部分:結構體功能描述語句可以包含有以下幾種說明語句:塊語句(block)進程語句(process)信號賦

10、值語句子程序調(diào)用語句元件例化語句(port map)生成語句(generate)第四章 VHDL的語法基礎1、 并行語句與順序語句(1) 能夠進行并行處理的語句有:process -進程語句Concurrent signal assignment-并發(fā)信號代入語句 Concurrent procedure call-并發(fā)過程調(diào)用語句Block-模塊語句Assert-并行斷言語句Generate-重復結構生成語句Generic-元件參數(shù)化語句(2) 順序語句列述如下:Variable assignment statement -變量的賦值語句Signal assignment statement

11、 -信號的賦值語句Wait-wait語句If-Case-Loop-Next-Exit-Report-Return-Procedure call-過程調(diào)用語句Assert-斷言語句注1:順序語句只能出現(xiàn)在 進程、過程、函數(shù)和模塊中;注2:有些既能做順序語句又能做并發(fā)語句的, 這類語句放在進程、塊、子程序之外是并發(fā)語句,放在過程、塊、子程序之內(nèi)的是順序語句。(3) 1)信號(signal)可以聲明在進程和子程序的外部,也可以聲明在進程和子程序的內(nèi)部;而 變量(variable)只能聲明在進程和子程序的內(nèi)部。 2) 同一個信號不能被多次賦值,只要信號的代入語句中的表達式發(fā)生變化,便執(zhí)行該賦值語句;多

12、個信號代入語句是并發(fā)執(zhí)行的 與其書寫的順序無關;3) 變量的賦值只能在進程和子程序內(nèi)部進行,且是順序執(zhí)行;并且每個賦值語句都是立即生效的;(4) 運算符&(并置)操作例: “VH”&“DL” 的結果為“VHDL”; 0&1的結果為“01”;2、 變量賦值語句與信號代入語句 (when 條件 else)、(with 表達式 select 。 when)3、 條件分支語句與循環(huán)語句(1) if 語句 一般書寫格式1) If 條件 then <順序處理語句>; End if;2)if 條件 then<順序處理語句甲>;Else<順序處理語句乙&g

13、t;; End if;3) if 條件1 then<順序語句1>;Elsif 條件2 then<順序語句2>;。Elsif 條件n then<順序語句n>;Else<順序語句n+1> End if; (2)case 語句 一般格式:Case 條件表達式 isWhen 條件表達式 => 順序處理語句;End case;注:if語句是有序的,case語句是無序的; (3)loop語句有:for-loop、while-loop、next-loop 和exit-loop等形式;其中next-loop主要用于二重循環(huán)中比較多。 (4)元件聲明與調(diào)用

14、一般格式Component 元件名 -聲明被調(diào)用的元件Generic 子句; -聲明被調(diào)用元件的參數(shù)Port 字句; -聲明被調(diào)用元件的端口End component;被聲明的元件可以在結構體中通過其元件名調(diào)用,書寫格式如下:實例元件標號: 元件名 generic map語句;port map語句;注:標號名加在元件名前面,在結構體描述中,標號名一定是唯一的。 (5)generic語句 參數(shù)傳遞字句的書寫格式為:Generic (參數(shù)1: 參數(shù)類型1 :=參數(shù)初值1;參數(shù)2: 參數(shù)類型2 :=參數(shù)初值2;。;參數(shù)N: 參數(shù)類型N :=參數(shù)初值N;);注:使用generic子句聲明了參數(shù)要求后,

15、要在調(diào)用元件時使用參數(shù)映射子句(generic map)傳入?yún)?shù)值。(6)生成語句(generate)用來產(chǎn)生多個相同的硬件結構,如計算機存儲陣列、寄存器陣列。生成語句有for-generate、if-generate和case-generate 3種形式。第五章VHDL程序設計基礎1、 在元件設計中,元件內(nèi)部互相連接的端口使用BUFFER類型,元件外部互相連接的端口使用IN、OUT類型。2、 加法器例程:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; - 加減乘使用需要添加的程序包ENTI

16、TY adder IS PORT ( A : IN STD_LOGIC_VECTOR(7 DOWNTO 0); B : IN STD_LOGIC_VECTOR(7 DOWNTO 0); clk : in std_logic; S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END adder; ARCHITECTURE behav OF adder IS Signal C : std_logic_vector(7 downto 0) ; BEGIN process(A,B,clk,c) begin IF clk'EVENT AND clk = '1&

17、#39; THEN C <= A + B; if(C < 255) then S <= C; end if; if(C > 255) then S <= C - 255; end if; end if; end process; END behav;3、VHDL中BUFFER與INOUT有什么區(qū)別呢?首先INOUT完全是雙向的,也就是INOUT:=IN+OUT,對INOUT屬性的PIN既可以寫出也可以讀入,他有2個寄存器,如.port(a:inout std_logic);.signal ccc,ddd:bitprocess(clk)begin.a<=ccc

18、;此時端口a為CCC的值.ddd<=a;讀入端口a此時的信號BUFFER: 一般比較少用,它實際上輸出的功能與out一樣,他只有1個寄存器,而此時讀入的卻是上次從該口輸出的值,比如:port(a:buffer std_logic);.signal ccc,ddd:bitprocess(clk)begin.a<=ccc;此時端口a為CCC的值.ddd<=a;讀入到ddd的值其實等于ccc的值。(如果中間沒有給a賦新值的話)。4、 配置語句可以用于描述層與層之間的連接關系,如實體與結構體之間的連接關系。 注:配置一般寫在結構體之后配置的一般書寫格式為:Configuration

19、配置名 of 實體名 isFor 選配結構體名use entity 實體名(結構體名);generic map 語句;port map 語句;塊配置End for;End configuration 配置名;(1) 默認連接和默認配置的書寫格式:Configuration 配置名 of 實體名 isFor 選配結構體名End for;End 配置名;(2)塊配置語句的書寫格式為:Configuration 配置名 of 實體名 isFor 選配結構體名For 塊名use 語句;元件配置;。End for;End for;End 配置名;例:Configuration cpu_con of cp

20、u isFor fragmentFor reg_arrayFor all : int_regUse configuration _reg_con;End for; End for;End for;End cpu_con ;(3) 元件的配置 書寫格式:For 元件例化標號: 元件名 generic map 語句;port map 語句;End for;注:一個元件實例只能有一個元件配置,如果需要例化的元件有很多,可以用保留字other、all來指定這些文件。5、 可見性(1) 在結構體、進程和子程序中,聲明的有效區(qū)域是自聲明語句起,到其所在的結構體、進程或子程序的結尾處。 在實

21、體中聲明的對象對整個實體可見,稱作全局聲明。在結構體中聲明的對象僅對該結構體可見,在塊、進程中聲明的對象僅對該塊或進程可見,稱為局部聲明。6、 別名聲明的書寫格式:Alias 替換名 :子類型標識符 is 目標名識別標志;7、程序包聲明和程序包體的 一般格式Package 程序包名 is-程序包聲明 說明區(qū)-聲明數(shù)據(jù)類型、元件、函數(shù)等End package 程序包名;-Package body 程序包名 is-程序包體 設計單元End package body 程序包名;注: 程序包聲明可以含有下列說明:Generic語句屬性聲明Generic 映射屬性說明子程序聲明斷開聲明(disconne

22、ction_declaration)子程序?qū)嵗暶鱑SE語句程序包聲明組模板聲明(group_template_declaration)程序包實例化聲明組聲明(group_declaration)類型、子類型說明PSL性質(zhì)聲明(PSL_property_declaration)常量、延時常量、信號、變量、文件聲明PSL序列聲明(PSL_sequence_declaration)別名聲明連接體元件聲明程序包體中可以含有下列說明:子程序聲明別名聲明子程序體屬性聲明子程序?qū)嵗暶鲗傩哉f明程序包聲明USE語句程序包體 組模板聲明程序包實例化聲明組聲明類型說明、子類型聲明函數(shù)聲明常量、變量、文件聲明

23、函數(shù)體2. 屬性(ATTRIBUTE)l 數(shù)值類屬性數(shù)值類屬性用來得到數(shù)組、塊或一般數(shù)據(jù)的相關信息,例如可用來獲取數(shù)組的長度和數(shù)值范圍等。以下是VHDL中預定義的可綜合的數(shù)值類屬性:dLOW 返回數(shù)組索引的下限值dHIGH 返回數(shù)組索引的上限值dLEFT 返回數(shù)組索引的左邊界值dRIGHT 返回數(shù)組索引的右邊界值dLENGTH 返回矢量的長度值dRANGE 返回矢量的位寬范圍dREVERSE_RANGE 按相反的次序返回矢量的位寬范圍例:定義信號 SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);則有:dLOW = 0, dHIGH = 7, dLEFT = 7,

24、dRIGHT = 0, dLENGTH = 8, dRANGE = (7 DOWNTO 0), dREVERSE_RANGE = (0 TO 7).l 信號類屬性對于信號s,有以下預定義的屬性(可綜合的):sEVENT 若s的值發(fā)生變化,則返回布爾量TRUE,否則返回FALSEsSTABLE 若s保持穩(wěn)定,則返回TRUE,否則返回FALSE例:clk的上升沿判斷IF (clkEVENT AND clk = 1)IF (NOT clkSTABLE AND clk = 1)WAIT UNTIL (clkEVENT AND clk = 1)2、 rising_edge(clk) 上升沿3、 fall

25、ing_edge(clk) 下降沿3. 通用屬性語句GENERIC語句提供了一種指定常規(guī)參數(shù)的方法,所指定的參數(shù)是靜態(tài)的,增加了代碼的可重用性,類似于Verilog中的parameter與defparam。GENERIC語句必須在ENTITY中進行聲明,由GENERIC語句指定的參數(shù)是全局的,不僅可在ENTITY內(nèi)部使用,也可在后面的整個設計中使用。語法結構如下:GENERIC (parameter_name: parameter_type := parameter_value);用GENERIC語句指定多個參數(shù):GENERIC (n: INTEGER := 8; vector: BIT_VE

26、CTOR := “0000_1111”);Wait語句WAIT; - 第一種語句格式(永遠掛起)WAIT ON 信號表; - 第二種語句格式 (信號發(fā)生變化將結束掛起)WAIT UNTIL 條件表達式; - 第三種語句格式(條件表達式中的信號發(fā)生變化切滿足條件是結束掛起)WAIT FOR 時間表達式; - 第四種語句格式, 超時等待語句(時間到結束掛起)一般地,只有WAIT_UNTIL格式的等待語句可以被綜合器接受(其余語句格式只能在VHDL仿真器中使用)敏感信號表所謂敏感信號表:就是用來存放敏感信號的列表。在進程語句中,敏感信號指那些發(fā)生改變后能引起進程語句執(zhí)行的信號。敏感信號表中可以使用一

27、個或多個信號,當其中一個或多個信號值改變時,就在進程內(nèi)部引起語句執(zhí)行。敏感信號表也可忽略,但程序中必須有其他形式的敏感信號激勵。例如wait、waitfor、wait until和wait on。-定義matrix_index 為數(shù)組TYPE matrix_index is array (3 downto 0) of std_logic_vector(7 downto 0);SIGNAL a: matrix_index;-定義了數(shù)組a4,即數(shù)組元素為a0,a1,a2,a3constant R : matrix_index:=( x"15", x"0F",

28、 x"0A", x"06");-定義了常數(shù)數(shù)組R4-使用時跟C語言中一樣,加下標就可以了,上面是用downto定義了方向,故R0是最后一項,如在R數(shù)組中R0=X"06",R3=X"15"以上不知道說清楚了沒,滿意請及時采納 我看還是補充一段參考程序吧-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;ENTITY shift_row_inv ISPORT( shi

29、ftrow_in : IN STD_LOGIC_VECTOR(127 DOWNTO 0); shiftrow_out : OUT STD_LOGIC_VECTOR(127 DOWNTO 0) );END shift_row_inv;ARCHITECTURE beh OF shift_row_inv IS- type describing the byte array consisting of 16 byte matrix arrayTYPE matrix_index is array (15 downto 0) of std_logic_vector(7 downto 0);SIGNAL b

30、, c : matrix_index;BEGIN-initial mapping of input into a byte matrix array named bmatrix_mapping:PROCESS(shiftrow_in)BEGIN FOR i IN 15 DOWNTO 0 LOOPb(15-i) <= shiftrow_in(8*i+7 DOWNTO 8*i); END LOOP;END PROCESS matrix_mapping;-shift row transformation- b(i) ->c(i)- | 0 4 8 12 | | 0 4 8 12 | (n

31、o shift) - | 1 5 9 13 | => | 13 1 5 9 | ( 1 right shift) - | 2 6 10 14 | | 10 14 2 6 | ( 2 right shift) - | 3 7 11 15 | | 7 11 15 3 | ( 3 right shift) -shifted first columnc(0) <= b(0);c(1) <= b(13);c(2) <= b(10);c(3) <= b(7);-shifted second columnc(4) <= b(4);c(5) <= b(1);c(6)

32、<= b(14);c(7) <= b(11);-shfited third columnc(8) <= b(8);c(9) <= b(5);c(10) <= b(2);c(11) <= b(15);-shifted forth columnc(12) <= b(12);c(13) <= b(9);c(14) <= b(6);c(15) <= b(3);-mapping temporary c vector into shiftedrow outputmatrix_mapping_back:PROCESS(c)BEGIN FOR i I

33、N 15 DOWNTO 0 LOOPshiftrow_out(8*i+7 DOWNTO 8*i) <= c(15-i); END LOOP;END PROCESS matrix_mapping_back;END beh;VGA時鐘/*-VGA Timing-Horizontal :- _ _- | | |-_| VIDEO |_| VIDEO (next line)-_ _ _- |_| |_|- B <-C-><-D-><-E->- <-A->-The Unit used below are pixels; - B->Sync_cycle :H_sync_cycle- C->Back_porch :hori_back- D->Visable Area- E->Front porch :hori_front- A->horizontal line total length :hori_line-Vertical :- _ _-

溫馨提示

  • 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

提交評論