組合電路就是一個真值表,一個函數(shù),一組輸入對應(yīng)一組輸出,當(dāng)前什么輸入就根據(jù)函數(shù)得到什么輸出,實時跟蹤變化,這樣也就容易有冒險、競爭之類的問題產(chǎn)生毛刺。
鎖存器:電平敏感
always @ (enable)
??if (enable) ?q <= d;
那就是說,在enable有效的時間內(nèi),q完全跟蹤d的值,比如在這個時間內(nèi)d變化了,q跟著變化,當(dāng)enable失效的時候,q存儲d最后的值。
觸發(fā)器:我們把輸出只在時鐘某個時刻變化的玩意兒叫觸發(fā)器。邊沿敏感
always @ (posedge enable)
??if (enable) q <= d;
這個便是一個d觸發(fā)器。只在enable(一般大家都叫它clock)的上升沿q采樣d,而且在每個時鐘的上升沿都會采樣。
在fpga中一般避免用latch,因為在FPGA中觸發(fā)器資源豐富,不用白不用,latch由于是電平觸發(fā)的,相對觸發(fā)器來說容 易產(chǎn)生毛刺,電路不穩(wěn)定.
latch的優(yōu)點是完成同一個功能所需要的門較觸發(fā)器要少,所以在asic中用的較多
?
那最后再說寄存器,寄存器這個玩意兒是一個概念層次的東西,1個寄存器就是能存1bit數(shù)據(jù)的東西。既可以用觸發(fā)器實現(xiàn)也可以用鎖存器實現(xiàn)。以觸發(fā)器為例,由于觸發(fā)器每個時鐘上升沿都會采樣,所以觸發(fā)器會有一個反饋邏輯,當(dāng)load有效的時候才會采樣d,否則保持不變。
always @ (posedge clk or negedge rst_n)
if (!rst_n)
q <= 0;
else if (load)
q <= d;
這便就是一個寄存器了。
1. 寄存器
在實際的數(shù)字系統(tǒng)中,通常把能夠用來存儲一組二進(jìn)制代碼的同步時序邏輯電路稱為寄存器.由于觸發(fā)器內(nèi)有記憶功能,因此利用觸發(fā)器可以方便地構(gòu)成寄存器。由于一個觸發(fā)器能夠存儲一位二進(jìn)制碼,所以把n個觸發(fā)器的時鐘端口連接起來就能構(gòu)成一個存儲n位二進(jìn)制碼的寄存器。
2 . 鎖存器
由若干個鐘控D觸發(fā)器構(gòu)成的一次能存儲多位二進(jìn)制代碼的時序邏輯電路。數(shù)據(jù)有效遲后于時鐘信號有效。這意味著時鐘信號先到,數(shù)據(jù)信號后到。在某些運算器電路中有時采用鎖存器作為數(shù)據(jù)暫存器。
3. 鎖存器與寄存器的區(qū)別:
(1)寄存器是同步時鐘控制,而鎖存器是電位信號控制。鎖存器一般由電平信號控制,屬于電平敏感型。寄存器一般由時鐘信號信號控制,屬于邊沿敏感型。
(2)寄存器的輸出端平時不隨輸入端的變化而變化,只有在時鐘有效時才將輸入端的數(shù)據(jù)送輸出端(打入寄存器),而鎖存器的輸出端平時總隨輸入端變化而變化,只有當(dāng)鎖存器信號到達(dá)時,才將輸出端的狀態(tài)鎖存起來,使其不再隨輸入端的變化而變化
可見,寄存器和鎖存器具有不同的應(yīng)用場合,取決于控制方式以及控制信號 和數(shù)據(jù)之間的時間關(guān)系:若數(shù)據(jù)有效一定滯后于控制信號有效,則只能使用鎖存器;數(shù)據(jù)提前于控制信號而到達(dá)并且要求同步操作,則可用寄存器來存放數(shù)據(jù)。