搶答器、萬年歷eda課程設(shè)計_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計</p><p><b>  資 料 袋</b></p><p>  題 目 EDA數(shù)字系統(tǒng)綜合設(shè)計與實踐 </p><p>  成 績 起止日期 2013 年 1

2、1 月 18 日~ 2013 年 12 月 1 日</p><p>  目 錄 清 單</p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  2013 —2014 學(xué)年度 第 1 學(xué)期</p><p>  課程名稱: 數(shù)字系統(tǒng)設(shè)計

3、 </p><p>  設(shè)計題目: EDA數(shù)字系統(tǒng)綜合設(shè)計與實踐 </p><p>  完成期限: 2013 年 11 月 18 日~ 2013 年 12 月 1 日 共 2 周</p><p&

4、gt;  指導(dǎo)教師(簽字): 2013 年 12月 1 日</p><p>  系(教研室)主任(簽字): 2013 年 12月 1 日</p><p><b>  數(shù)字系統(tǒng)設(shè)計課程</b></p><p><b&g

5、t;  設(shè) 計 說 明 書</b></p><p>  起止日期: 2013 年 11 月 18 日~ 2013 年 12 月 1 日 共 2 周</p><p><b>  電氣與信息工程學(xué)院</b></p><p>  一 智力搶答器的設(shè)計與實現(xiàn)</p><p> ?。ㄒ唬┫到y(tǒng)設(shè)計要

6、求:</p><p>  在許多比賽活動中,為了準確、直觀地判斷搶答者,通常設(shè)置一臺搶答器,并通過燈光、聲響、數(shù)碼管等顯示出第一搶答者,同時還可完成計分、扣分等功能。本設(shè)計具體要求如下:</p><p> ?。?)設(shè)計一個可供四組參賽者使用的搶答器,每組設(shè)置一個搶答按鈕;</p><p> ?。?)電路具有第一搶答信號的鑒別功能,當主持人按下清零復(fù)位鍵后,開始搶答,

7、將第一搶答者組別實現(xiàn)出來(數(shù)碼管顯示組號,LED指示燈點亮,并發(fā)出“嘀”的聲音);</p><p> ?。?)設(shè)置計分電路,四組參賽者在開始時預(yù)置成100分。搶答后回答正確的加10分,錯誤則扣10分,將計分結(jié)果用數(shù)碼管顯示出來;</p><p> ?。?)設(shè)置總顯示按鈕,當主持人按下按鈕后,可將每組的得失分情況用數(shù)碼管直觀地顯示出來。</p><p> ?。ǘ┫?/p>

8、統(tǒng)設(shè)計方案:</p><p>  采用自頂向下的調(diào)試方法進行設(shè)計,將設(shè)計分為搶答模塊、計分模塊、數(shù)據(jù)選擇模塊以及譯碼顯示模塊。</p><p><b> ?。?)搶答模塊</b></p><p>  主要完成4組參賽者搶答鑒別功能。</p><p>  CLR=0時輸出清零,CLR=1時,A、B、C、D哪組輸入為1(用實

9、驗箱邏輯電平開關(guān)代替搶答鍵),相應(yīng)路輸出有效信號1,并點亮組別指示燈。兩組同時搶答無效。</p><p>  其VHDL源程序如下:</p><p>  LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY QDJB IS  PORT(CLR:  IN STD_LOGIC;    

10、60;   A, B, C, D:  IN STD_LOGIC; --4個組       A1,B1,C1,D1:  OUT STD_LOGIC;        STATES:  OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); EN

11、D ENTITY QDJB; ARCHITECTURE ART OF QDJB IS CONSTANTW1:STD_LOGIC_VECTOR:=”0001”;CONSTANTW2:STD_LOGIC_VECTOR:=”0010”;CONSTANTW3:STD_LOGIC_VECTOR:=”0100”;CONSTANTW4:STD_LOGIC_VECTOR:=”1000”;  BEGIN  PROCE

12、SS(CLR,A,B,C,D) IS  BEGINIF CLR='1' THEN STATES<="0000";</p><p>  ELSIF(A<='1' AND B<='0' AND C<='0' AND D<='0')THEN</p><p&g

13、t;  A1<=’1’;B1<=’0’;C1<=’0’;D1<=’0’;STATES<=W1;ELSIF(A<='0' AND B<='1' AND C<='0' AND D<='0')THEN</p><p>  A1<=’0’;B1<=’1’;C1<=’0’;D1<=

14、’0’;STATES<=W2;</p><p>  ELSIF(A<='1' AND B<='0' AND C<='1' AND D<='0')THEN</p><p>  A1<=’1’;B1<=’0’;C1<=’1’;D1<=’0’;STATES<=W3;<

15、/p><p>  ELSIF(A<='0' AND B<='0' AND C<='0' AND D<='1')THEN</p><p>  A1<=’0’;B1<=’0’;C1<=’0’;D1<=’1’;STATES<=W4;</p><p><b

16、>  END IF;</b></p><p>  END PROCESS; END ARCHITECTURE ART;</p><p>  搶答鑒別模塊(QDJB)仿真波形</p><p><b> ?。?)計分模塊</b></p><p>  主要完成加減計分功能。</p><

17、p>  當有1組搶答成功后,EN1為1,啟動該組計分模塊。CLK3為計分脈沖(用單次脈沖開關(guān)代替),ADD為加分使能鍵,為1有效。DEC為減分使能鍵,為1有效。每組初始分為100分,搶答后回答正確的加10分,錯誤則扣10分,結(jié)果百位、十位、個位分別用4位二進制表示。</p><p>  VHDL源程序如下:</p><p>  LIBRARY IEEE; USE IEEE.STD_

18、LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JFQ IS  PORT(RST: IN STD_LOGIC;        ADD: IN STD_LOGIC;        CHOS: IN STD_LOGIC_VECTOR(3 D

19、OWNTO 0);       OUT1: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY JFQ ; ARCHITECTURE ART OF JFQ IS  BEGIN  PROCESS(RST,ADD,CHOS) IS    VARIABLE POINTS_A0: STD_LOG

20、IC_VECTOR(3 DOWNTO 0);     VARIABLE POINTS_B0: STD_LOGIC_VECTOR(3 DOWNTO 0);     VARIABLE POINTS_C0: STD_LOGIC_VECTOR(3 DOWNTO 0);     VARIABLE </p><p>  ELSIF

21、 chos="0000" then out1<="0000";END IF;END PROCESS; END ARCHITECTURE ART;</p><p>  記分模塊(JFQ)仿真波形</p><p> ?。?)計時模塊JSQ</p><p>  本系統(tǒng)的計時器電路既有計時初始值的預(yù)置功能,又有減計數(shù)功能。

22、其中,初始值的預(yù)置功能是將兩位數(shù)分解成兩個數(shù)分別進行預(yù)置。</p><p>  計時模塊(JSQ)仿真波形框圖</p><p>  其VHDL源程序如下:</p><p>  LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; </p><p&

23、gt;  ENTITY JSQ IS  PORT(CLR,LDN,EN,CLK: IN STD_LOGIC;        TA,TB:IN STD_LOGIC_vector(3 DOWNTO 0);       QA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --ge wei

24、       QB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --shi weiEND ENTITY JSQ; ARCHITECTURE ART OF JSQ IS  BEGIN  PROCESS(CLK) IS   VARIABLE TMPA:STD_LOGIC_VECTOR(3 DOWNTO 0

25、);    VARIABLE TMPB:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN    IF CLR='1' THEN TMPA:="0000"; TMPB:="0110"; --清零,倒計時60秒    ELSIF CLK'EVENT AND CLK=&#

26、39;1' THEN        IF LDN='1' THEN T</p><p>  計時模塊(JSQ)仿真波形</p><p><b> ?。?)譯碼顯示模塊</b></p><p>  主要完成數(shù)碼管動態(tài)掃描顯示。將計分結(jié)果百位、十位、個位

27、的4位二進制轉(zhuǎn)化為“0-9”8位字型段碼,LEDW為數(shù)碼管位選信號,“000”對應(yīng)右邊第1個數(shù)碼管,“001”對應(yīng)右邊第2個數(shù)碼管,…,依此類推。CLK2為1KHZ動態(tài)掃描脈沖。</p><p>  其VHDL源程序如下:</p><p>  LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.A

28、LL; ENTITY YMQ IS  PORT(AIN4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);        DOUT7:  OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END YMQ; ARCHITECTURE ART OF YMQ ISBEGIN  PROCESS(AIN4

29、)    BEGIN    CASE AIN4 IS    WHEN "0000"=>DOUT7<="1111110";   --0    WHEN "0001"=>DOUT7<="0110000&

30、quot;;   --1    WHEN "0010"=>DOUT7<="1101101";   --2    WHEN "0011"=>DOUT7<="1111001";   --3  &

31、#160; WHEN "0100"=>DOUT7<="0110011";   --4    WHEN "0101"=></p><p>  譯碼器顯示模塊(YMQ)仿真波形</p><p><b> ?。?)頂層文件</b></p&g

32、t;<p>  其VHDL源程序如下:</p><p>  LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY qdq ISPORT(qd :IN STD_LOGIC_VECTOR (3 DOWNTO 0);     clk,en,ldn,ad

33、d,rst,clrqd,clrsj IN std_logic;     ta,tb : IN STD_LOGIC_VECTOR (3 DOWNTO 0);     qdo :OUT STD_LOGIC_VECTOR (3 DOWNTO 0);     out1 : OUT STD_LOGIC_VECTOR (3

34、DOWNTO 0);     out2 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);     out4 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);     out3 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END;AR

35、CHITECTURE aa OF qdq ISCOMPO</p><p><b>  頂層文件仿真圖:</b></p><p>  在這個模塊中是對前幾個模塊的綜合編寫的頂層文件。</p><p><b>  頂層參考電路原理圖</b></p><p>  二 綜合計時系統(tǒng)設(shè)計與分析</p&

36、gt;<p><b> ?。ㄒ唬┫到y(tǒng)設(shè)計要求</b></p><p>  設(shè)計一個綜合性的計時系統(tǒng),要求能實現(xiàn)年、月、日、時、分、秒及星期的計數(shù)等綜合計時功能,同時將計時結(jié)果通過15個七段數(shù)碼管顯示,并且可通過兩個設(shè)置鍵,對計時系統(tǒng)的有關(guān)參數(shù)進行調(diào)整。具體系統(tǒng)功能面板如圖2-1所</p><p>  圖2-1 系統(tǒng)功能面板</p><

37、;p>  根據(jù)系統(tǒng)設(shè)計要求可知,本綜合計時系統(tǒng)可分成三個主要模塊:綜合計時電路、顯示控制電路和調(diào)整控制電路。其中綜合計時電路用于完成各種計時的功能,在面板上體現(xiàn)為面板上方的15個七段數(shù)碼管,依次可以顯示年、月、日、時、分、秒及星期;顯示控制電路用于完成計時結(jié)果的顯示控制及顯示譯碼等功能,集成后體現(xiàn)為面板下方左側(cè)的按鍵電路;而調(diào)整控制電路則用于調(diào)整計時系統(tǒng)的有關(guān)參數(shù),可參照面板上右下角的兩個按鍵:模式和調(diào)整。</p>

38、<p><b> ?。ǘ┫到y(tǒng)設(shè)計方案</b></p><p>  2.1綜合計時電路的設(shè)計</p><p>  根據(jù)系統(tǒng)的設(shè)計要求,綜合計時電路可分為計秒電路、計分電路、計時電路、計星期電路、計日電路、計月電路、計年電路等7個子模塊,這7個子模塊必須都具有預(yù)置、計數(shù)和進位功能,設(shè)計思想如下: </p><p>  (1) 計秒電路:

39、以直接輸入或由分頻器產(chǎn)生的秒脈沖作為計秒電路的計數(shù)時鐘信號,待計數(shù)至60瞬間,進位,計分電路加1,而計秒電路則清零并重新計秒。</p><p>  (2) 計分電路、計時電路:其設(shè)計思想與計秒電路類似。</p><p>  (3) 計日電路:將計時電路產(chǎn)生的進位脈沖信號作為計日電路的計數(shù)時鐘信號,通過系統(tǒng)辨認,確定本月總天數(shù)X(包括28、29、30、31四種情況),待計數(shù)至X+1瞬間,進位

40、,計月電路加1,而計日電路返回1重新開始計數(shù)。</p><p>  (4) 計星期電路:將計時電路產(chǎn)生的進位脈沖信號作為計星期電路的計數(shù)時鐘信號,待計數(shù)至7瞬間,計星期電路返回1重新開始計數(shù)。</p><p>  (5) 計月電路:將計日電路產(chǎn)生的進位脈沖信號作為計月電路的計數(shù)時鐘信號,待計數(shù)至12瞬間,進位,計年電路加1,而計月電路返回1重新開始計數(shù)。</p><p&

41、gt;  (6) 計年電路:將計月電路產(chǎn)生的進位脈沖信號作為計年電路的計數(shù)時鐘信號,待計數(shù)至100瞬間,計年電路返回0重新開始計數(shù)。(注:由于本系統(tǒng)的計年范圍僅為2000~2099年,所以計年模塊只對年份的后兩位進行計數(shù),年份的前兩位始終保持為“20”。)</p><p>  下面介紹CNT60、CNT30計數(shù)模塊的設(shè)計[11]。</p><p>  CNT60計數(shù)模塊是一個多用計時模塊,

42、它既可作為計秒電路調(diào)用,又可作為計分電路、計時電路調(diào)用。圖2-2是其輸入、輸出端口圖。其中,輸入信號LD為置數(shù)控制信號,低電平有效;輸入信號CLK為計數(shù)時鐘信號;輸入信號DATA為待預(yù)置數(shù);輸出信號NUM為計數(shù)結(jié)果;輸出信號CO為計數(shù)溢出信號。</p><p>  圖2-2 CNT60計數(shù)模塊輸入、輸出端口</p><p>  CNT30計數(shù)模塊是一個計日模塊。由于該計數(shù)模塊涉及到大小月

43、及閏年問題,所以CNT30的計數(shù)范圍并非固定不變,而是存在1~28、1~29、1~30及1~31這四種情況。圖2-3是其輸入、輸出端口圖。其中輸入信號LD為置數(shù)控制信號,低電平有效;輸入信號CLK為計數(shù)時鐘信號;輸入信號DATA為待預(yù)置數(shù);輸入信號NIAN為當前計時的年份數(shù);輸入信號YUE為當前計時的月份數(shù);輸出信號NUM為計數(shù)結(jié)果;輸出信號CO為計數(shù)溢出信號,輸出信號MAX_DAYS為當前月的天數(shù)。</p><p&

44、gt;  圖2-3 CNT30計數(shù)模塊的輸入、輸出端口圖</p><p> ?。?)CNT60的主要VHDL程序段如下:</p><p>  IF(LD='0') THEN</p><p>  NUM<=DATA; </p><p>  ELSIF CLK'EVENT AND CLK='1' TH

45、EN</p><p>  IF NUM="111011" THEN --59</p><p>  NUM<="000000";CO<='1';</p><p><b>  ELSE </b></p><p>  NUM<=NUM+1;CO<=

46、'0';</p><p><b>  END IF;</b></p><p>  END IF; </p><p>  分析:當置數(shù)控制模塊低電平有效時,待預(yù)置數(shù)輸入,計數(shù)時鐘信號上升沿有效,當計數(shù)范圍在0~59之間時,計數(shù)結(jié)果加1;當計數(shù)到59時,再加1則產(chǎn)生進位信號,并從零開始計數(shù)。這段程序可用來被計秒、計分電路調(diào)用。&

47、lt;/p><p>  (2)CNT30的主要VHDL程序段如下:</p><p>  IF(LD='0') THEN</p><p>  NUM<=DATA; </p><p>  ELSIF CLK'EVENT AND CLK='1' THEN</p><p>  MAX_

48、DAYS<=TOTAL_DAYS;</p><p>  IF NUM=TOTAL_DAYS THEN </p><p>  NUM<="00001";CO<='1';</p><p><b>  ELSE</b></p><p>  NUM<=NUM+1;CO&

49、lt;='0';</p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  分析:這段程序用來實現(xiàn)計日模塊,通過預(yù)置大小月及閏年不同的天數(shù)(MAX_DAYS代表本月總天數(shù)),如果計數(shù)到當年當月的天數(shù),則計數(shù)器從1重新開始計數(shù),并產(chǎn)生進位信號使

50、月份加1,否則,在計數(shù)范圍內(nèi)一直加1。 </p><p>  2.2顯示控制電路的設(shè)計</p><p>  本設(shè)計顯示需要使用的是15個七段顯示數(shù)碼管。在計時結(jié)果顯示電路中,七段數(shù)碼管顯示部分是一個不容忽視的環(huán)節(jié),如若處理不得當,可能引起系統(tǒng)功率過大,產(chǎn)生散熱問題,嚴重時甚至?xí)?dǎo)致系統(tǒng)的燒毀。為了解決好以上問題,下面就對七段數(shù)碼管顯示電路做簡要的分析和介紹。</p>&

51、lt;p>  通常點亮一個LED所需的電流是5~50 mA,通電的電流愈大,LED的亮度愈高,相對的也會使其壽命縮短。一般以10 mA的導(dǎo)通電流來估算它所必須串聯(lián)的阻值,其計算方式參考圖2-4所示。七段顯示器可分為共陽極、共陰極型兩種,它們都可以等效成8個LED的連接電路,其中圖2-5就是共陰極型七段顯示器的等效電路和每節(jié)LED的定義位置圖。</p><p>  圖2-4 單個LED的串接電阻計算方式&l

52、t;/p><p>  圖2-5 共陰極型七段顯示器的LED位置定義和等效電路</p><p>  由于本設(shè)計的目標是設(shè)計一個綜合的計時系統(tǒng),要求同時顯示年(在這里年份的前兩位固定為20)、月、日、時、分、秒及星期共15個數(shù)字,依照圖2-4的計算方式,同時點亮一個七段顯示器的8節(jié)LED,結(jié)果將需要電流為10mA×8=80mA。若再進一步同時點亮15個七段顯示器,這時所需的電流為80m

53、A×15=1200 mA=1.2A。這對于一般的電子電路來說,是一個不小的電源。不但CPLD&FPGA無法負荷這樣的電流驅(qū)動,而且這個功率也太大,散熱也是問題,電路容易被燒毀。因此顯示電路部分不能直接實現(xiàn)各個計時結(jié)果同時顯示,只能另外通過一個掃描電路對計時輸出進行逐個掃描,使七段數(shù)碼管以個位一組,逐個進行顯示,只要每個掃描頻率不超過人的眼睛的視覺暫留頻率24Hz,就可以達到點亮兩個七段數(shù)碼管,卻能享有所有七段數(shù)碼管同時

54、顯示的視覺效果,而且顯示也不致閃爍抖動,從而間接實現(xiàn)計時結(jié)果同時顯示。</p><p>  根據(jù)以上設(shè)計思想,本系統(tǒng)的數(shù)據(jù)顯示電路可分為兩個子模塊:</p><p>  (1) 顯示控制電路XSKZQ:負責(zé)完成數(shù)據(jù)選擇掃描及數(shù)碼管位選擇信號的產(chǎn)生,數(shù)據(jù)掃描選擇輸出,對于選擇的數(shù)據(jù)進行BCD碼轉(zhuǎn)換等功能;</p><p>  (2) 顯示譯碼電路:將用于顯示的BCD碼

55、數(shù)據(jù)進行譯碼。</p><p>  XSKZQ的輸入、輸出端口如圖2-6所示。其中,輸入信號CLK_SCAN為用于產(chǎn)生數(shù)據(jù)選擇掃描等控制信號的時鐘信號;輸入信號SEC、MIN、HOUR、DAY、MON、YEAR、WEEK分別來自計秒電路、計分電路、計時電路、計日電路、計月電路、計年電路、計星期電路等計時電路的計時結(jié)果輸出端;輸出信號BCD為被選擇進行顯示的計秒、計分、計時、計日、計月、計年、計星期電路等計時電路的

56、計時結(jié)果的8位BCD碼,輸出端SELOUT經(jīng)外部的2-8譯碼電路譯碼后用于選擇對應(yīng)計時結(jié)果顯示數(shù)碼管的公共端COM。圖2-7為15個共陰極型七段數(shù)碼管驅(qū)動接線圖。</p><p>  圖2-6 XSKZQ的輸入、輸出端口圖 </p><p>  圖2-7 15個共陰極型七段數(shù)碼管驅(qū)動接線圖</p><p>  顯示控制電路XSKZQ的VHDL源程序:</p

57、><p>  IF CLK_SCAN'EVENT AND CLK_SCAN='1' THEN </p><p>  IF CNT="111" THEN </p><p>  CNT<="000";</p><p><b>  ELSE</b><

58、/p><p>  CNT<=CNT+'1';</p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  SELOUT<=CNT;</p

59、><p>  PROCESS(CNT)</p><p><b>  BEGIN</b></p><p>  CASE CNT IS</p><p>  WHEN "000" => TEMP<=CONV_INTEGER(SEC); </p><p>  WHEN &qu

60、ot;001" => TEMP<=CONV_INTEGER(MIN);</p><p>  WHEN "010" => TEMP<=CONV_INTEGER(HOUR);</p><p>  WHEN "011" => TEMP<=CONV_INTEGER(DAY);</p><

61、p>  WHEN "100" => TEMP<=CONV_INTEGER(MON);</p><p>  WHEN "101" => TEMP<=CONV_INTEGER( YEAR);</p><p>  WHEN "110" => TEMP<=2;</p><

62、p>  WHEN "111" => TEMP<=CONV_INTEGER(WEEK);</p><p>  WHEN OTHERS=>NULL;</p><p><b>  END CASE;</b></p><p>  CASE TEMP IS</p><p>  WHEN

63、 0 =>BCD<="00000000" ;</p><p>  WHEN 1 =>BCD<="00000001" ;</p><p>  WHEN 2 =>BCD<="00000010" ;</p><p>  WHEN 3 =>BCD<="

64、;00000011" ;</p><p><b>  ……</b></p><p>  WHEN 97 =>BCD<="10010111" ;</p><p>  WHEN 98 =>BCD<="10011000" ;</p><p>  WHEN

65、 99 =>BCD<="10011001" ;</p><p>  WHEN OTHERS=>BCD<="00000000";</p><p><b>  END CASE;</b></p><p>  分析:先對各個輸出信號進行掃描,根據(jù)輸出信號選擇數(shù)碼管位,并通過譯碼電路將B

66、CD數(shù)據(jù)譯碼,譯碼后可以選擇對應(yīng)計時結(jié)果顯示數(shù)碼管的公共端COM。</p><p>  2.3調(diào)整控制電路TZKZQ的設(shè)計</p><p>  對于系統(tǒng)中的時間調(diào)整電路,擬通過模式和調(diào)整兩個外部按鍵完成。模式按鍵負責(zé)切換正常時間計數(shù)模式和時間調(diào)整模式,調(diào)整模式切換順序如圖2-8所示。調(diào)整鍵負責(zé)在時間調(diào)整模式之下,對當前模式的計時結(jié)果進行調(diào)整。</p><p>  圖

67、2-8 調(diào)整模式切換順序</p><p>  在模式選擇的過程中,被選擇到的調(diào)整模式所對應(yīng)的發(fā)光二極管會被點亮。例如,按動模式鍵,選定“2010年5月7日09:09:09 星期5”的分鐘數(shù)“09”,對應(yīng)的調(diào)分模式發(fā)光二極管將會被點亮,剩下的6個調(diào)整模式發(fā)光二極管不被點亮。當處于正常模式時,7個發(fā)光二極管均不被點亮。被調(diào)整的計時結(jié)果之間相互獨立。調(diào)整過程中,只有被選擇到的計數(shù)結(jié)果才會被接收調(diào)整,例如上述的“09”

68、分鐘數(shù)部分,它可能會有的調(diào)整范圍為0~59,其余的數(shù)字將固定顯示不動。</p><p>  TZKZQ模塊是負責(zé)各個模塊之間的相互切換以及對被選中的模式進行時間調(diào)整的。圖2-9是其輸入、輸出端口圖。其中輸入信號KEY[1..0]為鍵盤信號,當KEY=01時,表示按下了設(shè)置鍵,系統(tǒng)切換到下一個狀態(tài),當KEY=10時表示按下了調(diào)整鍵,系統(tǒng)進行自加;輸入信號CLK_KEY為按鍵掃描時鐘信號;輸入信號YEAR_CUR、M

69、ON_CUR、DAY_CUR、HOUR_CUR、MIN_CUR、SEC_CUR、WEEK_CUR、MAX_DAYS均為來自各自計時電路輸出的當前計時結(jié)果的反饋值;輸入信號YEAR_EN、MON_EN、DAY_EN、HOUR_EN、MIN_EN、SEC_EN、WEEK_EN、均為對應(yīng)的計時電路的一部并行置數(shù)使能信號;輸出信號YEAR、MON、DAY、HOUR、MIN、SEC、WEEK則為調(diào)整后的對應(yīng)時間需預(yù)置的數(shù)。該模塊的VHDL程序主要

70、通過一個狀態(tài)機來實現(xiàn)[12]。</p><p>  圖2-9 TZKZQ的輸入、輸出端口圖</p><p>  調(diào)整控制電路TZKZQ的VHDL源程序:</p><p>  IF CLK_KEY'EVENT AND CLK_KEY='1' THEN</p><p>  IF KEY="01" TH

71、EN --如果按下設(shè)置鍵,切換到下一個狀態(tài)</p><p>  SEC_EN<='1';MIN_EN<='1';HOUR_EN<='1';</p><p>  DAY_EN<='1';MON_EN<='1';YEAR_EN<='1';</p>

72、<p>  WEEK_EN<='1';</p><p>  CASE MODE IS </p><p>  WHEN NORMAL => MODE<=SEC_SET;SEC<=SEC_CUR;SEC_EN<='0';</p><p>  --切換到秒設(shè)置模式,讀入當前秒,秒異步并行置位使能有

73、效</p><p>  WHEN SEC_SET => MODE<=MIN_SET;MIN<=MIN_CUR;SEC_EN<='1';MIN_EN<='0'; </p><p>  --切換到分設(shè)置模式,讀入當前分,分異步并行置位使能有效, 同時秒異步并行置位使能復(fù)位</p><p>  WHEN MIN

74、_SET => MODE<=HOUR_SET;HOUR<=HOUR_CUR;MIN_EN<='1';HOUR_EN<='0';</p><p>  WHEN HOUR_SET=> MODE<=DAY_SET;DAY<=DAY_CUR;HOUR_EN<='1';DAY_EN<='0';<

75、/p><p>  WHEN DAY_SET => MODE<=MON_SET;MON<=MON_CUR;DAY_EN<='1';MON_EN<='0';</p><p>  WHEN MON_SET => MODE<=YEAR_SET;YEAR<=YEAR_CUR; MON_EN<='1';&

76、lt;/p><p>  YEAR_EN<='0'; </p><p>  WHEN YEAR_SET => MODE<=WEEK_SET;WEEK<=WEEK_CUR;YEAR_EN<='1';WEEK_EN<='0';</p><p>  WHEN WEEK_SET => MO

77、DE<=NORMAL;</p><p>  END CASE; </p><p>  ELSIF KEY="10" THEN --如果按下調(diào)整鍵,則自加 </p><p>  CASE MODE IS</p><p>  WHEN SEC_SET =>

78、; SEC_EN<='0'; --異步并行置位使能有效</p><p>  IF SEC="111011" THEN SEC<="000000";如果秒計數(shù)到59,返回到0重新計數(shù)</p><p>  ELSE SEC<=SEC+1; --否則繼

79、續(xù)計數(shù)</p><p><b>  END IF;</b></p><p>  WHEN MIN_SET => MIN_EN<='0';</p><p>  IF MIN="111011" THEN MIN<="000000";</p><p> 

80、 ELSE MIN<=MIN+1; </p><p><b>  END IF;</b></p><p>  WHEN HOUR_SET=> HOUR_EN<='0';</p><p>  IF HOUR="11000" THEN HOUR<="00000";&l

81、t;/p><p>  ELSE HOUR<=HOUR+1;</p><p><b>  END IF;</b></p><p>  WHEN DAY_SET => DAY_EN<='0';</p><p>  IF DAY<=MAX_DAYS THEN DAY<="00

82、001";</p><p>  ELSE DAY<=DAY+1;</p><p><b>  END IF;</b></p><p>  WHEN MON_SET => MON_EN<='0';</p><p>  IF MON="1100" THEN MO

83、N<="0001";</p><p>  ELSE MON<=MON+1;</p><p><b>  END IF;</b></p><p>  WHEN YEAR_SET=> YEAR_EN<='0';</p><p>  IF YEAR="110

84、0011" THEN YEAR<="0000000";</p><p>  ELSE YEAR<=YEAR+1;</p><p><b>  END IF;</b></p><p>  WHEN WEEK_SET=> WEEK_EN<='0';</p><

85、p>  IF WEEK="111" THEN WEEK<="001";</p><p>  ELSE WEEK<=WEEK+1;</p><p><b>  END IF;</b></p><p>  WHEN OTHERS=>NULL;</p><p>&

86、lt;b>  END CASE;</b></p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  END ARCHITECTURE ART;</p>&l

87、t;p><b>  (三) 系統(tǒng)仿真</b></p><p>  3.1CNT60.VHD的仿真</p><p>  從圖2-10以看出,CNT60.VHD實現(xiàn)了從0到59的循環(huán)計數(shù),每實現(xiàn)一次59到0的計數(shù)動作,計數(shù)模塊輸出一個進位信號。當LD端有低電平輸入時,說明置數(shù)信號(LD)有效,模塊將預(yù)置數(shù)(DATA)56送入計數(shù)結(jié)果(NUM)中去,計數(shù)模塊從56開始

88、重新計數(shù)。</p><p>  圖2-10 CNT60.VHD模塊仿真圖</p><p>  3.2 CNT30.VHD的仿真</p><p>  從圖2-11可以看出,該模塊首先要讀取當前年月(NIAN和YUE),再對該月的最大天數(shù)(MAX_DAYS)進行判斷并將結(jié)果向外輸出。在正常計數(shù)過程中,模塊實現(xiàn)了從0到最大天數(shù)(MAX_DAYS)的循環(huán)計數(shù),每實現(xiàn)一次最大

89、天數(shù)(MAX_DAYS)到0的計數(shù)動作,計數(shù)模塊輸出一個進位信號。當LD端有低電平輸入時,說明置數(shù)信號(LD)有效,模塊將預(yù)置數(shù)(DATA)24送入計數(shù)結(jié)果(NUM)中去,計數(shù)模塊從24開始重新計數(shù)。</p><p>  圖2-11 CNT30模塊仿真圖</p><p>  3.3 TZKZQ.VHD的仿真</p><p>  從圖2-12可以看出,調(diào)整鍵被按下了

90、8次(鍵盤產(chǎn)生“01”信號即為調(diào)整鍵按下一次),調(diào)整模式依次經(jīng)過了正常、調(diào)秒、調(diào)分、調(diào)時、調(diào)日、調(diào)月、調(diào)年、調(diào)星期再回到正常這8種模式的循環(huán),即MODE依次從0到7,再從7回到0的循環(huán)。在按鍵過程中,每按下一次按鈕,相應(yīng)地被調(diào)整模式的異步并行置位使能置“0”,同時通過一個非門點亮該調(diào)整模式所對應(yīng)的發(fā)光二極管,作為該調(diào)整模式的指示信號。 </p><p>  圖2-12 TZKZQ.VHD仿真圖(一)</p

91、><p>  從圖2-13可以看出,在按動了兩次模式鍵(01)后,調(diào)整模式切換到了調(diào)分模式,然后又按動了兩次調(diào)整鍵(10),實現(xiàn)了在調(diào)分模式下對當前分的值進行調(diào)整(從34調(diào)到36)。 </p><p>  圖2-13 TZKZQ.VHD仿真圖(二)</p><p>  3.4 XSKZQ.VHD的仿真</p><p>  從圖2-14可以看出,

92、當SELOUT分別等于0,1,2,3,4,5,6,7時,分別選擇對應(yīng)的輸入數(shù)據(jù)輸出,達到了設(shè)計要求。 </p><p>  圖2-14 XSKZQ.VHD的仿真圖</p><p><b> ?。ㄋ模┰O(shè)計技巧分析</b></p><p>  (1) 在顯示控制電路XSKZQ的設(shè)計中,利用動態(tài)掃描顯示的原理,既簡化了顯示譯碼驅(qū)動電路的設(shè)計,又節(jié)約

93、了硬件的I/O口,同時還減小了系統(tǒng)的驅(qū)動電流及功耗等,在實際使用中非常有價值。</p><p>  (2) 在調(diào)整控制電路TZKZQ的設(shè)計中,通過讀入系統(tǒng)當前工作的各種時間信息進行自加調(diào)整,簡化了預(yù)置值的設(shè)計,利用狀態(tài)機非常簡潔地實現(xiàn)了8種調(diào)整的循環(huán)變化。</p><p><b>  心得體會:</b></p><p>  通過這次對搶答器的和

94、綜合計時系統(tǒng)設(shè)計設(shè)計和實踐,學(xué)到了很多的東西,不僅鞏固了以前所學(xué)的知識,而且學(xué)到了書本上沒有的東西,在調(diào)試中每修改一個小的錯誤,自己心中的成就感徒增。在設(shè)計的過程中遇到問題,可以說得是困難重重,中途遇到過各種各樣的問題,但通過我的堅持不懈,通過查閱相關(guān)資料和同學(xué)交流以及請教老師,最終把一個個問題都解決了,因此我感到很欣慰,在解決問題的過程中我學(xué)到了很多知識,這為我以后能獨立解決問題打下了堅實的基礎(chǔ)。同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論