版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一次上機(jī)安排,第六周 周一晚(提高1、2,通信001~012)周二上(通信014~085)周四上(通信086~154)周四下(通信250~282,電信001~043)周五晚(電信044~125)第七周 周一下(電信125~216)周二上(電信217~302)周二下(電信302~385),VHDL硬件描述語(yǔ)言基礎(chǔ),簡(jiǎn)介基本結(jié)構(gòu)基本數(shù)據(jù)類(lèi)型設(shè)計(jì)組合電路設(shè)計(jì)時(shí)序電路設(shè)計(jì)狀態(tài)機(jī)大規(guī)模電路的層次化設(shè)計(jì)Functi
2、on and Procedure,簡(jiǎn)介--背景,傳統(tǒng)數(shù)字電路設(shè)計(jì)方法不適合設(shè)計(jì)大規(guī)模的系統(tǒng)。工程師不容易理解原理圖設(shè)計(jì)的功能。眾多軟件公司開(kāi)發(fā)研制了具有自己特色的電路硬件描述語(yǔ)言(Hardware Description Language,HDL),存在著很大的差異,工程師一旦選用某種硬件描述語(yǔ)言作為輸入工具,就被束縛在這個(gè)硬件設(shè)計(jì)環(huán)境之中。因此,硬件設(shè)計(jì)工程師需要一種強(qiáng)大的、標(biāo)準(zhǔn)化的硬件描述語(yǔ)言,作為可相互交流的設(shè)計(jì)環(huán)境。,簡(jiǎn)介--
3、背景,美國(guó)國(guó)防部在80年代初提出了VHSIC(Very High Speed Integrated Circuit)計(jì)劃,其目標(biāo)之一是為下一代集成電路的生產(chǎn),實(shí)現(xiàn)階段性的工藝極限以及完成10萬(wàn)門(mén)級(jí)以上的設(shè)計(jì),建立一項(xiàng)新的描述方法。1981年提出了一種新的HDL,稱(chēng)之為VHSIC Hardware Description Language,簡(jiǎn)稱(chēng)為VHDL,這種語(yǔ)言的成就有兩個(gè)方面:描述復(fù)雜的數(shù)字電路系統(tǒng)成為國(guó)際的硬件描述語(yǔ)言標(biāo)準(zhǔn),VH
4、DL的優(yōu)點(diǎn),用于設(shè)計(jì)復(fù)雜的、多層次的設(shè)計(jì)。支持設(shè)計(jì)庫(kù)和設(shè)計(jì)的重復(fù)使用與硬件獨(dú)立,一個(gè)設(shè)計(jì)可用于不同的硬件結(jié)構(gòu),而且設(shè)計(jì)時(shí)不必了解過(guò)多的硬件細(xì)節(jié)。有豐富的軟件支持VHDL的綜合和仿真,從而能在設(shè)計(jì)階段就能發(fā)現(xiàn)設(shè)計(jì)中的Bug,縮短設(shè)計(jì)時(shí)間,降低成本。更方便地向ASIC過(guò)渡VHDL有良好的可讀性,容易理解。,VHDL與計(jì)算機(jī)語(yǔ)言的區(qū)別,運(yùn)行的基礎(chǔ)計(jì)算機(jī)語(yǔ)言是在CPU+RAM構(gòu)建的平臺(tái)上運(yùn)行VHDL設(shè)計(jì)的結(jié)果是由具體的邏輯、觸發(fā)器組
5、成的數(shù)字電路執(zhí)行方式計(jì)算機(jī)語(yǔ)言基本上以串行的方式執(zhí)行VHDL在總體上是以并行方式工作驗(yàn)證方式計(jì)算機(jī)語(yǔ)言主要關(guān)注于變量值的變化VHDL要實(shí)現(xiàn)嚴(yán)格的時(shí)序邏輯關(guān)系,--eqcomp4 is a four bit equality comparatorLibrary IEEE;use IEEE.std_logic_1164.all;entity eqcomp4 isport(a, b:in std_logic_vector
6、(3 downto 0); equal :out std_logic);end eqcomp4;architecture dataflow of eqcomp4 isbegin equal <= ‘1’ when a=b else ‘0’;End dataflow;,VHDL 大小寫(xiě)不敏感,eqcomp4.vhd,包,,實(shí)體,,構(gòu)造體,,文件名和實(shí)體名一致,,,每行;結(jié)尾,,關(guān)鍵字begi
7、n,關(guān)鍵字end后跟實(shí)體名,關(guān)鍵字end后跟構(gòu)造體名,,,,庫(kù),,實(shí)體(Entity),描述此設(shè)計(jì)功能輸入輸出端口(Port)在層次化設(shè)計(jì)時(shí),Port為模塊之間的接口在芯片級(jí),則代表具體芯片的管腳,,,,A[3..0],B[3..0],,equal,Entity eqcomp4 isport(a, b: in std_logic_vector(3 downto 0); equal:out std_logic
8、 );end eqcomp4;,實(shí)體--端口的模式,輸入(Input)輸出(Output)雙向(Inout):可代替所有其他模式,但降低了程序的可讀性,一般用于與CPU的數(shù)據(jù)總線接口緩沖(Buffer):與Output類(lèi)似,但允許該管腳名作為一些邏輯的輸入信號(hào),Out與Buffer的區(qū)別,Entity test1 is port(a: in std_logic; b,c: out s
9、td_logic ); end test1; architecture a of test1 is begin b <= not(a); c <= b;--Error end a;,Entity test2 is port(a: in std_logic; b : buffer std_logic
10、; c: out std_logic ); end test2; architecture a of test2 is begin b <= not(a); c <= b; end a;,結(jié)構(gòu)體(Architecture),描述實(shí)體的行為結(jié)構(gòu)體有三種描述方式行為描述(behavioral)數(shù)據(jù)流描述
11、(dataflow)結(jié)構(gòu)化描述(structural),結(jié)構(gòu)體--行為描述,Architecture behavioral of eqcomp4 is begincomp: process (a,b) beginif a=b then equal <= ‘1’; else equal <=‘0’;end if; end process comp;end be
12、havioral ;,高層次的功能描述,不必考慮在電路中到底是怎樣實(shí)現(xiàn)的。,結(jié)構(gòu)體--數(shù)據(jù)流描述描述輸入信號(hào)經(jīng)過(guò)怎樣的變換得到輸出信號(hào),Architecture dataflow1 of eqcomp4 is begin equal <= ‘1’ when a=b else ‘0’;end dataflow1;,Architecture dataflow2 of eqcomp4 is beginequal <
13、;= 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í),需要修改設(shè)計(jì),當(dāng)寬度過(guò)大時(shí),設(shè)計(jì)非常繁瑣,結(jié)構(gòu)體--結(jié)構(gòu)化描述,archi
14、tecture 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 port map(a(2),b(2),x(2)); U3:xnor2 port map(a(3),b(3),x(3)); U4:and4 port map(x(0),x(
15、1),x(2),x(3),equal);end struct;,類(lèi)似于電路的網(wǎng)絡(luò)表,將各個(gè)器件通過(guò)語(yǔ)言的形式進(jìn)行連接,與電路有一一對(duì)應(yīng)的關(guān)系。一般用于大規(guī)模電路的層次化設(shè)計(jì)時(shí)。,三種描述方式的比較,VHDL標(biāo)識(shí)符(Identifiers),基本標(biāo)識(shí)符由字母、數(shù)字和下劃線組成第一個(gè)字符必須是字母最后一個(gè)字符不能是下劃線不允許連續(xù)2個(gè)下劃線保留字(關(guān)鍵字)不能用于標(biāo)識(shí)符大小寫(xiě)是等效的,VHDL數(shù)據(jù)對(duì)象(Data Objects
16、),常數(shù)(Constant)固定值,不能在程序中被改變?cè)鰪?qiáng)程序的可讀性,便于修改程序在綜合后,連接到電源和地可在Library、Entity、Architecture、Process中進(jìn)行定義,其有效范圍也相應(yīng)限定Constant data_bus_width: integer := 8;,VHDL數(shù)據(jù)對(duì)象(Data Objects),信號(hào)(Signals)代表連線,Port也是一種信號(hào)沒(méi)有方向性,可給它賦值,也可當(dāng)作輸入
17、在Entity中和Architecture中定義設(shè)定的初始值在綜合時(shí)沒(méi)有用,只是在仿真時(shí)在開(kāi)始設(shè)定一個(gè)起始值。在Max+PlusII中被忽略。用 <= 進(jìn)行賦值signal count:bit_vector(3 downto 0):=“0011”;,VHDL數(shù)據(jù)對(duì)象(Data Objects),變量(Variable)臨時(shí)數(shù)據(jù),沒(méi)有物理意義只能在Process和Function中定義,并只在其內(nèi)部有效要使其
18、全局有效,先轉(zhuǎn)換為Signal。用 := 進(jìn)行賦值 variable result : std_logic := ‘0’;,信號(hào)與變量的區(qū)別,architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clk'event and clk='1&
19、#39;) then count <= count + 1; if(count=0) then carryout <= '1'; else carryout <= '0'; end if; end if; end proces
20、s; end rtl;,architecture rtl of start is begin process(clk)variable count : integer range 0 to 7;begin if (clk'event and clk='1') then count := count + 1; if(count=0) then
21、 carryout <= '1'; else carryout <= '0'; end if; end if; end process; end rtl;,信號(hào)與變量的區(qū)別,architecture a of start is signal tmp : std_logi
22、c;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 beg
23、in process(a_bus) variable tmp:std_logic; begin tmp := '1'; for i in 3 downto 0 loop tmp := a_bus(i) and tmp; end loop; carryout <= tmp; end process;en
24、d a;,VHDL數(shù)據(jù)類(lèi)型,標(biāo)量類(lèi)型(Scalar)枚舉(Enumeration)整數(shù)(Integer)浮點(diǎn)數(shù)(Float)物理(Physical)復(fù)合類(lèi)型(Composite),VHDL數(shù)據(jù)類(lèi)型--枚舉,列舉數(shù)據(jù)對(duì)象可能存在的值,一般用于定義狀態(tài)機(jī)的狀態(tài)Type states is (idle, start, running, pause, stop)Signal current_state : states;IEEE
25、1076標(biāo)準(zhǔn)中預(yù)定義了兩個(gè)枚舉類(lèi)型Type boolean is (False, True)Type bit is (‘0’, ‘1’) Signal a : bit;,VHDL數(shù)據(jù)類(lèi)型--枚舉,IEEE1164標(biāo)準(zhǔn)中預(yù)定義了一個(gè)枚舉類(lèi)型Type std_logic is(‘U’, ‘X’,‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’);該
26、類(lèi)型能比較全面地包括數(shù)字電路中信號(hào)會(huì)出現(xiàn)的幾種狀態(tài),因此一般情況把這種類(lèi)型代替bitSignal a : std_logic;注意:這里的大小寫(xiě)是敏感的,VHDL數(shù)據(jù)類(lèi)型,整數(shù)、浮點(diǎn)數(shù)方便用于數(shù)值方面的運(yùn)算:加減乘除整數(shù)范圍:-231 ~231 –1,經(jīng)常用于計(jì)數(shù)器實(shí)數(shù)范圍:-1.0E38~+1.0E38,不被Max+PLusII支持Variable a : integer range –255 to +255;物理類(lèi)
27、型主要用于調(diào)試,VHDL數(shù)據(jù)類(lèi)型--復(fù)合類(lèi)型,Array Types多個(gè)相同類(lèi)型成員組成的隊(duì)列,一般用于定義數(shù)據(jù)總線、地址總線等。Signal a: std_logic_vector(7 downto 0);a <= B“00111010”; a <= X “3A”; 可自定義復(fù)合類(lèi)型Type word is array (15 downto 0) of bit;Signal b : word;
28、Type table8x4 is array (0 to 7, 0 to 3) of bit;,VHDL數(shù)據(jù)類(lèi)型--復(fù)合類(lèi)型,Record Types相同或不同類(lèi)型的元素組成,類(lèi)似C中的結(jié)構(gòu)具有模型抽象能力,用于描述一個(gè)功能模塊Type iocell is record Enable :bit; DataBus :bit_vector(7 downto 0); end record;
29、singal bus : iocell; bus.Enable <= ‘1’; bus.DataBus <= “00110110”;,VHDL數(shù)據(jù)類(lèi)型及子類(lèi)型Types And Subtypes,VHDL是強(qiáng)類(lèi)型語(yǔ)言,必須用類(lèi)型轉(zhuǎn)換函數(shù)才能進(jìn)行不同類(lèi)型之間的轉(zhuǎn)換type byte_size is integer range 0 to 255;signal a : byte_size;signal b :
30、integer range 0 to 255;if a=b then ……采用以下方式 subtype byte_size is integer range 0 to 255;,屬性(Attributes),提供Entity、Architecture、Type和Signals的信息。有許多預(yù)定義的值、信號(hào)和范圍的屬性一個(gè)最常用的屬性是’eventif clk’event and clk=‘1’ then’left,’
31、right, ’high, ’low,’lengthtype count is integer range 0 to 127count’left = 0; count’right = 127;count’high = 127; count’low = 0;count’length = 128;,VHDL運(yùn)算符,邏輯運(yùn)算符AND、OR、NAND、NOR、XOR、NOT關(guān)系運(yùn)算符=、/=、、=算術(shù)運(yùn)算符+、-、*、/并置
32、(連接)運(yùn)算符&,組合電路--并行語(yǔ)句(Concurrent),并行語(yǔ)句位于Process外面,同時(shí)執(zhí)行,不分位置的先后順序并行語(yǔ)句包括:布爾等式: <=With-select-whenWhen-else布爾等式 A <= s(0) and s(1); B <= not(y);,組合電路--并行語(yǔ)句,With-select-when語(yǔ)句 With Sel_signal sele
33、ct Signal_name <= a when Sel_signal_1, b when Sel_signal_2, c when Sel_signal_3,… x when Sel_signal_x;,Signal s : std_log
34、ic_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;,組合電路--并行語(yǔ)句,When-else語(yǔ)句 Signal_name <= a w
35、hen condition1 else b when condition2 else c when condition3 else … x ;,x <= a when s=“00” else b when s=“01” else
36、 c when 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’;,組合電路--
37、并行語(yǔ)句,實(shí)現(xiàn)優(yōu)先級(jí)編碼器 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
38、 “011” when D(3) = ‘1’ else “010” when D(2) = ‘1’ else “001” when D(1) = ‘1’ else “000” when D(0) = ‘1’ else “000”;,組合
39、電路--并行語(yǔ)句,When-else語(yǔ)句條件語(yǔ)句可以是一個(gè)簡(jiǎn)單的表達(dá)式With-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
40、 a;,組合電路--順序語(yǔ)句(Sequential),Process,F(xiàn)unction,Procedure中的語(yǔ)句都是順序執(zhí)行,以Process為例Process與Process之間,與其他并行語(yǔ)句之間都是并行的關(guān)系If-then-elseCase-when,組合電路--順序語(yǔ)句,If-then-elseIf(condition1) then do something; elsif(condition2)
41、then … else do something different; end if;,,組合電路--順序語(yǔ)句,Process(addr)Begin step <= ‘0’; if(addr = X “F”) then step <= ‘1’; end if;End process;,Process(addr)Begin if(addr = X
42、 “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) *
43、addr(2) * Addr(1) * addr(0) + step,組合電路--順序語(yǔ)句,用于作地址譯碼InRam = X “0000” and addr = X “4000” and addr = X “4008” and addr = X “8000” and addr = X “C000” then EEPRom <= ‘1’; end if;,組合電路--順序語(yǔ)句,Case-when
44、case sel_signal is when value_1 => (do sth) when value_2 => (do sth) … when value_last => (do sth) end case;,組合電路--順序語(yǔ)句,實(shí)現(xiàn)數(shù)碼
45、管譯碼器Process(address) begin case address is when “0000” => decode decode decode decode decode <= X “00”; end case; end process;,幾種語(yǔ)句的比較,同步時(shí)序邏輯電路,Process(clk)begin
46、 if(clk’event and clk=‘1’) then q <= d; end if;end process;,Process(clk)begin if(clk=‘1’) then q <= d; end if;end process;,D觸發(fā)器,緩沖器,實(shí)現(xiàn)T觸發(fā)器,Process(clk)begin if(clk’event
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
評(píng)論
0/150
提交評(píng)論