VHDL硬件描述語言基礎(chǔ)_第1頁
VHDL硬件描述語言基礎(chǔ)_第2頁
VHDL硬件描述語言基礎(chǔ)_第3頁
VHDL硬件描述語言基礎(chǔ)_第4頁
VHDL硬件描述語言基礎(chǔ)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、l第六周 周一晚(提高1、2,通信001012)周二上(通信014085)周四上(通信086154)周四下(通信250282,電信001043)周五晚(電信044125)l第七周 周一下(電信125216)周二上(電信217302)周二下(電信302385)l簡介l基本結(jié)構(gòu)l基本數(shù)據(jù)類型l設(shè)計組合電路l設(shè)計時序電路l設(shè)計狀態(tài)機(jī)l大規(guī)模電路的層次化設(shè)計lFunction and Procedurel傳統(tǒng)數(shù)字電路設(shè)計方法不適合設(shè)計大規(guī)模的系統(tǒng)。工程師不容易理解原理圖設(shè)計的功能。l眾多軟件公司開發(fā)研制了具有自己特色的電路硬件描述語言(Hardware Description Language,HDL

2、),存在著很大的差異,工程師一旦選用某種硬件描述語言作為輸入工具,就被束縛在這個硬件設(shè)計環(huán)境之中。因此,硬件設(shè)計工程師需要一種強(qiáng)大的、標(biāo)準(zhǔn)化的硬件描述語言,作為可相互交流的設(shè)計環(huán)境。l美國國防部在80年代初提出了VHSIC(Very High Speed Integrated Circuit)計劃,其目標(biāo)之一是為下一代集成電路的生產(chǎn),實現(xiàn)階段性的工藝極限以及完成10萬門級以上的設(shè)計,建立一項新的描述方法。1981年提出了一種新的HDL,稱之為VHSIC Hardware Description Language,簡稱為VHDL,這種語言的成就有兩個方面:l描述復(fù)雜的數(shù)字電路系統(tǒng)l成為國際的硬件

3、描述語言標(biāo)準(zhǔn)l用于設(shè)計復(fù)雜的、多層次的設(shè)計。支持設(shè)計庫和設(shè)計的重復(fù)使用l與硬件獨立,一個設(shè)計可用于不同的硬件結(jié)構(gòu),而且設(shè)計時不必了解過多的硬件細(xì)節(jié)。l有豐富的軟件支持VHDL的綜合和仿真,從而能在設(shè)計階段就能發(fā)現(xiàn)設(shè)計中的Bug,縮短設(shè)計時間,降低成本。l更方便地向ASIC過渡lVHDL有良好的可讀性,容易理解。l運行的基礎(chǔ)計算機(jī)語言是在CPURAM構(gòu)建的平臺上運行VHDL設(shè)計的結(jié)果是由具體的邏輯、觸發(fā)器組成的數(shù)字電路l執(zhí)行方式計算機(jī)語言基本上以串行的方式執(zhí)行VHDL在總體上是以并行方式工作l驗證方式計算機(jī)語言主要關(guān)注于變量值的變化VHDL要實現(xiàn)嚴(yán)格的時序邏輯關(guān)系-eqcomp4 is a fo

4、ur bit equality comparatorLibrary IEEE;use IEEE.std_logic_1164.all;entity eqcomp4 isport(a, b:in std_logic_vector(3 downto 0); equal :out std_logic);end eqcomp4;architecture dataflow of eqcomp4 isbegin equal = 1 when a=b else 0;End dataflow;VHDL 大小寫不敏感大小寫不敏感eqcomp4.vhd包實體構(gòu)造體文件名和實體名一致每行;結(jié)尾關(guān)鍵字begin關(guān)鍵字

5、end后跟實體名關(guān)鍵字end后跟構(gòu)造體名庫l描述此設(shè)計功能輸入輸出端口(Port)l在層次化設(shè)計時,Port為模塊之間的接口l在芯片級,則代表具體芯片的管腳A3.0B3.0equalEntity eqcomp4 isport(a, b: in std_logic_vector(3 downto 0); equal:out std_logic );end eqcomp4;l輸入(Input)l輸出(Output)l雙向(Inout):可代替所有其他模式,但降低了程序的可讀性,一般用于與CPU的數(shù)據(jù)總線接口l緩沖(Buffer):與Output類似,但允許該管腳名作為一些邏輯的輸入信號lEntit

6、y test1 is port(a: in std_logic; b,c: out std_logic ); end test1; architecture a of test1 is begin b = not(a); c = b;-Error end a;lEntity test2 is port(a: in std_logic; b : buffer std_logic; c: out std_logic ); end test2; architecture a of test2 is begin b = not(a); c = b; end a;l描述實體的行為l結(jié)構(gòu)體有三種描述方式行

7、為描述(behavioral)數(shù)據(jù)流描述(dataflow)結(jié)構(gòu)化描述(structural)Architecture behavioral of eqcomp4 is begincomp: process (a,b) beginif a=b then equal = 1; else equal =0;end if; end process comp;end behavioral ;高層次的功能描述,不必考慮在電路中到底是怎樣實現(xiàn)的。Architecture dataflow1 of eqcomp4 is begin equal = 1 when a=b else 0;end dataflow

8、1;Architecture dataflow2 of eqcomp4 is beginequal = not(a(0) xor b(0) and not(a(1) xor b(1) and not(a(2) xor b(2) and not(a(3) xor b(3);end dataflow2;當(dāng)a和b的寬度發(fā)生變化時,需要修改設(shè)計,當(dāng)寬度過大時,設(shè)計非常繁瑣architecture struct of eqcomp4 isbegin U0:xnor2 port map(a(0),b(0),x(0); U1:xnor2 port map(a(1),b(1),x(1); U2:xnor2 p

9、ort map(a(2),b(2),x(2); U3:xnor2 port map(a(3),b(3),x(3); U4:and4 port map(x(0),x(1),x(2),x(3),equal);end struct;類似于電路的網(wǎng)絡(luò)表,將各個器件通過語言的形式進(jìn)行連接,與電路有一一對應(yīng)的關(guān)系。一般用于大規(guī)模電路的層次化設(shè)計時。描述方式優(yōu)點缺點適用場合結(jié)構(gòu)化描述連接關(guān)系清晰,電路模塊化清晰電路不易理解、繁瑣、復(fù)雜電路層次化設(shè)計數(shù)據(jù)流描述布爾函數(shù)定義明白不易描述復(fù)雜電路,修改不易小門數(shù)設(shè)計行為描述電路特性清楚明了進(jìn)行綜合效率相對較低大型復(fù)雜的電路模塊設(shè)計l基本標(biāo)識符由字母、數(shù)字和下劃線組

10、成l第一個字符必須是字母l最后一個字符不能是下劃線l不允許連續(xù)2個下劃線l保留字(關(guān)鍵字)不能用于標(biāo)識符l大小寫是等效的l常數(shù)(Constant)固定值,不能在程序中被改變增強(qiáng)程序的可讀性,便于修改程序在綜合后,連接到電源和地可在Library、Entity、Architecture、Process中進(jìn)行定義,其有效范圍也相應(yīng)限定Constant data_bus_width: integer := 8;l信號(Signals)代表連線,Port也是一種信號沒有方向性,可給它賦值,也可當(dāng)作輸入在Entity中和Architecture中定義設(shè)定的初始值在綜合時沒有用,只是在仿真時在開始設(shè)定一個

11、起始值。在MaxPlusII中被忽略。用 = 進(jìn)行賦值signal count:bit_vector(3 downto 0):=“0011”;l變量(Variable)臨時數(shù)據(jù),沒有物理意義只能在Process和Function中定義,并只在其內(nèi)部有效要使其全局有效,先轉(zhuǎn)換為Signal。用 := 進(jìn)行賦值 variable result : std_logic := 0;architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clkevent and clk=

12、1) then count = count + 1; if(count=0) then carryout = 1; else carryout = 0; end if; end if; end process; end rtl;architecture rtl of start is begin process(clk)variable count : integer range 0 to 7;begin if (clkevent and clk=1) then count := count + 1; if(count=0) then carryout = 1; else carryout =

13、 0; end if; end if; end process; end rtl;architecture a of start is signal tmp : std_logic;begin process(a_bus)begin tmp = 1; for i in 3 downto 0 loop tmp = a_bus(i) and tmp; end loop; carryout = tmp; end process;end a; architecture a of start is begin process(a_bus) variable tmp:std_logic; begin tm

14、p := 1; for i in 3 downto 0 loop tmp := a_bus(i) and tmp; end loop; carryout = tmp; end process;end a; l標(biāo)量類型(Scalar)枚舉(Enumeration)整數(shù)(Integer)浮點數(shù)(Float)物理(Physical)l復(fù)合類型(Composite)l列舉數(shù)據(jù)對象可能存在的值,一般用于定義狀態(tài)機(jī)的狀態(tài)Type states is (idle, start, running, pause, stop)Signal current_state : states;lIEEE1076標(biāo)準(zhǔn)中預(yù)定

15、義了兩個枚舉類型Type boolean is (False, True)Type bit is (0, 1) Signal a : bit;lIEEE1164標(biāo)準(zhǔn)中預(yù)定義了一個枚舉類型Type std_logic is(U, X,0, 1, Z, W, L, H, -);該類型能比較全面地包括數(shù)字電路中信號會出現(xiàn)的幾種狀態(tài),因此一般情況把這種類型代替bitSignal a : std_logic;注意:注意:這里的大小寫是敏感的l整數(shù)、浮點數(shù)方便用于數(shù)值方面的運算:加減乘除整數(shù)范圍:-231 231 1,經(jīng)常用于計數(shù)器實數(shù)范圍:-1.0E38+1.0E38,不被MaxPLusII支持Vari

16、able a : integer range 255 to +255;l物理類型主要用于調(diào)試lArray Types多個相同類型成員組成的隊列,一般用于定義數(shù)據(jù)總線、地址總線等。Signal a: std_logic_vector(7 downto 0);a = B“00111010”; a = X “3A”; 可自定義復(fù)合類型Type word is array (15 downto 0) of bit;Signal b : word;Type table8x4 is array (0 to 7, 0 to 3) of bit;lRecord Types相同或不同類型的元素組成,類似C中的結(jié)

17、構(gòu)具有模型抽象能力,用于描述一個功能模塊Type iocell is record Enable :bit; DataBus :bit_vector(7 downto 0); end record; singal bus : iocell; bus.Enable = 1; bus.DataBus = “00110110”;lVHDL是強(qiáng)類型語言,必須用類型轉(zhuǎn)換函數(shù)才能進(jìn)行不同類型之間的轉(zhuǎn)換type byte_size is integer range 0 to 255;signal a : byte_size;signal b : integer range 0 to 255;if a=b t

18、hen l采用以下方式 subtype byte_size is integer range 0 to 255;l提供Entity、Architecture、Type和Signals的信息。l有許多預(yù)定義的值、信號和范圍的屬性l一個最常用的屬性是eventif clkevent and clk=1 thenlleft,right, high, low,lengthtype count is integer range 0 to 127countleft = 0; countright = 127;counthigh = 127; countlow = 0;countlength = 128;l

19、邏輯運算符AND、OR、NAND、NOR、XOR、NOTl關(guān)系運算符=、/=、=l算術(shù)運算符+、-、*、/l并置(連接)運算符&l并行語句位于Process外面,同時執(zhí)行,不分位置的先后順序l并行語句包括:布爾等式: =With-select-whenWhen-elsel布爾等式 A = s(0) and s(1); B = not(y);lWith-select-when語句 With Sel_signal select Signal_name = a when Sel_signal_1, b when Sel_signal_2, c when Sel_signal_3, x whe

20、n Sel_signal_x;Signal s : std_logic_vector(1 downto 0);Signal a,b,c,d,x : std_logic;With s select x = a when “00”, b when “01”, c when “10”, d when others;lWhen-else語句 Signal_name = a when condition1 else b when condition2 else c when condition3 else x ;x = a when s=“00” else b when s=“01” else c wh

21、en s=“10” else d;Signal a,b,c,d:std_logic;Signal w,x,y,z:std_logic;x = w when a=1 else x when b=1 else y when c=1 else z when d=1 else 0;l實現(xiàn)優(yōu)先級編碼器 encode = “111” when D(7) = 1 else “110” when D(6) = 1 else “101” when D(5) = 1 else “100” when D(4) = 1 else “011” when D(3) = 1 else “010” when D(2) = 1

22、 else “001” when D(1) = 1 else “000” when D(0) = 1 else “000”;lWhen-else語句條件語句可以是一個簡單的表達(dá)式lWith-select-when則不能采用表達(dá)式作為條件 a = “0000” when state=idle and state=1 else “0001” when state=idle and state=0 else b when state=running and state=1 else a;lProcess,F(xiàn)unction,Procedure中的語句都是順序執(zhí)行,以Process為例lProcess與

23、Process之間,與其他并行語句之間都是并行的關(guān)系If-then-elseCase-whenlIf-then-elseIf(condition1) then do something; elsif(condition2) then else do something different; end if;Process(addr)Begin step = 0; if(addr = X “F”) then step = 1; end if;End process;Process(addr)Begin if(addr = X “F”) then step = 1; else step = 0; end if;End process;Process(addr)Begin if(addr = X “F”) then step = 1; end if;End process;Step = addr(3) * addr(2) * Addr(1) * addr(0) + stepl用于作地址譯碼InRam = 0; Periph1 = 0; Periph2 = 0; OutRam= 0; EEPRom = X “0

溫馨提示

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

最新文檔

評論

0/150

提交評論