版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬年歷課程設(shè)計--萬年歷電子時鐘
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- java萬年歷課程設(shè)計
- 萬年歷課程設(shè)計報告
- 數(shù)字萬年歷課程設(shè)計
- java課程設(shè)計--萬年歷
- 萬年歷課程設(shè)計論文
- 課程設(shè)計-萬年歷系統(tǒng)
- 萬年歷課程設(shè)計報告
- 數(shù)碼萬年歷課程設(shè)計
- 萬年歷課程設(shè)計.doc
- java課程設(shè)計--萬年歷設(shè)計
- dsp課程設(shè)計-萬年歷設(shè)計
- 編寫萬年歷系統(tǒng)課程設(shè)計
評論
0/150
提交評論