數字邏輯課程設計拔河遊戲機
《數字邏輯》
課 程 設 計 報 告
題目: 拔河遊戲機
專業: 電腦科學與技術
班級: 14計科2班
組長: 張欽穎(1414080901218)
成員: 無
成員: 無
惠州學院計算機科學系
二○一五 年 一 月 八 日
1 設計任務書
設計題目:拔河遊戲機
拔河遊戲機用7個發光二極體排列成一行,開機後只有中間一個發亮,以此作為拔河的中心線,遊戲雙方各持一個按鍵,迅速地、不斷地按動產生脈衝,誰按得快,亮點向誰方向移動,每按一次,亮點移動一次。任一方終端二極體發亮時這一方獲勝,此時雙方按鍵被鎖住,只有經復位後才使亮點恢復到中心線。
2 總體方案設計
2.1 功能和邏輯需求分析
(1)本課程設計的拔河遊戲機由7個電平指示燈排列成一行,開機之後只有中間一個電平指示燈亮,以此作為拔河的中心線,遊戲雙方各持一個按鍵,迅速地、不斷地按動產生脈衝,誰按得快,亮點向誰移動,每按一次,亮點移動一次。移到任一方終端指示燈點亮,這一方就獲勝,此時雙方按鍵均無效,輸出保持,只有經裁判置位後才使亮點恢復到中心線。
(2)當一局比賽結束後,由點亮該終點燈的訊號使電路封鎖加減脈衝訊號的作用。即實現電路自鎖,使加減脈衝無效。同時,使電路自動加分。
(3)控制電路部分應能控制計數器的計數,可以使計數器停止計數。(其進入方向則由參賽雙方的按鍵訊號決定)
2.2 總體方案設計
2.2.1 模五計數器:
分設兩個計數器比較選手快慢,對選手輸入的手動脈衝進行計數,用預置法設初始值為0101,即5,使十進位制計數器改成五進位制計數器,先輸入五個脈衝訊號的將傳一個進位訊號到可逆計數器。
2.2.2 可逆計數器:
若甲選手對應可逆計數器的加法,乙選手對應可逆計數器的減法,若甲的速度比乙快(即甲所用計數器先輸出進位訊號),則控制可逆計數器進行加法,反之,則進行減法.
2.2.3 譯碼器:
譯碼器有三個輸入和7個輸出。每個輸入都有和它唯一對應的輸出。例如輸入為001時對應l1這個燈亮,輸入為111時對應l7這個燈亮。
2.2.4 異或門:
由於TDS-4實驗箱只有兩個手動脈衝,考慮到兩個人比賽,那麼這兩個手動脈衝必然是要接入到計數器中,而比分顯示器和可逆計數器都是需要脈衝觸發的,而我們用異或門提供一個脈衝給可逆計數器,使得它們可正常計數。
3單元模組設計
3.1 十進位制計數器(2個)
整形電路由兩個模為5帶進位訊號的計數器組成。按鍵AB為別作為兩個計數器的時鐘脈衝,這樣來實現AB按鍵哪個按得快,它所對應的計數器就會先產生一個進位訊號,在把這個進位訊號作為7模計數器的加減訊號。這樣可以減小AB按鍵直接作為計數器的加減訊號對計數器正常計數的影響。
3.2 可逆計數器
簡要原理說明:使用GAL16V8實現,接受來自兩個模五計數器的進位訊號,以及一個人工脈衝,輸出4位二進位制碼,此外,設有一個復位開關及使能開關。
實現程式碼:
MODULECOUTER
TITLE'COUTER'
DECLARATIONS
CLK,EN,CO1,CO2,MPIN 1,11,2,3,4;
Q0..Q3PIN 12..15 ISTYPE 'REG';
Q=[Q3..Q0];
EQUATIONS
Q.CLK=CLK;
Q.OE=!EN;
WHEN(M==1)
THENQ:=3;
ELSEWHEN(M==0)&(CO1==1)
THENQ:=Q-1;
ELSEWHEN(M==0)&(CO2==1)
THENQ:=Q+1;
ELSEQ:=Q;
END
3.3 譯碼器
簡單原理說明:使用GAL16V8製作,接受可逆計數器的輸出的4位二進位制碼作為輸入,以下面真值表進行譯碼,輸出直接連線7個二極體。另有一個輸出控制兩個模五計數器的使能端,當滿足某一方勝利條件時輸出0,使兩個模五計數器不能工作。
實現程式碼:
MODULE YIMA
TITLE 'YIMA'
DECLARATIONS
A0..A3 PIN 2..5;
RES PIN 6;
L6,L5,L4,L3,L2,L1,L0 PIN 13..19;
E PIN 12;
A=[A3..A0];
L=[L6..L0];
EQUATIONS
WHEN(RES==1)
THEN{L=8;E=1;}
ELSE WHEN(RES==0)
THEN{
WHEN(A==0)
THEN{L=64;E=0;}
ELSE WHEN(A==1)
THEN{L=32;E=1;}
ELSE WHEN(A==2)
THEN{L=16;E=1;}
ELSE WHEN(A==3)
THEN{L=8;E=1;}
ELSE WHEN(A==4)
THEN{L=4;E=1;}
ELSE WHEN(A==5)
THEN{L=2;E=1;}
ELSE WHEN(A==6)
THEN{L=1;E=0;}
}
END
3.4 異或門
簡單原理說明:用來產生脈衝訊號給可逆計數器以及比分顯示器,另外產生模五計數器的預置訊號。
3.5 總體電路設計
4電路除錯與測試
4.1模五計數器單元模組
將74LS162計數器的輸出接二極體,脈衝接手動脈衝,並用預置法將計數器改為模五計數器,按動脈衝測試是否可以實現模五計數器並輸出進位訊號。
測試結果如下:
脈衝次數 |
DCBA現態 |
DCBA次態 |
進位輸出 |
1 |
0101 |
0110 |
0 |
2 |
0110 |
0111 |
0 |
3 |
0111 |
1000 |
0 |
4 |
1000 |
1001 |
0 |
5 |
1001 |
0101 |
1 |
DCBA為計數器輸出的4位2進位制數
由真值表可知,與理想要求一樣。
4.2 可逆計數器單元模組
將RES、X、Y、EN接開關,並接一個手動脈衝,Q3、Q2、Q1、Q0接輸出,分別按動RES、X、Y和脈衝,測試當復位開關無效時,X=1,是否可以實現加法,X=0,是否可以實現減法,再測試當復位開關有效時,是否可以實現輸出為0011。
當X=1時,可逆計數器實現加法
脈衝 |
RES |
X |
Y |
使能端EN |
Q3Q2Q1Q0 |
1 |
1 |
× |
× |
0 |
0011 |
2 |
0 |
1 |
0 |
0 |
0100 |
3 |
0 |
1 |
0 |
0 |
0101 |
4 |
0 |
1 |
0 |
0 |
0110 |
當Y=1時,可逆計數器實現減法
脈衝 |
RES |
X |
Y |
使能端EN |
Q3Q2Q1Q0 |
1 |
1 |
× |
× |
0 |
0011 |
2 |
0 |
0 |
1 |
0 |
0010 |
3 |
0 |
0 |
1 |
0 |
0001 |
4 |
0 |
0 |
1 |
0 |
0000 |
RES:復位開關
X:模五計數器輸出的進位訊號
Y:模五計數器輸出的進位訊號
Q3Q2Q1Q0:輸出的4位2進位制數
由真值表可知,與理想要求一樣。
4.3 譯碼器單元模組
把燒製的晶片接入實驗箱。
步驟1:把輸入端a2、a1、a0接入001到111之間所有的可能,發現輸出端y7為1時,輸入為111;y6=1時,輸入為110;y5=1時,輸入為101;y4=1時,輸入為100;y3=1 時,輸入為011;y2=1時,輸入為010;y1=1時,輸入為001。而且y7到y1只有一個燈亮,不存在兩個或者兩個燈同時亮的情況。
步驟2:重複步驟1,進行多次測試,發現該晶片符合實驗要求。
開關 |
輸入 |
Q |
L6 |
L5 |
L4 |
L3 |
L2 |
L1 |
L0 |
1 |
× |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0000 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0001 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0010 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0011 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0100 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0101 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0110 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
4.4 異或門
X:甲使用的計數器的進位訊號
Y:乙使用的計數器的進位訊號
RES:復位開關
Q0:傳給計數器預置端的值,當復位開關有效時,將兩個計數器均進行預置,當復位開關無效時,若兩個計數器中有一個輸出了進位訊號,表示燈將往其方向跳一格,這 時,將兩個計數器進行預置,以示公平。
Q1:傳給可逆計數器的值,為可逆計數器提供脈衝,當沒有進位訊號且開關無效時,輸出0,當有進位訊號或者開關有效時,輸出1,輸出值由0變為1相當於為可逆計數器提 供了一個脈衝,使可逆計數器可以正常使用。
輸入 |
輸出 |
||
X |
Y |
RES |
Q |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
5總結
經歷這次實驗,雖然只用到計數器和譯碼器這兩個基本的功能,但是在實際的實驗中,通過自己寫程式碼燒製出來的晶片有時不會實現我們預想的功能。對於怎麼解決AB按鍵的訊號會影響7模計數器的計數,為此我們耗費了很多時間,最後才找到合理的、可行的、貼合實際的解決方法。對於這樣一個簡單的實驗,對於第一次做的我們來說卻是困難重重,由於經驗的不足,對於很多簡單的問題都想不出解決方法,需要花大量的時間。由於實驗過程所需的線路比較多,所以需要很大的耐心,也需要我們每個組員細心接線,既不能接重複又不能接漏哪怕一根線。不過經過耐心的接線和檢驗之後,我們的實驗倒是挺成功的,預期的實驗結果都達到了,不過可惜的是在反覆的除錯過程中燒壞了一個晶片,起初我們還不知道怎麼回事好端端的輸出結果就錯了,後來把線全拆了,又測試每個晶片才知道用GAL編寫的可逆計數器壞了才導致整個電路出錯。因此我們明白了一個道理,即使是最簡單的事情,如果沒有經驗也是很難完成。另一方面,即使是理論上可以得出的結果,在實踐過程中卻出現錯誤,所以必須經過實踐的考驗才能證明我們所做的實驗是成功的。
附錄
晶片:GAL16V8D*2、74LS86、74ls162*2
《數字 邏 輯》課 程 實 驗 芯 片 匯 集
GAL16V8D 的外引線排列圖、設計方法
同步十進位制計數器74LS162的外外引線排列圖、邏輯電路圖、功能表
數字邏輯(第六版.立體化教材)北京科學出版社 2013年3月
《數字邏輯》實驗指導書2013版
惠州學院計算機科學系硬體教研室數字系統設計實驗室 2015年1月
脈衝 |
RES |
X |
Y |
使能端EN |
Q3Q2Q1Q0 |
1 |
1 |
× |
× |
0 |
0011 |
2 |
0 |
1 |
0 |
0 |
0100 |
3 |
0 |
1 |
0 |
0 |
0101 |
4 |
0 |
1 |
0 |
0 |
0110 |