• 沒有找到結果。

z 資料型別與資料物件的宣告 z VHDL的敘述語法

N/A
N/A
Protected

Academic year: 2022

Share "z 資料型別與資料物件的宣告 z VHDL的敘述語法 "

Copied!
84
0
0

加載中.... (立即查看全文)

全文

(1)

YiHwa Lai 2003/08/15

(2)

大綱

z VHDL語言的基本概念

z 資料型別與資料物件的宣告 z VHDL的敘述語法

z 階層式設計

z 函式、程序與套件 z 問題與討論

z 參考資料

(3)
(4)

VHDL歷史背景

z VHDL-Very High Speed Integrated Circuit Hardware Description Language z 1983年美國國防部委託IBM、Texas Instrument、Intermetrics負責發展。

z 1987年定義成標準硬體語言,此一標準稱之為IEEE Std 1076-1987,又稱 為VHDL 87。

z 1993年再次更新,更新後之標準稱之為IEEE Std 1076-1993,又稱為VHDL 93。

z 1996年,IEEE將電路合成的程式標準與規格,加入到VHDL電路設計語言 中。

(5)

VHDL基本設計觀念

z VHDL語言程式之撰寫,可分為兩個部分:

¾ 單體(Entity):電路外觀之描述

¾ 架構(Architecture):電路內部功能之描述

Ex:

(6)

電路設計中的單體部分

z 單體部分主要分為兩大部分:

¾ 單體的宣告

¾ 輸出入埠的描述

z 單體宣告的語法如下:

Entity 單體名稱 is

port( 訊號A :模式 資料型態;

訊號B :模式 資料型態;

• • •

• • •

• • •

訊號N :模式 資料型態);

End單體名稱;

(7)

電路設計中的單體部分(續)

Ex:

ENTITY DFF is

PORT(CLK,D: IN STD_LOGIC;

Q: OUT STD_LOGIC );

END DFF;

z 輸出入埠模式

¾ In:表示該腳位要從外界接收信號

¾ Out:該腳位將傳送信號到外界

¾ Inout:可收送雙向模式的Port信號

In Out

(8)

電路設計中的架構部分

z 電路架構描述部分其語法如下:

Architecture 架構名稱 of 單體名稱 is

{架構之宣告區}

Begin

{架構描述程式}

End 架構名稱;

(9)

電路設計中的架構部分(續)

z 電路架構描述部分其設計的風格可歸納為三種型式:

¾ 結構性描述(Structure Description):主要透過元件的宣告與元件的叫用等方式,構

成電路中各元件的連線關係。

(10)

電路設計中的架構部分(續)

¾ 資料流型式(Data Flow):主要是使用VHDL語言中所內建的標準布林函式為主軸,

將各訊號間的布林代數關係,以布林方程式來表示之。

(11)

電路設計中的架構部分(續)

¾ 行為性描述(Behavior Description):屬於高階描述方式。主要使用電路特性的行

為性描述來設計,如此透過電腦的合成與最佳化,可以加快產品的設計週期,

並使設計之電路,非常易於維護。在VHDL語言中的行為性描述電路設計,通 常是使用Process的方式達成。

(12)

VHDL程式架構

(13)
(14)

資料的型別

z 邏輯訊號

¾ 布林代數(Boolean)

¾ 位元(Bit)

¾ 標準邏輯(Std_Logic)

¾ 基本邏輯序列(Bit_Vector)與標準邏輯序列(Std_Logic_Vector)

¾ 內部訊號宣告(Signal)

z 數值訊號

¾ 整數(Integer)

¾ 實數(Real)

¾ 列舉式(Enumeration)資料型別

¾ 陣列(Array)資料型別

¾ 記錄(Record)資料型別

(15)

邏輯訊號-Boolean

z 布林代數(Boolean):

布林代數訊號型式的定義如下:

Type BOOLEAN is (False,True)

上面布林代數的訊號型式包含False和 True兩種狀態:

¾“False”代表邏輯狀態:’0’

¾“True”代表邏輯狀態:’1’

【註】Type是VHDL語言中用來宣告訊號型式的指令。

Ex:

type boolean is (false, true);

variable A,B,C: boolean;

(16)

邏輯訊號-Bit

z位元(Bit)

Bit型式是數位邏輯中最基本的邏輯型式,它在VHDL語法中宣告的定義如下:

Type BIT is (‘0’, ‘1’)

從上面的定義中,我們可以得知BIT的訊號型式共有‘0’和‘1’兩種類型。

在VHDL中關於BIT型式的邏輯可以適用的運算如下:

【註】邏輯運算子“XNOR”僅支援VHDL-93 Ex:

type bit is (‘0’,‘1’);

signal x,y,z: bit;

(17)

邏輯訊號-Std_Logic

z標準邏輯(STD_LOGIC)

在VHDL中標準邏輯訊號型式定義是:

Type STD_LOGIC is(‘X’, --Forcing Unknown;浮接不定

‘0’, --Forcing 0;低電位

‘1’, --Forcing 1;高電位

‘Z’, --High Impedance;高阻抗

‘W’, --Weak Unknown;弱浮接

‘L’, --Weak 0;弱低電位

‘H’, --Weak 1;弱高電位

‘-’, --Don’t care;不必理會

(18)

邏輯訊號-Bit_Vector & Std_Logic_Vector

z基本邏輯序列(Bit_Vector)與標準邏輯序列(Std_Logic_Vector)

在數位邏輯電路中,有時候我們會將幾個屬性相同的訊號合成一組代表特定功 能的序列訊號,例如微處理機系統中的資料匯流排(Data Bus)或位址匯流排 (Address Bus)等。VHDL語法針對這樣的需求也定義了基本邏輯序列(Bit_Vector) 與標準邏輯序列(Std_Logic_Vector)兩種型態;簡單的說,一群Bit可以構成 Bit_Vector,而一群Std_Logic也可組成Std_Logic_Vector序列。

以上圖為例,我們可以將之以訊號序列型態描述如下:

(19)

邏輯訊號-Signal

z Signal指令是宣告電路內部自行使用的訊號,因為這類訊號沒有傳送到電路 的外部界面,所以通常我們都是在架構(Architecture)中宣告它,而非在 VHDL程式的單體(Entity)裡進行宣告。

(20)

數值訊號-Integer Data Type

z VHDL語言中的整數數值範圍 : ( - 231 + 1 ) to ( + 231 - 1 )

z Example of Integer Data Type:

Signal A:Integer; --32位元數值宣告 Signal B,C:Integer range 0 to 7; -- 3位元數值宣告 Variable INT_S:Integer; --32位元數值宣告

(21)

數值訊號-無號整數(UNSIGNED)序列

z Unsigned指令宣告,它同時具有邏輯和數值的特性,因此既可作邏輯處理 又可作數值運算。

Ex:

Signal A:Std_logic;

Signal B,C:Unsigned(3 downto 0);

……

A<=B(3) and B(2) or B(0) ; --邏輯處理

C<=B-1; --數值運算

(22)

數值訊號- Real Data Type

z VHDL語言中的實數範圍:

-1.0E38 to 1.0E38

z Example of Real Data Type:

Signal A,B:Real;

……

A<=3.0 ; --需要表示成小數點型式

B<=1.5E15;

(23)

數值訊號- Enumerated Data Type

z 列舉式資料型別(Enumeration type)是一種集合種類的宣告,使用者可以 使用一些有意義的名稱,將其定義成集合體的元素 。

z Example of Enumeration Data Type:

Type co_state IS (main_green, main_yellow, farm_green, farm_yellow);

Type std_ulogic IS (‘U’, ‘X’ ,‘0’, ‘1’, ‘Z’, ‘W’, ‘L’ ,‘H’, ‘-’);

Type week IS (Mon, Tue, Wed, Thu, Fri, Sat, Sun);

(24)

數值訊號- Array Data Type

z 陣列資料型別是由同一種資料型別所組成的資料型別 。 z Example of Array Data Type:

Type Byte IS Array(7 downto 0) of Bit;

Type Word IS Array(31 Downto 0) of Bit;

z Example (二維的ROM):

Type ROM_table5x4 IS array (0 to 4, 0 to 3) of bit;

Constant ROM_con: ROM_table5x4:=

( (‘1’,’0’,’0’,’1’), (‘0’,’1’,’0’,’1’), (‘0’,’0’,’1’,’0’), (‘1’,’0’,’0’,’1’), (‘0’,’0’,’1’,’1’) );

(25)

數值訊號-Record Data Type

z 記錄資料型別(Record types)與陣列資料型別(Array Types)最大的差異是 在於記錄資料型別是由兩種或兩種以上資料型別所構成,它可視為族群元 素集合體的宣告。

z Example of Record Data Type:

Type MU2 IS Record

Din,Dout: bit_vector(7 downto 0);

S:bit;

End Record;

Signal X,Y:MU2;

(26)

資料物件

z 常數(Constants)

z 訊號(Signals)

z 變數(Variables)

z 別名(Aliases)

(27)

資料物件-常數(Constants)

z 在VHDL語言中,我們將固定值宣告成常數 ,它類以C語言中以#define來 設定常數值的作法。

z Example of Constants:

Constant A: Std_logic_vector(3 downto 0):=“0011”;

Constant Width: Integer:=8;

Constant PI : real := 3.1415926535897 ;

……

(28)

資料物件-訊號(Signals)

z 訊號可以用來宣告所有元件內部的信號線或內接腳位 。 z Example of Signals:

Signal A:Std_Logic_vector(4 downto 0);

Signal temp: bit_vector(0 to 3);

……

(29)

資料物件-變數(Variables)

z 變數之處理及設定一定要發生在行為描述程式內,而不可在行為描述程式 外,因此變數屬於局部(Local)物件 。

z Example of Variables:

Variable temp: Std_logic:= ‘0’;

Variable temp: Std_logic_Vector(3 downto 0);

Variable A,B:Boolean:=False

Variable Name

Data Type Assignment Statement

(30)

資料物件-別名(Aliases)

z 在電路中,若有一條匯流排需要區分成數束不同的子線連接到各個地方去 時,我們就可以將原來的母線分開來各自命名,宣告每一束子線並各給其 一個別名(Aliases)。

z Example of Aliases:

Signal A_Bus: Std_Logic_Vector(31 downto 0);

Alias Bank1 : Std_Logic_Vector(7 downto 0) IS A_Bus (31 downto 24);

Alias Cal_D : Std_Logic_Vector(15 downto 0) IS A_Bus (23 downto 8);

Alias Rank : Std_Logic_Vector(7 downto 0) IS A_Bus (7 downto 0);

(31)

運算子(Operators)

z 邏輯運算子:not and or xor nand xnor z 關係運算子:= /= < <= > >=

z 算術運算子:+ (加)、- (減)、* (乘)、/ (除)、**(次方)、REM、MOD z 位移運算子:SLA、SRA、SLL、SRL、ROL、ROR

(32)

運算子(Operators)- 邏輯運算子

z Logic operators:

not and or xor nand xnor

(33)

運算子(Operators)-關係運算子

z Relational operators:

¾ = , /= , < , <= , > , >=

¾ Operands must be of the same type

(34)

運算子(Operators)- 算術運算子

z Arith. operators:

¾ + (加)、- (減)、* (乘)、/ (除)、**(次方)、REM(求餘數)、MOD(求商數)

(35)

運算子(Operators)- 位移運算子

A=“10010101”

算術向左位移 算術向右位移 邏輯向左位移

邏輯向右位移 向左旋轉

向右旋轉

(36)
(37)

VHDL的敘述語法

z 在VHDL電路設計語言的架構描述中,可以分成兩種類型的敘述語法:

¾ 共時性敘述(Concurrent Statements)

¾ 順序性敘述(Sequence Statements)

z 在架構內的每一個程式敘述,均代表著同時發生的性質,但在Process敘述 內(或次程式)的程式敘述,則稱之為順序性敘述。

z 在電路架構中的每一個Process敘述或次程式,其均代表著共時性的意義。

Process(…) Begin

{順序性描述}

(38)

共時性敘述

z 直接設定敘述:使用 “<=”運算子 z 條件式的訊號設定敘述:when-else

訊號Y <= 訊號 A when (條件1) else 訊號 B when (條件2) else 訊號 C ;

z 選擇式的訊號設定敘述:with-select-when

with 選擇訊號 X select

訊號Y <= 訊號 A when 選擇訊號 X 為 m,

訊號 B when 選擇訊號 X 為 n,

訊號 Z when others ;

(39)

共時性敘述-when…else敘述

z Example:二對四解碼器電路

(40)

共時性敘述-with…select…when敘述

z Example:四對二編碼器電路

(41)

順序性敘述-Process敘述

z Process敘述是VHDL語言中,用來描述行為化電路模型的主要敘述。其語 法如下:

Label1:PROCESS (Sensitivity List) 變數宣告區

BEGIN

PROCESS主體敘述 END PROCESS Label1;

z 在PROCESS 的程式主體內主要是由順序性敘述,如if…then…else等敘述 方法來描述電路的行為化模型。

(42)

IF敘述-if…then…end if

z IF敘述的第一種架構為只有IF…Then…End IF,其語法如下:

if (條件式) then 命令敘述;

end if;

z 此種架構主要用途是用來描述記憶元件如正反器、閂鎖器…等。

Ex:

(43)

IF敘述-if…else…end if

z IF敘述的第二種架構為具有else指令的架構,其語法如下:

if (條件式) then 命令敘述 1;

else

命令敘述 2;

end if;

Ex:

(44)

IF敘述-if…elsif…else…end if

z IF敘述的第三種架構,具有2個以上的條件式,可以用來描述具有優先順序的 選擇邏輯電路,其語法如下:

if (條件式 1) then 命令敘述 1;

elsif (條件式 2) then 命令敘述 2;

else

命令敘述 3;

end if;

(45)

IF敘述-if…elsif…else…end if

Ex:

(46)

IF敘述-巢狀似敘述

z IF敘述也可以巢狀似敘述,其語法如下:

if (條件式 1) then if (條件式 2) then

命令敘述 1;

else

命令敘述 2;

end if;

else

命令敘述 3;

end if;

(47)

IF敘述-巢狀似敘述

z Ex:

(48)

Wait敘述

z Wait Until 條件式

Ex:Wait Until CLK’event and CLK=’1’;

z Wait On 訊號 Ex: Wait On a,b

z Wait For 時間表示式 Ex: Wait For 20ns;

Ex: Wait For (a*(b+c));

(49)

Case敘述-case…when敘述

z Case…when條件敘述指令,可以用來描述一個或一組特定的選擇訊號對於 一些電路所做成的選擇邏輯,其語法如下:

Case 選擇訊號 IS

When 選擇訊號1 =>

敘述命令1;

When 選擇訊號2 =>

敘述命令2;

: When Others =>

敘述命令N;

(50)

Case敘述-case…when敘述

z Ex:一對四的解多工器設計

(51)

LOOP敘述

z VHDL語言中使用LOOP敘述,來描述重複性的電路操作特性。

z LOOP敘述有三種寫法,分別為:

¾ for…loop

„ 以遞減的方式從開始值執行到結束值為止,其語法如下:

for I in 開始值 downto 結束值 loop {命令敘述}

end loop;

„ 以遞增的方式從開始值執行到結束值為止,其語法如下:

for I in 開始值 to 結束值 loop {命令敘述}

end loop;

¾

(52)

LOOP敘述

¾ 單純的loop敘述

„ 單純的loop敘述會一直反覆的執行,直到exit或next的敘述出現,其條件為真時,才會 跳出loop迴圈敘述。其語法如下:

標題名稱:loop {順序性敘述}

end loop 標題名稱;

„ next敘述用來中斷這一次的迴圈運算,而重頭開始迴圈敘述的運算,其語法如下:

next 標題名稱 when 條件式;

„ exit敘述用來中斷整個迴圈敘述,程式流程直接跑到迴圈敘述的結尾處,其語法如下:

exit 標題名稱 when 條件式;

(53)

LOOP敘述-for…loop敘述 & while…loop敘述

z for…loop Ex:

z while…loop Ex:

(54)

LOOP敘述-單純的loop敘述

z loop指令與exit指令一起使用時,Ex:

z loop指令與next指令一起使用時,Ex:

(55)
(56)

方塊(Block)敘述

z Block主要是將同一電路中某一功能的電路以方塊敘述劃分起來,形成一 個獨立的電路模組,最後將這些獨立模組組合起來構成我們的電路,模組 化的設計方式可以使得系統的維護性和偵錯性大為提高。

z Block方塊敘述的語法如下:

方塊名稱:Block 資料物件宣告區 Begin

方塊內容程式

END Block 方塊名稱

(57)

方塊(Block)敘述

Ex:

(58)

Component與port map

z Component的功能能夠協助我們作元件資料庫的設計,它與port map結合可 以讓我們利用現有的component像堆積木一般累積出複雜的電路。

z Port Map腳位設定的方式如下:

¾ 位置對應表示式 (must match the port order) FA1: full_adder PORT MAP (Cin, a0, b0, S0, t1);

¾ 名稱對應表示式: signal => port_name

FA1: full_adder PORT MAP (Cin=>x, a0=>y, b0=>z, S0=>Sum, t1=>Carry);

(59)

Component與port map

Ex:利用四對一多工器的component建立十六對一多工器

¾ 四對一多工器描述(component)

library IEEE;

use IEEE.STD_LOGIC_1164.all;

ENTITY mux4_1 IS

PORT ( D0,D1,D2,D3 ,S1,S0 : IN STD_LOGIC; Y : OUT STD_LOGIC);

END mux4_1 ;

ARCHITECTURE a OF mux4_1 IS BEGIN

Y<=(D0 and (not S1)and (not S0))

(60)

Component與port map

¾ 十六對一多工器描述(component)

(61)

Generic和Generic map的使用

z Generic在VHDL語言中,係用來定義元件的參數,如此,VHDL中的元件 就成了參數化的元件,而元件 Generic的設定,可以透過Generic Map的方 式,將所欲設定的參數數值,傳給參數化元件。

z VHDL語言中的Generic必須在元件的單體宣告區域內來宣告之。

Ex:以一個具有Generic的元件RREG來完成一個8位元的暫存器

¾ RREG部分程式 LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY rreg IS

default value

(62)

Generic和Generic map的使用

¾ 8位元暫存器部分程式 ARCHITECTURE a OF reg8 IS

COMPONENT rreg

GENERIC ( Size: INTEGER := 2);

PORT ( CLK :IN STD_LOGIC;

nRST :IN STD_LOGIC;

D :IN STD_LOGIC_VECTOR( Size - 1 DOWNTO 0 );

Q :OUT STD_LOGIC_VECTOR( Size - 1 DOWNTO 0 ));

END COMPONENT;

BEGIN

U1: rreg GENERIC MAP (8) PORT MAP ( CLK => CLK,

nRST => nRST,

(63)

For-Generate敘述

z VHDL程式提供了For-Generate敘述來描述一些具有重覆性特性的電路,它 雖然以迴圈的型式來撰寫,但本身卻是屬於並行敘述指令之一,不可放在 Process指令敘述中使用。

z 其格式如下:

標記名稱:For I in 開始值 to 結束值 Generate

……

END Generate;

Ex:

G1:For I in 3 downto 0 Generate

SUM(I)<=A(I) xor B(I) xor Carry(I);

(64)

For-Generate敘述

z 以Generate 敘述設計一四位元加法器

ARCHITECTURE a OF full_add4 IS component FULL_ADD

port(SA,SB,SCin:in bit;

Scout,SUM :out bit);

end component;

signal CARRY:bit_vector(4 downto 0);

BEGIN

CARRY(0)<=cin;

G1:for I in 3 downto 0 generate

FA:FULL_ADD port map (CARRY(I),A(I),B(I),CARRY(I+1),SUM(I));

end generate G1;

cout<=CARRY(4);

(65)
(66)

函式(Functions)

z 函式(Functions)的宣告語法如下:

Function 函式名稱 (輸入參數:資料型別) Return 輸出參數型別;

z 函式(Functions)的主體內容語法如下:

Function 函式名稱 (輸入參數:資料型別) Return 輸出參數型別 IS 函式內的區域變數(Local Variable)宣告區

Begin

函式內的主體內容區 Return 輸出之參數名稱;

END 函式名稱;

(67)

函式(Functions)

Ex:函式(Functions)的宣告語法如下:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY function_calls IS PORT ( A,B,C,D,E: IN STD_LOGIC;

Y1,Y2,Y3 : OUT STD_LOGIC);

END function_calls;

ARCHITECTURE a OF function_calls IS

(68)

函式(Functions)

BEGIN

process(A,B,C,D,E) begin

Y1<=Fn1(A,B,C,D) xor E;

--呼叫Fn1函式(使用位置對應表示法) Y2<=Fn1(F3=>C,F4=>D,F1=>A,F2=>B) xor E;

--呼叫Fn1函式(使用名稱對應表示法) Y3<=E xor Fn1(A,B,F4=>D,F3=>C);

--呼叫Fn1函式(位置與名稱對應混合法) end process;

end a;

(69)

程序(Procedures)

z 程序(Procedures)的傳回值則可以不限於一個(與函式最大的不同) z 在VHDL語言中,程序(Procedure)的宣告語法如下:

Procedure 程序名稱 ( Signal 訊號A: 資料型別;

Signal 訊號B: 資料型別;

…..

Signal 訊號E: 資料型別;

Signal 訊號M: OUT 資料型別;

Signal 訊號N: OUT 資料型別 ) IS Begin

(70)

程序(Procedures)

Ex:

ENTITY adder4 IS

PORT ( a,b:in std_logic_vector(3 downto 0);

cin:in std_logic;

sum:out std_logic_vector(3 downto 0);

cout:out std_logic);

END adder4;

ARCHITECTURE structural OF adder4 IS

procedure full_adder(a,b,c:in std_logic;

sum,cout:out std_logic) IS begin

(71)

程序(Procedures)

BEGIN

process(a,b,cin)

variable result:std_logic_vector(3 downto 0);

variable carry:std_logic;

begin

full_adder(a(0),b(0),cin,result(0),carry);

--呼叫一位元全加法器程序 full_adder(a(1),b(1),carry,result(1),carry);

--呼叫一位元全加法器程序 full_adder(a(2),b(2),carry,result(2),carry);

--呼叫一位元全加法器程序

(72)

套件(Packages)

z Package是一種設計單元,它用來宣告一些VHDL中可使用的物件,讓使用 者 可 以 將 VHDL 中 的 Functions、Procedures 及 資 料 型 別 的 定 義 用 一 個 Package包裝起來,而凡是在套件(Package)內所定義和宣告的東西就變成 是公開的,可以在全程式中使用。其語法如下:

Package 套件名稱 IS --套件宣告部份

套件宣告部份 END 套件名稱;

Package Body 套件名稱 IS --套件主體 套件主體之內容

END 套件名稱;

(73)

套件(Packages)

z 當我們的VHDL程式需要使用某一個套件裡所定義的函式或程序時,其語 法如下:

USE 目錄名稱.套件名稱.指定的項目;

z 最簡單的例子就是在VHDL程式設計中一定會用使到的:

USE ieee.std_logic_1164.all

其意即為使用IEEE目錄下的std_logic_1164套件內所有的副程式與資料型 別。

z 若我們設計的VHDL程式需要用到自己所建立的my_package套件時,語法 如下:

USE work.my_package.all

(74)

套件(Packages)

Ex:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

PACKAGE parity_package IS

FUNCTION ODD_par8 (DI: STD_LOGIC_VECTOR(7 DOWNTO 0) ) RETURN STD_LOGIC;

FUNCTION ODD_par81 (DI: BIT_VECTOR(7 DOWNTO 0)) RETURN BIT;

END parity_package;

PACKAGE BODY parity_package IS --Function # 1

FUNCTION ODD_par8 (DI: STD_LOGIC_VECTOR(7 DOWNTO 0)) RETURN STD_LOGIC IS

VARIABLE temp: STD_LOGIC := '0';

BEGIN

FOR K IN 7 DOWNTO 0 LOOP

(75)

套件(Packages)

--Function # 2

FUNCTION ODD_par81 (DI: BIT_VECTOR(7 DOWNTO 0)) RETURN BIT IS

VARIABLE temp: BIT := '0';

BEGIN

FOR K IN 7 DOWNTO 0 LOOP

temp := DI(K) XOR temp;

END LOOP;

RETURN temp;

END ODD_par8;

END parity_package;

(76)

套件(Packages)

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE work.parity_package.all;

ENTITY PAR_EX IS

PORT ( D_IN1: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

D_IN2: IN BIT_VECTOR(7 DOWNTO 0);

PAR_OUT1: OUT STD_LOGIC;

PAR_OUT2: OUT BIT);

END PAR_EX;

ARCHITECTURE arch OF PAR_EX IS BEGIN

(77)
(78)

問題與討論

問題:如何呼叫Verilog程式?

建議:使用component與port map指令,來呼叫Verilog程式。

Ex:

--(verilog 程式)-- --(VHDL程式)-- begin

module add(a,b,c); library ieee; S1:add port map(x,y,sum);

input a; use ieee.std_logic_1164.all; end adder_arch;

input b; entity adder is output [1:0]c; port( x: std_logic;

wire [1:0]c; y: std_logic;

sum: std_logic_vector(1downto 0));

assign c=a+b; end adder;

architecture adder_arch of adder is endmodule; component add is

port( a: std_logic;

b: std_logic;

(79)

問題與討論

問題:如何簡化VHDL程式?

建議:利用Package設計方法。將常用的資料型別、元件、函式及程序,放入自訂的套件中。

Ex:¾ 未使用Package時

ENTITY PAR_EX IS

PORT ( D_IN1: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

D_IN2: IN BIT_VECTOR(7 DOWNTO 0);

PAR_OUT1: OUT STD_LOGIC;

PAR_OUT2: OUT BIT);

END PAR_EX;

ARCHITECTURE arch OF PAR_EX IS --Function # 1

FUNCTION ODD_par8 (DI: STD_LOGIC_VECTOR(7 DOWNTO 0))

(80)

問題與討論

--Function # 2

FUNCTION ODD_par81 (DI: BIT_VECTOR(7 DOWNTO 0)) RETURN BIT IS

VARIABLE temp: BIT := '0';

BEGIN

FOR K IN 7 DOWNTO 0 LOOP

temp := DI(K) XOR temp;

END LOOP;

RETURN temp;

END ODD_par8;

BEGIN

PAR_OUT1 <= ODD_par8(D_IN1); --Require Function # 1;

PAR_OUT2 <= ODD_par81(D_IN2); --Require Function # 2;

END arch;

(81)

問題與討論

¾ 使用Package時

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE work.parity_package.all;

ENTITY PAR_EX IS

PORT ( D_IN1: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

D_IN2: IN BIT_VECTOR(7 DOWNTO 0);

PAR_OUT1: OUT STD_LOGIC;

PAR_OUT2: OUT BIT);

END PAR_EX;

(82)

問題與討論

問題:如何整合2個以上功能方塊?

建議:於撰寫VHDL程式之前,先規劃功能方塊間彼此的控制訊號及資料型態,並繪製時序圖,

再進行程式撰寫。

MUX2 Modulation

Dp_ctrl

Edp_data

Mdp_data Mdp_enable

Mdp_reset

Da_data

Da_sleep

Mux2_CLK(2MHz) Mod_CLK(16MHz)

Dp_ctrl Edp_data Mux2_CLK

Mdp_enable Mdp_data

(83)
(84)

參考資料

z 參考書籍:

¾ 林傳生,使用VHDL電路設計語言之數位電路設計,儒林

¾ 黃文吉,VHDL基本程式寫作及應用,儒林

z 參考網站:

¾ www.vhdl.org

¾ www.xilinx.com

¾ www.altera.com

參考文獻

相關文件

可吸引未 來大學教 授注意,

If the points line on the 45 o line then the skewness and excess kurtosis seen in the stochastic residuals is the same as that of a standard normal distribution, which indicates

肆、下載資料 2.閱讀「下載介接財產 00000 0 資料注意事項」.

[r]

審查整理呈現資料:蒐集到的資料應先審核 是否完整、正確、合理與一致,然後利用敘

資料一:載於1883年7月7日《倫敦新聞畫報》的 木刻版畫,描繪了江南機器製造局生產來福槍及

Britain–s £50 Note Will Honor Computing Pioneer Alan Turing.. 盧政良 台大資訊系

z請利用 struct 記錄 Bob 和 Alice 的相關資訊 z列印出 Bob 及 Alice 分別花多少錢. z再列印出