根據邏輯電路的不同特點,數字電路分為組合邏輯和時序邏輯,明德揚粉絲里的同學提出,無法正確區分,今天讓我跟一起來學習一下兩種邏輯的區別以及使用環境。
時序邏輯和組合邏輯的區別
關于組合邏輯和時序邏輯的不同,我們可以從三方面來理解,分別是code(代碼),電路圖和波形圖三方面。
從代碼層面來看,時序邏輯即敏感列表里面帶有時鐘上升沿,如果是沒有上升沿或者是帶有“*”號的代碼,為組合邏輯。
電路層面,兩種邏輯反映的電路也有不同,時序邏輯相當于在組合邏輯的基礎上多了一個D觸發器。
波形圖層面,組合邏輯的波形是即刻反映變化的,與時鐘無關;但是時序邏輯的波形不會立刻反映出來,只有在時鐘的上升沿發生變化。
用一個簡單的例子來區分學習下,如計算c=a+b。
在代碼層面,時序邏輯代碼表示如下,可以看到此代碼有“posedge“時鐘上升沿,即表示有一個D觸發器,a+b的結果c是在D觸發器發出指令后才進行輸出的。
組合邏輯則如下所示,是不帶上升沿的,有“*”號的,直接輸出a+b=c的值,不進行額外操作:
對比兩種邏輯的代碼表示,可以看出同樣是輸出c的值,不同的邏輯輸出時間卻不同,時序邏輯是在時鐘上升沿輸出,組合邏輯則直接輸出。
電路圖層面,組合邏輯為一個加法器連接a和b,緊接著立刻給到c,如下圖所示,可以看到a+b得出的值c直接輸出,沒有進行任何額外操作:
時序邏輯的電路圖加法器連接的a和b沒有變,但是c的值在輸出部分,不會直接輸出,D觸發器就像一扇門,信號值c‘停留在門前,當D觸發器收到了時鐘clk上升沿的信號,才會把門打開,輸出信號c的值,如下圖所示:
可以看到,組合邏輯是直接輸出信號c,時序邏輯需要D觸發器收到時鐘上升沿信號后才會輸出信號c。
在波形圖層面,我們可以畫出時序圖來分析,如下圖所示??梢钥闯龅谝粋€時鐘時a=1,b=2,此時組合邏輯立刻得出c=3,是跟時鐘沒有關系的;但是時序邏輯一定要在下一個時鐘的上升沿處才得出c=3的結果;
以此類推,后面的原理是一樣的,當a=2,b=4時,組合邏輯馬上得出c=6,時序邏輯在第3個時鐘上升沿得出c=6。
綜上所述,我們進行一下總結,組合邏輯任意時刻的輸出僅僅取決該時刻的輸入,與時鐘無關;時序邏輯先算好當前輸入信號的結果,但還不影響輸出,只有等到時鐘上升沿的一瞬間,才把結果給了輸出。
時序邏輯和組合邏輯的使用
相信大家已經可以非常清晰的區分組合邏輯和時序邏輯,下面我們就討論一下組合邏輯和時序邏輯的使用環境。
首先我們需要保證信號的結果是正確的,只要滿足目標需求,這時使用時序邏輯還是組合邏輯都是可以的(這里我們討論的是大多數情況,但也有例外,例如模塊的輸出一般要求是時序邏輯)。
在實際設計中,為了便于操作,我們可以首先考慮用時序邏輯,看是否能滿足設計要求。如果無法滿足目標要求,需要湊時序,那么就考慮改為組合邏輯。
舉個例子便于大家更好地理解,如下圖所示,假設有一個模塊,有兩個信號dout和dout_vld,其中dout表示數據,dout_vld表示數據有效性。我們假設需要該模塊先后輸出兩個數據6和1。
但假設現在輸出的結果如下圖所示,輸出的是8和5,不是我們目標需要的6和1,并且可以看到,dout_vld比dout晚了一個時鐘,這個時候就可以考慮設計dout_vld的時序邏輯改為組合邏輯,將信號dout_vld提前一拍,就可以得到正確的結果。
另一種方法,假設dout是組合邏輯設計的,就是把dout改為時序邏輯實現,將dout推遲一拍,達到信號對齊的效果。
通過上面的詳細解釋,相信大家都可以掌握時序邏輯和組合邏輯的原理和使用,更多時序知識,請參考時序約束培訓教程。更好的思路就加微信進群,我們互相討論互相學習。
審核編輯:湯梓紅
-
電路圖
+關注
關注
10324文章
10718瀏覽量
528288 -
數字電路
+關注
關注
193文章
1600瀏覽量
80505 -
觸發器
+關注
關注
14文章
1996瀏覽量
61055 -
組合邏輯
+關注
關注
0文章
47瀏覽量
10033 -
時序邏輯
+關注
關注
0文章
39瀏覽量
9148
發布評論請先 登錄
相關推薦
評論