EDA筆記(5)--順序語句

目錄

一.賦值語句

 

一、賦值語句功能

二、信號和變量賦值

三.賦值目標

二.轉向控制語句

一、IF條件語句

二、CASE選擇語句

 

三.LOOP循環語句

 

三.其他順序語句

一.等待語句

二.返回語句

三.空操作語句


一.賦值語句

 

一、賦值語句功能


就是將一個值或一個表達式的運算結果傳遞給某一數據對象,如信號或變量,或由此組成的數組。

 

二、信號和變量賦值


1.賦值語句有兩種,即信號賦值語句和變量賦值語句:


(1)變量賦值目標:=賦值源;
其中冒號加等號(:=)作爲一個整體,稱之爲變量賦值符號
(2)信號賦值目標<=賦值源;
其中指向左邊的雙箭頭(<=)作爲一個整體,稱之爲信號賦值符號


2.變量賦值與信號賦值的區別:


(1)變量具有局部特徵,它的有效性只侷限於所定義的一個進程中,或一個子程序中。信號具有全局性特徵,它不但可以作爲一個設計實體內部各單元之間數據傳送的載體,而且可通過信號與其他的實體進行通信。
(2)變量的賦值是立即發生的,即是一種時間延遲爲零的賦值行爲。而信號的賦值過程總是有某種延時的,它反映了硬件系統並不是立即發生的,它發生在一個進程結束時。


3.當在同一進程中,同一信號賦值目標有多個賦值源時,信號賦值目標獲得的是最後一個賦值源的賦值,其前面相同的賦值目標則不作任何變化。

 

三.賦值目標


1.標識符賦值目標:以簡單的標識符作爲被賦值的信號或變量名。
2.數組單元素賦值目標:數組類信號或變量名(下標名)
3.段下標元素賦值目標

舉例下標的排序示例:

VARIABLE A,B:STD_LOGIC_VECTOR(1 TO 4);
A(1 TO 2):="10"; --等效於A(1):='1',A(2):='0'
A(4 DOWNTO 1):="1011";--等效於A(4):='1',A(3):=0,A(2):='1',A(1):='1'

4.集合塊賦值目標:


以一個集合的方式來賦值的。對目標中的每個元素進行賦值的方式有兩種,即位置關聯賦值方式和名字關聯賦值方式
對元素賦值示例:

S <= ('0','1','0','0');
(A,B,C,D) <= S;
--表示將A<='0'; B<='1'; C<='0'; D<='0'; 是位置關聯賦值

(3=>E, 4=>F, 2=>G(1), 1=>G(2)):= H;
--表示G(2):=H(1); G(1):=H(2); E:=H(3); F:=H(4) 是名字關聯賦值

 

二.轉向控制語句

 

一、IF條件語句


1.語句功能:
IF語句,是一種條件語句,它根據語句中所設置的一種或多種條件,有選擇地執行指定的順序語句。

2.語句結構:

3.應用舉例

--設計一個選擇器
library ieee;
use ieee.std_logic_1164.all;
entity ifcode is
	port (A,B,C: in boolean;
			Y: out boolean);
end entity ifcode;
architecture art of ifcode is
	begin
	process (A,B,C) is
		variable n: boolean;
		begin
		--if語句
		if a then n:=b;
		else n:=c;
		end if;
		y<=n;
	end process;
end architecture art;

RTL圖像

--設計8線-3線優先編碼器
library ieee;
use ieee.std_logic_1164.all;
entity coder is
	port (sr: in std_logic_vector(0 to 7);
			sc: out std_logic_vector(0 to 2));
end entity coder;
architecture art of coder is
	begin
	process(sr) is
		begin
		if(sr(7)='0') then sc<="000";
		elsif(sr(6)='0') then sc<="100";
		elsif(sr(5)='0') then sc<="010";
		elsif(sr(4)='0') then sc<="110";
		elsif(sr(3)='0') then sc<="001";
		elsif(sr(2)='0') then sc<="101";
		elsif(sr(1)='0') then sc<="011";
		else sc<="111";
		end if;
	end process;
end architecture art;
		

二、CASE選擇語句


1.CASE語句功能:
CASE語句,就是根據滿足的條件直接選擇多項順序語句中的一項執行

注意:條件語句中的"=>"不是操作符,只相當於"then"的作用,俗話說"那麼就是"的意思。

3.使用CASE語句的注意事項:
(1)條件句中的選擇值必須在表達式的取值範圍內。
(2)除非所有條件句中的選擇值能完整覆蓋CASE語句中表達式的取值,否則最末一個條件句中的選擇必須用“OTHERS”表示。它代表已給的所有條件句中未能列出的其他可能的取值,這樣可以避免綜合器插入不必要的寄存器。

(3)CASE語句中每一條語句的選擇只能出現一次,不能有相同選擇值的條件語句出現。
如果每一條語句的選擇可能出現多次,意味着同1個值會出現不同的語句,也就是經過邏輯綜合後,會出現不同的硬件,這與我們VHDL設計,必須保證硬件的唯一性是相違背的。
(4)CASE語句執行中必須選中,且只能選中所列條件語句中的一條。這表明CASE語句中至少要包含一個條件語句。

4.應用舉例

--用case語句描述4選1多路信號選擇器
library ieee;
use ieee.std_logic_1164.all;
entity mux41a is
	port (s1,s2: in std_logic;	--選擇控制信號
			a,b,c,d: in std_logic;	--輸入信號
			z: out std_logic);	--選擇器的輸出信號
end entity mux41a;
architecture art of mux41a is
	signal s: std_logic_vector(1 DOWNTO 0);
	begin
	s<=s1&s2;  --合併的目的是爲了方便後續的選擇控制
	process(s,a,b,c,d) is
		begin
		case s is
			when "00"=>z<=a;
			when "01"=>z<=b;
			when "10"=>z<=c;
			when "11"=>z<=d;
			when others=>z<='X';
		end case;
	end process;
end architecture art;
			

RTL

 

三.LOOP循環語句


 

1.語句功能:

 

LOOP語句就是循環語句,它可以使所包含的一組順序語句被循環執行,其執行次數可由設定的循環參數決定,循環的方式由NEXT和EXIT語句來控制。

 

2.語句格式:

3.循環方式:

循環方式由NEXT和EXIT語句控制。EXIT語句格式與NEXT語句的格式和操作功能非常相似,惟一的區別是NEXT語句是跳向LOOP語句的起始點,而EXIT語句則是跳向LOOP語句的終點。

 

三.其他順序語句

 

一.等待語句

1.WAIT語句功能
在進程中(包括過程中),當執行到WAIT等待語句時,運行程序將被掛起(Suspension),直到滿足此語句設置的結束掛起條件後,才重新開始執行進程或過程中的程序。但VHDL規定,已列出敏感量的進程中不能使用任何形式的WAIT語句。

2.WAIT語句格式:

3.WAIT應用舉例:

4.可綜合的WAIT語句

 

二.返回語句

 

1.返回語句(RETURN)只能用於子程序體中,並用來結束當前子程序體的執行。
2.語句格式:
RETURN  [表達式];

當表達式缺省時,只能用於過程,它只是結束過程,並不返回任何值;當有表達式時,只能用於函數,並且必須返回一個值。

 

三.空操作語句

 

1.空操作語句(NULL)不完成任何操作,它惟一的功能就是使邏輯運行流程跨入下一步語句的執行。
2.NULL常用於CASE語句中,爲滿足所有可能的條件,利用NULL來表示剩餘條件下的操作行爲。
3.有的EDA工具對NULL語句的執行會出現擅自加入鎖存器的情況,因此,應避免使用NULL語句,改用確定操作。

 

 

 

 

 

 

 

 

 

 

 

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