VHDL信號與變量的區別

文章首發於我的個人博客

變量(VARIABLE)

在VHDL中,變量只能在進程(PROCESS)子程序(SUBPROGRAM)中使用。變量不能將信息帶出它所被定義的設計單元。變量的賦值是一種理想的數據傳輸,是立即發生的,沒有延時的。

定義變量的語句

VARIABLE 變量名 : 數據類型;

變量賦值(:=)

變量名 := 表達式;

其中表達式可以爲運算表達式或者數值。

信號(SIGNAL)

在VHDL中,信號的定義和使用範圍是實體(ENTITY)結構體(ARCHITECTURE)程序包(PACKAGE)。在進程和子程序中不允許定義變量。信號是描述硬件系統的基本數據對象,它類似於連線。信號的傳輸過程存在延時。注意,在同一進程中,同一信號賦值目標有多個賦值源時,信號賦值目標獲得的是最後一個賦值源的值,之前的賦值不起作用。

定義信號的語句

SIGNAL 信號名 := 數據類型;

信號賦值(<=)

信號名 <= 表達式;

信號與變量的區別

(1)在進程中只能將信號加入信號敏感表,而不能將變量加入信號敏感表。因爲只有信號才能將進程外的信息帶入進程內部。

從以下代碼中體會信號和變量的區別。

SIGNAL s1 ,s2 : STD_LOGIC; 

SIGNAL svec : STD_LOGIC_VECTOR (0 TO 7);

 ... 

PROCESS ( s1 ,s2 ) 

VARIABLE v1 ,v2 : STD_LOGIC;

BEGIN

​	v1 := '1' ;            			-- 立即將 v1 置位爲 1     

​	v2 := '1' ;            			-- 立即將 v2 置位爲 1     

​	s1 <= '1' ;            			-- s1 被賦值爲 1     

​	s2 <= '1' ;           			 -- 由於在本進程中這裏的 s2 不是最後一個,因此此處賦值不起作用

​	svec(0) <= v1;          	   -- 將 v1 在上面的賦值 1 賦給svec(0)

​	svec(1) <= v2;            	 -- 將 v2 在上面的賦值 1 賦給svec(1)	

​	svec(2) <= s1;           	  -- 將 s1 在上面的賦值 1 賦給svec(2)

​	svec(3) <= s2;                  -- 將最下面的賦予 s2 的值'0' 賦給svec(3)

​	v1 := '0' ;            				-- 將 v1 置入新值 0     

​	v2 := '0' ;         				   -- 將 v2 置入新值 0    

​	s2 <= '0' ;          				  -- 由於這是 s2 最後一次賦值 賦值有效,此'0'將上面準備賦入的'1'覆蓋掉 	 	svec(4) <= v1;             		 -- 將 v1 在上面的賦值 0 賦給svec(4) 

​	svec(5) <= v2;              		-- 將 v2 在上面的賦值 0 賦給svec(5)

​	svec(6) <= s1;            		   -- 將 s1 在上面的賦值 1 賦給svec(6)  

​	svec(7) <= s2;          -- 將 s2 在上面的賦值 0 賦給svec(7)

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