胡世昌
(沈陽師范大學,遼寧沈陽 110034)
在邏輯電路課程講解觸發(fā)器特性的過程中,有一部分題目是直接給出時鐘波形和輸入波形,要求畫出輸出波形〔1〕,為演示和驗證這類題目,就需要能夠產(chǎn)生任意時序關系的脈沖發(fā)生器。而常見的脈沖發(fā)生器,通常要求首先掌握觸發(fā)器的原理〔2〕,甚至用到單片機〔3〕、CPLD、FPGA等更復雜器件〔4〕,復雜度使其不易掌握,決定了它們不適合作為教學工具。同時,這些脈沖發(fā)生器的輸出都是有規(guī)律的脈沖序列,功能上也不符合器件功能驗證的需求。作為器件功能驗證使用的脈沖發(fā)生器,要能產(chǎn)生任意時序關系的多路脈沖,所需學習時間不宜過長。根據(jù)存儲器的性質(zhì),筆者找到了一個使用存儲器產(chǎn)生任意時序的多路脈沖發(fā)生器的方法,并用軟件進行了仿真。該方法可以滿足邏輯電路課程講解中的演示和驗證。
首先在存儲器中存儲連續(xù)的0或1,再用一個計數(shù)器產(chǎn)生存儲器的連續(xù)遞增的地址信號,即可存儲器的數(shù)據(jù)輸出端產(chǎn)生相應的邏輯信號波形,存儲器中的1位對應高電平,0位對應低電平。
例如,如果在一位存儲器中的每一位,分別存儲下列連續(xù)的0和1,在順序遞增的地址信號作用下,即可在數(shù)據(jù)輸出端產(chǎn)生連續(xù)的五個方波,每段高電平對應兩個連續(xù)的1,每段低電平對應兩個連續(xù)的0。這個方波可以作為觸發(fā)器的時鐘信號CP,通過在不同的比特位設置相應的0和1,可以產(chǎn)生不同時間關系的數(shù)字信號(如圖1所示)。
把上述連續(xù)的位序列,分別存儲到3個1位寬的存儲器中,并用一個模21(十六進制15H)的加法計數(shù)器作為該存儲器地址信號的發(fā)生器,即可產(chǎn)生相應的3個波形:由計數(shù)器和三個1位存儲器構成的3路脈沖發(fā)生器。圖2是對應的logisim-evolution仿真電路。
如果采用四位存儲器,可靈活選用每個半字節(jié)中的三位作為波形存儲位,例如用0位產(chǎn)生CP,1位產(chǎn)生J,2位產(chǎn)生K,未使用的3位置零,則第一個半字節(jié)應存儲0000,第二個半字節(jié)應存儲0000,第三個半字節(jié)應存儲0001,依此類推,可知對應的32個存儲單元的內(nèi)容(0013 2677 6011 0237 6675 0000 0000 0000),對應的脈沖發(fā)生器電路如圖3所示。
初學者可以采用多個一位存儲器來分別實現(xiàn)每一路脈沖;熟練者則可以采用四位或八位存儲器來構建多路脈沖。
脈沖發(fā)生器構建完畢之后,就可以把它作為一個獨立的模塊使用來驗證或演示邏輯電路的功能。構建這個脈沖發(fā)生器,只需確定計數(shù)次數(shù)、存儲位序即可,簡單易學。
圖1 連續(xù)位0和1及其對應的波形信號
圖2 計數(shù)器和3個一位存儲器構成的3路脈沖發(fā)生器
圖3 計數(shù)器和1個四位存儲器構成的3路脈沖發(fā)生器
圖4 用多路脈沖發(fā)生器驗證JK觸發(fā)器的功能特性
圖5 用多路脈沖發(fā)生器驗證JK觸發(fā)器功能特性的輸出波形
以驗證JK觸發(fā)器功能為例,把上述波形發(fā)生器接入JK觸發(fā)器,即可分別驗證JK觸發(fā)器的置0、置1、保持、翻轉功能。如圖4所示,其中模塊wavGen是前面所實現(xiàn)的脈沖發(fā)生器,它的輸出信號被接入一個下降沿觸發(fā)的JK觸發(fā)器的輸入端。
仿真結果如圖5所示,在CP的前4個下降沿中,第一個驗證了置1功能,第二個驗證了置0功能,第三個驗證了保持功能,第四個驗證了翻轉功能。
調(diào)整存儲器中所保存的0或1,即可調(diào)整個輸入波形之間的時序關系,非常方便。
需要注意的是圖5中CP波形的第5個下降沿,設計這個時序關系的目的是要驗證“時鐘有效沿之后的狀態(tài),取決于時鐘有效沿前一瞬間的輸入”這個功能特性。但是很遺憾,所得到的輸出波形是錯誤的,因為在第5個下降沿之前,J=1,K=1,應該翻轉;下降沿之后,J=0,K=0,應該保持。根據(jù) “觸發(fā)器在時鐘有效沿之后的狀態(tài),取決于時鐘有效沿前一瞬間的輸入”這個功能特性,輸出Q本應根據(jù)下降沿之前的輸入(J=1,K=1)而翻轉,但從輸出波形來看,它沒有翻轉,而是依照下降沿之后的輸入(J=0,K=0)而保持。
改用D觸發(fā)器,使用存儲器構建的脈沖發(fā)生器,讓數(shù)據(jù)輸入端D在觸發(fā)脈沖有效沿跳變的瞬間同步改變,用Logisim-Evolution仿真的結果表明,下降沿后的輸出信號Q也是依據(jù)觸發(fā)脈沖有效跳變后的瞬間輸入來確定的。這進一步印證了Logisim-Evolution在跳變沿前后瞬間的輸入采樣處理方面的錯誤。
Logisim-Evolution軟件“使用觸發(fā)脈沖跳變沿后的數(shù)據(jù)輸入,來確定觸發(fā)器的數(shù)據(jù)輸出”這一做法,與真實的硬件行為不同,在應用時必須加以注意。
利用存儲器的存儲位元來實現(xiàn)任意波形數(shù)字信號發(fā)生器,具有方便、直觀、易于掌握的優(yōu)點,是數(shù)字電路設計和學習中值得推廣的好方法。它可以構建任意時間關系的多路 波形,在時序邏輯電路功能的學習和驗證中簡單易用。但要注意,Logisim-Evolution這個軟件,在邊沿觸發(fā)器的仿真上,沒有實現(xiàn)“時鐘有效沿之后的狀態(tài),取決于時鐘有效沿前一瞬間的輸入”這一特性,而是選擇了“根據(jù)時鐘有效沿之后的瞬間輸入,改變輸出狀態(tài)”這個做法。該方法不符合硬件本身的邏輯,在應用中必須加以注意。