一個計數(shù)器引發(fā)的思考—4好的解決方法
一種好的解決問題的方法
????????將異步清零改為同步置數(shù),也可以解決問題。Load管腳是74HC161的同步置數(shù)端。將組合邏輯輸出的G點接Load管腳。計數(shù)到10的時候G=0,由于是同步置數(shù),要一個時鐘周期在第11步置數(shù)為0. 這樣電路不改的情況下就是0到10計數(shù),比異步清零計數(shù)器多一個數(shù)。鑒于本文討論的內(nèi)容,這個區(qū)別可以忽略。

????????先用數(shù)碼管測試,Dout頻率改為1Hz。將74HC161的QA QB QC QD這4根數(shù)據(jù)線接硬木課堂儀器平臺的Din0 Din1 Din2 Din3用數(shù)碼管觀察。數(shù)碼管顯示0到0x0A循環(huán)計數(shù)。功能正常。

????????用邏輯分析儀測試。Load接DIN4。QA QB QC QD接 Din0 Din1 Din2 Din3。可以看到0到0x0A的整個計數(shù)過程。由于組合邏輯沒有改變,在7到8跳變時load上也會有冒險造成的毛刺。

????????為什么這個load管腳上的毛刺沒有造成問題呢?咱們用示波器觀察一下。AIN1黃色線測試E點,AIN2藍色線測試F點,AIN3紅色線測試G點。AIN4綠色線測試CLK。可以看到時鐘CLK的邊沿之前紅色線Load都是穩(wěn)定的,在時鐘邊沿后才出現(xiàn)競爭冒險的毛刺。

????????通過示波器的觀察測試,引出時序邏輯中的兩個重要概念。建立時間和保持時間。
????????建立時間:是指在觸發(fā)器的時鐘信號上升沿到來以前,數(shù)據(jù)穩(wěn)定不變的時間,如果建立時間不夠,數(shù)據(jù)將不能在這個時鐘上升沿被穩(wěn)定的打入觸發(fā)器,Tsu就是指這個最小的穩(wěn)定時間。
????????保持時間:是指在觸發(fā)器的時鐘信號上升沿到來以后,數(shù)據(jù)穩(wěn)定不變的時間,如果保持時間不夠,數(shù)據(jù)同樣不能被穩(wěn)定的打入觸發(fā)器,Th就是指這個最小的保持時間。
????????從示波器的測試波形可以看出,綠色時鐘邊沿之前l(fā)oad信號都是穩(wěn)定的,必然滿足建立時間。74HC161對保持時間要求為0 。必然也就滿足了保持時間。所以同步置數(shù)可以解決競爭冒險問題。

????????同步時序邏輯對組合邏輯的時延要求不像異步那么苛刻。并且如果組合邏輯時延過長,還可以在組合邏輯中加一級觸發(fā)器暫存中間結(jié)果,將組合邏輯分為兩個部分。這樣組合邏輯時延就減半,多一個節(jié)拍??梢允拐麄€數(shù)字電路速度提高。

總結(jié)
????????本文對競爭冒險,建立時間和保持時間做了一個入門講解,通過實驗使讀者有一個直觀的認識。并且通過一個簡單實例的排查過程,給讀者展示了數(shù)字電路的調(diào)試技巧和思路。關(guān)于建立時間和保持時間在FPGA的理論書中有詳細說明,這里不再贅述。