根據(jù)邏輯電路的不同特點(diǎn),數(shù)字電路分為組合邏輯和時(shí)序邏輯,明德?lián)P粉絲里的同學(xué)提出,無法正確區(qū)分,今天讓我跟一起來學(xué)習(xí)一下兩種邏輯的區(qū)別以及使用環(huán)境。
·時(shí)序邏輯和組合邏輯的區(qū)別
關(guān)于組合邏輯和時(shí)序邏輯的不同,我們可以從三方面來理解,分別是code(代碼),電路圖和波形圖三方面。
從代碼層面來看,時(shí)序邏輯即敏感列表里面帶有時(shí)鐘上升沿,如果是沒有上升沿或者是帶有“*”號(hào)的代碼,為組合邏輯。
電路層面,兩種邏輯反映的電路也有不同,時(shí)序邏輯相當(dāng)于在組合邏輯的基礎(chǔ)上多了一個(gè)D觸發(fā)器。
波形圖層面,組合邏輯的波形是即刻反映變化的,與時(shí)鐘無關(guān);但是時(shí)序邏輯的波形不會(huì)立刻反映出來,只有在時(shí)鐘的上升沿發(fā)生變化。
用一個(gè)簡單的例子來區(qū)分學(xué)習(xí)下,如計(jì)算c=a+b。
在代碼層面,時(shí)序邏輯代碼表示如下,可以看到此代碼有“posedge“時(shí)鐘上升沿,即表示有一個(gè)D觸發(fā)器,a+b的結(jié)果c是在D觸發(fā)器發(fā)出指令后才進(jìn)行輸出的。

組合邏輯則如下所示,是不帶上升沿的,有“*”號(hào)的,直接輸出a+b=c的值,不進(jìn)行額外操作:

對(duì)比兩種邏輯的代碼表示,可以看出同樣是輸出c的值,不同的邏輯輸出時(shí)間卻不同,時(shí)序邏輯是在時(shí)鐘上升沿輸出,組合邏輯則直接輸出。
電路圖層面,組合邏輯為一個(gè)加法器連接a和b,緊接著立刻給到c,如下圖所示,可以看到a+b得出的值c直接輸出,沒有進(jìn)行任何額外操作:

時(shí)序邏輯的電路圖加法器連接的a和b沒有變,但是c的值在輸出部分,不會(huì)直接輸出,D觸發(fā)器就像一扇門,信號(hào)值c‘停留在門前,當(dāng)D觸發(fā)器收到了時(shí)鐘clk上升沿的信號(hào),才會(huì)把門打開,輸出信號(hào)c的值,如下圖所示:
可以看到,組合邏輯是直接輸出信號(hào)c,時(shí)序邏輯需要D觸發(fā)器收到時(shí)鐘上升沿信號(hào)后才會(huì)輸出信號(hào)c。
在波形圖層面,我們可以畫出時(shí)序圖來分析,如下圖所示。可以看出第一個(gè)時(shí)鐘時(shí)a=1,b=2,此時(shí)組合邏輯立刻得出c=3,是跟時(shí)鐘沒有關(guān)系的;但是時(shí)序邏輯一定要在下一個(gè)時(shí)鐘的上升沿處才得出c=3的結(jié)果;
以此類推,后面的原理是一樣的,當(dāng)a=2,b=4時(shí),組合邏輯馬上得出c=6,時(shí)序邏輯在第3個(gè)時(shí)鐘上升沿得出c=6。
綜上所述,我們進(jìn)行一下總結(jié),組合邏輯任意時(shí)刻的輸出僅僅取決該時(shí)刻的輸入,與時(shí)鐘無關(guān);時(shí)序邏輯先算好當(dāng)前輸入信號(hào)的結(jié)果,但還不影響輸出,只有等到時(shí)鐘上升沿的一瞬間,才把結(jié)果給了輸出。
· 時(shí)序邏輯和組合邏輯的使用
相信大家已經(jīng)可以非常清晰的區(qū)分組合邏輯和時(shí)序邏輯,下面我們就討論一下組合邏輯和時(shí)序邏輯的使用環(huán)境。
首先我們需要保證信號(hào)的結(jié)果是正確的,只要滿足目標(biāo)需求,這時(shí)使用時(shí)序邏輯還是組合邏輯都是可以的(這里我們討論的是大多數(shù)情況,但也有例外,例如模塊的輸出一般要求是時(shí)序邏輯)。
在實(shí)際設(shè)計(jì)中,為了便于操作,我們可以首先考慮用時(shí)序邏輯,看是否能滿足設(shè)計(jì)要求。如果無法滿足目標(biāo)要求,需要湊時(shí)序,那么就考慮改為組合邏輯。
舉個(gè)例子便于大家更好地理解,如下圖所示,假設(shè)有一個(gè)模塊,有兩個(gè)信號(hào)dout和dout_vld,其中dout表示數(shù)據(jù),dout_vld表示數(shù)據(jù)有效性。我們假設(shè)需要該模塊先后輸出兩個(gè)數(shù)據(jù)6和1。
如下圖所示,該波形輸出就是正確的,只要設(shè)計(jì)能保證正確性,那不管使用組合邏輯還是時(shí)序邏輯,都是可以的。
但假設(shè)現(xiàn)在輸出的結(jié)果如下圖所示,輸出的是8和5,不是我們目標(biāo)需要的6和1,并且可以看到,dout_vld比dout晚了一個(gè)時(shí)鐘,這個(gè)時(shí)候就可以考慮設(shè)計(jì)dout_vld的時(shí)序邏輯改為組合邏輯,將信號(hào)dout_vld提前一拍,就可以得到正確的結(jié)果。
另一種方法,假設(shè)dout是組合邏輯設(shè)計(jì)的,就是把dout改為時(shí)序邏輯實(shí)現(xiàn),將dout推遲一拍,達(dá)到信號(hào)對(duì)齊的效果。