《數(shù)字電路實訓(xùn)》課程設(shè)計基于CPLD實驗板的多功能數(shù)字鐘設(shè)計_第1頁
《數(shù)字電路實訓(xùn)》課程設(shè)計基于CPLD實驗板的多功能數(shù)字鐘設(shè)計_第2頁
《數(shù)字電路實訓(xùn)》課程設(shè)計基于CPLD實驗板的多功能數(shù)字鐘設(shè)計_第3頁
《數(shù)字電路實訓(xùn)》課程設(shè)計基于CPLD實驗板的多功能數(shù)字鐘設(shè)計_第4頁
《數(shù)字電路實訓(xùn)》課程設(shè)計基于CPLD實驗板的多功能數(shù)字鐘設(shè)計_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)字電路實訓(xùn)基于cpld實驗板的多功能數(shù)字鐘設(shè)計姓 名 李祖均 徐接勛 徐國健 學(xué) 號:1006020103 1006020116 1006020102 班 級: 應(yīng)電101 指導(dǎo)教師: 左紅英 基于cpld實驗板的多功能數(shù)字鐘設(shè)計實訓(xùn)報告一、實訓(xùn)目的: 1、掌握數(shù)字電路系統(tǒng)的設(shè)計方法和技巧; 2、掌握數(shù)字電子鐘的分頻器、計時器等的設(shè)計及應(yīng)用; 3、掌握vhdl源程序的設(shè)計、編譯和錯誤修改; 4、掌握的測試向量文件建立,仿真; 5、掌握硬件測試的方法和步驟; 6、掌握器件適配的方法,設(shè)計的下載,功能測試。 7、掌握團(tuán)隊協(xié)作和分工的技巧。二、實訓(xùn)要求1、 能進(jìn)行正常的時、分、秒計時功能,分別由6

2、個數(shù)碼管顯示24小時、60分鐘、60秒鐘的計數(shù)器顯示;2、能利用實驗系統(tǒng)上的按鍵實現(xiàn)計時狀態(tài)下的“校時”與“校分”功能;3、能利用蜂鳴器做整點報時;4、完成電路設(shè)計后,用實驗系統(tǒng)下載驗證。附加功能:1、 能進(jìn)行鬧鐘的時、分的設(shè)置,分別由6個數(shù)碼管顯示24小時、60分鐘、60秒鐘的鬧鐘顯示;2、 能用實驗系統(tǒng)上的按鍵實現(xiàn)鬧鐘下的“校時”與“校分”功能;3、能利用蜂鳴器做鬧鐘報時。三、實訓(xùn)過程1、數(shù)字時鐘系統(tǒng)的設(shè)計思路利用vhdl語言編程設(shè)計數(shù)字時鐘,要實現(xiàn)計時、調(diào)時、定時和顯示功能,應(yīng)首先設(shè)計一個分頻器,將實驗板上所提供的50mhz分成1hz和10000hz兩個不同的頻率,其中1hz用來驅(qū)動計數(shù)

3、器計時,調(diào)時和定時器的定時,10000hz用來驅(qū)動動態(tài)掃描器。然后分別設(shè)計控制器,計時器,定時器,動態(tài)顯示器和報時器。(在此次實訓(xùn)中,李祖均主要負(fù)責(zé)的是動態(tài)顯示器和控制器的設(shè)計并對整個實驗進(jìn)行編譯、仿真驗證、修改錯誤;徐接勛負(fù)責(zé)的定時器和報時器的設(shè)計并對整個實驗硬件測試;徐國健負(fù)責(zé)的是分頻器和計數(shù)器的設(shè)計,還有編寫實訓(xùn)報告。)2、各個模塊的設(shè)計原理(vhdl語言)(1)分頻器設(shè)計思路:利用翻轉(zhuǎn)將實驗板上所提供的50mhz頻率分成占空比為50%,分別為1hz和10000hz兩個不同的頻率,其中1hz用來驅(qū)動計數(shù)器計時,調(diào)時和定時器的定時,10000hz用來驅(qū)動動態(tài)掃描器。(該模塊由徐國健負(fù)責(zé)設(shè)計

4、)library ieee;use ieee.std_logic_1164.all;entity clk_div isport(clk:in std_logic; f10000,f1:out std_logic);end clk_div;architecture one of clk_div is signal q0:integer range 0 to 2500; signal a0:std_logic:=0; signal q3:integer range 0 to 25000000; signal a3:std_logic:=0;begin process(clk,q0) begin i

5、f(clkevent and clk=1) then if(q0=2499) then q0=0; a0=not ;a0; f10000=a0; else q0=q0+1;f10000=a0; end if; end if; end process; process(clk,q3) begin if(clkevent and clk=1) then if(q3=24999999) then q3=0; a3=not a3; f1=a3; else q3=q3+1;f1clkclknull; end case; end process m2to1h; m24:process(clk) begin

6、 if (rising_edge(clk) then if (en=0 or (q0=3 and q1=2) then q0=0; q1=0; elsif(q0=9) then q0=0; q1=q1+1; else q0=q0+1; end if; end if; h2= conv_std_logic_vector(q0,4); h1clk1clk1null; end case; end process m2to1m;m60m:process(clk1) begin if (rising_edge(clk1) then if (en=0 or (q2=9 and q3=5) then q2=

7、0; q3=0; xm=1; elsif(q2=9) then q2=0; q3=q3+1; else q2=q2+1;xm=0; end if; end if; m2= conv_std_logic_vector(q2,4); m1= conv_std_logic_vector(q3,4); end process m60m;m60s:process(f1clk) begin if (rising_edge(f1clk) then if (en=0 or (q4=9 and q5=5) then q4=0; q5=0; xs=1; elsif(q4=9) then q4=0; q5=q5+1

8、; else q4=q4+1;xs=0; end if; end if; s2= conv_std_logic_vector(q4,4); s1= conv_std_logic_vector(q5,4); end process m60s;end one; 計時器有4個輸入端和6個輸出端,各個端口的作用為: 輸入端:(cht:調(diào)時間的時,高電平有效; ,cmt:調(diào)時間的分,高電平有效; f1clk:1hz的頻率輸入,驅(qū)動計時; en:計數(shù)器清零端,低電頻有效; 輸出端 h1:小時的十位; h2:小時的個位; m1:分鐘的十位; m2:分鐘的個位; s1:秒鐘的十位; s2:秒鐘的個位;(3)報

9、時器設(shè)計思路:報時器有整點報時和鬧鐘功能。對于整點報時,我們要對分和秒進(jìn)行比對,當(dāng)分鐘59m時,蜂鳴器從51s開始每隔兩秒報一次時,一共報五次時;對于鬧鐘,則需要對設(shè)定的時和分與正常計時進(jìn)行比對,相同時蜂鳴器則以每秒一次的頻率報時,共60s。(此模塊主要由徐接勛負(fù)責(zé)設(shè)計)library ieee;use ieee.std_logic_1164.all;entity bijiao isport(bell:out std_logic; f1:in std_logic; th1,th2,tm1,tm2,h1,h2,m1,m2,s1,s2:in std_logic_vector(3 downto 0)

10、; bh1,bh2,bm1,bm2:out std_logic_vector(3 downto 0);end bijiao;architecture one of bijiao is signal comput:std_logic; signal m:std_logic_vector(15 downto 0);begin m=m2&m1&s2&s1;bijiao:process(th1,th2,tm1,tm2,h1,h2,m1,m2) begin if(th1=h1 and th2=h2 and tm1=m1 and m2=tm2)then comput=1; bh1= th1; bh2= t

11、h2; bm1= tm1; bm2= tm2; else comput=0; bh1= th1; bh2= th2; bm1= tm1; bm2bellbellbellbellbellnull; end case; case(comput)is when1=bellnull; end case; end process naozhong_baoshi;end one;報時器有11個輸入端和5個輸出端,各個端口的作用為: 輸入端:f1:1hz頻率輸入端,用來整點報時和鬧鈴; th1:定時器的小時的個位; th2:定時器的小時的十位; tm1:定時器的分鐘的個位; tm2:定時器的分鐘的十位; h

12、1:計時器的小時的個位; h2:計時器的小時的十位; m1:計時器的分鐘的個位; m2:計時器的分鐘的十位;s1:計時器的秒鐘的個位; s2:計時器的秒鐘的十位; 輸出端:bh1:定時器的小時的個位; bh2:定時器的小時的十位; bm1:定時器的分鐘的個位; bm2:定時器的分鐘的十位; bell:蜂鳴器信號。(4)定時器設(shè)計思路:定時器是定鬧鐘的時和分,相當(dāng)于一個分鐘模60計數(shù)器和一個時鐘模24計數(shù)器,它們由兩個端口控制,且互不影響。(此模塊主要由徐接勛負(fù)責(zé)設(shè)計)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arit

13、h.all;entity dingshiqi isport(f1,cha,cma: in std_logic; h2,h1:out std_logic_vector(3 downto 0); m2,m1:out std_logic_vector(3 downto 0);end dingshiqi;architecture one of dingshiqi is signal q0,q1:integer range 0 to 15; signal q2,q3:integer range 0 to 15; signal clk:std_logic; signal clk1:std_logic;be

14、ginm24:process(cha) begin case(cha)is when0=clkclknull; end case; end process m24;m24a:process(clk) begin if (rising_edge(clk) then if (q0=3 and q1=2) then q0=0; q1=0; elsif(q0=9) then q0=0; q1=q1+1; else q0=q0+1; end if; end if;h2= conv_std_logic_vector(q0,4); h1clk1clk1null; end case; end process

15、m60m;m60ma:process(clk1) begin if (rising_edge(clk1) then if (q2=9 and q3=5) then q2=0; q3=0; elsif(q2=9) then q2=0; q3=q3+1; else q2=q2+1; end if; end if; m2= conv_std_logic_vector(q2,4); m1= conv_std_logic_vector(q3,4); end process m60ma;end one;定時器有3個輸入端和4個輸出端,各個端口的作用為: 輸入端:f1:1hz的頻率輸入,驅(qū)動定時; cha:

16、定時間的時,高電平有效; cma:定時間的分,高電平有效; 輸出端:h1:小時的十位; h2:小時的個位; m1:分鐘的十位; m2:分鐘的個位; (5)控制器設(shè)計思路:控制器是對校時、定時和顯示的控制,考慮到實驗板的輸入端口,用兩個端口分別控制校時器的時和分,同時還控制顯示器顯示定時時間;另外再用兩個端口控制計時器的校時、校分和控制顯示器顯示計時時間。(此模塊主要由李祖均負(fù)責(zé)設(shè)計)library ieee;use ieee.std_logic_1164.all;entity kzq isport(k:in std_logic; set:in std_logic; k1:in std_logi

17、c; set1:in std_logic; cht,cmt:out std_logic; cha,cma:out std_logic; en:out std_logic; sel:out std_logic);end kzq;architecture one of kzq is signal mi:std_logic_vector(1 downto 0); signal si:std_logic_vector(1 downto 0); signal sel_show:std_logic; signal sel_show1:std_logic; signal c:std_logic;begin

18、mi=k&set; sisel_show=1;cht=0;cmt=0;ensel_show=1;cht=1;cmt=0;ensel_show=1;cmt=1;cht=0;ensel_show=1;cht=0;cmt=0;ennull; end case; end process ;dingshi:process (si) begin case si is when11=sel_show1=0;cha=0;cma=0;csel_show1=0;cha=1;cma=0;csel_show1=0;cma=1;cha=0;csel_show1=0;cma=0;cha=0;cnull; end case

19、; end process ;m2to1:process(c) begin if(c=0)then sel=sel_show; else sel=sel_show1; end if; end process m2to1;end one;控制器有4個輸入端和6個輸出端,各個端口的作用為:輸入端:k:控制校時的時;set:控制校時的分;k1:控制定時的時;set1:控制定時的分;輸出端:cht:調(diào)時間的時,高電平有效;cmt:調(diào)時間的分,高電平有效;cha:定時間的時,高電平有效;cma:定時間的分,高電平有效;en:清零信號,低電平有效;sel:鬧鐘和計時時間的選擇信號。(6)動態(tài)顯示器設(shè)計思路

20、:動態(tài)顯示器是對計時時間和定時時間的動態(tài)顯示,要對輸進(jìn)來的計時時間和定時時間進(jìn)行選擇,即需要一個二選一的數(shù)字選擇器,動態(tài)顯示器顯示時需要對七段數(shù)碼管進(jìn)行段選和位選,則需要一個多路數(shù)字選擇器和一個七段顯示譯碼器,組合起來就是一個動態(tài)顯示器。(此模塊主要由李祖均負(fù)責(zé)設(shè)計)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity dtxs isport(clk:in std_logic; h1,h2,m1,m2,s1,s2,ah1,ah2,am1,am2,as1,as2:in std_logic_vect

21、or(3 downto 0); sel:in std_logic; weixuan:out std_logic_vector(7 downto 0); duanxuan:out std_logic_vector(7 downto 0);end dtxs;architecture one of dtxs is signal qq:std_logic_vector(3 downto 0); signal clk1: std_logic_vector(5 downto 0); signal q0:integer range 0 to 10; signal d0,d1,d2,d3,d4,d5,d6,d

22、7: std_logic_vector(3 downto 0); signal xian:std_logic_vector( 3 downto 0);beginm8:process(clk) begin if (clkevent and clk=1) then if (q0=7) then q0=0; else q0=q0+1; end if; end if; clk1weixuanweixuanweixuanweixuanweixuanweixuanweixuanweixuan null; end case; end process weixuan38;duanxuanyima:proces

23、s(qq) begin case qq is when0000=duanxuanduanxuanduanxuanduanxuanduanxuanduanxuanduanxuanduanxuanduanxuanduanxuanduanxuannull; end case; end process duanxuanyima;m8to1:process(clk1) begin case clk1 is when000000=qqqqqqqqqqqqqqqqnull; end case; end process m8to1;xianshi:process(h1,h2,m1,m2,s1,s2,ah1,a

24、h2,am1,am2,as1,as2) begin if(sel=1 )then d0=s1; d1=s2; d3=m1; d4=m2; d6=h1; d7=h2; else d0=as1; d1=as2; d3=am1; d4=am2; d6=ah1; d7=ah2; end if; xian=1110; d2=xian; d5=xian; end process xianshi; end one; 動態(tài)顯示器有14個輸入端和2個輸出端,各個端口的作用為: 輸入端:clk:10000hz輸入端,用來驅(qū)動動態(tài)顯示器; h1:計時器的小時的個位; h2:計時器的小時的十位; m1:計時器的分鐘的

25、個位; m2:計時器的分鐘的十位; s1:計時器的秒鐘的個位; s2:計時器的秒鐘的十位; ah1:報時器的bh1輸端; ah2:報時器的bh2輸出端; am1:報時器的bm1輸出端; am2:報時器的bm2輸出端; as1:計時器的秒鐘的個位; as2:計時器的秒鐘的十位; sel控制器的sel輸出端; 輸出端:duanxuan:驅(qū)動七段顯示數(shù)碼管; weixuan:驅(qū)動8個數(shù)碼管;3、下載測試(1)、編輯電路并進(jìn)行全程編譯(2)、引腳鎖定編譯;(3)、下載于cpld實驗板進(jìn)行功能測試;4、數(shù)字鐘設(shè)計的改進(jìn)我們在實驗板進(jìn)行數(shù)字鐘功能測試時,發(fā)現(xiàn)在校時和定時時很難設(shè)定自己想要設(shè)置的時間,幾乎每

26、一次在控制端口閉合和斷開時,時間就會發(fā)生劇烈的跳變,這對于我們的校時和定時是非常不利的;開始時我們認(rèn)為這是程序的問題,但當(dāng)我們分別對各模塊的程序進(jìn)行排查后,我們發(fā)現(xiàn)程序并沒有問題,因此,我們暫時放下了這個問題。后來我們從網(wǎng)上看到相關(guān)的論文才了解到這是開關(guān)在閉合和斷開時產(chǎn)生的干擾信號,所以我們決定在控制器的輸入端口分別加入一個消抖電路,如下圖所示:(此改進(jìn)由李祖均、徐國健和徐接勛共同完成) 轉(zhuǎn)化為元件和改進(jìn)后的總圖如下圖所示: 改進(jìn)555、實訓(xùn)的心得體會李祖均的實訓(xùn)心得體會:我覺得這次實訓(xùn)對我來說,就是對我在過去一個學(xué)期里所學(xué)知識的一個總的考核。一個數(shù)字鐘的設(shè)計是一個系統(tǒng)的設(shè)計,它需要我們從系統(tǒng)出發(fā)進(jìn)行設(shè)計,需要一定的邏輯思維;因為這次實訓(xùn)我們是以分組的形式進(jìn)行,所以組員之間如何協(xié)作也是我們必須要考慮的問題。剛開始的時候,我和我的組員一樣,都會有一種無從下手的感覺,但慢慢的通過指導(dǎo)書和一些常識,我對數(shù)字鐘的設(shè)

溫馨提示

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

評論

0/150

提交評論