D觸發器、波形、代碼(轉)


在學習verilog之前,我們先學習一下D觸發器以及它的代碼。

FPGA的設計基礎是數字電路,因此很多同學會認為我們要先學好數字電路之后,才學習FPGA。但是,數字電路教材的內容很多.例如:JK觸發器、RS觸發器、真值表、卡諾圖等。但是,這里的很多內容其實已經過時了。此外,對於FPGA的學習來講,我們只用到了其中很少很少的一部分內容。如果沒有數字電路的基礎,我們建議就看一部分,知道D觸發器就夠了。

那么D觸發器是什么樣子的呢?

 

 

這個就是D觸發器的示意圖。其中,clk為時鍾,rst_n為復位,d為輸入,q為輸出。這個功能非常簡單,復位有效的時候,這個q的值你可以認為是0。如果復位無效的時候,那么在時鍾上升沿的時候,就把d的值給了q。就是這么簡單,記住這個動作,先有時鍾上升沿,再有把d的值給了q。這就意味着,時鍾上升沿的時候q的值還是沒變的。只有時鍾上升沿之后,q的值才變化。這是一個很重要的概念,也就是說先有時鍾上升沿才有q的變化。如果下一個時鍾上升沿沒有到來,那么q的值就保持不變。因此,q的值是在時鍾上升沿之后一點點變化。這就是D觸發器,我們所有的FPGA電路都是基於這個結構來進行設計的。就是這么簡單,諸如JK觸發器、RS觸發器之類完全不需用到。我們就用最簡單的結果來進行設計。有些同學會問為什么如此簡單就足以進行設計呢?其實我們要做一個系統,一個穩定的系統,一定是從一個最簡單的結構搭建起來的,而不會是一個很復雜的結構,因此我們FPGA電路里面就是利用D觸發器的穩定性,把它搭建起來的。

那么D觸發器所對應的波形圖是怎么樣的呢?

 

 

這個是波形圖,你可以看一看q,它都是在時鍾上升沿之后變化的,在第2個時鍾上升沿,看到d的值為0,那么q就輸出0,q的值就保持不變了直到下一個時鍾上升沿的到來。

下一個時鍾上升沿d的值為1,那么q就輸出1,如此類推。這就是我們d觸發器的功能,非常非常地簡單。

那么這個D觸發器在FPGA里面用verilog代碼怎么描述呢?

 

 

其實就是這樣的代碼,可以看出來,這個代碼跟這個D觸發器是完全一樣的,描述的就是D觸發器。怎么講,可以分析一下這個代碼:

1····總是(always)在時鍾(clk)上升沿(posedge)的時候或者下降沿(negedge)復位(rst_n)的時候執行2~8的代碼,如果不滿足則q的值不變。

2····如果是復位就執行3的代碼;

3····q就等於0;

5····如果不是復位,而是時鍾上升沿就執行6的代碼;

6····將d的值給了q;

這個代碼描述的就是一個D觸發器,一個always就生成了一個D觸發器。你可以認為D觸發器就是我們電路上的一個元件。

總結要點:

1. q的值只有在時鍾上升沿才變化。

2. 時鍾上升沿時,將d的值賦給q。即先有上升沿,才有信號變化。

為什么強調先有上升沿,才有信號變化呢?有什么用呢?例如:

 

 

明德揚的波形,默認的情況下都是同步信號,這意味着en和dout都是由D觸發器產生的。

因此信號的變化,都是在時鍾上升沿之后才開始的,en也是在時鍾上升沿之后一點點才變化的;

在2的上升沿這個點上看到en的值是0的,因為en還沒變化;

而在3的上升沿這個點上看到en的值是1,dout的值是0;

最后,在10的上升沿這個點上看到dout的值是1。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM