大俠好,歡迎來到FPGA技術(shù)江湖。本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場小白及打算進(jìn)階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會(huì)。
系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。后續(xù)會(huì)陸續(xù)更新 Xilinx 的 Vivado、ISE 及相關(guān)操作軟件的開發(fā)的相關(guān)內(nèi)容,學(xué)習(xí)FPGA設(shè)計(jì)方法及設(shè)計(jì)思想的同時(shí),實(shí)操結(jié)合各類操作軟件,會(huì)讓你在技術(shù)學(xué)習(xí)道路上無比的順暢,告別技術(shù)學(xué)習(xí)小BUG卡破腦殼,告別目前忽悠性的培訓(xùn)誘導(dǎo),真正的去學(xué)習(xí)去實(shí)戰(zhàn)應(yīng)用,這種快樂試試你就會(huì)懂的。話不多說,上貨。
數(shù)字電路中的時(shí)序邏輯
在各種復(fù)雜的數(shù)字電路中,不但需要對(duì)二值信號(hào)進(jìn)行算數(shù)運(yùn)算和邏輯運(yùn)算,還經(jīng)常需要將這些信號(hào)和運(yùn)算結(jié)果保存起來。為此,需要使用具有記憶功能的基本邏輯單元。能夠存儲(chǔ)1位的二進(jìn)制數(shù)碼的單元電路稱為觸發(fā)器。
為了實(shí)現(xiàn)記憶1位二值信號(hào)的功能,觸發(fā)器必須具備以下兩個(gè)基本特點(diǎn):
具有兩個(gè)能自行保持的穩(wěn)定狀態(tài),用來表示邏輯狀態(tài)的0和1,或二進(jìn)制數(shù)的0和1。
在觸發(fā)信號(hào)的操作下,根據(jù)不同的輸入信號(hào)可以置成1或0狀態(tài)
由于采用的電路結(jié)構(gòu)形式不同,觸發(fā)信號(hào)的觸發(fā)方式也不一樣。觸發(fā)方式分為電平觸發(fā)、脈沖觸發(fā)、邊沿觸發(fā)三種。
SR鎖存器是各種觸發(fā)器電路的基本構(gòu)成部分。
圖1 :SR鎖存器(或非門)的電路結(jié)構(gòu)和圖像符號(hào)
從電路結(jié)構(gòu)中可以看出,它是由兩個(gè)交叉反饋或非門組成的。它有兩個(gè)輸入端,SD表示置位,RD表示復(fù)位,輸入端為1時(shí)表示有激勵(lì)信號(hào),為0時(shí)表示無激勵(lì)信號(hào);有兩個(gè)輸出端,Q是輸出,正常工作時(shí),Q’是Q的反變量。
思考:分析SR鎖存器(或非門構(gòu)成)的工作原理?
當(dāng)RD =0,SD=1時(shí),不論觸發(fā)器的初始狀態(tài)如何,Q’一定為0,由于“與非”門G1的輸入全是0,Q端為1。稱觸發(fā)器為1狀態(tài),SD為置1端。
當(dāng)RD =1,SD=0時(shí),不論觸發(fā)器的初始狀態(tài)如何,Q’一定為1,從而使Q為0。稱觸發(fā)器為0狀態(tài),RD置0端。
當(dāng)RD =0,SD =0時(shí),如前所述,Q及Q’狀態(tài)保持原狀態(tài)不變。
當(dāng)RD =1,SD =1時(shí),不論觸發(fā)器的初始狀態(tài)如何,Q=Q’=0,若RD、SD同時(shí)由1變成0,在兩個(gè)門的性能完全一致的情況下, Q及Q’哪一個(gè)為1,哪一個(gè)為0是不定的,在應(yīng)用時(shí)不允許RD和SD同時(shí)為1。
SR鎖存器也可以用與非門構(gòu)成。
圖2 :SR鎖存器(與非門)的電路結(jié)構(gòu)和圖像符號(hào)
與非門構(gòu)成的SR鎖存器的工作原理和或非門構(gòu)成的SR鎖存器類似,具體不在敘述。
在電平觸發(fā)的觸發(fā)器電路中,除了置1、置0輸入端以外,又增加了一個(gè)觸發(fā)信號(hào)輸入端。只有觸發(fā)信號(hào)變?yōu)橛行щ娖胶?,觸發(fā)器才能按照輸入的置1、置0信號(hào)置成相應(yīng)的狀態(tài)。將觸發(fā)信號(hào)記作CLK。
圖3 :電平觸發(fā)的SR觸發(fā)器的電路結(jié)構(gòu)和圖形符號(hào)
思考:電平觸發(fā)的SR觸發(fā)器的工作原理?
在某些應(yīng)用場合,有時(shí)需要在CLK的有效電平到達(dá)之前預(yù)先將觸發(fā)器置成指定狀態(tài),為此,在實(shí)用的電路上往往設(shè)置有異步置1輸入端SD‘和異步置0輸入端RD’。
圖4:帶有異步置位、復(fù)位端的電平觸發(fā)的SR觸發(fā)器的電路結(jié)構(gòu)和圖形符號(hào)
思考 :帶有異步置位、復(fù)位端的電平觸發(fā)的SR觸發(fā)器的工作原理?
為了能適應(yīng)單端輸入信號(hào)的需要,在一些集成電路產(chǎn)品中,將電平觸發(fā)的SR觸發(fā)器經(jīng)過修改,得到了電平觸發(fā)的D觸發(fā)器,也稱D型鎖存器。
圖5:電平觸發(fā)的D觸發(fā)器的電路結(jié)構(gòu)和圖形符號(hào)
思考 :電平觸發(fā)的D觸發(fā)器的工作原理。
在CMOS電路中,經(jīng)常利用CMOS傳輸門組成電平觸發(fā)D觸發(fā)器,如圖6。
圖6 :利用CMOS傳輸門組成的電平觸發(fā)的D觸發(fā)器
在CLK的有效電平期間輸出狀態(tài)始終跟隨輸入狀態(tài)變化,輸出與輸入的狀態(tài)保持相同,所以又將這個(gè)電路稱為“透明的D型鎖存器”。
為了提高觸發(fā)器工作的可靠性,希望在每個(gè)CLK周期里輸出端的狀態(tài)只能改變一次。因此,在電平觸發(fā)的觸發(fā)器的基礎(chǔ)上,設(shè)計(jì)了脈沖觸發(fā)的觸發(fā)器。
圖7 :主從SR觸發(fā)器的電路結(jié)構(gòu)和圖形符號(hào)
思考 :主從SR觸發(fā)器的工作原理?
在使用主從結(jié)構(gòu)觸發(fā)器時(shí)經(jīng)常會(huì)遇到這樣的一個(gè)情況,就是在CLK=1期間輸入信號(hào)發(fā)生過變化以后,CLK下降沿到達(dá)時(shí)從觸發(fā)器的狀態(tài)不一定能按照此刻輸入信號(hào)的狀態(tài)來確定,而必須考慮整個(gè)CLK=1期間輸入信號(hào)的變化過程才能確定觸發(fā)器的次態(tài)。
例:在CLK=1時(shí),首先將S=1;R=0;此時(shí)主觸發(fā)器置1。然后S=0,R=0,此時(shí)主觸發(fā)器依然是置1的。當(dāng)CLK=0時(shí),從觸發(fā)器就會(huì)按照置1的方式去驅(qū)動(dòng),而不是S=0,R=0的情況。
為了使用方便,希望即使出現(xiàn)了S=R=1的情況,觸發(fā)器的次態(tài)也是確定,因而需要進(jìn)一步改進(jìn)觸發(fā)器的電路結(jié)構(gòu)。因此設(shè)計(jì)了主從結(jié)構(gòu)JK觸發(fā)器。
圖8 :主從結(jié)構(gòu)JK觸發(fā)器的電路結(jié)構(gòu)和圖形符號(hào)
思考 :主從結(jié)構(gòu)JK觸發(fā)器的工作原理?
為了提高觸發(fā)器的可靠性,增強(qiáng)抗干擾能力,希望觸發(fā)器的次態(tài)僅僅取決于CLK信號(hào)下降沿(或上升沿)到達(dá)時(shí)刻輸入信號(hào)的狀態(tài)。而在此之前和之后輸入狀態(tài)的變化對(duì)觸發(fā)器的次態(tài)沒有影響。為實(shí)現(xiàn)這一設(shè)想,設(shè)計(jì)了用兩個(gè)電平觸發(fā)的D觸發(fā)器組成的邊沿觸發(fā)器。
圖9 :用兩個(gè)電平觸發(fā)的D觸發(fā)器組成的邊沿觸發(fā)器
圖10 :CMOS邊沿觸發(fā)D觸發(fā)器
圖11 :帶有異步置位、復(fù)位端的CMOS邊沿觸發(fā)D觸發(fā)器
思考:分析邊沿觸發(fā)的D觸發(fā)器的工作原理?
為了保證觸發(fā)器在工作時(shí)能可靠地翻轉(zhuǎn),對(duì)于輸入信號(hào)、時(shí)鐘信號(hào)以及它們互相配合關(guān)系的都有一定的要求。
輸入信號(hào)的寬度有一定的要求;各個(gè)單元電路都有一定的延遲,輸入信號(hào)給定后,輸出信號(hào)會(huì)延遲一段時(shí)間才會(huì)出現(xiàn);輸入信號(hào)要求在CLK有效沿到來之前的一段時(shí)間內(nèi)穩(wěn)定,這段時(shí)間稱為建立時(shí)間;輸入信號(hào)要求在CLK有效沿過去之后的一段時(shí)間內(nèi)穩(wěn)定,這段時(shí)間稱為保持時(shí)間;CLK的變化頻率會(huì)有一定的上限。對(duì)于每個(gè)具體型號(hào)的集成觸發(fā)器,可以從手冊(cè)上查到這些動(dòng)態(tài)參數(shù),在工作時(shí)應(yīng)符合這些參數(shù)所規(guī)定的條件。
組合邏輯電路中,任一時(shí)刻的輸出信號(hào)僅取決于當(dāng)時(shí)的輸入信號(hào)。時(shí)序邏輯電路(簡稱為時(shí)序電路)中,任一時(shí)刻的輸出信號(hào)不僅取決于當(dāng)時(shí)的輸入信號(hào),而且還取決于電路原來的狀態(tài),或者說,還與以前的輸入有關(guān)。
例如:目前需設(shè)計(jì)一個(gè)自動(dòng)售貨機(jī),販賣售價(jià)為三元的飲料,要求每次只能投入一個(gè)一元的硬幣??上攵?,我們投入第一個(gè)硬幣沒有反應(yīng);投入第二個(gè)硬幣沒有反應(yīng);當(dāng)我們投入第三個(gè)硬幣時(shí),售貨機(jī)會(huì)給我們一瓶飲料。如果內(nèi)部是組合邏輯的話,三次投硬幣的輸入并沒有任何改變,但是產(chǎn)生了不同的結(jié)果,顯然內(nèi)部結(jié)構(gòu)不是單純的組合邏輯。內(nèi)部的功能有一定的記憶性功能,能夠清楚的記得之前我們投入的硬幣的數(shù)量。
時(shí)序邏輯電路 = 組合邏輯電路 + 時(shí)序邏輯器件(觸發(fā)器)。
根據(jù)輸出信號(hào)的特點(diǎn)將時(shí)序電路劃分為米利型(Mealy)和穆爾型(Moore)兩種。在米利型電路中,輸出信號(hào)不僅取決于存儲(chǔ)電路的狀態(tài),而且還取決于輸入變量;在穆爾型電路中,輸出信號(hào)僅僅取決于存儲(chǔ)電路的狀態(tài)。穆爾型電路只不過是米利型電路的一種特例而已。
鑒于時(shí)序電路在工作時(shí)是在電路的有限狀態(tài)間按一定的規(guī)律轉(zhuǎn)換的,所以又將時(shí)序電路稱為狀態(tài)機(jī)(state machine SM)或算法狀態(tài)機(jī)(algorithmic state machine ASM)。
計(jì)數(shù)器的時(shí)序電路如下:
圖12 :計(jì)數(shù)器(自加一)電路結(jié)構(gòu)
思考 :分析計(jì)數(shù)器(自加一)工作原理?
寄存器(Register)用于寄存一組二值代碼,它被廣泛地用于各類數(shù)字系統(tǒng)和數(shù)字計(jì)算機(jī)中。一個(gè)觸發(fā)器能儲(chǔ)存1位二值數(shù)碼,用N個(gè)觸發(fā)器組成的寄存器能夠儲(chǔ)存一組N位的二值數(shù)碼。
狀態(tài)轉(zhuǎn)換圖:在狀態(tài)轉(zhuǎn)換圖中以圓圈表示電路的各個(gè)狀態(tài),以箭頭表示狀態(tài)的轉(zhuǎn)換方向。在箭頭的旁邊注明了狀態(tài)轉(zhuǎn)換前的輸入變量取值和輸出值。通常將輸入變量取值寫在斜線以上,將輸出值寫在斜線以下。當(dāng)沒有輸入變量時(shí),斜線上方不寫任何東西。
圖13 :狀態(tài)轉(zhuǎn)移圖(示例)
簡單時(shí)序邏輯電路的設(shè)計(jì)方法如下:
邏輯抽象,得出電路的狀態(tài)轉(zhuǎn)換圖或狀態(tài)轉(zhuǎn)換表。
狀態(tài)化簡
若兩個(gè)電路狀態(tài)在相同的輸入下有相同的輸出,并且轉(zhuǎn)換到同樣一個(gè)狀態(tài)去,則稱這兩個(gè)狀態(tài)為等價(jià)狀態(tài)。顯然,等價(jià)狀態(tài)是重復(fù)的,可以合并為一個(gè)。電路的狀態(tài)數(shù)越少,設(shè)計(jì)出來的電路就越簡單。狀態(tài)化簡的目的就在于將等價(jià)狀態(tài)合并,以求得最簡的狀態(tài)轉(zhuǎn)移圖。
狀態(tài)分配
狀態(tài)分配又稱狀態(tài)編碼。時(shí)序邏輯電路的狀態(tài)是用觸發(fā)器狀態(tài)的不同組合來表示的。首先,需要確定觸發(fā)器的數(shù)目n。因?yàn)閚個(gè)觸發(fā)器共有2的n次冪種狀態(tài),要保證觸發(fā)器能表示的狀態(tài)數(shù)要大于等于設(shè)計(jì)需要的狀態(tài)數(shù)。
選定觸發(fā)器的類型,求出電路的狀態(tài)方程、驅(qū)動(dòng)方程和輸出方程
根據(jù)得到的方程式畫出邏輯圖
檢查設(shè)計(jì)的電路能夠自啟動(dòng)
在設(shè)計(jì)復(fù)雜的時(shí)序電路時(shí),通常采用層次化結(jié)構(gòu)設(shè)計(jì)方法,或者稱為模塊化設(shè)計(jì)方法。層次化結(jié)構(gòu)設(shè)計(jì)方法有“自頂向下”(top - to - down)和“自底向上”(bottom - to - up )兩種做法。采用自頂向下的做法時(shí),首先需要將所設(shè)計(jì)電路的功能逐級(jí)劃分為更簡單的功能模塊,直到這些模塊都能用簡單的邏輯電路實(shí)現(xiàn)為止。由于自頂向下劃分模塊的過程中完全從獲得最佳電路性能觸發(fā)的,并未考慮這些模塊電路是否已經(jīng)有成熟的設(shè)計(jì)存在了,所以必須從頭設(shè)計(jì)每個(gè)模塊電路,然后進(jìn)行仿真和測試。在發(fā)現(xiàn)問題時(shí),還需要反復(fù)修改。
在采取自底向上的做法時(shí),首先要考慮有哪些已有的,成熟的模塊電路可以利用。這些模塊電路可能是標(biāo)準(zhǔn)化的集成電路器件,也可能是經(jīng)過驗(yàn)證的電路單元。將電路劃分為功能塊時(shí),最后要?jiǎng)澐值侥芾眠@些已有的模塊電路來實(shí)現(xiàn)為止。直接采用這些模塊電路能大大減少設(shè)計(jì)的工作量。然而有時(shí)由于需要遷就已有的模塊電路,這就會(huì)使電路的某些性能收到一些影響。另外,也不可能任何一種功能模塊都有現(xiàn)成的成熟設(shè)計(jì),因此多數(shù)情況下都采用自頂向下和自底向上相結(jié)合的方法,以求達(dá)到既能滿足設(shè)計(jì)要求,又能提高設(shè)計(jì)速度、降低設(shè)計(jì)成本的目標(biāo)。
時(shí)序邏輯電路通常包含組合邏輯電路和存儲(chǔ)電路(觸發(fā)器)兩個(gè)組成部分。所以它的競爭-冒險(xiǎn)現(xiàn)象也包含兩個(gè)方面。
組合邏輯電路可能發(fā)生競爭-冒險(xiǎn)現(xiàn)象。產(chǎn)生原因和方法已經(jīng)在1.4組合邏輯中敘述過,不在過多敘述。
觸發(fā)器在工作工程中也有可能發(fā)生競爭-冒險(xiǎn)現(xiàn)象。為了保證觸發(fā)器可靠地翻轉(zhuǎn),輸入信號(hào)和時(shí)鐘信號(hào)在時(shí)間配合上應(yīng)滿足一定的要求。然而當(dāng)輸入信號(hào)和時(shí)鐘信號(hào)同時(shí)改變,而且途徑不同路徑到達(dá)同一觸發(fā)器時(shí),便產(chǎn)生了競爭。競爭的結(jié)果有可能導(dǎo)致觸發(fā)器誤動(dòng)作,這種現(xiàn)象稱為存儲(chǔ)電路(觸發(fā)器)的競爭-冒險(xiǎn)現(xiàn)象。
在大多數(shù)的時(shí)序邏輯電路中,我們都可以分解成為一個(gè)帶有“變化”數(shù)據(jù)功能的組合邏輯和一個(gè)帶有“存儲(chǔ)”數(shù)據(jù)功能的觸發(fā)器。在組合邏輯如何避免競爭冒險(xiǎn)時(shí),我們給出一種解決方案:引入選通脈沖。也就是在數(shù)據(jù)穩(wěn)定后,選通脈沖再過來。那么現(xiàn)在,如果組合邏輯后續(xù)電路是經(jīng)過觸發(fā)器存儲(chǔ)的,那么可以直接把選通脈沖當(dāng)作觸發(fā)器的CLK。只要能夠確定CLK是在數(shù)字穩(wěn)定后有效的,那么對(duì)于時(shí)序邏輯電路就沒有競爭冒險(xiǎn)。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601238 -
Xilinx
+關(guān)注
關(guān)注
71文章
2155瀏覽量
120850 -
數(shù)字電路
+關(guān)注
關(guān)注
193文章
1595瀏覽量
80379 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
1995瀏覽量
61011 -
時(shí)序邏輯
+關(guān)注
關(guān)注
0文章
39瀏覽量
9134
原文標(biāo)題:【教程分享】FPGA零基礎(chǔ)學(xué)習(xí):數(shù)字電路中的時(shí)序邏輯
文章出處:【微信號(hào):gh_9b9470648b3c,微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論