基本概念
1、名詞解釋
鎖存器(latch)是電平觸發的存儲單元,數據存儲的動作取決於輸入時鍾(或者使能)信號的電平值,盡當鎖存器處於使能狀態時,輸出才會隨着數據輸入發生變化。
觸發器(flipflop)是邊沿敏感的存儲單元,數據存儲的動作由某一信號的上升或者下降沿行同步的。(鍾控D觸發器其實就是D鎖存器,邊沿D觸發器才是真正的D觸發器)
寄存器(register)是用來暫時存放參與運算的數據和運算結果。在實際的數字系統中,通常把能夠用來存儲一組二進制代碼的同步時序邏輯電路稱為寄存器。
2、鎖存器和觸發器的區別
鎖存器同其所有的輸入信號相關,是電平觸發,當輸入信號變化時鎖存器就變化,沒有時鍾端,屬於異步電路設計,時序分析困難且浪費大量芯片資源。
觸發器受時鍾控制的邊沿觸發,只有在時鍾觸發時才采樣當前的輸入產生輸出,當然因為鎖存器和觸發器二者都是時序邏輯,所以輸出不但同當前的輸入相關,還同上一時間的輸出相關。
3、觸發器、鎖存器、寄存器的區別?
由於觸發器內有記憶功能,因此利用觸發器可以方便地構成寄存器。由於一個觸發器能夠存儲一位二進制碼,所以把n個觸發器的時鍾端口連接起來就能構成一個存儲n位二進制碼的寄存器。從寄存數據的角度來講,寄存器和鎖存器的功能是相同的;它們的區別在於寄存器是同步時鍾控制,而鎖存器是電位信號控制。
4、鎖存器有哪些缺點?
鎖存器在不鎖存數據時,輸出端的信號隨輸入信號變化,就像信號通過一個緩存器一樣;一旦鎖存信號起鎖存作用,則數據被鎖住,輸入信號不起作用。因此鎖存器也稱為透明鎖存器,指的是不鎖存時輸出對輸入是透明的。此外鎖存器還有以下一些缺點:
(1)對毛刺敏感,不能異步復位,所以上電后處於不確定的狀態。
(2)鎖存器會使靜態時序分析變得非常復雜。
(3)在 FPGA 中,基本的單元時由查找表和觸發器組成的,若生成鎖存器反而需要更 多的資源。
5、觸發器有哪些類型?
根據邏輯功能不同:RS觸發器、D觸發器、JK觸發器、T觸發器和T'觸發器等。
根據觸發方式不同:電平觸發器、邊沿觸發器和主從觸發器等。
根據電路結構不同:基本RS觸發器,同步觸發器、維持阻塞觸發器、主從觸發器和邊沿觸發器等。
D鎖存器和D觸發器專題
1、D鎖存器
所謂的 D 鎖存器,就是能夠將輸入的單路數據D存入到鎖存器中的電路,D鎖存器的電路圖如下圖所示:
D鎖存器的特性表如下所示,Qn指觸發前的狀態,Qn+1指觸發后的狀態。
當CLk為0時,Qn+1=Qn,即保持之前的狀態;
當CLK為1時,Qn+1=D,即狀態由D來決定;
現在來看一下波形,在以后的設計中的Q實際上是Qn+1,不要搞錯了!這里要多說一點,很多書介紹D鎖存器時喜歡將C寫成CLK,實際上大多時候這個地方不是CLK。
從 D 鎖存器的波形圖圖中我們可以看出,D 是鎖存器的輸入信號,C 是鎖存器的控制信號,Q 是鎖存器的輸出信號,當控制信號 C 為高電平時,輸出信號 Q 將跟隨輸入信號 D 的變化而變化,大家看虛線內,Q 的波形等於 D 的波形。當控制信號 C 從高電平變為低電平時,輸入信號 D 的狀態將會決定鎖存器將要鎖存的狀態。大家可以看到,C 由高變低的那兩條虛線內,所對應的輸入信號 D 為低電平,那么輸出信號 Q 也將會鎖存低電平。最后面的那兩條虛線也同理,D 為高電平,Q 鎖存高電平。
2、鎖存器壞處
上面已經說了鎖存器的缺點,但只是文字,可能比較難懂。歸根結底都是書上喜歡在介紹D鎖存器時就寫上CLk的字眼。我們再回顧一下鎖存器和觸發器概念,鎖存器是電平觸發,觸發器是邊沿觸發,所以很多人看到CLK就不會分析了,殊不知,這里的CLK是看電平高低判別的,不是看邊沿的,看邊沿就屬於D觸發器了,數電書上區別如下所示:
D鎖存器
D觸發器
我們再來看看代碼層面,他們的區別:
現在再來看一下經典題型:
可以看出,只要一般來說組合邏輯里else、case不全、未寫default、else后保持,這些情況大多會生成latch。
3、D觸發器
D觸發器的分析和D鎖存器幾乎一致,唯一區別是觸發方式是邊沿觸發。
4、D觸發器電路圖
(1)電路結構1
(2)電路結構2
可以看出第一種和第二種是一樣的效果,以后遇到題目就不要再懵逼了!
5、
6、邊沿觸發器D輸入端對於毛刺不敏感,只需要滿足 setup/hold,不需要專門加濾波器?
對。
7、D 觸發器哪些端口毛刺對它沒有影響(A)
A、D 觸發端
B、時鍾端
C、置位端
D、清 0 端
8、用門電路(D觸發器)實現邊沿檢測?
9、用波形表示D觸發器的功能?
10、用JK觸發器和必須的門電路,實現D觸發器的功能?
11、用D觸發器帶同步高置數和異步高復位端的2分頻的電路,畫出邏輯電路Verilog描述。
12、畫出4分頻電路
解析:兩個二分頻電路相連,就是4分頻
13、分析一下電路功能
前4個D觸發器構成一個16分頻的電路;
當A為低電平時,5個D觸發器全部復位,Y輸出低電平;當A為高電平時,左邊4個觸發器開始分頻計數,計數到第4個觸發器輸出高電平時,Y輸出高電平。
(個人覺得功能是檢測輸入A高電平脈沖寬度)
14、移位寄存器
15、畫出Q0、Q1、Q2的波形,並描述電路功能。
分析:Q0的輸入是什么?題目沒有給初值,因此我們就取寄存器初值0,那么Q0 = Q0’& Q1’=1,這個值傳給Q1,維持1個節拍后傳到Q2,Q2拉高。Q2拉高的這個時鍾沿,Q0=1,Q0’=0,因此Q0的輸入變為0了,Q0就拉低。后面Q1和Q2的波形和Q0類似。在Q2拉高的那個沿,Q0=Q0’& Q1’=1,Q0又拉高了,后面循環反復。最后電路功能可以描述為:占空比為1:2的三分頻電路。
16、線性反饋移位寄存器(LSFR)
17、一個線性反饋移位寄存器(LSFR)的特征多項式為F(x)=x4+x+1,初始態全為1,以下哪些描述是正確的?(BCD)
A. 輸出的m-序列為11100101
B. 該LFSR包含四個寄存器
C. 寄存器的狀態不會出現全零
D. 該LFSR能夠產生的不重復序列最長為15位
下圖是多項式對應的電路圖:
輸入初始為:1111
4個寄存器序列依次為:
1111 -> 0111 -> 1011 -> 0101 -> 1010 ->
1101 -> 0110 -> 0011 -> 1001 -> 0100->
0010 -> 0001 ->1000 -> 1100 -> 1110 ->1111
OUT 序列依次為:111101011001000
18、畫出clock gating cell的原理圖
19、下圖中的觸發器的初態均為0,試畫出對應A、B的X、Y的波形。
AB互相纏繞,這就有點難分析了。分析X時,B看成時鍾,分析Y時A看成時鍾,帶D觸發器真值表即可。用狀態方程會不會快一些?
20、
21、用verilog設計一個接口轉換電路,接口timing如下圖所示,假設clka頻率為clkb頻率的一半(不同源。注意圖中clock關系僅為示意),且兩次有效時間(wra_n有效)的間隔時間足夠長。
module interface_change ( input clka , input wra_n, input da , input clkb, output [7:0] db , output wrb ); reg [7:0] data = 0 ; always@(posedge clka) begin if(!wra_n)begin data<= {data[6:0],da} ; end end reg wra_n_reg1 ,wra_n_reg2 ; always@(posedge clkb ) begin wra_n_reg1<= wra_n ; wra_n_reg2<= wra_n_reg1 ; end wire wra_n_check ; assign wra_n_check = wra_n_reg1&&(!wra_n_reg2) ; assign wrb = wra_n_check; assign db = (wra_n_check == 1'b1) ? data :0 ; endmodule
22、編寫代碼,完成帶異步清 0,同步置 1(低電平有效)的 D 觸發器
23、關於時序邏輯編碼,下列描述正確的是(C)
A、設計中所有寄存器必須帶復位;
B、設計中不能使用latch;
C、一個功能模塊通常只使用一個時鍾沿;
D、異步復位信號可以插入組合邏輯,不影響功能;
24、下面關於時序部件描述錯誤的為(D)
A、觸發器的setup+hold通常大於0
B、鎖存器在時鍾為窄脈中的驅動下可以作為觸發器使用
C、邏輯路徑插入觸發器可以提高電路運行速度
D、觸發器的setup不能為負數