FPGA實戰 兩個D觸發器的疑惑

2021-08-25 14:49:18 字數 2041 閱讀 7865

因為去實習,所以最近都沒有更新,特來更新一發。

最近發現乙個問題,就是很多**中會特地的新建乙個d觸發器用來鎖存訊號,讓很多人都比較疑惑,明明乙個d觸發器就可以檢測輸入是上公升沿和下降沿,為什麼要用兩個?第二個觸發器的作用是什麼呢?我們舉乙個最簡單的例子,按鍵的輸入控制輸出,可以從**和rtl圖中看出不同

下面是用乙個d觸發器的**(接下面的圖是rtl圖)

下面是用兩個d觸發器的**(接下面的圖是rtl圖)差別在於多了乙個led_r1暫存器

解析:一開始我也覺得第二個暫存器是多餘的,但是通過思考還是想到了比較合理的原因,首先我們要了解乙個概念,就是建立時間和保持時間(幾乎所有硬體相關筆試文件裡都有的問答題)。

什麼是 setup和 hold時間?

答:setup/hold time 用於測試晶元對輸入訊號和時鐘訊號之間的時間要求。建立時間(setup  time)是指觸發器的時鐘訊號上公升沿到來以前,資料能夠保持穩 定不變的時間。輸入資料訊號應提前時鐘上公升沿(如上公升沿有效)t 時間到達晶元,這個t就是建立時間通常所說的 setuptime。如不滿足 setup time,這個資料就不能被這一時鐘打入觸發器,只有在下乙個時鐘上公升沿到來時,資料才能被打入 觸發器。保持時間(hold time)是指觸發器的時鐘訊號上公升沿到來以後,資料保持穩定不變的時間。如果 hold time 不夠,資料同樣不能被打入觸發器。

以上就是用2個觸發器的問題所在,當我們按鍵時,很有可能會正好碰到與時鐘上公升沿時間距離很短的時候(也就是建立時間不足),這時候觸發器會進入亞穩態(這會導致在後面組合電路中有時為低電平有時為高電平),且在下個上公升沿到來之前都不會進入穩態,這就為後續電路埋下隱患。解決方案就是用多個觸發器,第二個觸發器實際上是在按鍵按下的第二個上公升沿接收到的正確訊號,這時候第乙個觸發器大概率已經進入穩態,所以可以正常輸出,兩者同時出現亞穩態的情況也存在不過概率比較低,日常中一般兩個觸發器就可以滿足要求,這就是為什麼要用兩個觸發器。

這就是實踐和理論的區別,理論中的d觸發器可是沒有建立和保持實踐的,所以在理論中2個d觸發器可以說是浪費,但是在實踐中是必不可少的。

兩個經典的Oracle觸發器示例

案例一 題目 觸發器 新增員工資訊,流水號作為自動編號 通過序列生成 並且判斷如果工資小於0,則改為0 如果大於10000,則改為10000。create table emp2 e id number,e no number,e name varchar2 20 e sal number selec...

兩個經典的Oracle觸發器示例

from 案例一 題目 觸發器 新增員工資訊,流水號作為自動編號 通過序列生成 並且判斷如果工資小於0,則改為0 如果大於10000,則改為10000。create table emp2 e id number,e no number,e name varchar2 20 e sal number ...

兩個經典的Oracle觸發器示例

案例一 題目 觸發器 新增員工資訊,流水號作為自動編號 通過序列生成 並且判斷如果工資小於0,則改為0 如果大於10000,則改為10000。create table emp2 e id number,e no number,e name varchar2 20 e sal number selec...