基于VHDL語言的搶答器_第1頁
基于VHDL語言的搶答器_第2頁
基于VHDL語言的搶答器_第3頁
基于VHDL語言的搶答器_第4頁
基于VHDL語言的搶答器_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、VHDL搶答器的設(shè)計設(shè)計要求:1.搶答器同時供N名選手,(此處假設(shè)4個)分別用4個按鈕S0 S3表示。2.設(shè)置一個系統(tǒng)“開始復(fù)位”開關(guān)S,該開關(guān)由主持人控制(當主持人按下該開關(guān)后以前的狀態(tài)復(fù)位并且開始計時搶答)。3搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在LED數(shù)碼管上顯示,同時揚聲器發(fā)出報警聲響提示。選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。4. 搶答器具有定時搶答功能,且一次搶答的時間(0-99S)。當主持人啟動“開始復(fù)位”鍵后,定時器進行減計時。5. 如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00。一、

2、概述 搶答器的邏輯結(jié)構(gòu)主要由搶答鑒別lock模塊、定時模塊、譯碼模塊和報警器模塊組成。在整個搶答器中最關(guān)鍵的是如何實現(xiàn)搶答封鎖,在控制鍵按下的同時計數(shù)器倒計時顯示有效剩余時間。除此之外,整個搶答器還需有一個“復(fù)位開始”信號,以便搶答器能實現(xiàn)清零和開始。搶答器共有3個輸出顯示,選手代號、計數(shù)器的個位和十位,他們輸出全都為BCD碼輸出,這樣便于和顯示譯碼器連接。當主持人按下控制鍵、選手按下?lián)尨疰I蜂鳴器短暫響起。方案設(shè)計與論證嘿嘿!將該任務(wù)分成N個模塊進行設(shè)計,分別為:搶答器鑒別模塊、搶答器計時模塊、譯碼模塊、報警模塊,最后是綜合。1. 搶答器鑒別模塊:在這個模塊中主要實現(xiàn)搶答過程中的搶答功能,并且

3、能實現(xiàn)當有一路搶答按鍵按下時,該路搶答信號將其余個綠搶答封鎖的功能。在這個模塊輸入端有WARN輸入(以時間控制系統(tǒng)的WARN輸出信號為信號源)、一個和“時間控制系統(tǒng)”公用的CLEAR端、4人搶答輸入信號端S0,S1,S2,S3和有一個時鐘信號端CLK,這個時鐘信號是個高頻信號,用以掃描S0,S1,S2,S3是否有信號輸入。輸出端有對應(yīng)于S0,S1,S2,S3編號的4個指示燈LED 和4線2進制輸出端STATES(用于鎖存當前的狀態(tài)),還有一個STOP 端用于指示S0,S1,S2,S3按鈕狀態(tài)(控制計時器停止)。在此模塊中高頻時鐘信號一直作用,此時,若主持人按下CLEAR即為開始搶答信號,所有輸

4、出端都自動清零。在有效時間范圍(N秒)內(nèi)只要有人搶答,STOP就有高電平輸出至“時間控制系統(tǒng)”的STOP端以控制倒計時的停止,并且對應(yīng)的LCD指示燈點亮,STATES鎖存輸出到譯碼顯示模塊,用以顯示優(yōu)先搶答人的組號,并鎖定輸入端S以阻止系統(tǒng)響應(yīng)其他搶答者的信號。當有效時間到了之后還沒有人搶答,則記時模塊發(fā)出報警信號,同時反饋回來給搶答鑒別模塊,禁止選手在搶答。2.譯碼模塊:將搶答過程中鎖存的BCD碼轉(zhuǎn)換成7段碼用于LED的顯示。3定時器模塊:這個模塊的輸入端有時鐘信號CLK1、系統(tǒng)復(fù)位信號CLEAR和一個STOP輸入信號;輸出端有秒時間狀態(tài)顯示信號高位HIGH和低位LOW,無人搶答時計時中止警

5、報信號WARN。這個模塊中主要實現(xiàn)搶答過程中的計時功能,在搶答開始后進行N秒的倒計時,并且在N秒倒計時后無人搶答的情況下顯示超時并輸出信號至WARN報警,或者只要N秒內(nèi)有人搶答,由搶答鑒別模塊輸出的STOP信號控制停止計時,并顯示優(yōu)先搶答者的搶答時刻,輸出一個信號經(jīng)WARN傳至“搶答鑒別系統(tǒng)”,鎖存不再讓選手搶答。4報警模塊:在這個模塊中主要實現(xiàn)搶答過程中的報警功能,當主持人按下控制鍵,有限時間內(nèi)(N秒內(nèi))有人搶答或是倒計時到了之后蜂鳴器開始報警,輸出SOUND有效電平為高.5.在這個模塊中是對前4個模塊的綜合。三單元電路軟件設(shè)計及仿真1.搶答器鑒別模塊VHDL程序及模塊:在這個模塊中主要實現(xiàn)

6、搶答過程中的搶答功能,并且能實現(xiàn)當有一路搶答按鍵按下時,該路搶答信號將其余個綠搶答封鎖的功能。在這個模塊輸入端有WARN輸入(以時間控制系統(tǒng)的WARN輸出信號為信號源)、一個和“時間控制系統(tǒng)”公用的CLEAR端、4人搶答輸入信號端S0,S1,S2,S3和有一個時鐘信號端CLK,這個時鐘信號是個高頻信號,用以掃描S0,S1,S2,S3是否有信號輸入。輸出端有對應(yīng)于S0,S1,S2,S3編號的4個指示燈LED 和4線2進制輸出端STATES (用于鎖存當前的狀態(tài)),還有一個STOP 端用于指示S0,S1,S2,S3按鈕狀態(tài)(控制計時器停止)。LIBRARY IEEE;USE IEEE.STD_LO

7、GIC_1164.ALL;ENTITY LOCK IS PORT( CLK,CLEAR:IN STD_LOGIC; WARN:IN STD_LOGIC; S0,S1,S2,S3:IN STD_LOGIC; STATES:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); STOP:OUT STD_LOGIC; LED:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END LOCK;ARCHITECTURE ONE OF LOCK ISSIGNAL G:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLEAR,CLK,S

8、0,S1,S2,S3) BEGIN IF CLEAR=1 THEN G=0000;LED=0000;STOP=0; ELSIF CLKEVENT AND CLK=1 THEN IF WARN=0 THEN IF( S3=1)AND NOT(G(0)=1 OR G(1)=1 OR G(2)=1) THEN G(3)=1;LED(3)=1; ELSIF( S2=1)AND NOT(G(0)=1 OR G(1)=1 OR G(3)=1) THEN G(2)=1;LED(2)=1; ELSIF( S1=1)AND NOT(G(0)=1 OR G(2)=1 OR G(3)=1) THEN G(1)=1;

9、LED(2)=1; ELSIF( S0=1)AND NOT(G(1)=1 OR G(2)=1 OR G(3)=1) THEN G(0)=1;LED(3)=1; END IF; STOPSTATESSTATESSTATESSTATESSTATESQOUTQOUTQOUTQOUTQOUTQOUTQOUTQOUTQOUTQOUTQOUT=0000000; END CASE; END PROCESS;END ARCHITECTURE TWO;3.定時模塊VHDL程序及模塊:這個模塊的輸入端有時鐘信號CLK、系統(tǒng)復(fù)位信號CLEAR和一個STOP輸入信號;輸出端有秒時間狀態(tài)顯示信號高位HIGH和低位LOW

10、,無人搶答時計時中止警報信號WARN。這個模塊中主要實現(xiàn)搶答過程中的計時功能,在搶答開始后進行N秒的倒計時,并且在N秒倒計時后無人搶答的情況下顯示超時并輸出信號至WARN報警,或者只要N秒內(nèi)有人搶答,由搶答鑒別模塊輸出的STOP信號控制停止計時,并顯示優(yōu)先搶答者的搶答時刻,輸出一個信號經(jīng)WARN傳至“搶答鑒別系統(tǒng)”,鎖存不再讓選手搶答。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNT IS PORT(CLK,CLEAR,STOP:IN STD_LOGIC; WARN:OUT

11、 STD_LOGIC; HIGH,LOW:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COUNT;ARCHITECTURE THREE OF COUNT ISSIGNAL HS:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL LS:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK) BEGIN IF CLEAR=1 THEN HS=1001;LS=1001;WARN=0; ELSIF CLKEVENT AND CLK=1 THEN LS=LS-1; IF LS=0000 THEN LS=1001;H

12、S=HS-1; IF HS=0000 AND LS=0000 THEN WARN=1;HS=0000;LS=0000; IF STOP=1 THEN HS=HS; LS=LS; WARN=1; END IF; END IF; END IF; END IF; HIGH=HS;LOW=LS;END PROCESS;END ARCHITECTURE THREE; 4報警模塊VHDL:在這個模塊中主要實現(xiàn)搶答過程中的報警功能,當主持人按下控制鍵,有限時間內(nèi)(N秒內(nèi))有人搶答或是倒計時到了之后蜂鳴器開始報警,輸出SOUND有效電平為高.LIBRARY IEEE;USE IEEE.STD_LOGIC_11

13、64.ALL;ENTITY ALARM IS PORT(CLEAR,WARN:IN STD_LOGIC; SOUND:OUT STD_LOGIC);END ;ARCHITECTURE FOUR OF ALARM ISBEGIN PROCESS(WARN,CLEAR) BEGIN IF CLEAR=1 THEN SOUND=0; ELSIF WARN=1 THEN SOUND=1; ELSE SOUND=0; END IF;END PROCESS;END ;設(shè)計電路的仿真波形圖1搶答鑒別模塊仿真圖:2譯碼模塊仿真圖:3記時模塊仿真圖:部分仿真圖(1):部分仿真圖(2):4報警模塊仿真圖:五主電路

14、連線圖:主電路仿真圖:六、心得與體會經(jīng)過三個星期的EDA課程設(shè)計,通過不懈努力,成功地設(shè)計出了數(shù)字式四路競賽搶答器?;厥走@幾周,雖然因為初次涉及EDA技術(shù)及MAX_PLUS軟件,對相關(guān)知識知之甚少,我們也遇到了很多困難,但是我們在這次實習(xí)的過程中都受益匪淺,收獲頗豐,甚為欣慰。 在這次課程設(shè)計的前期,我們先系統(tǒng)地學(xué)習(xí)了EDA概論,VHDL描述語言和設(shè)計應(yīng)用方面的基礎(chǔ)知識,使得能夠較熟練地使用MAX_PLUS軟件進行設(shè)計開發(fā),用原理圖輸入及VHDL語言等設(shè)計輸入并編譯仿真,同時我們對以往學(xué)過的理論知識有了更加透徹的理解。我們的課題為數(shù)字式四路競賽搶答器,根據(jù)電路的特點,我們采用層次化結(jié)構(gòu)化設(shè)計,

15、將此項設(shè)計任務(wù)分成若干模塊,規(guī)定每一模塊的功能和各模塊之間的接口,然后再將各模塊合起來調(diào)試。在設(shè)計的過程中,遇到問題我們先獨立思考,查找資料。到自己不能解決的時候就和其他組研究討論,向指導(dǎo)老師請教。這樣既提高了我們獨立發(fā)現(xiàn)問題、分析問題、解決問題的能力,又很好地培養(yǎng)了交流合作的精神。但是最后的成品卻不一定與仿真時完全一樣,因為,再實際接線中有著各種各樣的條件制約著。而且,在仿真中無法成功的電路接法,在實際中因為芯片本身的特性而能夠成功。所以,在設(shè)計時應(yīng)考慮兩者的差異,從中找出最適合的設(shè)計方法。本實驗通過EDA軟件muxlus2的實現(xiàn),讓我對VHDL語言有了大概的了解,所以說,坐而言不如立而行,

16、對于這些電路還是應(yīng)該自己動手實際操作才會有深刻理解。通過這次設(shè)計,進一步加深了對EDA的了解,讓我對它有了更加濃厚的興趣。特別是當每一個子模塊編寫調(diào)試成功時,心里特別的高興。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固。總的來說,這次設(shè)計的搶答器還是比較成功的,在設(shè)

17、計中遇到了很多問題,最后在老師的辛勤的指導(dǎo)下,終于迎刃而解,有點小小的成就感,終于覺得平時所學(xué)的知識有了實用的價值,達到了理論與實際相結(jié)合的目的,不僅學(xué)到了不少知識,而且鍛煉了自己的能力,使自己對以后的路有了更加清楚的認識,同時,對未來有了更多的信心。經(jīng)歷數(shù)日的課設(shè)眼看塵埃落定,感覺忍不住要長出一口氣。結(jié)果怎樣已然不再重要,在這幾日里,我們經(jīng)歷了階段性成功的狂喜、測試失敗后的絕望、陷入困境時的不知所措,重新投入的振作。這已經(jīng)就足夠了!嘿嘿!八、參考文獻1 、李國洪,沈明山:可編程邏輯器件EDA技術(shù)與實踐,機械工業(yè)出版社2、江國強:EDA技術(shù)習(xí)題與實驗,電子工業(yè)出版社 3、曹昕燕,周風(fēng)臣,聶春燕

18、:EDA技術(shù)試驗與課程設(shè)計,清華大學(xué)出版社4、黃仁欣:EDA技術(shù)實用教程,清華大學(xué)出版社附錄資料:不需要的可以自行刪除SHA算法的實現(xiàn)C語言程序:#include #include /定義vector數(shù)組 #include /記錄消息using namespace std; const int NUM = 8; /一個字由32比特(或者8個16進制數(shù))const int BIT = 512; /消息認證碼要以512比特一組 /字常量 string H0 = 67452301; string H1 = EFCDAB89; string H2 = 98BADCFE; string H3 = 103

19、25476; string H4 = C3D2E1F0; /定義SHA1(安全哈希算法)類 class SHA1 public: /將一個字符串形式的字轉(zhuǎn)化為vector數(shù)組 vector hex_into_dec(string word); /將vector轉(zhuǎn)化為string字符串形式 string num_into_message(vector A); /兩個字X和Y的邏輯和 vector word_AND(vector A,vector B); /兩個字X和Y的邏輯或 vector word_OR(vector A,vector B); /兩個字X和Y的邏輯異或 vector word_

20、XOR(vector A,vector B); /兩個字X和Y的邏輯補 vector word_COMPLEMENT(vector A); /兩個字X和Y的摸232整數(shù)加 vector word_ADD(vector A,vector B); /將字X循環(huán)左移s個位置 vector ROTL(vector A,int s); /SHA-1的填充方案,我們設(shè)定msg由ASCII碼組成 vectorvector SHA_1_PAD(string msg); /將SHA-1壓成以字為單位 vectorvectorvector compress(vectorvector result); /定義ft函

21、數(shù),每個ft函數(shù)都有B,C,D三個字作為輸入,并產(chǎn)生一個字作為輸出 vector Ft(int t,vector B,vector C,vector D); /定義字常數(shù)K vector K(int t); /開始進行SHA-1(安全Hash算法)的加密 vectorvector SHA_1(string msg); ; /將vector轉(zhuǎn)化為string字符串形式 string SHA1:num_into_message(vector A) int i; string msg = ; for(i = 0;i = 0 & Ai = 10 & Ai = 15) msg += A + (Ai -

22、10); return msg; /將一個字符串形式的字轉(zhuǎn)化為vector數(shù)組 vector SHA1:hex_into_dec(string word) int i; vector result(NUM,0); for(i = 0;i = 0 & wordi = A & wordi = F) resulti = 10 + wordi - A; return result; /兩個字X和Y的邏輯和 vector SHA1:word_AND(vector A,vector B) vector result(NUM,0); int i; for(i = 0;i NUM;i+) resulti =

23、Ai & Bi; return result; /兩個字X和Y的邏輯或 vector SHA1:word_OR(vector A,vector B) vector result(NUM,0); int i; for(i = 0;i NUM;i+) resulti = Ai | Bi; return result; /兩個字X和Y的邏輯異或 vector SHA1:word_XOR(vector A,vector B) vector result(NUM,0); int i; for(i = 0;i NUM;i+) resulti = Ai Bi; return result; /兩個字X和Y的

24、邏輯補 vector SHA1:word_COMPLEMENT(vector A) vector result(NUM,0); int i; for(i = 0;i NUM;i+) resulti = 15 - Ai; return result; /兩個字X和Y的摸232整數(shù)加 vector SHA1:word_ADD(vector A,vector B) vector result(NUM,0); int i; for(i = NUM - 1;i = 0;i-) resulti = Ai + Bi; if(i != 0) int temp = resulti / 16; resulti-1

25、 += temp; resulti %= 16; return result; /將字X循環(huán)左移s個位置 vector SHA1:ROTL(vector A,int s) vector result = A; vector temp(NUM,0); int i,j; for(i = 0;i = 0;j-) if(resultj / 8 = 1) tempj = 1; resultj = 1; resultj %= 16; if(j NUM - 1) resultj += tempj + 1; else if(resultj / 8 = 0) tempj = 0; resultj = 1; re

26、sultj %= 16; resultNUM - 1 += temp0; return result; /SHA-1的填充方案,我們設(shè)定msg由ASCII碼組成 vectorvector SHA1:SHA_1_PAD(string msg) int len = msg.length(); int bit_num = len * 8; int i,j; int num,lest = bit_num % 512; if(lest != 0) /看消息長度是否超過512字節(jié),我們需要將它補成512的倍數(shù) num = bit_num / 512 + 1; else num = bit_num / 51

27、2; /首先我們以8位字節(jié)為一組保存到vector里面,512比特為一組,即一組里面有64位元素 vectorvector result; result.resize(num); for(i = 0;i num;i+) resulti.resize(64); for(i = 0;i num;i+) for(j = 0;j 64 & i * 64 + j len;j+) resultij = msgi * 64 + j; /下面開始為未夠512比特的消息分組進行補長度操作 if(lest != 0) int x = num - 1,last_len = lest / 8; resultxlast

28、_len = 128; /先補一個1 for(i = last_len + 1;i = 56) resultxj = last_l % 128; last_l /= 128; j-; return result; /將SHA-1壓成以字為單位(三維數(shù)組有點復(fù)雜) vectorvectorvector SHA1:compress(vectorvector result) vectorvector rr; rr.resize(result.size(); int i,j; for(i = 0;i rr.size();i+) rri.resize(128); for(i = 0;i result.s

29、ize();i+) for(j = 0;j resulti.size();j+) rri2 * j = resultij / 16; rri2 * j + 1 = resultij % 16; vectorvectorvector rrr; rrr.resize(result.size(); for(i = 0;i rrr.size();i+) rrri.resize(16); for(i = 0;i rrr.size();i+) for(j = 0;j 16;j+) rrrij.resize(8); for(i = 0;i rr.size();i+) for(j = 0;j rri.size

30、();j+) rrrij / 8j % 8 = rrij; return rrr; /定義ft函數(shù),每個ft函數(shù)都有B,C,D三個字作為輸入,并產(chǎn)生一個字作為輸出 vector SHA1:Ft(int t,vector B,vector C,vector D) vector result; if(t = 0 & t = 19) vector a1 = word_AND(B,C); vector a2 = word_AND(word_COMPLEMENT(B),D); result = word_OR(a1,a2); else if(t = 20 & t = 60 & t = 79) vecto

31、r a1 = word_XOR(B,C); result = word_XOR(a1,D); else if(t = 40 & t = 59) vector a1 = word_AND(B,C); vector a2 = word_AND(B,D); vector a3 = word_AND(C,D); vector a4 = word_OR(a1,a2); result = word_OR(a4,a3); return result; /定義字常數(shù)K vector SHA1:K(int t) vector result; if(t = 0 & t = 20 & t = 40 & t = 60

32、 & t = 79) result = hex_into_dec(CA62C1D6); return result; /開始進行SHA-1(安全Hash算法)的加密 vectorvector SHA1:SHA_1(string msg) vector h0 = hex_into_dec(H0); vector h1 = hex_into_dec(H1); vector h2 = hex_into_dec(H2); vector h3 = hex_into_dec(H3); vector h4 = hex_into_dec(H4); vectorvector result1 = SHA_1_PA

33、D(msg); vectorvectorvector result2 = compress(result1); int n = result2.size(); int i,j; for(i = 0;i n;i+) vectorvector W; W.resize(80); for(j = 0;j 16;j+) Wj = result2ij; for(j = 16;j 80;j+) vector a1 = word_XOR(Wj-3,Wj-8); vector a2 = word_XOR(a1,Wj-14); vector a3 = word_XOR(a2,Wj-16); Wj = ROTL(a

34、3,1); /將string轉(zhuǎn)化為vector數(shù)組 vector A = hex_into_dec(H0); vector B = hex_into_dec(H1); vector C = hex_into_dec(H2); vector D = hex_into_dec(H3); vector E = hex_into_dec(H4); for(j = 0;j 80;j+) vector a1 = ROTL(A,5); vector a2 = Ft(j,B,C,D); vector a3 = word_ADD(a1,a2); vector a4 = word_ADD(a3,E); vector a5 =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論