180 likes | 518 Views
CPLD-VHDL 國立新營高工 WWW.HYIVS.TNC.EDU.TW 沈慶陽. VHDL. VHDL 就是 VHSIC(Very High Speed Integrated Circuit) Hardware Description Language 的 縮寫 , 即非常高速積體電路的硬體描述語言 . VHDL is a Hardware Description Language, Not a Programming language. VHDL 是硬體描述語言 , 不是程式語言 . PACKAGE. VHDL STRUCTURE( 結構 ). 包裝.
E N D
VHDL VHDL就是VHSIC(Very High Speed Integrated Circuit) Hardware Description Language的 縮寫,即非常高速積體電路的硬體描述語言. VHDL is a Hardware Description Language, Not a Programming language. VHDL 是硬體描述語言, 不是程式語言.
PACKAGE VHDL STRUCTURE(結構) 包裝 • ENTITY 描述電路的I/O介面 • ARCHITECTURE 描述電路的特性和運作 structure Description Dataflow Description Behavioral Description 結構性描述 資料流描述 行為性描述
使用VHDL設計一個兩輸入AND GATE(及閘) a b and_2 (檔名) y
EXAMPLE:第一個測試程式(兩輸入及閘) 使用程式庫與零件盒 LIBRARY IEEE;(使用內建IEEE程式庫) USE IEEE.STD_LOGIC_1164.ALL;(使用零件盒內所有項目) ENTITY and_2 IS PORT (a,b : IN STD_LOGIC; y : OUT STD_LOGIC ); END and_2; ENTITY描述電路的外部包裝,亦即I/O接腳. a b and_2 (檔名) y ARCHITECTURE dataflow OF and_2 IS BEGIN y <= a AND b; END dataflow; Architecture用以描述ENTITY 所涵蓋的電路行為和特性. 此例為AND閘, y=a*b 註:此例and_2(斜体字係檔名).存檔的檔名為and_2.vhd 請以此例作一個NOT GATE(反閘),檔名inv_1.vhd
Dataflow Description(資料流描述)(反閘) 使用程式庫與零件盒 LIBRARY IEEE;(使用內建IEEE程式庫) USE IEEE.STD_LOGIC_1164.ALL;(使用零件盒內所有項目) ENTITY inv_1 IS PORT (a : IN STD_LOGIC; y : OUT STD_LOGIC ); END inv_1; ENTITY描述電路的外部包裝,亦即I/O接腳. inv_1 (檔名) a y ARCHITECTURE dataflow OF inv_1 IS BEGIN y <=NOT a; END dataflow; Architecture用以描述ENTITY 所涵蓋的電路行為和特性. 此例為NOT閘, y<=NOT a 註:此例inv_1(斜体字係檔名).存檔的檔名為inv_1.vhd 請參考此例,製作一個兩輸入OR GATE(或閘)
語法: --程式開頭— LIBRARY 程式庫 (目錄) 名稱 USE 程式庫名稱.零件盒名稱.指定項目 使用程式庫與零件盒 範例: --程式開頭— LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; 使用(內建)IEEE程式庫 使用IEEE程式庫的STD_LOGIC_1164 零件盒內所有項目
ENTITY語法如下: --ENTITY是描述I/O接腳的規格-- ENTITY電路單體名稱 IS PORT ( 訊號A : 模式 資料型態; 訊號B : 模式 資料型態; ……… 訊號N : 模式 資料型態 ); END電路單體名稱 ; ENTITY(電路單體) ENTITY語法範例: ENTITYand_2 IS PORT (a,b :IN STD_LOGIC; y :OUT STD_LOGIC ); ENDand_2 ; and_2 (檔名) a b y
範例:半加器HALFADD的電路單體範例 ENTITYHALFADDIS PORT ( A,B :IN BIT; Sum,Carry:OUT BIT); ENDHALFADD; ENTITY電路單體的語法範例(半加器) A(被加數) HALFADD (檔名) Sum(和) B(加數) Carry(進位)
範例:4對1多工器MUX4的電路單體範例 ENTITYMUX4IS PORT ( A : IN STD_LOGIC; B : IN STD_LOGIC; C : IN STD_LOGIC; D: IN STD_LOGIC; S: IN STD_LOGIC_VECTOR(1 DOWNTO 0); Y: OUT STD_LOGIC); ENDmux4; ENTITY電路單體的語法範例(多工器) A MUX4 (檔名) B Y C D S0 S1
IN:輸入模式,即此訊號需由電路單體之外的電路來驅動;IN:輸入模式,即此訊號需由電路單體之外的電路來驅動; IN也是VHDL Port中內定的訊號模式. 2. OUT:輸出模式,即此訊號僅能輸出電路單體之外去驅動外 圍電路,不可回授回單體之內驅動內部電路. 3. BUFFER:緩衝模式,是一種可以回授驅動單體內電路的輸 出模式.但須注意: a.不能有多重驅動的情形. b.僅能回授接到內部訊號,或其它電路單體同為緩衝模式的Port訊號. 4. INOUT:代表雙向模式PORT訊號,即可同時代表IN,OUT與 BUFFER等模式訊號. ENTITY裡PORT的四種輸出入模式
BIT 2. BIT_VECTOR(0 TO 7) 3. STD_LOGIC 4. STD_LOGIC_VECTOR(15 DOWNTO 7) ENTITY裡PORT的四種基本資料型態 PS: STD_LOGIC為IEEE-1164所提供的標準,定義為: X: Forcing Unknown;浮接不定 0: Forcing 0 ;低電位 1: Forcing 1 ;高電位 Z: High Impedance;高阻抗 W: Weak Unknown;弱浮接 L: Weak 0;弱低電位 H: Weak 1 ;弱高電位 - : Don’t care ;不必理會
ARCHITECTURE語法如下: ARCHITECTURE架構名稱 OF電路單體名稱(檔名)IS 區域訊號宣告 BEGIN 架構描述 END架構名稱; ARCHITECTURE架構描述 ARCHITECTURE 語法範例(雙輸入AND閘) ARCHITECTURE dataflow OFand_2IS BEGIN y <= a AND b; END dataflow;
ARCHITECTURE架構描述範例(半加器) ARCHITECTURE 語法範例(HALFADD半加器) ARCHITECTURE behave OFHALFADDIS BEGIN Sum <= A xor B; Carry <= A and B; END behave;
行為性描述(Behavioral Descriptions) 反及閘NAND Gate 行為性描述係使用Process敘述的方式來完成(Sequential執行模式). 屬於高階描述方式(High-level Description). LIBRARY IEEE; (使用內建IEEE程式庫) USE IEEE.STD_LOGIC_1164.ALL; (使用零件盒內所有項目) ENTITY nand2 IS PORT (a,b : IN STD_LOGIC; y : OUT STD_LOGIC ); END nand2; ARCHITECTURE behavior OF nand2 IS BEGIN process (a,b) begin if ( a=‘1’) and (b=‘1’) then y<=‘0’; else y<= ‘1’; end if; End process; END behavior;
資料流描述(Dataflow Descriptions) 反及閘NAND Gate 資料流描述係利用布林方程式來表現各信號之間的代數關係. 屬於並行(Current)敘述的方式. LIBRARY IEEE; (使用內建IEEE程式庫) USE IEEE.STD_LOGIC_1164.ALL; (使用零件盒內所有項目) ENTITY nand IS PORT (a,b : IN STD_LOGIC; y : OUT STD_LOGIC ); END nand; ARCHITECTURE dataflow OF nand IS BEGIN y <= a NAND b; END dataflow;
結構性描述(Structure Descriptions) 反及閘NAND Gate 結構性描述是由VHDL的netlist所組成,這些netlist就好像在schematic中的netlist,因為所有的零件都是由signal連接而成.結構性描述是階層性的(hierarchical),使用Component與Port Map,Component的功能能夠讓我們作元件資料庫的設計,它與 Port Map結合可以讓我們利用現有的Component像堆積木一般累積出複雜的電路. LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY nand2 IS PORT (a,b : IN STD_LOGIC; y : OUT STD_LOGIC ); END nand2; ARCHITECTURE structure OF nand2 IS Signal i:BIT; component AND_2 port( i1,i2:in STD_LOGIC; o1:out STD_LOGIC); end component; component inverter port(i1:in STD_LOGIC; o1:out STD_LOGIC); end component; BEGIN cell1:AND_2 port map (a,b,i); cell2:inverter port map (i,y); END structure; ***於此例中,需先完成cell 1 (nand_2)及閘 和 cell 2(inverter)反閘之程式,