時序邏輯電路的基礎知識(結合Verilog)
康華光《電子技術基礎 數字部分》(第六版)書中關於時序邏輯的介紹十分詳盡,僅在原書的基礎上增加一部分註釋,並省去一部分器件特性相關的內容。
目錄
組合邏輯電路是沒有記憶的,也就是說在任何時刻產生的輸出訊號都僅僅取決於該時刻電路的輸入訊號,而與它以前的輸入訊號是無關的。而有的時候,外面需要電路具有一定的記憶功能,比如自動售貨機,當需要買一瓶水,需要三塊錢,當你依次投入三個硬幣時,之後當三個硬幣都投入之後,自動售貨機才會掉出你想要的東西,這樣的功能就是依靠內部的時序電路實現的。時序電路與組合邏輯電路相反,它具有記憶功能,它在任何時刻的輸出,不僅與該時刻的輸入訊號有關,而且還與該時刻以前的輸入訊號有關。時序邏輯電路的示意圖如下圖所示:
根據上圖可以知道,一個完整的時序電路,由兩部分構成,分別是組合邏輯電路和時序邏輯電路(用來儲存輸入資訊的儲存電路)。 常用的儲存電路有兩類,一類是鎖存器,而另一種是觸發器。它們兩者所採用的電路結構形式不同,訊號的觸發方式也不同,其中,採用電平觸發方式的叫做鎖存器,而採用脈衝邊沿觸發方式的叫做觸發器。
在詳細介紹鎖存器和觸發器之前,先簡要介紹一下基本雙穩態電路。
將兩個非門和接成如下圖所示的交叉耦合形式,則構成最基本的雙穩態電流。
由上述基本雙穩態電路的邏輯關係可知,若,經非門反相,則。反饋到輸入端,又保證了。由於兩個非門首尾相接的邏輯鎖定,因而電路能自行保持在、的狀態,形成第一種穩定狀態。同理,若,則,形成第二種穩定狀態。在兩種穩定狀態中,輸出端和總是邏輯互補的。可以定義為整個電路的0狀態,則是1狀態。電路進入其中任意一種邏輯狀態都能長期保持下去,並可以通過端電平檢測出來,因此,它具有儲存1位二進位制資料的功能。
像上述圖示電路一樣,具有0、1兩種邏輯狀態,一旦進入其中一種狀態,就能長期保持不變的單元電路,稱為雙穩態儲存電路,簡稱雙穩態電路。但是,上述雙穩態電路的功能極不完備。在接通電源後,它可能隨機進入0狀態或1狀態,因為沒有控制機構,所以也無法在執行中改變和控制它的狀態,從而不能作為儲存電路使用。但,基本在雙穩態電路是鎖存器和觸發器等儲存單元的基礎。
1.鎖存器
鎖存器是一種對脈衝電平敏感的雙穩態電路,它具有0和1兩個穩定狀態,一旦狀態被確定,就能自行保持,直到有外部特定輸入脈衝電平作用在電路一定位置時,才有可能改變狀態。這種特性可以用於置入和儲存1位二進位制資料。
1.1基本SR鎖存器
將基本雙穩態電路中的非門換成或非門,則構成下圖所示的基本SR鎖存器,它是一種具有最簡單控制功能的雙穩態電路。
圖中,和是兩個輸入端, 和是兩個輸出端。定義、為整個鎖存器的0狀態;、則是鎖存器的1狀態。下面根據、的四種輸入狀態分析SR鎖存器的工作原理。
(1)
根據邏輯電路列出,,。顯然,、兩種訊號對輸出和不起作用,電路狀態保持不變,功能與前述的基本雙穩態電路一致,因此可儲存1位二進位制資料。
(2)、
對於或非門而言,不會影響的輸出狀態;而作用於則不然,所以必須首先確定輸出端的狀態(雖然一直強調電路是並行的,但是由於的輸出不受控制,但是可以決定的輸出狀態,即,進而決定,也就是說,邏輯關係仍然存在主次關係)。根據電路可得:。該訊號再反饋到輸入端,得到。根據定義,鎖存器這時的狀態為0。
如果從電路的動態變化分析,假設上述SR鎖存器此時的狀態為1,即、,在端出現邏輯1電平瞬間,將使端輸出電壓下降並作用於的的輸入端,隨即引發端電壓上升。一旦和端均跨越邏輯閾值電平,便迅速轉換為、,電路狀態由1翻轉到0;反之,如果此前電路狀態為0,即、,則的出現不改變其狀態。
綜上所述,、將使鎖存器置0,因此將端稱為復位(或置0)輸入端。當訊號消失(即回到0),電路進入前述(1)的狀態,使鎖存器的0狀態得以保持。
(3)、
由於電路是對稱的,因而此時的電路狀況與狀態(2)完全相反,、將首先使,繼而,鎖存器置1。端稱為置位(或置1)輸入端。當訊號消失,同樣可使鎖存器的1狀態得以保持。
(4)
無論和原來是什麼狀態,將強制,,鎖存器處在既非1,又非0的非定義狀態。若和同時回到0,則無法確定孫存其將落入1狀態還是0狀態(先變為1的話,變為0,鎖存器進入1狀態;先變為1的話,變為0,鎖存器進入0狀態。因此,屬於不確定狀態)。由於電路存在製造誤差,、的延遲時間總是有微小差別,若的延遲時間稍短,在和同時跳變到0時,端會搶先跳變為1,迫使;反之,若的延遲時間稍短,鎖存器則進入0狀態。所以,實際的電路在這種情況下總是倒向電路設計者無法預知的一個固定狀態。為保證鎖存器始終工作於定義狀態,輸入訊號應遵守的約束條件,也就是說不允許。
根據上述分析得到基本SR鎖存器的功能表如下圖所示(4行內容分別對應前述4種狀態):
下圖為基本SR鎖存器的邏輯符號:
和分別為置位端和復位端,和為互補的兩個輸出端,其中輸出鎖存器的非狀態,所以用小圓圈示之。這樣,不通過邏輯閘電路,僅從抽象的邏輯符號也可以理解基本SR鎖存器各輸入、輸出訊號之間的邏輯關係。
基本SR鎖存器的資料保持、置0和置1功能,是一個可實際應用的儲存單元的邏輯功能,基本SR鎖存器的典型工作波形如下圖所示:
1.2用與非門構成的基本SR鎖存器
除了可以用或非門構成基本SR鎖存器,還可以用與非門構成基本SR鎖存器,其邏輯原理圖和邏輯符號如下所示:
由上圖分析可以得到、 為不同組合輸入狀態時鎖存器的狀態(非表示低電平有效,也就是說,當或為0時,表示有激勵訊號;為1時,表示無激勵訊號)。用與非門構成的基本SR鎖存器的功能表如下所示:
觀察上表可知,與非門構成的基本SR鎖存器工作時應當受到的約束條件,即同樣應遵守的約束條件。由於功能與前述或非門構成的基本SR鎖存器類似,這裡不再贅述。
1.3時序電路的描述方法(以或非門構成的RS鎖存器為例)
1.3.1特性表
特性表是反應輸入變數和原狀態以及新狀態關係的一種真值表,也被稱為狀態轉換真值表。原狀態,用表示,新狀態用表示。RS鎖存器的特性表如下表所示:
根據特性表可以較清楚地看出RS鎖存器的邏輯功能,比如當時,也就是說,兩個輸入端均無激勵訊號,,即鎖存器的原狀態和新狀態保持不變。
1.3.2特性方程
特徵方程是鎖存器新狀態的邏輯函式表示式。根據RS鎖存器的特性表寫出它的特性方程(將輸出等於1的項提出後組成一個與或式),得到其函式式:,另有兩個無關項,根據卡諾圖化簡得:。
1.3.3狀態圖
狀態圖可以更加形象地表示是時序邏輯電路的功能。SR鎖存器的狀態圖如下圖所示:
從RS鎖存器的狀態圖可以看出,,該狀態圖是由兩個圓圈和四個箭頭組成,兩個圓圈中的0和1表示的是RS 鎖存器的兩個狀態(也就是或非門構成的SR鎖存器的輸出值),而四個箭頭表示的是四個轉換過程,箭頭的末端是原狀態 ,箭頭的前端是新狀態(箭頭由原狀態指向新狀態,即),在箭頭旁邊的和是狀態改變的條件, X代表任意狀態。由此,我們就可以根據RS 鎖存器的狀態圖來看出RS 鎖存器的狀態是如何變化的。
1.3.4波形圖
假設SR鎖存器的初始狀態為1,其、端輸入和輸出、波形如下圖所示。
雖然圖中1、2兩處輸入訊號越出了SR鎖存器的約束條件,出現了使得的情況,但是,只要和的1電平不同時撤銷,此後的輸出狀態仍讓是可以確定的,如上圖3、4處所示。而在5處,由於和的1電平同時撤銷,所以鎖存器以後的狀態將無法確定,從而失去對它的控制。
1.4門控SR鎖存器
實際工作中,希望有一個控制訊號控制鎖存器狀態的轉換,因此在SR鎖存器的基礎上增加一個控制端,只有控制端的訊號變為有效電平後,SR鎖存器才能按照輸入的置1 或置0 訊號改變相應的狀態,稱之為門控SR鎖存器。通過控制E端電平,可以實現多個鎖存器同步的資料鎖存。下圖是門控SR鎖存器的邏輯電路及其對應邏輯符號:
根據其邏輯電路可知,當時,,、 端的邏輯狀態不會影響到鎖存器的狀態;當時,、 端的訊號被傳送到基本SR鎖存器的輸入端,從而確定和端的狀態,其功能表與用或非門構成的基本SR鎖存器的功能表一致。若時輸入訊號,則,鎖存器將處於非定義的邏輯狀態。當恢復到0時,由於、同時回到0,將不能確定鎖存器的狀態。因此,應用這種鎖存器必須更嚴格地遵守地約束條件。由於約束條件造成地應用限制,因而很少有獨立的門控SR鎖存器產品。但是,在許多大、中規模積體電路種時常應用這種鎖存器,或用它構成觸發器或儲存器。所以,SR鎖存器仍是重要的基本邏輯單元。
門控SR鎖存器的邏輯符號中,方框內用和、表達內部邏輯之間的關聯關係。表示這種關聯屬於控制型別,其字尾用序號“1”表示該輸入的邏輯狀態對所有以“1”作用字首的輸出起控制作用。這裡由於置位和復位輸入均受控制,故和之前分別以表示序號“1”作為字首。
1.5 D鎖存器
D鎖存器就是能將輸入端的單路資料D存入到鎖存器中的電路。
不同於SR鎖存器,D鎖存器在工作中不存在非定義狀態,因而得到廣泛應用。目前,CMOS積體電路主要採用傳輸門控D鎖存器和邏輯閘控D鎖存器兩種電路結構形式,特別是前者電路結構簡單,在晶片中佔用面積小而更受青睞。
1.5.1CMOS傳輸門
CMOS傳輸門由一個P溝道和一個N溝道增強型MOS管並聯而成,傳輸門的電路結構及邏輯符號如下所示:
和的源極和漏極可以互換,因而傳輸門的輸入輸出端可以互換使用,即為雙向器件。 工作特性為:時,TG斷開;時,TG導通。
1.5.2傳輸門控D鎖存器
傳輸門控D鎖存器是在基本雙穩態電路中插入兩個傳輸門和構成的,下圖是其邏輯電路及其對應邏輯符號:
D鎖存器有兩個輸入端:使能端E和資料輸入端D。當時,,導通,斷開,如下圖所示:
輸入資料D經、兩個非門,使,,這時輸出端跟隨輸入訊號D的變化,因此又被稱作透明鎖存器。當時,,,斷開,導通,如下圖所示:
這種情況下與基本雙穩態電路一致。由於、輸入端存在的分佈電容對邏輯電平有短暫的保持作用,在兩個傳輸門狀態轉換瞬間並不影響電路的輸出狀態。之後,電路被鎖定在訊號由1變0前瞬間訊號所確定的狀態,在的條件下可保持鎖存器狀態不變,使1位二進位制資料得以儲存。
D鎖存器的特性表如下表所示:
D鎖存器的功能表如下表所示:
D鎖存器的狀態圖如下圖所示:
從狀態圖可以看出,當狀態時,輸出將保持0狀態;當輸入時,輸出將從0變為1。以下是D觸發器的波形圖:
1.5.3邏輯閘控D鎖存器
邏輯閘控D鎖存器是由門控SR鎖存器在輸入端和之間連線一個非門得到的,從而保證了的約束條件,消除了可能出現的非定義狀態。其邏輯功能與傳輸門控D鎖存器完全相同,因此邏輯符號也相同。邏輯閘控D鎖存器的邏輯電路如下所示:
1.6空翻現象
空翻現象指當控制訊號有效時,激勵訊號的任何變化,都將直接引起鎖存器輸出狀態的改變,若輸入訊號若發生多次變化,輸出狀態也跟著發生多次變化(由於干擾導致輸入電平突變引起鎖存器邏輯值發生變化),這一現象就被稱為鎖存器的空翻。下圖是D鎖存器發生空翻現象的波形圖:
從波形圖中可以看出,藍色虛線內,由於控制訊號為高電平, ,可以得出。藍色虛線和黃色虛線之間,由於,那麼;同理,兩條黃色虛線之間,,。空翻是一種有害的現象,它使得時序電路不能按時鐘節拍工作,造成系統的誤動作。我們前面學習的鎖存器都存在空翻現象,而引起空翻現象是由鎖存器的結構導致的,為了能夠解決鎖存器的空翻現象,人們便在鎖存器的基礎上進行了修改,因此人們便設計出了觸發器,觸發器按照邏輯功能的不同可分為RS 觸發器、D 觸發器、JK 觸發器、T 觸發器。
由於在FPGA 設計中我們更多的是利用D 觸發器來設計電路,基本上每一個時序電路模組都能看到D 觸發器的身影,所以下面將重點放在D 觸發器上,其他的觸發器我們這裡就不再進行詳細講解,可參考《電子技術基礎 數字部分》(第六版)。
2.觸發器
觸發器(Flip-Flop)也是數位電路中的一種具有記憶功能地邏輯器件。觸發器是一種對脈衝邊沿敏感的雙穩態電路,它只能在觸發脈衝的上升沿(或下降沿)瞬間改變狀態,在數位電路中可以記錄數字訊號“0”和“1”。D鎖存器在使能訊號為邏輯1期間更新狀態。在下圖所示的波形中以加粗部分表示這個敏感時期。
在此期間,它的輸出會隨輸入訊號變化。而很多時序電路要求儲存電路只對時鐘訊號的上升沿或下降沿敏感,而在其他時刻保持狀態不變,如移位暫存器和計數器。這種對時鐘脈衝邊沿敏感的狀態更新稱為觸發,具有觸發工作特性的儲存單元稱為觸發器。電路結構不同的觸發器對時鐘脈衝的敏感邊沿可能不同,分為上升沿觸發和下降沿觸發。以(Clock Pulse)命名上升沿觸發的時鐘訊號,觸發邊沿如下圖波形中的箭頭所示:
以命名下降沿觸發的時鐘訊號,觸發邊沿如下圖波形中的箭頭所示:
在Verilog HDL中,對脈衝電平敏感的鎖存器和脈衝邊沿的觸發器的描述語句是不同的。
目前應用的觸發器主要有三種電路結構:主從觸發器、維持阻塞觸發器和利用傳輸延遲的觸發器。由於CMOS主從結構的D觸發器在晶片上佔用的面積最小,邏輯設計方法比較簡單,在大規模CMOS積體電路,特別是可程式設計邏輯器件(如CPLD、FPGA)和專用積體電路(ASIC)中得到普遍應用,因而在目前的工程實踐中更多地應用到D觸發器。
2.1主從D觸發器
2.1.1主從D觸發器的電路結構和工作原理
下圖將兩個CMOS傳輸門控D觸發器級聯構成典型的CMOS主從D觸發器。圖中左邊的鎖存器稱為主鎖存器,右邊的稱為從鎖存器。主鎖存器與從鎖存器的使能訊號相位相反,利用兩個鎖存器的互動鎖存,則可實現儲存資料和輸入訊號之間的隔離。
主從D觸發器的工作過程分為以下兩個節拍:
(1)當時鍾訊號時,,,使得導通, 斷開,端輸入訊號進入主鎖存器,這時跟隨端的狀態變化,即。例如,時,經傳送到的輸入端,使,。同時由於斷開,切斷了從鎖存器與主鎖存器之間的連線,而導通,使的輸入端和的輸出端經過聯通,構成最基本的雙穩態電路,使從鎖存器維持原來的狀態,即觸發器的輸出狀態不變。
(2)當CP由0跳變為1後,,,使得斷開,從而切斷端與主鎖存器的聯絡,同時導通,將的輸入端和的輸出端連通,主鎖存器鎖存跳變前端的資料(主鎖存器維持原來的狀態)。這時,導通,斷開,端訊號傳送到端。若,,經傳送到的輸入端,於是,。
在一個變化週期內,觸發器的輸出狀態只可能改變一次,克服了鎖存器存在的空翻現象。
可見,從鎖存器在工作中是跟隨主鎖存其的狀態變化的,觸發器因之冠名為主從(Master-Slave)。它的狀態轉換髮生在CP訊號上升沿到來後的狀態,輸出訊號由訊號上升沿到達前瞬間的資料訊號所決定,從功能上考慮為觸發器。如果以表示上升沿到達後觸發器的狀態,則觸發器的特性可以用下式來表達:。
(1)D觸發器的特性表
已輸入訊號和觸發器的現態為變數,以次態為函式,描述它們之間邏輯關係的真值表稱為觸發器的特性表。D觸發器的特性表如下圖所示,表中對觸發器的輸入訊號和現態的每種組合都列出了相應的次態。
(2)D觸發器的特性方程
觸發器的邏輯功能也可以用邏輯表示式來描述,稱為觸發器的特性方程。根據D觸發器的特性表可以列出D觸發器的特性方程:
(3)D觸發器的狀態圖
D觸發器的狀態圖由D觸發器的特性表匯出。圓圈內為觸發器的狀態,分別標示為0和1的兩個圓圈代表了觸發器的兩個狀態;4跟帶箭頭的方向線表示狀態轉換的方向,分別對應特性表中的四行,方向線的起點為觸發器的現態,箭頭指向相應的次態;方向線旁邊標出了狀態轉換的條件,即輸入訊號的邏輯值。D觸發器的狀態圖如下圖:
由特性表、特徵方程或狀態圖均可以看出,當時,觸發器的下一狀態將被置0() ;當時,將被置1()。在時鐘脈衝的兩個觸發沿之間,觸發器狀態保持不變,即儲存1位二進位制資料。
2.1.2 D鎖存器與D觸發器的比較
D鎖存器與D觸發器的邏輯功能其實是相同的,只不過它們的觸發方式有所不同。下圖是D鎖存器與D觸發器的波形圖:
從上面的波形圖可以看出, D觸發器是在時鐘訊號為0時,才會接收輸入訊號D的值,並將這個值鎖存起來,當控制訊號CLK 變為1 時,輸出訊號Q 才會被改變。那麼D 觸發器,其實就是在CLK 這個時鐘訊號由0 變為1 的這個邊沿進行觸發的,通常我們就將這種觸發方式稱為邊沿觸發,通過這種邊沿觸發方式的D 觸發器我們也將它稱為邊沿D 觸發器。
D 鎖存器的觸發方式是電平觸發,和我們剛剛講的邊沿觸發是有所不同的。這種不同是由於鎖存器和觸發器的電路結構不同,而造成的。這裡需要注意的是,由於D 鎖存器的功能和D 觸發器的功能是一樣的,所以在編寫程式碼時很容易把D 鎖存器當成D 觸發器來使用,這種情況應該是極力避免的。
2.1.3利用Verilog描述觸發器
1 module Digital_Data_Flip_Flop
2 (
3 CLK_50M,RST_N,D,Q
4 );
5
6 input CLK_50M;
7 input RST_N;
8 input D;
9 output reg Q; //可以分開寫output Q;reg Q;也可以合併在一起
10
11 always @ (posedge CLK_50M or negedge RST_N)
12 begin
13 if(!RST_N)
14 Q <= 1'b0;
15 else
16 Q <= D;
17 end
18
19 endmodule
相較於之前描述組合邏輯電路的Veriliog程式碼,在長度上並沒有什麼差別,但是該程式碼所描述的功能與之前程式碼所描述的功能是有很大區別的,之前我們所描述的功能是沒有時鐘訊號的,即之前描述的都是組合邏輯電路,而現在描述的是一個貨真價實的時序電路。以下是對D觸發器Verilog程式碼的分析:
該程式碼的第11 行至第17 行,是本程式中最核心的,也是用法相對比較多的always 模組。always 模組敏感表可以為電平、沿訊號(上升沿)posedge、(下降沿)negedge。前面已經將always 模組用在組合邏輯電路中,其基本程式碼結構如下所示:
1 always @ (*) //always @ (A,B) 也可以always @ (A or B)
2 begin
3 //具體邏輯
4 end
always 後若有沿訊號(上升沿posedge,下降沿negedge)宣告,則多為時序邏輯,其基本程式碼結構如下所示:
1 always @ (posedge CLK_50M) //單個沿觸發的時序邏輯
2 begin
3 //具體邏輯
4 end
5
6 always @ (posedge CLK_50M or negedge RST_N) //多個沿觸發的時序邏輯
7 begin
8 //具體邏輯
9 end
組合邏輯電路中always@(A,B)意義為:@為事件等待語句,意思是一直等待A和B兩個敏感變數,不管A和B是從高變低,還是從低變高,都將會執行always下面的begin...end中的語句。如果A和B都沒有變化,那麼always 也將不往下執行,將一直迴圈等待。新標準下也可以寫作:always@(*),解釋如下:always @ (*)是個組合邏輯電路的描述方式;是為了防止在設計時考慮不周全帶來一些操作失誤,所以敏感表用*(表示全部的敏感變數,這裡表示A 和B),只要有任何輸入訊號變化,其輸出立即發生變化。
時序邏輯電路中always @ (posedge CLK_50M or negedge RST_N):@也同樣是事件等待語句,只是這裡一直等待的是CLK_50M 和RST_N 二個敏感變數的上升沿和下降沿的變化,如果有一個CLK_50M 的上升沿到來,那麼便會執行always下面的begin…end 中的語句。同樣的如果有一個RST_N 的下降沿到來,也同樣會執行always下面的begin……end 中的語句。如果兩個訊號都沒有到來,那麼將不會執行begin……end 中的語句,一直等待訊號的到來。
注:時序電路中的賦值是”<=“(非阻塞賦值);而組合邏輯電路中的賦值是”=“(阻塞賦值)
接下來再來看always模組中的程式碼,首先看到的是第13 行的if 語句,該語句判斷復位訊號是否有效,從變數命名規則中我們可以看出RST_N是一個低電平有效的復位訊號,也就是說,當RST_N=0時,if為真,Q<=1’b0 會被執行,D觸發器將會被複位輸出0;當RST_N=1 時,if為假,就要執行else 中的Q<=D 這條語句,D觸發器將會正常工作。
3.暫存器
由前面可知,能夠儲存一位二進位制碼的時序電路叫做觸發器,暫存器就是能夠儲存多位二進位制數碼的時序電路。
三態輸出門
三態輸出門除了具有一般閘電路的兩種狀態,即輸出高、低電平外,還具有高輸出阻抗的第三狀態,稱為高阻態,又稱為禁止態。下圖是三態輸出緩衝電路及其邏輯符號,其中是輸入端,位輸出端,是控制訊號輸入端,也成為使能端。
當使能端時,如果,則,,使得導通,同時截至,輸出端;如果,則,,使得截至,同時導通,輸出端。
當使能端時,不論A的取值如何,都使得、,則和均截至,電路的輸出既不是低電平,又不是高電平,而是開路,這就是第三種高阻工作狀態。
因此,當為有效的高電平時,電路處於正常邏輯工作狀態,;而當為低電平時,電路處於高阻狀態。下圖是三態輸出閘電路的真值表。
三態輸出們電路主要用於匯流排傳輸,如計算機或微處理器系統,其連線形式如下所示:
任意時刻只有一個閘電路的使能端為1,該閘電路的訊號被傳送到匯流排上,而其他三態輸出電路處於高阻狀態。這樣就可以按一定順序將各個閘電路的輸出訊號分時送到匯流排上。
3.1暫存器的原理
暫存器是數字系統中用來儲存二進位制資料的邏輯器件。1個觸發器可儲存1位二進位制資料,儲存N位二進位制資料的暫存器需要用N個觸發器組成。
由8個觸發器構成的8位暫存器的邏輯圖如下圖所示:
圖中,~是8位資料輸入端,在脈衝上升沿作用下,~端的資料同時存入相應的觸發器,直到下一個時鐘訊號的上升沿到來之前,無論怎麼改變輸入訊號的值,輸出訊號的值也不會改變,是一種極為簡單的同步時序電路。當輸出使能訊號時,觸發器儲存的資料通過三態門輸出端~並行輸出。下圖是典型的中規模繼承8位暫存器74HC/HCT374的功能表(和的下標表示第位觸發器,和表示脈衝上升沿之前瞬間的電平)。
3.2移位暫存器
移位暫存器有可以分為單向移位暫存器和雙向移位暫存器,單向移位暫存器指的就是右移位暫存器和左移位暫存器,而雙向移位暫存器就是既能向左也能向右移位。
3.2.1單向移位暫存器
如果將若干個觸發器級聯成下圖所示電路,則構成基本的移位暫存器。這裡以右移位暫存器為例,如下圖所示:
上圖是一個4位移位暫存器,序列二進位制資料從輸入端輸入,左邊觸發器的輸出作為右鄰觸發器的資料輸入。若將序列數碼從高位()至低位()按時鐘間隔依次送到端,經過第一個時鐘脈衝後,。由於跟隨後面的是,因此經過第二個時鐘脈衝後,觸發器的狀態移入觸發器,而轉變為新的狀態,即,。以此類推,該暫存器的功能如下表所示:
由表可知,輸入數碼依次由左邊觸發器移到右側觸發器。經過4個時鐘脈衝後,4個觸發器的輸出狀態與輸入數碼相對應。下圖是數碼1101(即,,,)在移位暫存器中移位的波形,經過4個時鐘脈衝後,1101出現在觸發器的輸出端。這樣,就將序列輸入資料轉換為並行輸出。
這裡還畫出了第5到第8個時鐘脈衝作用下,輸入數碼在暫存器中移位的波形。可上圖可知,在第8個時鐘脈衝後,脈衝已從序列資料輸出端(即端)全部移出暫存器。也就是說,隨著時鐘訊號的推移,從輸出端可得到1101的序列輸出。
從上述操作可知,移位暫存器中能用脈衝邊沿敏感的觸發器,而不能用電平敏感的鎖存器來構成,因為在時鐘脈衝高電平期間,鎖存器輸出跟隨輸入變化的特性將使移位操作失去控制。顯然,移位暫存器屬於同步時序電路。
3.2.2多功能雙向移位暫存器
有時需要對移位暫存器的資料流向加以控制,實現資料的雙向移動,其中一個方向稱為右移,另一個方向稱為左移,這種移位暫存器稱為雙向移位暫存器。規定邏輯圖中最低有效位(LSB)到最高有效位(MSB)的電路排列順序位從上到下,從左到右。因此,定義移位暫存器中的資料從低位觸發器移向高位為右移,反之為左移。這一點與通常計算機程式中的規定相反,後者從自然二進位制數的排列考慮,將資料移向高位定義為左移,反之為右移。
為了擴充套件邏輯功能和增加使用的靈活性,在雙向移位基礎上,還可以增加並行輸入、並行輸出等功能,構成多功能移位暫存器,其工作模式的簡化示意圖如下所示:
3.2.3利用Verilog描述移位暫存器
1 module Digital_Shift_Reg
2 (
3 CLK_50M,RST_N,DATA_EN,DATA_IN,DATA_OUT
4 );
5
6 input CLK_50M;
7 input RST_N;
8 input DATA_EN;
9 input DATA_IN;
10 output DATA_OUT;
11
12 reg [3:0] DATA_OUT;
13 reg [3:0] DATA_OUT_N;
14
15 //時序電路
16 always @ (posedge CLK_50M or negedge RST_N)
17 begin
18 if(!RST_N)
19 DATA_OUT <= 4'b0;
20 else
21 DATA_OUT <= DATA_OUT_N;
22 end
23
24 //組合電路
25 always @ (*)
26 begin
27 if(DATA_EN)
28 DATA_OUT_N = {DATA_OUT[2:0] , DATA_IN};
29 else
30 DATA_OUT_N = DATA_OUT;
31 end
32
33 endmodule
上述程式碼是一個典型的組合邏輯電路和時序邏輯電路分開寫的風格。。模組名、埠宣告、資料型別定義三部分這裡不再贅述。程式碼的16到22行程式碼主要完成的功能是一個4位的暫存器(即4位的D觸發器),其中RST_N是一個低電平有效的復位訊號;第25行到31行的程式碼主要完成的功能是判斷DATA_EN使能位,並進行移位操作。這裡詳細解釋一下第28行中的“{”和“}”,這裡是拼接運算子。舉例說明,A=2'b10,B=4'1111,則{A,B}=6'b101111。接下來詳細講解一下移位操作是如何實現的,假設DATA_OUT為0000,DATA_IN為1,DATA_EN為1,當DATA_EN為1時,程式會自動執行第28行,由於DATA_OUT=4'b0000,所以DATA_OUT的低三位為3'b000,又因為DATA_IN=1'b1,所以DATA_OUT_N={3'b000,1'b1}=4'b0001;當程式執行第二次的時候,DATA_OUT為0001,此時假設DATA_IN為0,當DATA_IN為1時,DATA_OUT_N={3'b001,1'b0}=4'b0010。依次類推,這就是移位暫存器實現的過程。
有時要求在移位過程中,資料仍保持在暫存器中不丟失。此時,只要將移位暫存器最高位的輸出接至最低位的輸入,或將最低位的輸出接至最高位的輸出,便可實現這個功能,稱為環形移位暫存器。亦可作計數器使用,稱為環形計數器。
4.計數器
計數器是最常用的時序電路之一,它們不僅可用於對脈衝進行計數,還可用於分頻、定時、產生節拍脈衝以及其他時序訊號。計算器的種類不勝列舉,按觸發器動作分類,可分為同步計數器和非同步計數器;按編碼數值增減分類,可分為遞增計數器、遞減計數器和可逆計數器;按編碼分類,又可分為二進位制計數器、BCD計數器、迴圈碼計數器等。計數器執行時,從某一狀態開始依次遍歷不重複的各個狀態後完成一次迴圈,所經過的轉檯總數稱為計數器的模(Module),並用M表示。若某個計數器在個狀態下迴圈計數,通常則稱之為模計數器,或計數器。例如一個在60個不同狀態中迴圈轉換的計數器,就可稱為模60,或計數器。有時也把模計數器稱為進位制計數器。這裡以4位同步二進位制計數器和基本環形計數器為例。
4.1 4位同步二進位制計數器
由四位D觸發器組成的計數器電路圖如下所示:
上述計數器是由4個邊沿D觸發器、、和,再加上三個異或門和兩個與門構成的。電路計數的過程詳述如下:
假設電路的初始狀態為000(即初始輸出),接下來看四個觸發器的輸入訊號分別是什麼,先看,的輸入訊號,是由反饋回來的,已知此時,因此,這個1反饋給輸入訊號,此時的輸入訊號就是1;接下來看,的輸入訊號是和經過一個異或門之後得到的,已知此時,,因此的輸入訊號為0;接著看,的輸入訊號訊號是由和經過一個與或門之後的輸出與異或得到的,因此的輸出為0;最後看,的輸入是由、和相與之後的輸出與異或得到的,因此的輸出為0。
分析完、、和此時的輸出值後,就可以根據D觸發器的邏輯規律知道下一刻電路的輸出值了,當埠出現一個上升沿,即由0變1,四個邊沿觸發器同時觸發,當這個時鐘訊號的上升沿到來時,觸發器的輸入值將會被鎖存,下一刻4個觸發器的輸出為,,,(為二進位制最低位,為二進位制最高位)。因此現在計數器輸出的值為二進位制數0001,也就是十進位制的1。依此類推,當第二個時鐘訊號的上升沿到來時,計數器會輸出二進位制數0010,也就是十進位制的2。每當電路多來一個時鐘上升沿,計數器就會加1。當電路計數到第十六個脈衝時,電路狀態將由1111變為0000,完成一個迴圈週期,因此該電路也稱為模16計數器。所謂同步是指該電路中的四個邊沿觸發器共用一個時鐘脈衝,當時鐘上升沿到來時,它們能同時觸發,這就叫同步。所謂非同步就是這些觸發器不是共用同一個時鐘脈衝,且觸發不是同時發生的。
模16加法計數器的特性表如下所示:
下圖是模16加法計數器的狀態圖。
4.2基本環形計數器
將前述的移位暫存器的()與相連,則構成環形計數器,如下圖所示。
若事先通過端施加低電平脈衝,在4個觸發器內建入資料,那麼環形計數器在脈衝作用下,將會有如下所示的4個狀態,於是,電路成為模4計數器。
下圖是在4個脈衝作用下的波形。
可以看出,這種計數器不必譯碼就能直接輸出4個狀態的譯碼訊號,亦不存在普通譯碼電路輸出易出現的競爭-冒險現象。
4.3計數器的應用
瞭解完計數器的工作原理,接下來就是計數器的應用,首先想到的就是秒錶,秒錶就是一個典型的計數器。這裡暫不考慮秒錶的暫停和計時功能,主要了解一下秒錶的基本工作原理。
一個兩位數的秒錶可以從0一直累加到59,然後再返回0迴圈進行累加,前述的是一個模16計數器,這裡從0到59迴圈累加,因此是一個模60計數器。模60計數器的電路結構相對模16是更加複雜的,如果直接選擇用閘電路進行搭建是十分麻煩的,因此這裡不直接用模60計數器來實現,而是選擇用模6計數器加上模10計數器的方法實現,原因在於一個兩位的秒錶是分各位和十位的,個位顯示0-9這十個數,十位顯示0-5這留個數,可以將十位和各位分開來進行技術。下圖中的計數器開始計數,它的個位數字每隔一秒變化一次,變化到9的時候,它的下一刻將會歸零,然後重新計數;而十位的數字每隔10秒變化一次,變化到5的時候,它的下一刻也將會歸0,然後重新計數。這就是兩位數秒錶的實現方法,下圖是秒錶的電路示意圖。
從電路示意圖中可以看出,先將個位的數碼管和十位的數碼管分別與模10 和模6計數器對應,然後,將這兩個計數器的輸出訊號引出,連線到相應的譯碼器上,再通過譯碼器譯碼,將最終的數字顯示在數碼管上。這就是一個兩位數秒錶的電路結構了,這裡要注意的是,圖中的兩個計數器,它們的時鐘訊號不是共用的,模10 計數器的時鐘端,訊號的上升沿是需要間隔1 秒來一次,而模6 計數器的時鐘端,訊號的上升沿是需要間隔10 秒來一次的,具體怎麼產生需要的時鐘訊號,這裡就不再贅述。
4.4利用Verilog描述計數器
1 module Digital_Counter
2 (
3 CLK_50M,RST_N
4 );
5
6 input CLK_50M;
7 input RST_N;
8
9 reg [3:0] time_cnt;
10 reg [3:0] time_cnt_n;
11
12 //時序電路
13 always @ (posedge CLK_50M or negedge RST_N)
14 begin
15 if(!RST_N)
16 time_cnt <= 4'b0;
17 else
18 time_cnt <= time_cnt_n;
19 end
20
21 //組合電路
22 always @ (*)
23 begin
24 if(time_cnt == 4'hf)
25 time_cnt_n = 4'b0;
26 else
27 time_cnt_n = time_cnt + 1'b1;
28 end
29
30 endmodule
References:
1.康華光《 電子技術基礎 數字部分》(第六版);
2.鋯石科技《HELLO FPGA數字部分》
相關文章
- Verilog 邏輯綜合過程
- 【Python基礎知識】Python中的邏輯運算子Python
- 時序分析:基礎知識整理(二)
- 達夢資料庫基礎知識(二)資料庫邏輯結構資料庫
- (9)邏輯綜合新增約束(時序、DRC)
- 計算機最基礎的部分:運算邏輯電路(ALU)計算機
- (3)計數器&時序邏輯
- 組合語言-基礎知識組合語言
- 網路安全基礎知識
- Java基礎知識總結Java
- React 基礎知識總結React
- SpringIOC基礎知識總結Spring
- Rust 基礎知識總結Rust
- 索引基礎知識總結索引
- 邏輯代數基礎
- 生信基礎知識複習之測序
- 組合邏輯電路消除競爭冒險的方法有( )。
- 資料結構知識點--儲存結構與邏輯結構資料結構
- Docker網路配置基礎知識Docker
- 時序分析:基礎知識整理(三)差分轉單端的約束等
- Java基礎知識點總結Java
- JS基礎知識深入總結JS
- TCP/IP 基礎知識總結TCP
- JS基礎知識總結(1)JS
- CSS基礎知識總結(4)CSS
- JS基礎知識總結(2)JS
- ES 基礎知識點總結
- MySQL基礎知識小結(一)MySql
- Java基礎知識總結-1Java
- Redis 基礎知識點總結Redis
- WEB網路滲透的基礎知識Web
- 電子基礎大全:整理了電子設計所需的基礎知識
- Java基礎之邏輯控制Java
- 類NMOS邏輯閘電路
- 【odoo】【知識點】檢視的繼承邏輯Odoo繼承
- Flutter 狀態管理 0x00 - 基礎知識及 State.setState 背後邏輯Flutter
- 網路營銷的基礎知識瞭解
- yii2 基礎知識總結