歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

FPGA時鐘沿采樣的問題

眾所周知,時鐘相對於FPGA就像心髒對於人體。在時序邏輯設計中,每一個信號的處理都與時鐘息息相關,我們通常取時鐘的邊沿觸發作為信號出來的觸發條件。那麼系統是如何在時鐘沿對信號進行處理的呢?

假如下程序: moduel test (clk,a,b);

input clk;

input a;

output b;

always @ (posedge clk)

begin b<=a; end

endmodule

如上程序,假如A在時鐘上升沿的時候變化,那麼B會在下一個時鐘沿到來時被賦值。這樣,在我們一般的思維中都會形成這種思想:時鐘在采集到數據後,下個時鐘沿才會賦值。然而,編寫testbench文件,使a在15ps時賦值為1,時鐘周期為10ps,得出波形是A和B同時在時鐘上升沿被賦值為1。這是為什麼呢?

其實,我們的傳統思維是錯誤的,B之所以會在下一個時鐘沿到來時才會變化,是因為在前一個上升沿,系統沒有采集到A的變化,在第二個上升沿到來時采集到A的值,並直接賦值給了B。而在testbench中,A在15ps時就已經被賦值為1,所以時鐘沿采集到了A的變化而直接賦值給了B。其實如果不是理想情況,B的賦值會是在時鐘沿變化後保持為1的一段時間內,因為賦值會有一個小的時間延遲。

既然講到了賦值,那麼接下來講一下阻塞賦值與非阻塞賦值的區別。其實如果是在不同的進程當中,阻塞賦值和非阻塞賦值並沒有區別。而只是在同一個進程中有一個變量值被賦值給另一個變量時,才有區別。這時,非阻塞賦值相當與並列執行,阻塞賦值相當於順序執行。

Copyright © Linux教程網 All Rights Reserved