Programmable Logic System Design Lab02- Design Entry with VHDL SOC LAB. 2015.10.14
Lab Description VHDL 程式撰寫入門。 瞭解如何用不同的描述語法去完成一個二位元比較器。 認識 Testbench。
VHDL基本設計觀念 VHDL語言程式之撰寫,可分為兩個部分: 單體(Entity):電路外觀之描述 架構(Architecture):電路內部功能之描述
VHDL Entity(電路外觀之描述) ENTITY 單體名稱 IS PORT ( 訊號A : 模式 資料型別 訊號B : 模式 資料型別 : : : 訊號N : 模式 資料型別 ); End 單體名稱;
語法範例 ENTITY and_2 IS PORT ( a,b :IN STD_LOGIC; y :OUT STD_LOGIC ); END and_2 ; (檔名)
VHDL Structure(電路內部功能的描述) ARCHITECTURE 架構名稱 OF 單體名稱 IS {架構之宣告區} BEGIN {架構描述程式} END 架構名稱;
語法範例 (雙輸入AND閘) ARCHITECTURE dataflow OF and_2 IS BEGIN y <= a AND b; END dataflow;
電路架構描述部分其設計的風格可歸納為三種型式: 1.Behavioral Description (行為描述) 2. Data Flow Description(資料流描述) 3. Structure Descriptions (結構描述)
Behavioral Description(行為描述) 在VHDL 語言中,係使用Process 敘述來描述一個電子電路行為性模型。而它與資料流描述的最大不同點為,在 process 的所描述的行為模式內皆為順序性 處理,而非資料流描述的共時性處理。Process 敘述的使用語法如下 標籤名稱:PROCESS (Sensitivity List) VARIABLE 變數A:資料型別; VARIABLE 變數B:資料型別; BEGIN : {PROCESS 主體敘述} END PROCESS 標籤名稱;
EX: 2 Bits Comparator LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY cmp IS PORT ( A: IN STD_LOGIC_vector(1 downto 0); B: IN STD_LOGIC_vector(1 downto 0); AEQB: OUT STD_LOGIC); END cmp; ARCHITECTURE structural OF cmp IS BEGIN Comp:PROCESS (A,B) AEQB <= '0'; IF A=B THEN AEQB <= '1'; END IF; END PROCESS Comp; END structural;
Data Flow Description 資料流型式的VHDL 描述風格,在VHDL 程式的設計中,亦用得相當多。資料流型式的描述風格,使用各訊號間的相互關係與輸出入關係,也就是描述了訊號資料的流動情形,故稱之為資料流描述法。 屬於共時性的描述,此有別於PROCESS中順序性的描述,在電路架構中所以Data Flow方程式或敘述均代表著共時的意義,並沒有先後順序的關係。 常用的描述法有 Boolean Equation、(WHEN …ELSE)、(WITH …SELECT…WHEN)等。
EX: 2 Bits Comparator LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY cmp2_1 IS PORT ( A :IN STD_LOGIC_VECTOR(1 DOWNTO 0); B :IN STD_LOGIC_VECTOR(1 DOWNTO 0); AEQB :OUT STD_LOGIC); END cmp2_1; ARCHITECTURE a OF cmp2_1 IS BEGIN AEQB <= '1' WHEN A = B ELSE '0'; END a;
Structure Descriptions 結構性的VHDL 電路架構描述法,係以電路元件間的元件宣告與連線關係而建立的。結構性的描述法,包含了二個主要的部分,一為元件的宣告部分(Component Declaration),此部分有時是以Package 的方式,宣告在另外的VHDL檔案中,使用時則要使用USE 指令將該Package 的內容包含在電路架構設計中。二為各元件間的連線關係,各元件之Port 訊號與其所相連接的訊號名稱之對應關係,則使用PORT MAP 敘述來定義清楚。
Structure Descriptions (Cont’d) COMPONENT 元件名稱 PORT ( 訊號A :模式[IN,OUT,INPUT] 資料型別; 訊號B :模式[IN,OUT,INPUT] 資料型別; : : 訊號N :模式[IN,OUT,INPUT] 資料型別; END COMPONENT
EX: 2 Bits Comparator 利用結構性描述法的方式來描述一個二位元的比較器:(要先寫 AND gate 和 XNOR gate component) cmp2_3 and_gate xnor_gate
AND Gate LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY and_gate IS PORT ( A: IN STD_LOGIC; B: IN STD_LOGIC; Y: OUT STD_LOGIC); END and_gate; ARCHITECTURE arch OF and_gate IS BEGIN Y <= (A AND B) ; END arch;
XNOR Gate LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY xnor_gate IS PORT ( A: IN STD_LOGIC; B: IN STD_LOGIC; Y: OUT STD_LOGIC); END xnor_gate; ARCHITECTURE arch OF xnor_gate IS BEGIN Y <= NOT(A XOR B) ; END arch;
2 Bits Comparator LIBRARY ieee; USE ieee.std_logic_1164.all; USE宣告區&標準定義宣告 庫 ENTITY cmp2_3 IS PORT ( A :IN STD_LOGIC_VECTOR(1 DOWNTO 0); B :IN STD_LOGIC_VECTOR(1 DOWNTO 0); AEQB :OUT STD_LOGIC); END cmp2_3; 單體宣告區 ARCHITECTURE structural OF cmp2_3 IS 架構宣告區 COMPONENT and_gate PORT ( A: IN STD_LOGIC; B: IN STD_LOGIC; Y: OUT STD_LOGIC); END COMPONENT;
2 Bits Comparator (Cont’d) COMPONENT xnor_gate PORT ( A: IN STD_LOGIC; B: IN STD_LOGIC; Y: OUT STD_LOGIC); END COMPONENT; SIGNAL S_X1,S_X2: STD_LOGIC; BEGIN u0: xnor_gate PORT MAP (A => A(1),B => B(1),Y => S_X1); u1: xnor_gate PORT MAP (A => A(0),B => B(0),Y => S_X2); u2: and_gate PORT MAP ( A => S_X1,B => S_X2, Y => AEQB); END structural;
Implement Design
Test Bench
Test Bench (Cont’d) 產生test bench檔,已建立好測試檔和主程式輸入及輸出相對應的腳位關係。
Test Bench (Cont’d) 加入自行設計的輸入值和時間的對應關係 -- *** Test Bench - User Defined Section *** tb : PROCESS BEGIN wait for 25 ns; A <= "01" ; (注意: 2bits以上用雙引號,1bit用單引號) B <= "10" ; A <= "11" ; A <= "10" ; A <= “00" ; B <= "11" ; END PROCESS; -- *** End Test Bench - User Defined Section ***
Simulate with ModelSim6.0 將主程式及自行設計的測試檔放到 ModelSim 模擬,觀察波型的輸出值跟程式功能是否正確,由下圖觀察知只有在 A、B 相同下輸出為1 ,代表功能正確。
Assignment 利用VHDL 程式撰寫的方式表達如下圖所示的波形圖。其中A、B、C 是輸入訊號,D、E 是輸出訊號。 利用VHDL 撰寫 Testbench 並用 Modelsim 模擬。