时序逻辑电路的基础知识(结合Verilog)
康華光《電子技術(shù)基礎(chǔ) 數(shù)字部分》(第六版)書中關(guān)于時序邏輯的介紹十分詳盡,僅在原書的基礎(chǔ)上增加一部分注釋,并省去一部分器件特性相關(guān)的內(nèi)容。
目錄
1.鎖存器
1.1基本SR鎖存器
1.2用與非門構(gòu)成的基本SR鎖存器?
1.3時序電路的描述方法(以或非門構(gòu)成的RS鎖存器為例)
1.3.1特性表
1.3.2特性方程
1.3.3狀態(tài)圖
1.3.4波形圖
1.4門控SR鎖存器
1.5 D鎖存器
1.5.1CMOS傳輸門
1.5.2傳輸門控D鎖存器
1.5.3邏輯門控D鎖存器
1.6空翻現(xiàn)象
2.觸發(fā)器
2.1主從D觸發(fā)器
2.1.1主從D觸發(fā)器的電路結(jié)構(gòu)和工作原理
2.1.2 D鎖存器與D觸發(fā)器的比較
2.1.3利用Verilog描述觸發(fā)器
3.寄存器
三態(tài)輸出門
3.1寄存器的原理
3.2移位寄存器
3.2.1單向移位寄存器
3.2.2多功能雙向移位寄存器
?3.2.3利用Verilog描述移位寄存器
4.計數(shù)器
4.1?4位同步二進制計數(shù)器
4.2基本環(huán)形計數(shù)器
4.3計數(shù)器的應(yīng)用
4.4利用Verilog描述計數(shù)器
組合邏輯電路是沒有記憶的,也就是說在任何時刻產(chǎn)生的輸出信號都僅僅取決于該時刻電路的輸入信號,而與它以前的輸入信號是無關(guān)的。而有的時候,外面需要電路具有一定的記憶功能,比如自動售貨機,當(dāng)需要買一瓶水,需要三塊錢,當(dāng)你依次投入三個硬幣時,之后當(dāng)三個硬幣都投入之后,自動售貨機才會掉出你想要的東西,這樣的功能就是依靠內(nèi)部的時序電路實現(xiàn)的。時序電路與組合邏輯電路相反,它具有記憶功能,它在任何時刻的輸出,不僅與該時刻的輸入信號有關(guān),而且還與該時刻以前的輸入信號有關(guān)。時序邏輯電路的示意圖如下圖所示:
根據(jù)上圖可以知道,一個完整的時序電路,由兩部分構(gòu)成,分別是組合邏輯電路和時序邏輯電路(用來保存輸入信息的存儲電路)。?常用的存儲電路有兩類,一類是鎖存器,而另一種是觸發(fā)器。它們兩者所采用的電路結(jié)構(gòu)形式不同,信號的觸發(fā)方式也不同,其中,采用電平觸發(fā)方式的叫做鎖存器,而采用脈沖邊沿觸發(fā)方式的叫做觸發(fā)器。
在詳細(xì)介紹鎖存器和觸發(fā)器之前,先簡要介紹一下基本雙穩(wěn)態(tài)電路。
將兩個非門和接成如下圖所示的交叉耦合形式,則構(gòu)成最基本的雙穩(wěn)態(tài)電流。
由上述基本雙穩(wěn)態(tài)電路的邏輯關(guān)系可知,若,經(jīng)非門反相,則。反饋到輸入端,又保證了。由于兩個非門首尾相接的邏輯鎖定,因而電路能自行保持在、的狀態(tài),形成第一種穩(wěn)定狀態(tài)。同理,若,則,形成第二種穩(wěn)定狀態(tài)。在兩種穩(wěn)定狀態(tài)中,輸出端和總是邏輯互補的。可以定義為整個電路的0狀態(tài),則是1狀態(tài)。電路進入其中任意一種邏輯狀態(tài)都能長期保持下去,并可以通過端電平檢測出來,因此,它具有存儲1位二進制數(shù)據(jù)的功能。
像上述圖示電路一樣,具有0、1兩種邏輯狀態(tài),一旦進入其中一種狀態(tài),就能長期保持不變的單元電路,稱為雙穩(wěn)態(tài)存儲電路,簡稱雙穩(wěn)態(tài)電路。但是,上述雙穩(wěn)態(tài)電路的功能極不完備。在接通電源后,它可能隨機進入0狀態(tài)或1狀態(tài),因為沒有控制機構(gòu),所以也無法在運行中改變和控制它的狀態(tài),從而不能作為存儲電路使用。但,基本在雙穩(wěn)態(tài)電路是鎖存器和觸發(fā)器等存儲單元的基礎(chǔ)。
1.鎖存器
鎖存器是一種對脈沖電平敏感的雙穩(wěn)態(tài)電路,它具有0和1兩個穩(wěn)定狀態(tài),一旦狀態(tài)被確定,就能自行保持,直到有外部特定輸入脈沖電平作用在電路一定位置時,才有可能改變狀態(tài)。這種特性可以用于置入和存儲1位二進制數(shù)據(jù)。
1.1基本SR鎖存器
將基本雙穩(wěn)態(tài)電路中的非門換成或非門,則構(gòu)成下圖所示的基本SR鎖存器,它是一種具有最簡單控制功能的雙穩(wěn)態(tài)電路。
圖中,和是兩個輸入端,?和是兩個輸出端。定義、為整個鎖存器的0狀態(tài);、則是鎖存器的1狀態(tài)。下面根據(jù)、的四種輸入狀態(tài)分析SR鎖存器的工作原理。
(1)
根據(jù)邏輯電路列出,,。顯然,、兩種信號對輸出和不起作用,電路狀態(tài)保持不變,功能與前述的基本雙穩(wěn)態(tài)電路一致,因此可存儲1位二進制數(shù)據(jù)。
(2)、
對于或非門而言,不會影響的輸出狀態(tài);而作用于則不然,所以必須首先確定輸出端的狀態(tài)(雖然一直強調(diào)電路是并行的,但是由于的輸出不受控制,但是可以決定的輸出狀態(tài),即,進而決定,也就是說,邏輯關(guān)系仍然存在主次關(guān)系)。根據(jù)電路可得:。該信號再反饋到輸入端,得到。根據(jù)定義,鎖存器這時的狀態(tài)為0。
如果從電路的動態(tài)變化分析,假設(shè)上述SR鎖存器此時的狀態(tài)為1,即、,在端出現(xiàn)邏輯1電平瞬間,將使端輸出電壓下降并作用于的的輸入端,隨即引發(fā)端電壓上升。一旦和端均跨越邏輯閾值電平,便迅速轉(zhuǎn)換為、,電路狀態(tài)由1翻轉(zhuǎn)到0;反之,如果此前電路狀態(tài)為0,即、,則的出現(xiàn)不改變其狀態(tài)。
綜上所述,、將使鎖存器置0,因此將端稱為復(fù)位(或置0)輸入端。當(dāng)信號消失(即回到0),電路進入前述(1)的狀態(tài),使鎖存器的0狀態(tài)得以保持。
(3)、
由于電路是對稱的,因而此時的電路狀況與狀態(tài)(2)完全相反,、將首先使,繼而,鎖存器置1。端稱為置位(或置1)輸入端。當(dāng)信號消失,同樣可使鎖存器的1狀態(tài)得以保持。
(4)
無論和原來是什么狀態(tài),將強制,,鎖存器處在既非1,又非0的非定義狀態(tài)。若和同時回到0,則無法確定孫存其將落入1狀態(tài)還是0狀態(tài)(先變?yōu)?的話,變?yōu)?,鎖存器進入1狀態(tài);先變?yōu)?的話,變?yōu)?,鎖存器進入0狀態(tài)。因此,屬于不確定狀態(tài))。由于電路存在制造誤差,、的延遲時間總是有微小差別,若的延遲時間稍短,在和同時跳變到0時,端會搶先跳變?yōu)?,迫使;反之,若的延遲時間稍短,鎖存器則進入0狀態(tài)。所以,實際的電路在這種情況下總是倒向電路設(shè)計者無法預(yù)知的一個固定狀態(tài)。為保證鎖存器始終工作于定義狀態(tài),輸入信號應(yīng)遵守的約束條件,也就是說不允許。
根據(jù)上述分析得到基本SR鎖存器的功能表如下圖所示(4行內(nèi)容分別對應(yīng)前述4種狀態(tài)):
下圖為基本SR鎖存器的邏輯符號:
和分別為置位端和復(fù)位端,和為互補的兩個輸出端,其中輸出鎖存器的非狀態(tài),所以用小圓圈示之。這樣,不通過邏輯門電路,僅從抽象的邏輯符號也可以理解基本SR鎖存器各輸入、輸出信號之間的邏輯關(guān)系。
基本SR鎖存器的數(shù)據(jù)保持、置0和置1功能,是一個可實際應(yīng)用的存儲單元的邏輯功能,基本SR鎖存器的典型工作波形如下圖所示:
1.2用與非門構(gòu)成的基本SR鎖存器?
除了可以用或非門構(gòu)成基本SR鎖存器,還可以用與非門構(gòu)成基本SR鎖存器,其邏輯原理圖和邏輯符號如下所示:
由上圖分析可以得到、?為不同組合輸入狀態(tài)時鎖存器的狀態(tài)(非表示低電平有效,也就是說,當(dāng)或為0時,表示有激勵信號;為1時,表示無激勵信號)。用與非門構(gòu)成的基本SR鎖存器的功能表如下所示:
?觀察上表可知,與非門構(gòu)成的基本SR鎖存器工作時應(yīng)當(dāng)受到的約束條件,即同樣應(yīng)遵守的約束條件。由于功能與前述或非門構(gòu)成的基本SR鎖存器類似,這里不再贅述。
1.3時序電路的描述方法(以或非門構(gòu)成的RS鎖存器為例)
1.3.1特性表
特性表是反應(yīng)輸入變量和原狀態(tài)以及新狀態(tài)關(guān)系的一種真值表,也被稱為狀態(tài)轉(zhuǎn)換真值表。原狀態(tài),用表示,新狀態(tài)用表示。RS鎖存器的特性表如下表所示:
根據(jù)特性表可以較清楚地看出RS鎖存器的邏輯功能,比如當(dāng)時,也就是說,兩個輸入端均無激勵信號,,即鎖存器的原狀態(tài)和新狀態(tài)保持不變。
1.3.2特性方程
?特征方程是鎖存器新狀態(tài)的邏輯函數(shù)表達式。根據(jù)RS鎖存器的特性表寫出它的特性方程(將輸出等于1的項提出后組成一個與或式),得到其函數(shù)式:,另有兩個無關(guān)項,根據(jù)卡諾圖化簡得:。
1.3.3狀態(tài)圖
狀態(tài)圖可以更加形象地表示是時序邏輯電路的功能。SR鎖存器的狀態(tài)圖如下圖所示:
從RS鎖存器的狀態(tài)圖可以看出,,該狀態(tài)圖是由兩個圓圈和四個箭頭組成,兩個圓圈中的0和1表示的是RS 鎖存器的兩個狀態(tài)(也就是或非門構(gòu)成的SR鎖存器的輸出值),而四個箭頭表示的是四個轉(zhuǎn)換過程,箭頭的末端是原狀態(tài)?,箭頭的前端是新狀態(tài)(箭頭由原狀態(tài)指向新狀態(tài),即),在箭頭旁邊的和是狀態(tài)改變的條件, X代表任意狀態(tài)。由此,我們就可以根據(jù)RS 鎖存器的狀態(tài)圖來看出RS 鎖存器的狀態(tài)是如何變化的。
1.3.4波形圖
假設(shè)SR鎖存器的初始狀態(tài)為1,其、端輸入和輸出、波形如下圖所示。
?雖然圖中1、2兩處輸入信號越出了SR鎖存器的約束條件,出現(xiàn)了使得的情況,但是,只要和的1電平不同時撤銷,此后的輸出狀態(tài)仍讓是可以確定的,如上圖3、4處所示。而在5處,由于和的1電平同時撤銷,所以鎖存器以后的狀態(tài)將無法確定,從而失去對它的控制。
1.4門控SR鎖存器
實際工作中,希望有一個控制信號控制鎖存器狀態(tài)的轉(zhuǎn)換,因此在SR鎖存器的基礎(chǔ)上增加一個控制端,只有控制端的信號變?yōu)橛行щ娖胶?#xff0c;SR鎖存器才能按照輸入的置1 或置0 信號改變相應(yīng)的狀態(tài),稱之為門控SR鎖存器。通過控制E端電平,可以實現(xiàn)多個鎖存器同步的數(shù)據(jù)鎖存。下圖是門控SR鎖存器的邏輯電路及其對應(yīng)邏輯符號:
根據(jù)其邏輯電路可知,當(dāng)時,,、?端的邏輯狀態(tài)不會影響到鎖存器的狀態(tài);當(dāng)時,、?端的信號被傳送到基本SR鎖存器的輸入端,從而確定和端的狀態(tài),其功能表與用或非門構(gòu)成的基本SR鎖存器的功能表一致。若時輸入信號,則,鎖存器將處于非定義的邏輯狀態(tài)。當(dāng)恢復(fù)到0時,由于、同時回到0,將不能確定鎖存器的狀態(tài)。因此,應(yīng)用這種鎖存器必須更嚴(yán)格地遵守地約束條件。由于約束條件造成地應(yīng)用限制,因而很少有獨立的門控SR鎖存器產(chǎn)品。但是,在許多大、中規(guī)模集成電路種時常應(yīng)用這種鎖存器,或用它構(gòu)成觸發(fā)器或存儲器。所以,SR鎖存器仍是重要的基本邏輯單元。
門控SR鎖存器的邏輯符號中,方框內(nèi)用和、表達內(nèi)部邏輯之間的關(guān)聯(lián)關(guān)系。表示這種關(guān)聯(lián)屬于控制類型,其后綴用序號“1”表示該輸入的邏輯狀態(tài)對所有以“1”作用前綴的輸出起控制作用。這里由于置位和復(fù)位輸入均受控制,故和之前分別以表示序號“1”作為前綴。
1.5 D鎖存器
D鎖存器就是能將輸入端的單路數(shù)據(jù)D存入到鎖存器中的電路。
不同于SR鎖存器,D鎖存器在工作中不存在非定義狀態(tài),因而得到廣泛應(yīng)用。目前,CMOS集成電路主要采用傳輸門控D鎖存器和邏輯門控D鎖存器兩種電路結(jié)構(gòu)形式,特別是前者電路結(jié)構(gòu)簡單,在芯片中占用面積小而更受青睞。
1.5.1CMOS傳輸門
CMOS傳輸門由一個P溝道和一個N溝道增強型MOS管并聯(lián)而成,傳輸門的電路結(jié)構(gòu)及邏輯符號如下所示:
和的源極和漏極可以互換,因而傳輸門的輸入輸出端可以互換使用,即為雙向器件。?工作特性為:時,TG斷開;時,TG導(dǎo)通。
1.5.2傳輸門控D鎖存器
傳輸門控D鎖存器是在基本雙穩(wěn)態(tài)電路中插入兩個傳輸門和構(gòu)成的,下圖是其邏輯電路及其對應(yīng)邏輯符號:
D鎖存器有兩個輸入端:使能端E和數(shù)據(jù)輸入端D。當(dāng)時,,導(dǎo)通,斷開,如下圖所示:
?輸入數(shù)據(jù)D經(jīng)、兩個非門,使,,這時輸出端跟隨輸入信號D的變化,因此又被稱作透明鎖存器。當(dāng)時,,,斷開,導(dǎo)通,如下圖所示:
這種情況下與基本雙穩(wěn)態(tài)電路一致。由于、輸入端存在的分布電容對邏輯電平有短暫的保持作用,在兩個傳輸門狀態(tài)轉(zhuǎn)換瞬間并不影響電路的輸出狀態(tài)。之后,電路被鎖定在信號由1變0前瞬間信號所確定的狀態(tài),在的條件下可保持鎖存器狀態(tài)不變,使1位二進制數(shù)據(jù)得以存儲。
D鎖存器的特性表如下表所示:
D鎖存器的功能表如下表所示:
?D鎖存器的狀態(tài)圖如下圖所示:
從狀態(tài)圖可以看出,當(dāng)狀態(tài)時,輸出將保持0狀態(tài);當(dāng)輸入時,輸出將從0變?yōu)?。以下是D觸發(fā)器的波形圖:
1.5.3邏輯門控D鎖存器
邏輯門控D鎖存器是由門控SR鎖存器在輸入端和之間連接一個非門得到的,從而保證了的約束條件,消除了可能出現(xiàn)的非定義狀態(tài)。其邏輯功能與傳輸門控D鎖存器完全相同,因此邏輯符號也相同。邏輯門控D鎖存器的邏輯電路如下所示:
1.6空翻現(xiàn)象
空翻現(xiàn)象指當(dāng)控制信號有效時,激勵信號的任何變化,都將直接引起鎖存器輸出狀態(tài)的改變,若輸入信號若發(fā)生多次變化,輸出狀態(tài)也跟著發(fā)生多次變化(由于干擾導(dǎo)致輸入電平突變引起鎖存器邏輯值發(fā)生變化),這一現(xiàn)象就被稱為鎖存器的空翻。下圖是D鎖存器發(fā)生空翻現(xiàn)象的波形圖:
從波形圖中可以看出,藍(lán)色虛線內(nèi),由于控制信號為高電平,?,可以得出。藍(lán)色虛線和黃色虛線之間,由于,那么;同理,兩條黃色虛線之間,,。空翻是一種有害的現(xiàn)象,它使得時序電路不能按時鐘節(jié)拍工作,造成系統(tǒng)的誤動作。我們前面學(xué)習(xí)的鎖存器都存在空翻現(xiàn)象,而引起空翻現(xiàn)象是由鎖存器的結(jié)構(gòu)導(dǎo)致的,為了能夠解決鎖存器的空翻現(xiàn)象,人們便在鎖存器的基礎(chǔ)上進行了修改,因此人們便設(shè)計出了觸發(fā)器,觸發(fā)器按照邏輯功能的不同可分為RS 觸發(fā)器、D 觸發(fā)器、JK 觸發(fā)器、T 觸發(fā)器。
由于在FPGA 設(shè)計中我們更多的是利用D 觸發(fā)器來設(shè)計電路,基本上每一個時序電路模塊都能看到D 觸發(fā)器的身影,所以下面將重點放在D 觸發(fā)器上,其他的觸發(fā)器我們這里就不再進行詳細(xì)講解,可參考《電子技術(shù)基礎(chǔ) 數(shù)字部分》(第六版)。
2.觸發(fā)器
觸發(fā)器(Flip-Flop)也是數(shù)字電路中的一種具有記憶功能地邏輯器件。觸發(fā)器是一種對脈沖邊沿敏感的雙穩(wěn)態(tài)電路,它只能在觸發(fā)脈沖的上升沿(或下降沿)瞬間改變狀態(tài),在數(shù)字電路中可以記錄數(shù)字信號“0”和“1”。D鎖存器在使能信號為邏輯1期間更新狀態(tài)。在下圖所示的波形中以加粗部分表示這個敏感時期。
在此期間,它的輸出會隨輸入信號變化。而很多時序電路要求存儲電路只對時鐘信號的上升沿或下降沿敏感,而在其他時刻保持狀態(tài)不變,如移位寄存器和計數(shù)器。這種對時鐘脈沖邊沿敏感的狀態(tài)更新稱為觸發(fā),具有觸發(fā)工作特性的存儲單元稱為觸發(fā)器。電路結(jié)構(gòu)不同的觸發(fā)器對時鐘脈沖的敏感邊沿可能不同,分為上升沿觸發(fā)和下降沿觸發(fā)。以(Clock Pulse)命名上升沿觸發(fā)的時鐘信號,觸發(fā)邊沿如下圖波形中的箭頭所示:
以命名下降沿觸發(fā)的時鐘信號,觸發(fā)邊沿如下圖波形中的箭頭所示:
在Verilog HDL中,對脈沖電平敏感的鎖存器和脈沖邊沿的觸發(fā)器的描述語句是不同的。?
目前應(yīng)用的觸發(fā)器主要有三種電路結(jié)構(gòu):主從觸發(fā)器、維持阻塞觸發(fā)器和利用傳輸延遲的觸發(fā)器。由于CMOS主從結(jié)構(gòu)的D觸發(fā)器在芯片上占用的面積最小,邏輯設(shè)計方法比較簡單,在大規(guī)模CMOS集成電路,特別是可編程邏輯器件(如CPLD、FPGA)和專用集成電路(ASIC)中得到普遍應(yīng)用,因而在目前的工程實踐中更多地應(yīng)用到D觸發(fā)器。
2.1主從D觸發(fā)器
2.1.1主從D觸發(fā)器的電路結(jié)構(gòu)和工作原理
下圖將兩個CMOS傳輸門控D觸發(fā)器級聯(lián)構(gòu)成典型的CMOS主從D觸發(fā)器。圖中左邊的鎖存器稱為主鎖存器,右邊的稱為從鎖存器。主鎖存器與從鎖存器的使能信號相位相反,利用兩個鎖存器的交互鎖存,則可實現(xiàn)存儲數(shù)據(jù)和輸入信號之間的隔離。
主從D觸發(fā)器的工作過程分為以下兩個節(jié)拍:
(1)當(dāng)時鐘信號時,,,使得導(dǎo)通,?斷開,端輸入信號進入主鎖存器,這時跟隨端的狀態(tài)變化,即。例如,時,經(jīng)傳送到的輸入端,使,。同時由于斷開,切斷了從鎖存器與主鎖存器之間的連接,而導(dǎo)通,使的輸入端和的輸出端經(jīng)過聯(lián)通,構(gòu)成最基本的雙穩(wěn)態(tài)電路,使從鎖存器維持原來的狀態(tài),即觸發(fā)器的輸出狀態(tài)不變。
(2)當(dāng)CP由0跳變?yōu)?后,,,使得斷開,從而切斷端與主鎖存器的聯(lián)系,同時導(dǎo)通,將的輸入端和的輸出端連通,主鎖存器鎖存跳變前端的數(shù)據(jù)(主鎖存器維持原來的狀態(tài))。這時,導(dǎo)通,斷開,端信號傳送到端。若,,經(jīng)傳送到的輸入端,于是,。
在一個變化周期內(nèi),觸發(fā)器的輸出狀態(tài)只可能改變一次,克服了鎖存器存在的空翻現(xiàn)象。
可見,從鎖存器在工作中是跟隨主鎖存其的狀態(tài)變化的,觸發(fā)器因之冠名為主從(Master-Slave)。它的狀態(tài)轉(zhuǎn)換發(fā)生在CP信號上升沿到來后的狀態(tài),輸出信號由信號上升沿到達前瞬間的數(shù)據(jù)信號所決定,從功能上考慮為觸發(fā)器。如果以表示上升沿到達后觸發(fā)器的狀態(tài),則觸發(fā)器的特性可以用下式來表達:。
(1)D觸發(fā)器的特性表
已輸入信號和觸發(fā)器的現(xiàn)態(tài)為變量,以次態(tài)為函數(shù),描述它們之間邏輯關(guān)系的真值表稱為觸發(fā)器的特性表。D觸發(fā)器的特性表如下圖所示,表中對觸發(fā)器的輸入信號和現(xiàn)態(tài)的每種組合都列出了相應(yīng)的次態(tài)。
?(2)D觸發(fā)器的特性方程
觸發(fā)器的邏輯功能也可以用邏輯表達式來描述,稱為觸發(fā)器的特性方程。根據(jù)D觸發(fā)器的特性表可以列出D觸發(fā)器的特性方程:
(3)D觸發(fā)器的狀態(tài)圖
D觸發(fā)器的狀態(tài)圖由D觸發(fā)器的特性表導(dǎo)出。圓圈內(nèi)為觸發(fā)器的狀態(tài),分別標(biāo)示為0和1的兩個圓圈代表了觸發(fā)器的兩個狀態(tài);4跟帶箭頭的方向線表示狀態(tài)轉(zhuǎn)換的方向,分別對應(yīng)特性表中的四行,方向線的起點為觸發(fā)器的現(xiàn)態(tài),箭頭指向相應(yīng)的次態(tài);方向線旁邊標(biāo)出了狀態(tài)轉(zhuǎn)換的條件,即輸入信號的邏輯值。D觸發(fā)器的狀態(tài)圖如下圖:
由特性表、特征方程或狀態(tài)圖均可以看出,當(dāng)時,觸發(fā)器的下一狀態(tài)將被置0()?;當(dāng)時,將被置1()。在時鐘脈沖的兩個觸發(fā)沿之間,觸發(fā)器狀態(tài)保持不變,即存儲1位二進制數(shù)據(jù)。
2.1.2 D鎖存器與D觸發(fā)器的比較
D鎖存器與D觸發(fā)器的邏輯功能其實是相同的,只不過它們的觸發(fā)方式有所不同。下圖是D鎖存器與D觸發(fā)器的波形圖:
從上面的波形圖可以看出,?D觸發(fā)器是在時鐘信號為0時,才會接收輸入信號D的值,并將這個值鎖存起來,當(dāng)控制信號CLK 變?yōu)? 時,輸出信號Q 才會被改變。那么D 觸發(fā)器,其實就是在CLK 這個時鐘信號由0 變?yōu)? 的這個邊沿進行觸發(fā)的,通常我們就將這種觸發(fā)方式稱為邊沿觸發(fā),通過這種邊沿觸發(fā)方式的D 觸發(fā)器我們也將它稱為邊沿D 觸發(fā)器。
D 鎖存器的觸發(fā)方式是電平觸發(fā),和我們剛剛講的邊沿觸發(fā)是有所不同的。這種不同是由于鎖存器和觸發(fā)器的電路結(jié)構(gòu)不同,而造成的。這里需要注意的是,由于D 鎖存器的功能和D 觸發(fā)器的功能是一樣的,所以在編寫代碼時很容易把D 鎖存器當(dāng)成D 觸發(fā)器來使用,這種情況應(yīng)該是極力避免的。
2.1.3利用Verilog描述觸發(fā)器
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代碼,在長度上并沒有什么差別,但是該代碼所描述的功能與之前代碼所描述的功能是有很大區(qū)別的,之前我們所描述的功能是沒有時鐘信號的,即之前描述的都是組合邏輯電路,而現(xiàn)在描述的是一個貨真價實的時序電路。以下是對D觸發(fā)器Verilog代碼的分析:
該代碼的第11 行至第17 行,是本程序中最核心的,也是用法相對比較多的always 模塊。always 模塊敏感表可以為電平、沿信號(上升沿)posedge、(下降沿)negedge。前面已經(jīng)將always 模塊用在組合邏輯電路中,其基本代碼結(jié)構(gòu)如下所示:
1 always @ (*) //always @ (A,B) 也可以always @ (A or B) 2 begin 3 //具體邏輯 4 endalways 后若有沿信號(上升沿posedge,下降沿negedge)聲明,則多為時序邏輯,其基本代碼結(jié)構(gòu)如下所示:
1 always @ (posedge CLK_50M) //單個沿觸發(fā)的時序邏輯 2 begin 3 //具體邏輯 4 end 5 6 always @ (posedge CLK_50M or negedge RST_N) //多個沿觸發(fā)的時序邏輯 7 begin 8 //具體邏輯 9 end組合邏輯電路中always@(A,B)意義為:@為事件等待語句,意思是一直等待A和B兩個敏感變量,不管A和B是從高變低,還是從低變高,都將會執(zhí)行always下面的begin...end中的語句。如果A和B都沒有變化,那么always 也將不往下執(zhí)行,將一直循環(huán)等待。新標(biāo)準(zhǔn)下也可以寫作:always@(*),解釋如下:always @ (*)是個組合邏輯電路的描述方式;是為了防止在設(shè)計時考慮不周全帶來一些操作失誤,所以敏感表用*(表示全部的敏感變量,這里表示A 和B),只要有任何輸入信號變化,其輸出立即發(fā)生變化。
時序邏輯電路中always @ (posedge CLK_50M or negedge RST_N):@也同樣是事件等待語句,只是這里一直等待的是CLK_50M 和RST_N 二個敏感變量的上升沿和下降沿的變化,如果有一個CLK_50M 的上升沿到來,那么便會執(zhí)行always下面的begin…end 中的語句。同樣的如果有一個RST_N 的下降沿到來,也同樣會執(zhí)行always下面的begin……end 中的語句。如果兩個信號都沒有到來,那么將不會執(zhí)行begin……end 中的語句,一直等待信號的到來。
注:時序電路中的賦值是”<=“(非阻塞賦值);而組合邏輯電路中的賦值是”=“(阻塞賦值)
接下來再來看always模塊中的代碼,首先看到的是第13 行的if 語句,該語句判斷復(fù)位信號是否有效,從變量命名規(guī)則中我們可以看出RST_N是一個低電平有效的復(fù)位信號,也就是說,當(dāng)RST_N=0時,if為真,Q<=1’b0 會被執(zhí)行,D觸發(fā)器將會被復(fù)位輸出0;當(dāng)RST_N=1 時,if為假,就要執(zhí)行else 中的Q<=D 這條語句,D觸發(fā)器將會正常工作。
3.寄存器
由前面可知,能夠存儲一位二進制碼的時序電路叫做觸發(fā)器,寄存器就是能夠存儲多位二進制數(shù)碼的時序電路。
三態(tài)輸出門
三態(tài)輸出門除了具有一般門電路的兩種狀態(tài),即輸出高、低電平外,還具有高輸出阻抗的第三狀態(tài),稱為高阻態(tài),又稱為禁止態(tài)。下圖是三態(tài)輸出緩沖電路及其邏輯符號,其中是輸入端,位輸出端,是控制信號輸入端,也成為使能端。
當(dāng)使能端時,如果,則,,使得導(dǎo)通,同時截至,輸出端;如果,則,,使得截至,同時導(dǎo)通,輸出端。
當(dāng)使能端時,不論A的取值如何,都使得、,則和均截至,電路的輸出既不是低電平,又不是高電平,而是開路,這就是第三種高阻工作狀態(tài)。
因此,當(dāng)為有效的高電平時,電路處于正常邏輯工作狀態(tài),;而當(dāng)為低電平時,電路處于高阻狀態(tài)。下圖是三態(tài)輸出門電路的真值表。
?三態(tài)輸出們電路主要用于總線傳輸,如計算機或微處理器系統(tǒng),其連接形式如下所示:
?任意時刻只有一個門電路的使能端為1,該門電路的信號被傳送到總線上,而其他三態(tài)輸出電路處于高阻狀態(tài)。這樣就可以按一定順序?qū)⒏鱾€門電路的輸出信號分時送到總線上。
3.1寄存器的原理
寄存器是數(shù)字系統(tǒng)中用來存儲二進制數(shù)據(jù)的邏輯器件。1個觸發(fā)器可存儲1位二進制數(shù)據(jù),存儲N位二進制數(shù)據(jù)的寄存器需要用N個觸發(fā)器組成。
由8個觸發(fā)器構(gòu)成的8位寄存器的邏輯圖如下圖所示:
圖中,~是8位數(shù)據(jù)輸入端,在脈沖上升沿作用下,~端的數(shù)據(jù)同時存入相應(yīng)的觸發(fā)器,直到下一個時鐘信號的上升沿到來之前,無論怎么改變輸入信號的值,輸出信號的值也不會改變,是一種極為簡單的同步時序電路。當(dāng)輸出使能信號時,觸發(fā)器存儲的數(shù)據(jù)通過三態(tài)門輸出端~并行輸出。下圖是典型的中規(guī)模繼承8位寄存器74HC/HCT374的功能表(和的下標(biāo)表示第位觸發(fā)器,和表示脈沖上升沿之前瞬間的電平)。
3.2移位寄存器
移位寄存器有可以分為單向移位寄存器和雙向移位寄存器,單向移位寄存器指的就是右移位寄存器和左移位寄存器,而雙向移位寄存器就是既能向左也能向右移位。
3.2.1單向移位寄存器
如果將若干個觸發(fā)器級聯(lián)成下圖所示電路,則構(gòu)成基本的移位寄存器。這里以右移位寄存器為例,如下圖所示:
上圖是一個4位移位寄存器,串行二進制數(shù)據(jù)從輸入端輸入,左邊觸發(fā)器的輸出作為右鄰觸發(fā)器的數(shù)據(jù)輸入。若將串行數(shù)碼從高位()至低位()按時鐘間隔依次送到端,經(jīng)過第一個時鐘脈沖后,。由于跟隨后面的是,因此經(jīng)過第二個時鐘脈沖后,觸發(fā)器的狀態(tài)移入觸發(fā)器,而轉(zhuǎn)變?yōu)樾碌臓顟B(tài),即,。以此類推,該寄存器的功能如下表所示:
由表可知,輸入數(shù)碼依次由左邊觸發(fā)器移到右側(cè)觸發(fā)器。經(jīng)過4個時鐘脈沖后,4個觸發(fā)器的輸出狀態(tài)與輸入數(shù)碼相對應(yīng)。下圖是數(shù)碼1101(即,,,)在移位寄存器中移位的波形,經(jīng)過4個時鐘脈沖后,1101出現(xiàn)在觸發(fā)器的輸出端。這樣,就將串行輸入數(shù)據(jù)轉(zhuǎn)換為并行輸出。
這里還畫出了第5到第8個時鐘脈沖作用下,輸入數(shù)碼在寄存器中移位的波形。可上圖可知,在第8個時鐘脈沖后,脈沖已從串行數(shù)據(jù)輸出端(即端)全部移出寄存器。也就是說,隨著時鐘信號的推移,從輸出端可得到1101的串行輸出。
從上述操作可知,移位寄存器中能用脈沖邊沿敏感的觸發(fā)器,而不能用電平敏感的鎖存器來構(gòu)成,因為在時鐘脈沖高電平期間,鎖存器輸出跟隨輸入變化的特性將使移位操作失去控制。顯然,移位寄存器屬于同步時序電路。
3.2.2多功能雙向移位寄存器
有時需要對移位寄存器的數(shù)據(jù)流向加以控制,實現(xiàn)數(shù)據(jù)的雙向移動,其中一個方向稱為右移,另一個方向稱為左移,這種移位寄存器稱為雙向移位寄存器。規(guī)定邏輯圖中最低有效位(LSB)到最高有效位(MSB)的電路排列順序位從上到下,從左到右。因此,定義移位寄存器中的數(shù)據(jù)從低位觸發(fā)器移向高位為右移,反之為左移。這一點與通常計算機程序中的規(guī)定相反,后者從自然二進制數(shù)的排列考慮,將數(shù)據(jù)移向高位定義為左移,反之為右移。
為了擴展邏輯功能和增加使用的靈活性,在雙向移位基礎(chǔ)上,還可以增加并行輸入、并行輸出等功能,構(gòu)成多功能移位寄存器,其工作模式的簡化示意圖如下所示:
?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?上述代碼是一個典型的組合邏輯電路和時序邏輯電路分開寫的風(fēng)格。。模塊名、端口聲明、數(shù)據(jù)類型定義三部分這里不再贅述。代碼的16到22行代碼主要完成的功能是一個4位的寄存器(即4位的D觸發(fā)器),其中RST_N是一個低電平有效的復(fù)位信號;第25行到31行的代碼主要完成的功能是判斷DATA_EN使能位,并進行移位操作。這里詳細(xì)解釋一下第28行中的“{”和“}”,這里是拼接運算符。舉例說明,A=2'b10,B=4'1111,則{A,B}=6'b101111。接下來詳細(xì)講解一下移位操作是如何實現(xiàn)的,假設(shè)DATA_OUT為0000,DATA_IN為1,DATA_EN為1,當(dāng)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;當(dāng)程序運行第二次的時候,DATA_OUT為0001,此時假設(shè)DATA_IN為0,當(dāng)DATA_IN為1時,DATA_OUT_N={3'b001,1'b0}=4'b0010。依次類推,這就是移位寄存器實現(xiàn)的過程。
有時要求在移位過程中,數(shù)據(jù)仍保持在寄存器中不丟失。此時,只要將移位寄存器最高位的輸出接至最低位的輸入,或將最低位的輸出接至最高位的輸出,便可實現(xiàn)這個功能,稱為環(huán)形移位寄存器。亦可作計數(shù)器使用,稱為環(huán)形計數(shù)器。
4.計數(shù)器
計數(shù)器是最常用的時序電路之一,它們不僅可用于對脈沖進行計數(shù),還可用于分頻、定時、產(chǎn)生節(jié)拍脈沖以及其他時序信號。計算器的種類不勝枚舉,按觸發(fā)器動作分類,可分為同步計數(shù)器和異步計數(shù)器;按編碼數(shù)值增減分類,可分為遞增計數(shù)器、遞減計數(shù)器和可逆計數(shù)器;按編碼分類,又可分為二進制計數(shù)器、BCD計數(shù)器、循環(huán)碼計數(shù)器等。計數(shù)器運行時,從某一狀態(tài)開始依次遍歷不重復(fù)的各個狀態(tài)后完成一次循環(huán),所經(jīng)過的轉(zhuǎn)臺總數(shù)稱為計數(shù)器的模(Module),并用M表示。若某個計數(shù)器在個狀態(tài)下循環(huán)計數(shù),通常則稱之為模計數(shù)器,或計數(shù)器。例如一個在60個不同狀態(tài)中循環(huán)轉(zhuǎn)換的計數(shù)器,就可稱為模60,或計數(shù)器。有時也把模計數(shù)器稱為進制計數(shù)器。這里以4位同步二進制計數(shù)器和基本環(huán)形計數(shù)器為例。
4.1?4位同步二進制計數(shù)器
由四位D觸發(fā)器組成的計數(shù)器電路圖如下所示:
上述計數(shù)器是由4個邊沿D觸發(fā)器、、和,再加上三個異或門和兩個與門構(gòu)成的。電路計數(shù)的過程詳述如下:
假設(shè)電路的初始狀態(tài)為000(即初始輸出),接下來看四個觸發(fā)器的輸入信號分別是什么,先看,的輸入信號,是由反饋回來的,已知此時,因此,這個1反饋給輸入信號,此時的輸入信號就是1;接下來看,的輸入信號是和經(jīng)過一個異或門之后得到的,已知此時,,因此的輸入信號為0;接著看,的輸入信號信號是由和經(jīng)過一個與或門之后的輸出與異或得到的,因此的輸出為0;最后看,的輸入是由、和相與之后的輸出與異或得到的,因此的輸出為0。
分析完、、和此時的輸出值后,就可以根據(jù)D觸發(fā)器的邏輯規(guī)律知道下一刻電路的輸出值了,當(dāng)端口出現(xiàn)一個上升沿,即由0變1,四個邊沿觸發(fā)器同時觸發(fā),當(dāng)這個時鐘信號的上升沿到來時,觸發(fā)器的輸入值將會被鎖存,下一刻4個觸發(fā)器的輸出為,,,(為二進制最低位,為二進制最高位)。因此現(xiàn)在計數(shù)器輸出的值為二進制數(shù)0001,也就是十進制的1。依此類推,當(dāng)?shù)诙€時鐘信號的上升沿到來時,計數(shù)器會輸出二進制數(shù)0010,也就是十進制的2。每當(dāng)電路多來一個時鐘上升沿,計數(shù)器就會加1。當(dāng)電路計數(shù)到第十六個脈沖時,電路狀態(tài)將由1111變?yōu)?000,完成一個循環(huán)周期,因此該電路也稱為模16計數(shù)器。所謂同步是指該電路中的四個邊沿觸發(fā)器共用一個時鐘脈沖,當(dāng)時鐘上升沿到來時,它們能同時觸發(fā),這就叫同步。所謂異步就是這些觸發(fā)器不是共用同一個時鐘脈沖,且觸發(fā)不是同時發(fā)生的。
模16加法計數(shù)器的特性表如下所示:
?下圖是模16加法計數(shù)器的狀態(tài)圖。
4.2基本環(huán)形計數(shù)器
將前述的移位寄存器的()與相連,則構(gòu)成環(huán)形計數(shù)器,如下圖所示。
若事先通過端施加低電平脈沖,在4個觸發(fā)器內(nèi)置入數(shù)據(jù),那么環(huán)形計數(shù)器在脈沖作用下,將會有如下所示的4個狀態(tài),于是,電路成為模4計數(shù)器。
?下圖是在4個脈沖作用下的波形。
可以看出,這種計數(shù)器不必譯碼就能直接輸出4個狀態(tài)的譯碼信號,亦不存在普通譯碼電路輸出易出現(xiàn)的競爭-冒險現(xiàn)象。?
4.3計數(shù)器的應(yīng)用
了解完計數(shù)器的工作原理,接下來就是計數(shù)器的應(yīng)用,首先想到的就是秒表,秒表就是一個典型的計數(shù)器。這里暫不考慮秒表的暫停和計時功能,主要了解一下秒表的基本工作原理。
?一個兩位數(shù)的秒表可以從0一直累加到59,然后再返回0循環(huán)進行累加,前述的是一個模16計數(shù)器,這里從0到59循環(huán)累加,因此是一個模60計數(shù)器。模60計數(shù)器的電路結(jié)構(gòu)相對模16是更加復(fù)雜的,如果直接選擇用門電路進行搭建是十分麻煩的,因此這里不直接用模60計數(shù)器來實現(xiàn),而是選擇用模6計數(shù)器加上模10計數(shù)器的方法實現(xiàn),原因在于一個兩位的秒表是分各位和十位的,個位顯示0-9這十個數(shù),十位顯示0-5這留個數(shù),可以將十位和各位分開來進行技術(shù)。下圖中的計數(shù)器開始計數(shù),它的個位數(shù)字每隔一秒變化一次,變化到9的時候,它的下一刻將會歸零,然后重新計數(shù);而十位的數(shù)字每隔10秒變化一次,變化到5的時候,它的下一刻也將會歸0,然后重新計數(shù)。這就是兩位數(shù)秒表的實現(xiàn)方法,下圖是秒表的電路示意圖。
?從電路示意圖中可以看出,先將個位的數(shù)碼管和十位的數(shù)碼管分別與模10 和模6計數(shù)器對應(yīng),然后,將這兩個計數(shù)器的輸出信號引出,連接到相應(yīng)的譯碼器上,再通過譯碼器譯碼,將最終的數(shù)字顯示在數(shù)碼管上。這就是一個兩位數(shù)秒表的電路結(jié)構(gòu)了,這里要注意的是,圖中的兩個計數(shù)器,它們的時鐘信號不是共用的,模10 計數(shù)器的時鐘端,信號的上升沿是需要間隔1 秒來一次,而模6 計數(shù)器的時鐘端,信號的上升沿是需要間隔10 秒來一次的,具體怎么產(chǎn)生需要的時鐘信號,這里就不再贅述。
4.4利用Verilog描述計數(shù)器
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 endmoduleReferences:
1.康華光《 電子技術(shù)基礎(chǔ) 數(shù)字部分》(第六版);
2.鋯石科技《HELLO FPGA數(shù)字部分》
總結(jié)
以上是生活随笔為你收集整理的时序逻辑电路的基础知识(结合Verilog)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个ssm综合小案例-商品订单管理-第二
- 下一篇: hdu4554 A Famous Gam