2011年3月28日 星期一

難搞的wait until...

(3) 問題3
可否用wait until的方式寫asynchrous reset for d-ff?
//========== 以上蕭兄的問題3結束 ==========

我們知道wait until是可以寫出D-FF的
但對於比較了解或常寫VHDL的人而言
寫D-FF一定不會用wait until的語法來寫
一定會寫在process裡面
因為以D-FF的行為及架構而言
它是屬於循序邏輯(sequential logic, S.L.)
所以會把它擺在process裡面

但是這個問題的重點
是在於wait until的語法
並不屬於S.L.這一塊

先來看一下VHDL的語法架構吧

上面的VHDL code正是一個D-FF
而在Circuit model中, 所有的描述式都是同時進行的(simultaneously)
也就是說, 不管在這裡面寫幾百個process
這些process都是同時發生的
但在process內部, 卻是循序式發生(sequential)

說到這裡, 也許有人注意到了
wait until跟rising_edge一樣
擺在process裡面的
如下列程式

architecture Behavioral of out_test is
begin
    process
    begin
        wait until (clk = '1' and clk 'event);
            d_out <= d_in;
    end process;
end Behavioral;

注意到了嗎
process後的sensitivity list不見了!!!
而且呢
wait until變成一行完整的"敘述句"!!!
這代表什麼呢???

回顧VHDL語法的本質
process可分為兩類

  1. process with sensitivity list
  2. process without sensitivity list

在process with sensitivity list中
sensitivity list所扮演的角色是"被監視且會改變的訊號"
(signal that is monitored for changes)
主要就是觀察這些在list中的訊號
如果產生改變的時候, 該做些什麼事
在這種情況下, 是不能使用wait的敘述的!!!
因為在有sensitivity list存在的情況下
隱含著兩種意義:

  1. 那些訊號隱含著"wait on"的語意
  2. process的執行只是"暫時"地結束於end process

那麼在process without sensitivity list呢
如同上述所言, 它是存在一個"隱含的"wait敘述
當沒有加上sensitivity list, 就一定得使用wait敘述
不然沒有會造成sensitivity源的存在

當我們今天若使用單一個sensitivity source
是可以用wait until來進行撰寫
如果需要去監視多個訊號源
像蕭兄所提的, 寫個asynchronous D-FF
(因為有async.的reset與clk兩個sensitivity source)
很抱歉, 你必須使用process with sensitivity list的寫法
除非你老媽變成兔子(咦???)
這樣才有辦法實現

所以各位可以把wait until當成是一個
實現最很簡單功能的D-FF
簡單到連reset訊號都不見了...
(這D-FF...不就要領殘障手冊了...)

其實有關於wait敘述有太多的問題需要交代清楚
它在VHDL裡面是個非常弔詭的語法
因為它存在的地方實在太多了
我會加以整理後另闢一篇來跟各位討論

以上就是"蕭兄的客問答"
如果這些文章能對各位看倌有所幫助
那麼蕭兄
你就是造福人群的"罪人" "恩人" (^.^b)

1 則留言:

oic 提到...

很有趣的討論!一直以來都有留意你和蕭兄的blog.對於async dff必須使用process with sensitivity list的寫法, 想發表一下意見。其實能否寫成這樣?

process
begin
wait until reset'event or clk'event ;
if reset = '1' then
q <= '0' ;
elsif clk'event and clk = '1' then
q <= d ;
end if ;
end process ;

這樣就不用sensitivity list了。不過這種寫法跟有sensitivity list的寫法差不多。另外一種寫法是用 wait on reset, clk 代替 wait until。