可編程邏輯電路設(shè)計(jì)教學(xué)組_第1頁
可編程邏輯電路設(shè)計(jì)教學(xué)組_第2頁
可編程邏輯電路設(shè)計(jì)教學(xué)組_第3頁
可編程邏輯電路設(shè)計(jì)教學(xué)組_第4頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、可編程邏輯電路設(shè)計(jì)教學(xué)組可編程邏輯電路設(shè)計(jì)教學(xué)組二二七年七年Hardware Description Language (HDL)q 數(shù)字系統(tǒng)的描述方式數(shù)字系統(tǒng)的描述方式q HDL語言既包含一些高級程序設(shè)計(jì)語言的結(jié)構(gòu)形式,也兼顧描述硬件線路語言既包含一些高級程序設(shè)計(jì)語言的結(jié)構(gòu)形式,也兼顧描述硬件線路連接的構(gòu)件,可以支持從系統(tǒng)級到門級的各個(gè)層次的行為描述和結(jié)構(gòu)描述。連接的構(gòu)件,可以支持從系統(tǒng)級到門級的各個(gè)層次的行為描述和結(jié)構(gòu)描述。q HDL語言基本特征是并發(fā)的(硬件的基本特征),但也提供順序功能的描語言基本特征是并發(fā)的(硬件的基本特征),但也提供順序功能的描述手段。述手段。q HDL語言特點(diǎn):語

2、言特點(diǎn):v 文本輸入v 適于設(shè)計(jì)大系統(tǒng)表達(dá)功能,隱藏細(xì)節(jié)v 高表達(dá)效率v 易修改、開發(fā)周期短v 通用語言,模塊可重用性好q 常用常用HDL語言:語言:VHDL、Verilog-HDL、AHDL 設(shè)計(jì)層次設(shè)計(jì)層次行為描述行為描述結(jié)構(gòu)描述結(jié)構(gòu)描述系統(tǒng)級系統(tǒng)級算法流程圖算法流程圖由由Cpu或控制器、存儲器等組成的邏或控制器、存儲器等組成的邏輯框圖輯框圖寄存器傳輸級(寄存器傳輸級(RTL)數(shù)據(jù)流圖、真值表、狀態(tài)機(jī)、狀態(tài)圖數(shù)據(jù)流圖、真值表、狀態(tài)機(jī)、狀態(tài)圖(表表)寄存器、寄存器、ALU、MUX、ROM等組成等組成的邏輯圖的邏輯圖邏輯門級邏輯門級布爾方程、真值表、卡諾圖布爾方程、真值表、卡諾圖邏輯門、觸發(fā)器

3、、鎖存器等構(gòu)成的邏邏輯門、觸發(fā)器、鎖存器等構(gòu)成的邏輯圖(網(wǎng)表)輯圖(網(wǎng)表)VHDL語言語言q Very high speed integrated circuit HDLq IEEE工業(yè)標(biāo)準(zhǔn)工業(yè)標(biāo)準(zhǔn)HDL語言語言q 可支持仿真與綜合可支持仿真與綜合q 兩個(gè)版本:兩個(gè)版本:v 10761987v 10761993VHDL程序結(jié)構(gòu)程序結(jié)構(gòu)q 1、USE定義區(qū)定義區(qū)v Library定義所使用的元件庫v Package定義所使用的元件庫中的包q 2、Entity定義區(qū):定義電路實(shí)體的定義區(qū):定義電路實(shí)體的I/O接口規(guī)格接口規(guī)格q 3、Architecture定義區(qū):描述電路內(nèi)部具體功能定義區(qū):描述電

4、路內(nèi)部具體功能v Component定義區(qū)v 信號定義v 行為描述/數(shù)據(jù)流描述/結(jié)構(gòu)描述q 4、Configuration定義區(qū):決定使用哪一個(gè)定義區(qū):決定使用哪一個(gè)architecture(非必須)(非必須)Use定義區(qū)定義區(qū)Library IEEE;-庫定義庫定義Use IEEE.std_logic_1164.all;-包引用包引用Use IEEE.std_logic_arith.all;-包引用包引用引用語句的用法:引用語句的用法:Library ,;Use lib_name.pack_name.object;PackagesPackage isConstant Decclaration

5、sType DeclarationsSignal DeclarationsSubprogram DeclarationsComponent DeclarationsOther DeclarationsEnd ;(1076-1987)End Package ;(1076-1993)Package Body isConstant DeclarationsType DeclarationsSubprogram BodyEnd Package ;(1076-1987)End Package Body (1076-1993)Package Examplepackage package_example i

6、stype life is (sleeping, working, eating, entertaiment, otheractions);subtype uint4 is integer range 0 to 15;subtype uint5 is integer range 0 to 31;function compare(a, b: integer) return boolean;end package_example;package body package_example isfunction compare(a,b: integer) return boolean isvariab

7、le temp:boolean;beginif ab thentemp:=true;elsetemp:=false;end if;return temp;end compare;end package_example;Librariesq 包括一系列的包括一系列的packagesq 隱含隱含Libraries: 不用聲明,自動(dòng)引用不用聲明,自動(dòng)引用v STD: Standard:定義bit, Boolean, integer, real和time以及支持它們的運(yùn)算符。 Textio:定義文件操作。v Work: v IEEE: Std_logic_1164 Std_logic_arith St

8、d_logic_signed Std_logic_unsignedv 其它庫: Altera的元件庫 用戶自定義庫Entity(實(shí)體)(實(shí)體)q Entity定義語法Entity isgeneric declarationsport declarationsEnd ;q Entity ExampleEntity adder isgeneric(data_width:integer:=4 );port( add_a, add_b: in std_logic_vector(data_width-1 downto 0);sum: out std_logic_vector(data_width dow

9、nto 0) );End adder;Generic & Port Declarationsq Generic Declarationsv 用于將參數(shù)傳入Entity。例如:數(shù)據(jù)線寬度,器件的延時(shí)參數(shù)、負(fù)載電容電阻、驅(qū)動(dòng)能力、功耗等等。q Port Declarations: port_name: : v :管腳的模式 In (輸入) Out (輸出) Buffer (輸出帶內(nèi)部反饋) Inout (雙向)v : 數(shù)據(jù)類型 Boolean: False, True Bit: 0, 1 Std_logic: X, 0, 1, Z, -, W, L, H,支持多信號判決 Std_ulogi

10、c: 與Std_logic類型一樣,不支持多信號判決 Bit_vector & std_logic_vector: Integer: NaturalPositive Real: time 自定義數(shù)據(jù)類型:如數(shù)組等Architecture(結(jié)構(gòu)體)(結(jié)構(gòu)體)q 描述設(shè)計(jì)的功能或者結(jié)構(gòu)描述設(shè)計(jì)的功能或者結(jié)構(gòu)q 必須與某個(gè)必須與某個(gè)entity相聯(lián)系相聯(lián)系q 一個(gè)一個(gè)entity可以對應(yīng)多個(gè)可以對應(yīng)多個(gè)architecture(編譯時(shí)通過編譯時(shí)通過configuration來指定來指定)q Architecture中的各個(gè)語句是并發(fā)執(zhí)行的,對應(yīng)于電路硬中的各個(gè)語句是并發(fā)執(zhí)行的,對應(yīng)于電路硬件

11、中的不同部件件中的不同部件q Architecture的描述風(fēng)格的描述風(fēng)格v 行為描述描述實(shí)體的功能,RTL級 算法描述 數(shù)據(jù)流描述v 結(jié)構(gòu)描述描述實(shí)體的結(jié)構(gòu),門級v 混合描述Architecture組成組成q Architecture定義定義ARCHITECTURE arch_name OF entity_name ISsignal declarations;constant declarations;type & subtype declarations;component declarations;subprogram declarations;BEGINProcess Stat

12、ements;Concurrent Procedure Calls;Concurrent Signal Assignment;Conditional Signal Assignment;Selected Signal Assignment;Component Instantiation Statements;Generate Statements;END arch_name;結(jié)構(gòu)描述例子結(jié)構(gòu)描述例子半加器半加器Architecture struct_ha of half_adder iscomponent and_gate port( a1,a2: in std_logic; a3: out

13、std_logic);end component;component xor_gate port( a1,a2: in std_logic; a3: out std_logic);end component;Beging1: and_gate port map(a,b,c);g2: xor_gate port map(a,b,s);End struct_ha;行為描述例子行為描述例子半加器半加器q 算法描述算法描述Architecture behave_ha of half_adder isBegin g1:process(a,b)begin if a=1 and b=1 thenc=1; e

14、lsec=0; end if;end process; g2:process(a,b)begin if a=1 and b=0 thenc=1; elsif a=0 and b=1c=1; elsec=0; end if;end process;End struct_ha;q 數(shù)據(jù)流描述數(shù)據(jù)流描述Architecture behave_ha of half_adder isBeginc= a and b;s=a xor b;End struct_ha;Configurationq 用于將用于將entity和和architecture聯(lián)系起來聯(lián)系起來q 廣泛應(yīng)用于仿真環(huán)境廣泛應(yīng)用于仿真環(huán)境q 被

15、綜合器有限支持或者不支持被綜合器有限支持或者不支持q 語法:語法:Configuration of isfor end for;End;數(shù)據(jù)對象數(shù)據(jù)對象q Constant(常數(shù)常數(shù))v 定義語法: Constant : := v 用符號代表常數(shù),增加程序的可讀性和可維護(hù)性v 一經(jīng)定義,不得更改q Signal(信號信號)v 定義語法: Signal : := v 對應(yīng)于電路中的某一節(jié)點(diǎn)v 通常定義于entity、architecture或者package中,全局使用v 可再賦值 : “ =”v 進(jìn)程中對信號的賦值在該進(jìn)程結(jié)尾才生效q Variable(變量變量)v 定義語法: Variabl

16、e : :=v 不對應(yīng)于具體電路中的節(jié)點(diǎn),一般用于計(jì)算用途v 只局限于進(jìn)程和子程序中定義并使用v 可再賦值: “:=”v 對變量的賦值立即生效信號和變量的區(qū)別信號和變量的區(qū)別例例1q一段程序:a, b: in std_logic;x, y: out std_logic;signal temp: std_logic;process (a, b, temp)begintemp=a;x=temp;temp=b;y=temp;end process;q等價(jià)電路圖:q另一段程序:a, b: in std_logic;x, y: out std_logic;process (a, b, temp) var

17、iable temp: std_logic;begintemp:=a;x=temp;temp:=b;y=temp;end process;q等價(jià)電路圖:信號和變量的區(qū)別信號和變量的區(qū)別例例2q一段程序:D, clk: in std_logic;x: out std_logic;signal temp: std_logic;process (clk)begin if (clkevent and clk=1) thentemp=D;x=temp; end if;end process;q等價(jià)電路圖:q另一段程序:D, clk: in std_logic;x: out std_logic;proce

18、ss (clk) variable temp: std_logic; begin if (clkevent and clk=1) thentemp:=D;x=temp; end if;end process;q等價(jià)電路圖:數(shù)據(jù)類型數(shù)據(jù)類型q 基本數(shù)據(jù)類型基本數(shù)據(jù)類型v 邏輯類型: bit, boolean, std_logic, std_ulogic, std_logic_vector, bit_vectorv 整數(shù)類型: Integer(及其子類如Natural, Positive), unsigned, signedv 實(shí)數(shù)類型: Realq 高級數(shù)據(jù)類型高級數(shù)據(jù)類型v 枚舉類型: 定義語

19、法:TYPE IS (, , ) 使程序易讀,例如在定義狀態(tài)機(jī)時(shí)v 數(shù)組類型: 定義語法:TYPE IS ARRAY (integer1 DOWNTO integer2) OF 多用于定義ROM、RAM等運(yùn)算符運(yùn)算符q 關(guān)系運(yùn)算符:關(guān)系運(yùn)算符:v = = = /=q 邏輯運(yùn)算符:邏輯運(yùn)算符:v and, or, not, nand, nor, xorq 算術(shù)運(yùn)算符:算術(shù)運(yùn)算符:v * / MOD REM * ABSq 其他運(yùn)算符:其他運(yùn)算符:v (正號) (負(fù)號) &(連接) q 運(yùn)算符重載運(yùn)算符重載v 對于不同的數(shù)據(jù)類型定義同樣一個(gè)運(yùn)算,其實(shí)際操作可能不同。例如+(加)運(yùn)算,可以對整

20、數(shù)使用,也可以對std_loigc_vector等類型用(在std_logic_arith包中定義)。v 通常定義與package中。v IEEE的package中定義了大量的重載運(yùn)算符Vector信號的分解與合并信號的分解與合并Architecture rtl of test issignal a: std_logic_vector(3 downto 0);signal b: std_logic_vector(0 to 3);signal c: std_logic_vector(0 to 1);signal d: std_logic_vector(1 downto 0);Beginc=a(2

21、 downto 1);b=A(3) & D & 1End rtl;a(3)a(2)a(1)a(0)b(0)b(1)b(2)b(3)c(0) d(1)c(1) d(0)1并發(fā)語句并發(fā)語句q VHDL程序的結(jié)構(gòu)體中的各個(gè)語句是并發(fā)的,代表電路程序的結(jié)構(gòu)體中的各個(gè)語句是并發(fā)的,代表電路的不同節(jié)點(diǎn),它們是同時(shí)運(yùn)作的的不同節(jié)點(diǎn),它們是同時(shí)運(yùn)作的q 并發(fā)語句的順序不影響其執(zhí)行結(jié)果并發(fā)語句的順序不影響其執(zhí)行結(jié)果q 并發(fā)語句列表:并發(fā)語句列表:v 直接信號賦值: =v 條件信號賦值:when-elsev 選擇信號賦值:selectwhenv 進(jìn)程:processv 斷言:assert面向仿真的

22、語句,不能綜合v 塊語句:Blockv Component語句v For-GenerateWhen-elseq 語法:語法: = when else when else. when else ;q 特點(diǎn):特點(diǎn):v 各個(gè)條件可以不互斥v 主要用于譯碼器、多路復(fù)接器和解復(fù)接器q 例子:例子: q = a when sel=“00” elseb when sel=“01” elsec when sel=“10” elsed;abcdselqSelect-whenq 語法:語法:with select = when , when ,. when others;q 特點(diǎn):特點(diǎn):v 各個(gè)條件必須互斥v 主

23、要用于譯碼器、多路復(fù)接器和解復(fù)接器q 范例:范例: with sel selectq = a when “00”,b when “01”,c when “10”,d when others;abcdselqBlockq 用于將電路劃分成幾個(gè)模用于將電路劃分成幾個(gè)模塊,增加程序的可讀性塊,增加程序的可讀性q 語法:語法: blockBeginEnd block ;q 范例:范例:Library ieee;Use ieee.std_logic_1164.all;Entity half_addsub isport(a,b: in std_logic;sum, carry: out std_logic

24、;diff, borrow: out std_logic);End half_addsub;Architecture rtl of half_addsub isBeginHalf_adder: blocksum=a xor b;carry=a and b;End block half_adder;Half_sub: blockdiff=a xor b;borrow=(not a) and b;End block half_sub;End rtl;Componentq Component定義語句:與定義語句:與entity類似類似 Component generic ( generic_decl

25、arations );port ( port_declarations);End component;q Component例化語句:例化語句:: generic map ( generic_mapping)port map (port_mapping);q Port map語句兩種格式:語句兩種格式:v Port map ( =, =, );v Port map ( , , ); Component范例范例4位全加器位全加器Library ieee;Use ieee.std_logic_1164.all;Entity full_adder_4 isport( A, B: in std_log

26、ic_vector(3 downto 0); ci: in std_logic; C: out std_logic_vector(3 downto 0); co: out std_logic);End full_adder_4;Architecture rtl of full_adder_4 iscomponent full_adder_1port(a,b: in std_logic;ci: in std_logic;c: out std_logic;co: out std_logic);end component;signal t: std_logic_vector(2 downto 0);

27、BeginU0: full_adder_1port map(A(0),B(0),ci,C(0),t(0);U1: full_adder_1port map(A(1),B(1),t(0),C(1),t(1);U2: full_adder_1port map(A(2),B(2),t(1),C(2),t(2);U3: full_adder_1port map(A(3),B(3),t(2),C(3),co);End rtl;ciFull_adder_1A(0) B(0)Full_adder_1t(0)A(1) B(1)Full_adder_1t(1)A(2) B(2)Full_adder_1t(2)A

28、(3) B(3)coC(0)C(1)C(2)C(3)For-Generateq 例化多個(gè)相同的例化多個(gè)相同的Componentq 語法:語法:: For i in to generatecomponent例化語句;End generate ;q 范例范例: 4位全加器位全加器Architecture rtl of full_adder_4 is;signal t: std_logic_vector(4 downto 0);Begingen: for I in 0 to 3 generateadd1: full_adder_1 port map(A(i),B(i),t(i),C(i),t(i+1

29、);end generate gen;t(0)=ci;co=t(4);End rtl;q If-Generate語句可以條件生成。語句可以條件生成。q 生成語句可以嵌套。生成語句可以嵌套。順序語句順序語句q 可用于進(jìn)程、函數(shù)和子程序中可用于進(jìn)程、函數(shù)和子程序中q 依次執(zhí)行,語句順序影響其執(zhí)行結(jié)果依次執(zhí)行,語句順序影響其執(zhí)行結(jié)果q 順序語句的執(zhí)行需要被激活順序語句的執(zhí)行需要被激活q 順序語句列表:順序語句列表:v 變量和信號賦值::= =v If語句:if-then-elsif-elsev Case語句:case-whenv Loop語句v Wait語句Processq 特點(diǎn):特點(diǎn):v Proc

30、ess語句本身是一個(gè)并發(fā)式語句,但其內(nèi)部包含的是順序語句v 僅當(dāng)進(jìn)程的某個(gè)敏感信號發(fā)生變化時(shí),進(jìn)程內(nèi)部的順序語句塊才被激活依次執(zhí)行;否則進(jìn)程處于被掛起的狀態(tài)。v 進(jìn)程內(nèi)的變量在進(jìn)程被掛起和再次激活時(shí),保持原值。v 可以通過兩種方式定義敏感信息:用敏感信息表或者用wait語句。但這兩者不能同時(shí)出現(xiàn)在一個(gè)進(jìn)程中(wait語句可以有多個(gè))。q 定義語法:定義語法:Process()constant declaration;type declarations;variable declarations;Beginsequential statement #1;sequential statement

31、#2; .sequential statement #n;End process;Process范例范例Process(clk)Beginif (clkevent and clk=1) thenq=d;end if;End process;ProcessBeginwait on clk;if clkevent and clk=1 thennq=not d;end if;End process;Process敏感列表敏感列表(1)正常的代碼Process (ck, d)Beginif ck=1 thenq=d;end if;End process;Max+plus II綜合結(jié)果:LatchFPG

32、A Express綜合結(jié)果: Latch(2)危險(xiǎn)的代碼Process (ck)Beginif ck=1 thenq=d;end if;End process;Max+plus II綜合結(jié)果: D觸發(fā)器FPGA Express綜合結(jié)果: LatchIf語句語句q 語法:語法:If thensequential statements;Elsif thensequential statements; .Elsesequential statements;End if;q 對應(yīng)于對應(yīng)于when-else語句語句q 范例范例:if sel=“00” thenq=a;elsif sel=“01” the

33、nq=b;elsif sel=“10” thenq=c;elseq=d;end if;Case語句語句q 語法:語法:case is when =sequential statements; when =sequential statements; . when others=sequential statements;end case;q 對應(yīng)于對應(yīng)于select-when語句語句q 范例范例:case sel is when “00” =q q q q=d;end case;Loop語句語句q 無限循環(huán):使用無限循環(huán):使用Exit退出循環(huán)退出循環(huán)v 語法:: Loopsequential

34、statements;exit Loop_lable when ;End loop;q While循環(huán):根據(jù)條件結(jié)束循環(huán)循環(huán):根據(jù)條件結(jié)束循環(huán)While Loopsequential statements;End loop;q For循環(huán):循環(huán):FOR IN Loopsequential statements;End loop;Loop語句范例語句范例q 例1Signal a: std_logic_vector(7 downto 0)Process (a)variable temp: std_logic;Begintemp:=1;for I in 0 to 7 loop temp:=temp

35、and a(i);end loop;b=temp;End process;q 例2Signal a: std_logic_vector(7 downto 0)Process (a)variable cnt: integer;variable temp: std_logic;Begintemp:=1;cnt=0;while cnt8 loop temp:=temp and a(cnt); cnt:=cnt+1;end loop;b=temp;End process;SubprogramPackage body of example is procedure p(A: in integer, B:

36、inout integer) is begin B:=A+B; end; function inc(A: in integer) return integer is beginreturn (A+1) end;End example; q 子程序調(diào)用范例:子程序調(diào)用范例:p(a,b);x=inc(a); q 用于描述一定的算法用于描述一定的算法q 內(nèi)部是串行執(zhí)行內(nèi)部是串行執(zhí)行類似類似processq 可以在程序中任何地方被調(diào)用可以在程序中任何地方被調(diào)用q 調(diào)用方法類似于調(diào)用方法類似于Component例例化化q 綜合結(jié)果是組合邏輯電路綜合結(jié)果是組合邏輯電路q 包括包括function和和procedurev Function: 有返回值v Procedure: 無返回值q 子程序定義范例:子程序定義范例:Package example is procedure p(A: in integer, B:inout integ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論