鎖存器(latch)---對(duì)脈沖電平敏感,在時(shí)鐘脈沖的電平作用下改變狀態(tài),當(dāng)Gate輸入為高電平時(shí),輸入D透明傳輸?shù)捷敵鯭;當(dāng)Gate從高變低或者保持低電平時(shí),輸出Q被鎖存保持不變。鎖存器是電平觸發(fā)的存儲(chǔ)器。
應(yīng)用場(chǎng)合:數(shù)據(jù)有效遲后于時(shí)鐘信號(hào)有效。這意味著時(shí)鐘信號(hào)先到,數(shù)據(jù)信號(hào)后到。在某些運(yùn)算器電路中有時(shí)采用鎖存器作為數(shù)據(jù)暫存器。
觸發(fā)器(flip-flop)---對(duì)脈沖邊沿敏感,其狀態(tài)只在時(shí)鐘脈沖的上升沿或下降沿的瞬間改變。當(dāng)時(shí)鐘信號(hào)C上升沿時(shí)刻(或者下降沿時(shí)刻),輸入D被賦值到輸出Q,其他情況保持鎖存。觸發(fā)器是邊沿觸發(fā)的存儲(chǔ)器。
應(yīng)用場(chǎng)合:時(shí)鐘有效遲后于數(shù)據(jù)有效。這意味著數(shù)據(jù)信號(hào)先建立,時(shí)鐘信號(hào)后建立。在CP上升沿時(shí)刻打入到寄存器。
比較:
1)、latch和flip-flop都是時(shí)序邏輯,所以輸出不但同當(dāng)前的輸入相關(guān)還同上一時(shí)間的輸出相關(guān);
2)、latch由電平觸發(fā),異步控制。在使能信號(hào)有效時(shí)latch相當(dāng)于通路,在使能信號(hào)無(wú)效時(shí)latch保持輸出狀態(tài)。觸發(fā)器由時(shí)鐘沿觸發(fā),同步控制。所以說(shuō),觸發(fā)器是一個(gè)同步版鎖存器;
3)、FPGA主要有觸發(fā)器和查找表組成,沒(méi)有標(biāo)準(zhǔn)的latch單元,一個(gè)latch需要更多資源才能實(shí)現(xiàn);
4)、一般的設(shè)計(jì)規(guī)則是:在絕大多數(shù)設(shè)計(jì)中避免產(chǎn)生latch。latch最大的危害在于不能過(guò)濾毛刺。這對(duì)于下一級(jí)電路是極其危險(xiǎn)的。所以,只要能用D觸發(fā)器的地方,就不用latch;
5)、if語(yǔ)句或者case語(yǔ)句不全很容易產(chǎn)生latch。在RTL描述中,如果一個(gè)信號(hào)在一個(gè)條件的分支中被賦值,而不是在所有分支中被賦值,則該信號(hào)的前一個(gè)值就要被保留。
同步情況下(敏感列表時(shí)時(shí)鐘邊沿)用觸發(fā)器實(shí)現(xiàn),保留到下一個(gè)時(shí)鐘邊沿為止,異步情況下(即敏感列表中是電平而非時(shí)鐘的邊沿)需要由鎖存器來(lái)實(shí)現(xiàn),保留到下一個(gè)已列出的分支情況的電平有效為止。
2、鎖存器的有與無(wú)
推導(dǎo)出鎖存器的一般規(guī)則是:
1)、如果在電平觸發(fā)的always語(yǔ)句所有可能的執(zhí)行過(guò)程(如if/case語(yǔ)句)中變量沒(méi)有全部被賦值,就會(huì)產(chǎn)生鎖存器;
2)、如果在邊沿觸發(fā)的always語(yǔ)句所有的可執(zhí)行過(guò)程中變量沒(méi)有被全部復(fù)制,會(huì)產(chǎn)生觸發(fā)器;
3)、如果在always語(yǔ)句中變量在if/case的所有分支中都被賦值則綜合成組合邏輯;
always @ (Toggle)
case (Toggle) //synthesis full_case
2'b01: NextToggle = 2'b10;
2'b10: NextToggle = 2'b01;
endcase
always @ (Toggle)
case (Toggle)
2'b01: NextToggle = 2'b10;
2'b10: NextToggle = 2'b01;
endcase
第一種寫(xiě)法用編譯命令synthesis full_case把case語(yǔ)句補(bǔ)全,效果和default語(yǔ)句或?qū)ase列舉出所有情況類(lèi)似。
此時(shí)沒(méi)有鎖存器,只用兩個(gè)2輸入的LUT完成2輸入2輸出的邏輯功能,純粹的組合邏輯。
第二種寫(xiě)法沒(méi)有將case的所有情況列舉出,就產(chǎn)生了鎖存器LD。
查看Xilinx的庫(kù)手冊(cè),LD是透明鎖存器,當(dāng)G使能的時(shí)候,Q輸出D的值;當(dāng)G不使能的時(shí)候,Q保持上一狀態(tài)的值。
以下改用的時(shí)鐘的上調(diào)沿觸發(fā),生成了兩個(gè)D觸發(fā)器,當(dāng)時(shí)鐘上調(diào)沿來(lái)臨時(shí)用輸入端D更新輸出端Q的數(shù)據(jù)。
always @ (posedge clk)
case (Toggle)
2'b01: NextToggle = 2'b10;
2'b10: NextToggle = 2'b01;
endcase
這說(shuō)明邊沿觸發(fā)的always塊中,即使if...else或者case沒(méi)寫(xiě)全也不會(huì)出現(xiàn)鎖存器。
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7430瀏覽量
163517 -
電平
+關(guān)注
關(guān)注
5文章
357瀏覽量
39812 -
鎖存器
+關(guān)注
關(guān)注
8文章
904瀏覽量
41420 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
1995瀏覽量
61012
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論