文章目錄
- 若幹常用的時序邏輯電路
-
- 寄存器
-
- 移位寄存器
- 計數器
-
- 同步計數器
-
- 同步二進制計數器
-
- 同步二進制加法計數器
-
- 經典設計 74161
- 同步二進制減法計數器
- 同步二進制加減計數器
- 同步十進制計數器
- 異步計數器
-
- 二進制計數器
- 二進制加法計數器
- 二進制減法計數器
- 任意進制計數器的構成方法
-
- 當N>M
-
- 置零法
- 預置數法
- 當N<M
- 計數器應用執行個體
-
- 計數器+譯碼器----->順序節拍脈沖發生器
- 計數器+資料選擇器----->序列脈沖發生器
若幹常用的時序邏輯電路
- 主要有兩類:寄存器和計數器,沒有組合電路那麼豐富
寄存器
- 用于寄存一組二進制代碼,N位寄存器由N個觸發器組成,可存放一組N位二進制代碼
- 隻要求其中每個觸發器可置一置零
例:74HC175
(1)邊沿觸發
(2)提供了一個R端可以異步置零
移位寄存器
- 具有儲存+移位功能
- 在二進制中,有時候移位就相當于運算,是以移位寄存器在數字電路中有相當重要的地位
- 這個電路連接配接很簡單,采用的都是邊沿D觸發器
- 資料從D1進來,一個節拍寫道Q0,下一個節拍到Q1,以此類推
- !因為觸發器有Tpd和Tcd的存在,才使得這種寫法能夠穩定。Tpd的作用是數到達之後要經過多長時間才能寫到下一級。想把資料穩定地寫道第一個觸發器FF0的話,資料和CLK應該有一個配合,早來建立時間,晚走保持時間。而相對于FF1來說,上一級來的資料也應該早來晚走。早來沒有問題,隻要觸發邊沿不到,Q0的值就是穩定值。晚走就要靠上一級的Tcd了。
- !也就是說從左向右,第一級的Tcd要大于第二級的Thold,依此類推。
- 工作波形圖如下:
- !!!用在哪?優化上一篇文章的這個模型
- 接到出來的Si上,移位寄存器的長度決定了加法器可以做多少位
- !問題1:上面的依位寄存器用的是D觸發器,我可以換成其他觸發器麼?
- 結論:無論換成JK或RS都可以(功能上)
- !問題2:功能換完了,可以換觸發方式麼?
- 電平觸發不可以,如果換了,當觸發信号到達時,一串都成直通得了,電平觸發不存在節拍的概念,是以不能用作移位;主從結構的脈沖觸發也可以
-
應用:
(1)代碼轉換,串—>并
(2)資料運算
- !問題3:如果我想并變串怎麼辦?
- 目前的電路顯然不符合要求,因為每一位的資料不能獨立到達
- 要求:左/右移,并行輸入,保持,異步置零等(還是四位)
-
設計原理:
(1)異步置零肯定要有異步信号接入端
(2)左移右移或并行輸入或保持,都意味着每一位觸發器的資料來源有多個方向。資料來源有多個,任何時候隻搭在一個上-----資料選擇器。每一位觸發器的資料來源都需要加一個四選一的資料選擇器,而這個資料選擇器的位址端有兩位,相當于多功能依位寄存器的功能控制端。要明确一點:這四個資料選擇器要處在相同的功能下,是以可以直接把這兩位接出來,當作整個子產品的功能選擇端。
- 通過設計原理再看這個電路就不是那麼複雜了。
- 所有的觸發器都選擇了帶有異步置零端的觸發器(因為有這個需求),把異步置零端甩出來就是異步置零了
- 工作模式選擇就對應着左移,右移,并行,保持這四個功能
- 四選一資料選擇器
-
對FF1子產品的構成進行分析:
(1)G2是個反相器,是以FF1看着是個SR,其實就是個D邊沿觸發器
(2)資料選擇器四個資料來源:左1的最左邊(從左來),左二的最右邊(并行輸入),右二的最右邊(從右邊來),右1的最右邊(自保持)
(3)通過S1,S0就可以控制左移右移還是保持還是并行輸入
(4)直接封裝成子產品,不再打開
-
看到這個子產品
(1)CLK的三角:邊沿觸發
(2)S1,S0選擇功能,左移,右移,并行輸入,自保持
(3)Dir,Dil:左移右移的最原始資料來源
- 功能表
- 擴充應用(4位–>8位)
- 唯一一點就是確定左移右移資料不斷,就是把Dil接到右邊的Q0,把Q3接到右邊的Dir
計數器
- 用于計數,分頻,定時,産生節拍脈沖等
-
分類
(1)按時鐘分:同步,異步
(2)按計數過程中數字增減分:加,減,可逆
(3)按計數器的數字編碼分,二進制,二-十進制和循環碼…
(4)按計數容量分:十進制,六十進制…
同步計數器
同步二進制計數器
分為加法和減法
同步二進制加法計數器
- 原理:多位二進制末位加一,若第i位以下皆為1時,則第i位應翻轉
- 由此得出規律,若用T觸發器構成計數器,則第i位觸發器輸入端Ti的邏輯式應為
- 也就是T0是恒等于1的,第i位的T取決于前面的Q相與,隻要前面沒記滿,第i位就不會翻轉
- 得到電路圖
- !!T觸發器沒有一個現成的觸發器,它是用我們學過的接出來的,最簡單的是把J和K捏在一起構成了T觸發器
- C是計位信号,有了這個信号就可以進行下一步的擴充,也可以不丢資訊
經典設計 74161
- 這是一個常用的四位二進制計數器
- 通過讀功能表,知道晶片怎麼接
(1)CLK給上升沿
(2)Rd‘一定要接高電平,LD’一定要接高電平
(3)EP,ET一定要接高電平才可以計數
(4)由表格第一行,Rd‘是異步置零
(5)由表格第二行,當Rd’=1,LD’=0,CLK上升沿到達時,會把R0-R3寫入Q0-Q3(預置數)
(6)由表格三四行,當EP和ET有一個是零的時候,保持。注意,在觸發器中,說保持一定是保持的Q
- 内部電路
- 選的是帶異步清零的JK觸發器,這是異步清零端的來源,但是它并沒有置一端,是以它的置數實際上不是通過異步來的,是通過JK觸發器寫進來的數。前面說過,JK觸發器想要構成一個四位二進制計數的時候,可以把它構成一個T觸發器來做。對着FF3來看,組成T觸發器可以通過G19,也可以通過G14和G15,當用後者時,J和K就可以輸入兩個不一樣的數,實作預置數
同步二進制減法計數器
- 原理:在多位二進制末位減一,若第i位一下皆為0,則第i位應該翻轉
- 由此得出規律,若用T觸發器構成計數器,則第i位觸發器輸入端Ti的邏輯式應為
- 也就是T0是恒等于1的,第i位的T取決于前面的Q’相與
- 構成等和加法類似
同步二進制加減計數器
-
兩種方案
(1)來的脈沖是同一個脈沖源,和它配合的有另一個信号來表達這個脈沖是加還是減(碼盤計數)
(2)加減計數是兩個脈沖源(進出圖書館)
- 最根本的是解決編碼區分的問題
- 同一個計數器—容易出問題,除非實體背景讓加兩個信号不同時來。而兩個脈沖源不會出現這個問題。
-
單時鐘的方式
加/減脈沖用同一輸入端,由控制線的高低電平決定加減,執行個體:74LS191
- U’/D是一個信号,等于0是加技術,等于0是減計數
- 功能表
(1)使能端S‘一定為0
(2)LD’是預置數,但是這裡是異步的,也就是對CLK沒有配合,一旦LD’等于0,直接寫入預置數(是以這個裡一定用的觸發器原有的異步置零置一端)
-
雙時鐘的方式
執行個體:74LS193(采用T’觸發器,即T=1)
- 加計數和減計數采用不同的時鐘源
- 是一個假同步,因為所有的CLK并不是接在一起構成一個統一的時鐘
- 實際上每一步的時鐘受控于外面的CLK,但是加了個運算
- 最根本的使用,要有一個實體機制保證CLK(D)和CLK(U)不是同時來(這倆信号看晶片内部圖),如果同時來,一定就會有競争-冒險。
同步十進制計數器
- 問題:同步二進制計數如果是0-9沒問題,如果再多了,可讀性不是特别好,是以有同步十進制計數器
- 希望用二進制的結構實作十進制
- 問題:計數器的容量是多少?
- 容量就是10,是以如果要用二進制結構實作的話,4位二進制就是一個底,用它打基礎,在它的基礎上,我隻用到它的十個(會造成浪費,但是可讀性好)
- 有兩件事需要做
(1)對電路進行改動,讓1001的下個狀态指向0000,讓這之間的狀态組成主循環圈
- 用0000對比之前1001的下個狀态,1010。發現隻有T1和T3的變化規則需要改
- 原來T3 = Q2Q1Q0,過去規則儲存(因為在主循環圈的前面還要用到),而且要在Q3Q0時發生跳變。是以T3 = Q2Q1Q0 + Q3Q0
- 同理T1 = Q0Q3’
(2)剩餘的項就成了無效态,要處理好無效态
- 問題:如果改成六進制,十二進制能改麼?
- 可以
異步計數器
二進制計數器
二進制加法計數器
- 在末位+1時,從低位到高位逐位進位
- 原則:每一位從“1”變到“0”,向高位發出進位,使高位翻轉
- 所有的J,K都接成1,那就意味着是T觸發器,而且T恒等于1,是以見時鐘就翻轉
- Q0和CLK0就存在一個二分頻的關系,Q1和Q0又是一個二分頻,而且是Q0從1變0的時候翻轉,也就是Q1計滿了,天然的把自己作為一個進位給了下一位
- 時序圖如下
- 在波形圖當中,Q0的變化是以CLK0作為基準點,也就是CLK0的下降沿到達之後,Q0發生翻轉。Q1的基準點是Q0,Q2的基準點是Q1
- 是以Q0的Tpd一定小于Q1的Tpd,Q1的Tpd一定小于Q2的Tpd,而且随着位數增加,Tpd會越來越大
- 也就是在Q3的Tpd之内,會出現一個我不希望的組合,這個給到下面的組合電路就會出現競争-冒險,這也是異步電路我們不喜歡的地方
二進制減法計數器
把加法C前面的圈抹去
任意進制計數器的構成方法
用已有的N進制晶片,組成M進制的計數器,是常用的方法
-
兩種可能
(1)N>M
(2)N<M
當N>M
- 異步置零法,同步置零法(每次計數的初态都以000開始)
- 異步預置數法,同步預置數法(隻要狀态數夠,滿足我進制需要就可以i,不必000開始)
例:用十進制的74160接成六進制計數器
- 可以置零也可以預置數。
- 異步和同步的差別:異步如果置零信号來了,馬上就置零,同步要等上升沿
置零法
- !!如果用置零法:應該在計數到5的時候跳回0。如果用異步置零會有一個問題,第六個狀态隻會持續74160整個晶片的Tpd,但是前五個狀态會持續一個CLK,也就是說,如果用異步置零,需要用0110,這個0110就成了一個暫态,它的出現就是為了回到0000
- 實際的狀态轉換圖如下(注意兩個虛線) 注意:隻有1001,1000,0111是你十進制改六進制造成的無效态,其他的無效态是這個晶片16進制改10進制造成的
- 晶片引腳圖
- !!引出了進位信号,表達了你這個計數器是可以擴充的
- 建議不要單獨畫進位信号,就用跳轉的信号當作進位信号是最理想的,因為跳轉了就證明計滿了
- 問題1:如果像上圖那樣引出進位信号在0100就出了進位信号,這個進位信号會持續0100和0101兩個CLK長,是一個很長的高電平(能這麼引的原因是,如果後面電路認下降沿就可以用,如果認上升沿就取反還可以用,原理是隻要一個周期裡隻有一個進位信号就能用,但是不建議這麼引)
- 問題2:在這個電路中,這麼引會有問題,Rd’平時一直是1,隻有Rd’=0才讓他清零,清完零又回去了,這個信号會出現一個電平,但是大概就是傳輸延遲時間級别的,太短,如果用Rd’作為進位信号可能會被認為是競争-冒險帶來的毛刺,用個濾波電容就濾掉了
- 改進上面的電路
- 接了一個基本的RS鎖存器,G2是Sd’,G3是Rd‘,Sd’=0的時候進位輸出置一,如果想清零的話,必須讓Rd’=0,而Rd‘接在了CLK上。
- 晶片是上升沿工作的,也就是寫進位的時候Rd’=1,是以寫入的信号會一直保持,直到CLK變到0
預置數法
- 這時候,我們譯的是0101,因為LD是同步信号,是以得等到下一個CLK到達的時候,才能把數置進去,是以這時候0101這個狀态就能呆一個時鐘了
- 是以如果用置零法的話建議用同步的方法,置入0000
- 方案不唯一,可以用各種方法,甚至可以用1111,隻要在0110的時候置數跳回1111就可以
- 書上給的例子是在74160有效循環圈裡面最大的一個
- 同理,置1001,保證自己的有效循環圈即可
- 是以,有效循環的個數就是進制,兩個點的連接配接,一個作為譯碼,還有一個作為置數
當N<M
- 方法一:分解
- M = N1 * N2
- 先用前面的方法分别接成N1和N2兩個計數器
-
N1和N2有兩種連接配接方式
(1)并行進位:用同一個CLK。低位片的進位輸出作為高位片的計數控制信号
(2)串行進位:低位片的進位輸出作為高位片的CLK,兩片始終處于計數狀态
例:用74160接成100進制
隻有EP,ET同為1時才允許進位,是以直接把前面的進位信号接到EP,ET上就可以了
- 問題:串行進位為什麼接反相器?
- 前面那個的C是記到1001的時候會有一個高電平,如果不加反相器,那前面是9的時候,後面就加一了,也就是顯示的話是1,2,3,4,5,6,7,8,19,10,11…
- 方法二:M不可分解
- 采用整體置零和整體置數法
- 先用兩片接成M’ > M的計數器,然後采用置零或置數的方法
例:用74160接成29進制
- 整體異步置零:找出29,圖上不是全譯碼,找了2和9的第一次出現方式,實驗中可以這麼做,但是實際中盡量使用全譯碼
- 整體同步置數:一出現28就回去
計數器應用執行個體
計數器+譯碼器----->順序節拍脈沖發生器
- 把一個計數器和38譯碼器放在一起
- 前端是74161,而且Rd‘和LD都接了高電平,EP,ET接1,CLK給了一個始終,是以74161一直在16位計數循環,16個狀态一直在跑
- 138取了它的低位,那麼138的輸出,每個CLK這些都會出現一個低電平,而且在循環跑,CLK是高電平的時候不工作,低電平的時候才工作,是以是CLK的後半段工作,前半段沒工作
- 電路工作起來會相當穩定,因為前面發生變化的時候後面不變,把時間錯開了
- 這個電路如果和前面三态總線的電路接在一起,總線就構成了循檢的方式
計數器+資料選擇器----->序列脈沖發生器
- 152是八選一的資料選擇器
- 當CLK不斷進來,161循環計數,Y’就得到不斷循環的脈沖序列00010111