校招基礎——鎖存器和觸發器
基本概念
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鎖存器的特性表
當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不能為負數