EDA與VHDL作業(2)

(唉呀,這樣的記錄,好無聊啊,以後多記錄點代碼吧)
1.VHDL中有哪三種數據對象,詳細說明它們的功能特點以及使用方法,舉例說明數據對象與數據類型的關係

數據對象有常數,變量,信號三種。具體描述如下:
1、常數
常數的定義就是爲了使程序更容易閱讀和修改。在程序中,常數是一個恆定不變的值,一旦進行數據類型和賦值定義後,在程序中就不能再改變,因而具有全局性意義。一般表述如下:

CONSTANT 常數名:數據類型 := 表達式;
例如:
CONSTANT FBT : STD_LOGIC_VECTOR := "010110"; --定義常數爲標準位矢類型
CONSTANT DATAIN : INTEGER :=15;--定義常數位整數類型

注意:常數使用範圍是有規定的,要看定義在哪個位置。這一點跟一般的程序語言類似,例如C語言。

2、變量
在VHDL中,變量是局部變量,只能在進程和子程序中使用。類似於一般程序語言中的順序執行的賦值操作。主要作用是在進程中作爲臨時的數據存儲單元。一般描述如下:

VARIABLE 變量名 : 數據類型 := 初始值;

實例:

VARIABLE a : INTEGER RANGE 0 TO 15; --變量a定義爲整型,取值範圍是0~15
VARIABLE d : STD_LOGIC := '1'; --變量d定義爲標準邏輯位數據類型,初始值是1

由於硬件電路上電後的隨機性,綜合器並不支持設置初始值。定義的初始值僅對仿真器是有效的。變量賦值的一般描述如下:

目標變量名 := 表達式;

示例:

VARIABLE x,y : INTEGER RANGE 15 DOWNTO 0;--分別定義變量x和y爲整型
VARIABLE a,b : STD_LOGIC_VECTOR(7 DOWNTO 0);
x := 11;                         --整數直接賦值,這是因爲x的類型是整數類型
y := 2 + x;                      --運算表達式賦值,y也是整數變量
a := b;                          --b向a賦值
a(5 DOWNTO 0) := b(7 DOWNTO 2); --位矢量類型賦值

3、信號
信號是描述硬件系統的基本數據對象。信號可以作爲設計實體中並行語句模塊間的信息交流通道。信號的定義:

SIGNAL 信號名: 數據類型 := 初始值;

信號的語句形式與變量相似,不過與變量相比,信號具有全局性特徵。例如:在實體中定義的信號(如端口),在其對應的結構體中都是可見的,即在整個結構體中的任何位置、任何語句結構中都能獲得同一信號的賦值。(具體還有一些細節不做過多描述,可以在編寫代碼過程中體會)
在當信號定義好之後,設計過程中就可以對其賦值了。格式如下:

目標信號名 <= 表達式 AFTER 時間量; --AFTER是關鍵字,延時一定時間後才進行賦值,“時間量”就是具體的演示時間,如 AFTER 3 ns

注意:AFTER x ns 只對仿真有效。
在進程中可以允許同一信號有多個驅動源,即在同一進程中存在多個同名的信號被賦值,其結果只有最後的賦值語句被有效賦值。例如:

PROCESS (a,b,c) BEGIN
    y <= a + b;
    z <= c - a;
    y <= b;
END PROCESS; 

上例中,a,b,c 被列入進程敏感表,當進程被啓動後,程序將自上而下的順序執行,而y最終被賦值爲b。
在並行語句對同一信號進行多次賦值時,表現在電路上就意味着“線與”。因此在並行語句中不允許對同一信號進行賦值,而結構體中的進程與進程之間都是並行執行的,因此兩進程間不能對同一信號進行賦值,例如下面的語句是錯誤的:

PROCESS (a,b) BEGIN 
    y <= a + b;
END PROCESS;
PROCESS (c,d) BEGIN
    z <= c - d;
    y <= d;
END PROCESS;

數據類型與數據對象的關係:
VHDL的數據類型有(主要指預定義數據類型)有多種,它們各自爲數據對象定義了一組取值的集合;

VHDL作爲一種強類型語言主要表現在以下兩方面:
(1)VHDL程序中任何數據對象都必須定義一個確定的數據類型,並由此限定此數據類型的取值範圍。
(2)VHDL要求在信號賦值、算術運算、邏輯操作和數據比較等操作中數據對象的數據類型是相同的。

ps:還是老話,具體細節多多編程就明白了,也算時刻提醒我吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章