並行語句概述
概念和定義
相對於傳統的軟件描述語言,並行語句結構是最具VHDL特色的:並行運行。
物理意義:硬件連接關系 每一並行語句內部的語句運行方式可以有兩種不同的方式,即並行執行方式(如塊語句)和順序執行方式(如進程語句)。
因此,VHDL並行語句勾畫出了一幅充分表達硬件電路的真實的運行圖景
種類
格式
並行語句在結構體中的使用格式如下: ARCHITECTURE 結構體名 OF 實體名 IS 說明語句; BEGIN 並行語句; END ARCHITECTURE 結構體名;
並行語句介紹
1、並行信號賦值語句
格式
<signal_name> <= <expression>;
2、條件信號賦值語句
多驅動源問題
驅動源實際上就是對信號賦值的表達式.
在結構中,信號只能被賦值一次。
等價於
小提示:在賦值時,存在有bit 和 vector之分。
當條件信號賦值語句的else時,
3、選擇信號賦值語句
注意考慮和不考慮所有的條件生成硬件可能不同
WHEN OTHERS 語句代表了沒有被具體說明的其他條件。
With和When的區別
在with語句中的每一個選項必須是唯一的 和When語句相比,
在with語句中,選項由with表達式指定,而在when語句中,選項可以是分立的表達式。
When語句具有優先級,而with語句沒有優先級(因為每個選項之間是互斥的)
Tips:
VHDL(with) == C++(Switch)
VHDL(when) == C++(if)
VHDL(when …… else ) == C++(if …… else if …… else )
4、進程語句(狀態機)
進程(PROCESS)語句提供了一種用算法(順序語句)描述硬件行為的方法。
進程實際上是用順序語句描述的一種進行過程,也就是說進程用於描述順序事件。
PROCESS語句結構包含了一個代表着設計實體中部分邏輯行為的、獨立的順序語句描述的進程。
一個結構體中可以有多個並行運行的進程結構,而每一個進程的內部結構卻是由一系列順序語句來構成的。
進程定義的語法格式
[進程標號:] process [(敏感信號表)] [is] [進程說明部分] begin 順序描述語句 end process [進程標號];
進程兩種狀態:
1、執行
2、掛起
組合邏輯電路 和 時鍾邏輯電路
進程語句的執行
敏感表與wait語句
敏感表和WAIT語句等效,但WAIT語句更多樣化
一個進程不可既有敏感表,又有WAIT語句,但要有一種
☆ 邏輯綜合對WAIT有嚴格的限制(只有wait until語句可以綜合)
進程內部執行時間(process 到end process)
行為仿真角度:一個VHDL模擬器最小分辨時間δ
綜合和硬件運行角度:執行時間為0
WAIT UNTIL 語法:
wait until condition;
condition條件滿足時才會執行 可綜合
architecture arc2 of process_wait is begin process begin wait until clk'event and clk = '1'; q<=d; end process; end architecture;
WAIT ON 語法:
wait on sensitivity list;
sensitivity list信號敏感表里任意一個發生變化才會執行
不太可能綜合(特別是時序電路,實際電路不可能接受上升沿和下降沿觸發)
WAIT FOR 語法:
wait for time;
只做仿真,不可綜合,用於產生延時
5、塊語句
塊(BLOCK)語句是一種將結構體中的並行描述語句進行組合的方法,
它的主要目的是改善並行語句及其結構的可讀性,或是利用BLOCK的保護表達式關閉某些信號。
格式
塊標號:BLOCK [(塊保護表達式)] [IS] 接口說明; 類屬說明; BEGIN 並行語句; END BLOCK [塊標號];
6、元件例化語句
元件例化就是將預先設計好的設計實體定義為一個元件,
然后利用特定的語句將此元件與當前的設計實體中的指定端口相連接,從而為當前設計實體引入一個新的低一級的設計層次。
元件例化語句由兩部分組成,前一部分是將一個現成的設計實體定義為一個元件的語句,第二部分則是此元件與當前設計實體中的連接說明。
COMPONENT語句指定了本結構體中所調用的是哪一個現成的邏輯描述模塊。它既可以出現在結構體中,也可以出現在程序包中。
COMPONENT語句的書寫格式為:
COMPONENT 元件名 [IS] [GENERIC(類屬表)說明;] [PORT (端口名表)說明;] END COMPONENT 元件名;
元件例化語句
如果在描述一個元件A時,要引用(用“例化”(Instantiations)一詞表示這種引用)子元件B、C和D,可以采用元件例化語句引用一個子元件。
元件例化語句的格式為:
例化標號名:元件名PORT MAP(<關聯表>);
元件名是COMPONENT語句中說明的名字。元件說明中的端口稱為局部端口。
在元件例化語句時,端口的關聯表必須將每個局部端口與實際連接的信號聯系起來。
Tips:
元件例化語句,好比英語作文中的句型或者是短語搭配,實際端口不一樣。通過實例化操作,能把對應的 sb,sth,be 對上號。
7、生成語句
生成語句作用:復制
根據某些條件設置好某一元件或設計單位,可以用生成語句復制一組完全相同的並行元件或設計單元電路
[標號:] for 循環變量 in 取值范圍 generate [聲明部分] begin 並行語句; end generate [標號];
取值范圍: 表達式 to 表達式 或者 表達式 downto 表達式
8、並行過程調用語句
並行過程調用語句作為並行語句直接出現在結構體中
調用語句可以為:
過程(Procedure)或函數(Function)
調用的語法格式:
過程名/函數名(關聯參數表)
函數和過程統稱子程序
函數語法格式:
FUNCTION function_name (input_parameters) RETURN data_type IS [聲明部分]; BEGIN 順序語句; RETURN 聲明名; END [FUNCTION] [function_name];
函數一般定義在包中(聲明及實現)
過程語法格式:
PROCEDURE procedure_name (mode_parameters) IS [聲明部分] BEGIN 順序語句; END [PROCEDURE ] [procedure_name];
過程一般定義在包中(聲明及實現)
函數和過程的區別
函數參數只能使用IN,過程中參數為IN、INOUT、OUT三種
函數只有一個返回值,過程可以通過參數返回多個返回值