《可編程數(shù)字系統(tǒng)》課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告基于vhdl的fpga數(shù)字鐘設(shè)計(jì)_第1頁(yè)
《可編程數(shù)字系統(tǒng)》課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告基于vhdl的fpga數(shù)字鐘設(shè)計(jì)_第2頁(yè)
《可編程數(shù)字系統(tǒng)》課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告基于vhdl的fpga數(shù)字鐘設(shè)計(jì)_第3頁(yè)
《可編程數(shù)字系統(tǒng)》課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告基于vhdl的fpga數(shù)字鐘設(shè)計(jì)_第4頁(yè)
《可編程數(shù)字系統(tǒng)》課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告基于vhdl的fpga數(shù)字鐘設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、可編程數(shù)字系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱: 基于VHDL的數(shù)字鐘設(shè)計(jì) _所屬課程: 可編程數(shù)字系統(tǒng)設(shè)計(jì) 可編程數(shù)字系統(tǒng)課程設(shè)計(jì)一、課程設(shè)計(jì)目的: 熟悉EDA工具;掌握用VHDL語言進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì)的基本方法和過程。二、設(shè)計(jì)任務(wù): 設(shè)計(jì)一數(shù)字鐘,用數(shù)碼管顯示基本功能要求:(1) 可以分屏顯示時(shí)、分、秒,可用數(shù)碼管的小數(shù)點(diǎn)“.”代替時(shí)、分、秒的分隔符“:”,分屏顯示是指由于數(shù)碼管只有4個(gè),不能同時(shí)顯示時(shí)、分、秒,但可以只顯示時(shí)、分,或只顯示分、秒,通過按鍵來切換這兩種顯示方式。(2)可設(shè)置時(shí)鐘的開始時(shí)間。設(shè)置時(shí),相應(yīng)的數(shù)碼管要閃爍,指示當(dāng)前設(shè)置的設(shè)置(內(nèi)容)。(3)具有鬧鈴功能,可以設(shè)定鬧鈴時(shí)間

2、。鬧鈴時(shí)間到,LED閃爍進(jìn)行指示。三、設(shè)計(jì)原理:數(shù)字鐘的邏輯框圖如圖1所示。它由校時(shí)部分、鬧鐘部分、計(jì)時(shí)部分、顯示部分組成。振蕩器產(chǎn)生穩(wěn)定的高頻脈沖信號(hào),作為數(shù)字鐘的時(shí)間基準(zhǔn),然后經(jīng)過分頻器輸出標(biāo)準(zhǔn)秒脈沖。秒鐘計(jì)數(shù)器滿60后向分計(jì)數(shù)器進(jìn)位,分鐘計(jì)數(shù)器滿60后向小時(shí)計(jì)數(shù)器進(jìn)位,時(shí)鐘計(jì)數(shù)器按照“24歸0”規(guī)律計(jì)數(shù)。計(jì)數(shù)器的輸出分別經(jīng)譯碼器送顯示。當(dāng)計(jì)時(shí)出現(xiàn)誤差時(shí)或者到達(dá)另外一個(gè)時(shí)區(qū)時(shí),可以用校時(shí)部分校時(shí)、校分、校秒。需要是用鬧鐘時(shí),可以利用鬧鐘部分進(jìn)行定時(shí)。 四、系統(tǒng)分析:根據(jù)數(shù)字鐘的功能,我們可以將它的系統(tǒng)電路設(shè)計(jì)劃分為四個(gè)部分:校時(shí)部分、鬧鐘部分、計(jì)時(shí)部分和顯示部分。其中計(jì)時(shí)部分又劃分為秒鐘計(jì)

3、時(shí)模塊、分鐘計(jì)時(shí)模塊、時(shí)鐘計(jì)時(shí)模塊,顯示部分又劃分為BCD譯碼模塊和掃屏輸出模塊。校時(shí)模塊秒鐘計(jì)時(shí)模塊分鐘計(jì)時(shí)模塊時(shí)鐘計(jì)時(shí)模塊譯碼模塊掃屏輸出鬧鐘模塊LED燈圖1數(shù)字鐘的頂層實(shí)體描述如下:-TOP.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY digitalclock IS PORT(-輸入時(shí)鐘CLK:IN STD_LOGIC;-設(shè)定鬧鐘ALARM_SET:IN STD_LOGIC;-雙鍵位校時(shí)SET:IN STD_L

4、OGIC;MODE:IN STD_LOGIC;-選擇顯示方式CHG:IN STD_LOGIC;-八段譯碼輸出out_data:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-輸出片選seg_out:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-LED輸出ED_OUT:OUT STD_LOGIC);END digitalclock;ARCHITECTURE EXAMPLE OF digitalclock IS-元件例化COMPONENT adjusterPORT(-輸入時(shí)鐘CLK:IN STD_LOGIC;-雙鍵位校時(shí)SET:IN STD_LOGIC;M

5、ODE:IN STD_LOGIC;-計(jì)數(shù)使能,接VCCEN:IN STD_LOGIC;-秒計(jì)數(shù)器進(jìn)位輸入S_ENOUT:IN STD_LOGIC;-分計(jì)數(shù)器進(jìn)位輸入M_ENOUT:IN STD_LOGIC;-輸出1HZ時(shí)鐘CLK1HZ:OUT STD_LOGIC;-輸出使能S_CE:OUT STD_LOGIC;M_CE:OUT STD_LOGIC;H_CE:OUT STD_LOGIC);END COMPONENT;COMPONENT CNT60PORT(-輸入1HZ時(shí)鐘CLK1HZ:IN STD_LOGIC;-計(jì)數(shù)使能EN:IN STD_LOGIC;-進(jìn)位輸出ENOUT:OUT STD_LOG

6、IC;-BCD輸出LOW:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT;COMPONENT CNT24ORT(-輸入1HZ時(shí)鐘CLK1HZ:IN STD_LOGIC;-計(jì)數(shù)使能EN:IN STD_LOGIC;-BCD輸出LOW:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT;COMPONENT displayPORT(-BCD輸入in_data:IN

7、STD_LOGIC_VECTOR(3 DOWNTO 0);-八段譯碼輸出out_data:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;COMPONENT saopingPORT(-選擇顯示方式CHG:IN STD_LOGIC;-BCD輸入SL:IN STD_LOGIC_VECTOR(7 DOWNTO 0);SH:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ML:IN STD_LOGIC_VECTOR(7 DOWNTO 0);MH:IN STD_LOGIC_VECTOR(7 DOWNTO 0);HL:IN STD_LOGIC_

8、VECTOR(7 DOWNTO 0);HH:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ALARM_L:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ALARM_H:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-輸入時(shí)鐘CLK:IN STD_LOGIC;-輸出片選seg:out std_logic_vector(3 downto 0);-BCD輸出out_data:out std_logic_vector(7 downto 0);END COMPONENT;COMPONENTalarmPORT(-輸入時(shí)鐘CLK:IN STD_LOGIC

9、;-設(shè)定鬧鐘ALARM_SET:IN STD_LOGIC;-BCD輸入 IN_HL:IN STD_LOGIC_VECTOR(3 DOWNTO 0);IN_HH:IN STD_LOGIC_VECTOR(3 DOWNTO 0);IN_ML:IN STD_LOGIC_VECTOR(3 DOWNTO 0);IN_MH:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-BCD輸出LOW:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-LED輸出LED_OUT:OUT STD_LOGIC);EN

10、D COMPONENT;-常數(shù)說明CONSTANT VCC:STD_LOGIC:=1;-信號(hào)說明SIGNAL VCC_CON:STD_LOGIC;SIGNAL S_ENOUT:STD_LOGIC;SIGNAL M_ENOUT:STD_LOGIC;SIGNAL CLK1HZ:STD_LOGIC;-計(jì)數(shù)使能SIGNAL S_CE:STD_LOGIC;SIGNAL M_CE:STD_LOGIC;SIGNAL H_CE:STD_LOGIC;-BCD碼SIGNAL SL:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SH:STD_LOGIC_VECTOR(3 DOWNTO 0)

11、;SIGNAL ML:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL MH:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HL:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HH:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL ALARM_LOW:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL ALARM_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SL_OUT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL

12、SH_OUT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL ML_OUT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL MH_OUT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL HL_OUT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL HH_OUT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL ALARM_L_OUT:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL ALARM_H_OUT:STD_LOGIC_VECTOR(7 DOWNTO

13、 0);BEGIN-元件聲明ADJUST_CONTROL:adjusterPORT MAP(-輸入時(shí)鐘CLK=CLK,-雙鍵位校時(shí)SET=SET,MODE=MODE,-計(jì)數(shù)使能,接VCCEN=VCC_CON,-秒計(jì)數(shù)器進(jìn)位輸入S_ENOUT=S_ENOUT,-分計(jì)數(shù)器進(jìn)位輸入M_ENOUT=M_ENOUT,-輸出信號(hào)CLK1HZ=CLK1HZ,-輸出使能S_CE=S_CE,M_CE=M_CE,H_CE=H_CE);VCC_CONCLK1HZ,-計(jì)數(shù)使能,接VCCEN=S_CE,-進(jìn)位輸出ENOUT=S_ENOUT,-BCD輸出LOW=SL,HIGH=SH);M_CONTROL:CNT60POR

14、T MAP(-輸入1HZ時(shí)鐘CLK1HZ=CLK1HZ,-計(jì)數(shù)使能EN=M_CE,-進(jìn)位輸出ENOUT=M_ENOUT,-BCD輸出LOW=ML,HIGH=MH);H_CONTROL:CNT24PORT MAP(-輸入1HZ時(shí)鐘CLK1HZ=CLK1HZ,-計(jì)數(shù)使能EN=H_CE,-BCD輸出LOW=HL,HIGH=HH);ALARM_CLOCK:alarmPORT MAP(-輸入時(shí)鐘CLK=CLK,-設(shè)定鬧鐘ALARM_SET=ALARM_SET,-BCD輸入 IN_HL=HL,IN_HH=HH,IN_ML=ML,IN_MH=MH,-BCD輸出LOW=ALARM_LOW,HIGH=ALARM

15、_HIGH,-LED輸出LED_OUT=LED_OUT);SL_DIS:displayPORT MAP(-BCD輸入in_data=SL,-八段譯碼輸出out_data=SL_OUT);SH_DIS:displayPORT MAP(-BCD輸入in_data=SH,-八段譯碼輸出out_data=SH_OUT);ML_DIS:displayPORT MAP(-BCD輸入in_data=ML,-八段譯碼輸出out_data=ML_OUT);MH_DIS:displayPORT MAP(-BCD輸入in_data=MH,-八段譯碼輸出out_data=MH_OUT);HL_DIS:displayP

16、ORT MAP(-BCD輸入in_data=HL,-八段譯碼輸出out_data=HL_OUT);HH_DIS:displayPORT MAP(-BCD輸入in_data=HH,-八段譯碼輸出out_data=HH_OUT);ALARM_L_DIS:displayPORT MAP(-BCD輸入in_data=ALARM_LOW,-八段譯碼輸出out_data=ALARM_L_OUT);ALARM_H_DIS:displayPORT MAP(-BCD輸入in_data=ALARM_HIGH,-八段譯碼輸出out_data=ALARM_H_OUT);SAOPINGQI:saopingPORT MA

17、P(-BCD輸入SL=SL_OUT,SH=SH_OUT,ML=ML_OUT,MH=MH_OUT,HL=HL_OUT,HH=HH_OUT,ALARM_L=ALARM_L_OUT,ALARM_H=ALARM_H_OUT,-選擇顯示方式CHG=CHG,-輸入時(shí)鐘CLK=CLK,-輸出片選seg=seg_out,-BCD輸出out_data=out_data);END EXAMPLE;仿真結(jié)果如下:該頂層文件原理圖如下:系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)結(jié)果如下:五、程序設(shè)計(jì):1、校時(shí)模塊:采用的是雙鍵校時(shí)法,MODE和SET,其中MODE選擇需要調(diào)整的部分:時(shí)鐘、分鐘、秒鐘,而SET則作為調(diào)整脈沖。校時(shí)模塊的核心思想是利

18、用一個(gè)計(jì)數(shù)器CON來作為狀態(tài)機(jī),CON=0時(shí)為正常工作狀態(tài),CON=1時(shí)為調(diào)整秒鐘狀態(tài),CON=2時(shí)為調(diào)整分鐘狀態(tài),CON=3時(shí)為調(diào)整時(shí)鐘狀態(tài)。調(diào)整的時(shí)候,利用SET代替CLK1HZ作為計(jì)數(shù)器輸入脈沖,相當(dāng)于按一次SET則被調(diào)整的計(jì)數(shù)器中的當(dāng)前值+1,由此獲得一個(gè)數(shù)字鐘的時(shí)間設(shè)定效果。校時(shí)模塊同時(shí)還具有控制時(shí)鐘、分鐘、秒鐘計(jì)數(shù)器工作的功能,通過兩個(gè)進(jìn)位輸入端以及三個(gè)使能控制端讓時(shí)鐘、分鐘、秒鐘計(jì)數(shù)器能夠有序工作。比如,當(dāng)秒鐘計(jì)數(shù)器產(chǎn)生一個(gè)進(jìn)位輸入校時(shí)模塊后,校時(shí)模塊才通過使能輸出端令分鐘計(jì)數(shù)器工作一下,以此類推控制分鐘、時(shí)鐘之間的有序工作。元件視圖如下:源程序如下:-adjuster.vhdL

19、IBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY adjuster ISPORT(-輸入時(shí)鐘CLK:IN STD_LOGIC;-雙鍵位校時(shí)SET:IN STD_LOGIC;MODE:IN STD_LOGIC;-計(jì)數(shù)使能,接VCCEN:IN STD_LOGIC;-秒計(jì)數(shù)器進(jìn)位輸入S_ENOUT:IN STD_LOGIC;-分計(jì)數(shù)器進(jìn)位輸入M_ENOUT:IN STD_LOGIC;-輸出1HZ時(shí)鐘CLK1HZ:OUT STD_LOGI

20、C;-輸出使能S_CE:OUT STD_LOGIC;M_CE:OUT STD_LOGIC;H_CE:OUT STD_LOGIC);END adjuster;ARCHITECTURE EXAMPLE OF adjuster ISSIGNAL SEL :STD_LOGIC;SIGNAL SCE_R:STD_LOGIC;SIGNAL MCE_R:STD_LOGIC;SIGNAL HCE_R:STD_LOGIC;SIGNAL CON:INTEGER RANGE 0 TO 3 :=0;SIGNAL CLKCON1:INTEGER RANGE 0 to 5000;SIGNAL CLKCON2:INTEGE

21、R RANGE 0 to 10000;SIGNAL OUTCLK:STD_LOGIC;SIGNAL OUTCLK_TEMP:STD_LOGIC;BEGIN-變頻為1HZCLK1_PROC:PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=0 THEN IF CLKCON1=5000 THENCLKCON1=0;OUTCLK_TEMP=0;ELSECLKCON1=CLKCON1+1;OUTCLK_TEMP=1;ELSE IF;END IF;END PROCESS;CLK2_PROC:PROCESS(OUTCLK_TEMP)BEGIN IF OUTCLK_TEMPEVEN

22、T AND OUTCLK_TEMP=0 THEN IF CLKCON2=10000 THENCLKCON2=0;OUTCLK=0;ELSECLKCON2=CLKCON2+1;OUTCLK=1;END IF;END IF;END PROCESS;-模為4的計(jì)數(shù)器CNT:PROCESS(MODE,SET)BEGINIF MODEEVENT AND MODE=0 THEN IF CON=3 THENCON=0;ELSECONSEL=1;SCE_R=0;MCE_R=0;HCE_RSEL=0;SCE_R=1;MCE_R=0;HCE_RSEL=0;SCE_R=0;MCE_R=1;HCE_RSEL=0;SC

23、E_R=0;MCE_R=0;HCE_RS_CE=SCE_R;M_CE=MCE_R;H_CE=HCE_R;CLK1HZS_CE=EN;M_CE=S_ENOUT;H_CE=M_ENOUT;CLK1HZ=OUTCLK;END CASE;END PROCESS;END EXAMPLE;2、計(jì)時(shí)模塊:(1)60進(jìn)制計(jì)時(shí)模塊:利用計(jì)數(shù)器的方法設(shè)制一個(gè)60進(jìn)制計(jì)數(shù)器,并設(shè)置個(gè)進(jìn)位輸出端和個(gè)位、十位的BCD即時(shí)輸出端,其中BCD即時(shí)輸出端連接BCD譯碼模塊進(jìn)行轉(zhuǎn)換數(shù)碼管程序所需的驅(qū)動(dòng)譯碼。元件視圖如下:源程序如下:-CNT60.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.A

24、LL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY CNT60 ISPORT(-輸入1HZ時(shí)鐘CLK1HZ:IN STD_LOGIC;-計(jì)數(shù)使能EN:IN STD_LOGIC;-進(jìn)位輸出ENOUT:OUT STD_LOGIC;-BCD輸出LOW:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CNT60;ARCHITECTURE EXAMPLE OF CNT60 ISSIGNAL LOW_R:STD_LO

25、GIC_VECTOR(3 DOWNTO 0):=0000;SIGNAL HIGH_R:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;BEGIN-個(gè)位計(jì)數(shù)LOW_PROC:PROCESS(CLK1HZ,EN)BEGINIF CLK1HZEVENT AND CLK1HZ=0 THENIF EN=1 THENIF LOW_R=1001 THENLOW_R=0000;ELSELOW_R=LOW_R+0001;END IF;END IF;END IF;END PROCESS;LOW=LOW_R;-十位計(jì)數(shù)HIGH_PROC:PROCESS(CLK1HZ,EN)BEGINIF CL

26、K1HZEVENT AND CLK1HZ=0 THENIF EN=1 THENIF LOW_R=1001 THENIF HIGH_R=0101 THENHIGH_R=0000;ELSEHIGH_R=HIGH_R+0001;END IF;END IF;END IF;END IF;END PROCESS;HIGH=HIGH_R;-計(jì)數(shù)值為59時(shí),進(jìn)位輸出ENOUT=1 WHEN LOW_R=1001 AND HIGH_R=0101 ELSE 0;END EXAMPLE;(2)24進(jìn)制計(jì)數(shù)模塊:利用計(jì)數(shù)器的方法設(shè)制一個(gè)24進(jìn)制計(jì)數(shù)器,并設(shè)置、個(gè)位、十位的BCD即時(shí)輸出端,其中BCD即時(shí)輸出端連接BC

27、D譯碼模塊進(jìn)行轉(zhuǎn)換數(shù)碼管程序所需的驅(qū)動(dòng)譯碼。元件視圖如下:源程序如下:-CNT24.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY CNT24 ISPORT(-輸入1HZ時(shí)鐘CLK1HZ:IN STD_LOGIC;-計(jì)數(shù)使能EN:IN STD_LOGIC;-BCD輸出LOW:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END

28、 CNT24;ARCHITECTURE EXAMPLE OF CNT24 ISSIGNAL LOW_R:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;SIGNAL HIGH_R:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;SIGNAL CLR:STD_LOGIC:=0;BEGIN-個(gè)位計(jì)數(shù)LOW_PROC:PROCESS(CLK1HZ,EN,CLR)BEGINIF CLK1HZEVENT AND CLK1HZ=0 THENIF EN=1 THENIF LOW_R=1001 OR CLR=1 THENLOW_R=0000;ELSELOW_R=LO

29、W_R+0001;END IF;END IF;END IF;END PROCESS;LOW=LOW_R;-十位計(jì)數(shù)HIGH_PROC:PROCESS(CLK1HZ,EN,CLR)BEGINIF CLK1HZEVENT AND CLK1HZ=0 THENIF EN=1 THENIF CLR=1 THENHIGH_R=0000;ELSIF LOW_R=1001 THENHIGH_R=HIGH_R+0001;END IF;END IF;END IF;END PROCESS;HIGH=HIGH_R;-計(jì)數(shù)值為23時(shí),清零CLR=1 WHEN LOW_R=0011 AND HIGH_R=0010 ELS

30、E 0;END EXAMPLE;3、鬧鐘模塊:該數(shù)字鐘具有可設(shè)置整點(diǎn)鬧鐘功能,當(dāng)達(dá)到鬧鐘設(shè)定時(shí)間時(shí),LED燈會(huì)自動(dòng)閃爍表示警告鬧鐘時(shí)間已到,閃爍時(shí)間為一分鐘,一分鐘之后自動(dòng)停止。鬧鐘的核心思想是,從時(shí)鐘計(jì)時(shí)模塊以及分鐘計(jì)時(shí)模塊的BCD碼即時(shí)出去與鬧鐘模塊中的計(jì)數(shù)器所設(shè)的值(也就是設(shè)定的時(shí)間)進(jìn)行比較。由于該鬧鐘為整點(diǎn)鬧鐘,只能進(jìn)行整點(diǎn)警告,利用ALARM_SET按鈕進(jìn)行設(shè)定,每按一次,送給鬧鐘元件里面的計(jì)數(shù)器一個(gè)脈沖令設(shè)定的時(shí)間在原有的時(shí)間上加一小時(shí)。當(dāng)比較結(jié)果完全相同時(shí),LED輸出端輸出10HZ的脈沖到LED中令LED顯示閃爍狀態(tài),達(dá)到警告目的。元件視圖如下:源程序如下:-alarm.vhL

31、IBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY alarm ISPORT(-輸入時(shí)鐘CLK:IN STD_LOGIC;-設(shè)定鬧鐘ALARM_SET:IN STD_LOGIC;-BCD輸入 IN_HL:IN STD_LOGIC_VECTOR(3 DOWNTO 0);IN_HH:IN STD_LOGIC_VECTOR(3 DOWNTO 0);IN_ML:IN STD_LOGIC_VECTOR(3 DOWNTO 0);IN_MH:IN

32、 STD_LOGIC_VECTOR(3 DOWNTO 0);-BCD輸出LOW:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-LED輸出LED_OUT:OUT STD_LOGIC);END alarm;ARCHITECTURE EXAMPLE OF alarm ISSIGNAL clkcon1:integer range 0 to 5000;SIGNAL clkcon2:integer range 0 to 1000;SIGNAL clk50khz:std_logic;SIGNAL clk10hz

33、:std_logic;SIGNAL LOW_R:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;SIGNAL HIGH_R:STD_LOGIC_VECTOR(3 DOWNTO 0):=0000;SIGNAL LED_CON:integer range 0 to 1;SIGNAL CLR:STD_LOGIC:=0;BEGIN-變頻為10HZclkcon1_proc:process(CLK)BEGIN IF CLKEVENT AND CLK=0 THEN IF clkcon1=5000 THENclkcon1=0;clk50khz=0;ELSEclkcon1=clkcon1+

34、1;clk50khz=1;END IF;END IF;END PROCESS;clkcon2_proc:process(clk50khz)BEGIN IF clk50khzEVENT AND clk50khz=0 THEN IF clkcon2=1000 THENclkcon2=0;clk10hz=1;ELSEclkcon2=clkcon2+1;clk10hz=0;END IF;END IF;END PROCESS;-設(shè)定鬧鐘個(gè)位LOW_PROC:PROCESS(ALARM_SET,CLR)BEGINIF ALARM_SETEVENT AND ALARM_SET=0 THENIF LOW_R=

35、1001 OR CLR=1 THENLOW_R=0000;ELSELOW_R=LOW_R+0001;END IF;END IF;END PROCESS;LOW=LOW_R;-設(shè)定鬧鐘十位HIGH_PROC:PROCESS(ALARM_SET,CLR)BEGINIF ALARM_SETEVENT AND ALARM_SET=0 THENIF CLR=1 THENHIGH_R=0000;ELSIF LOW_R=1001 THENHIGH_R=HIGH_R+0001;END IF;END IF;END PROCESS;HIGH=HIGH_R;-計(jì)數(shù)值為23時(shí),清零CLR=1 WHEN LOW_R=0

36、011 AND HIGH_R=0010 ELSE 0;-響應(yīng)判定alarm_proc:PROCESS(IN_HL,IN_HH,IN_ML,IN_MH)BEGINIF LOW_R=IN_HL and HIGH_R=IN_HH THENIF IN_ML=0000 AND IN_MH=0000 THENLED_CON=0;ELSELED_CONLED_OUTLED_OUTout_dataout_dataout_dataout_dataout_dataout_dataout_dataout_dataout_dataout_dataout_data=00000000;END CASE;END PROCE

37、SS;END EXAMPLE;(2)掃頻輸出模塊:該FPGA板只有一個(gè)數(shù)碼管驅(qū)動(dòng)端而有四個(gè)數(shù)碼管,所以需要利用利用片選高速掃屏的方法進(jìn)行顯示。當(dāng)一個(gè)數(shù)碼管的亮滅頻率到達(dá)100HZ以上時(shí),由于人眼的視覺暫留功能,并不會(huì)感覺到它出現(xiàn)了亮滅的變化。在該模塊中令掃屏頻率也就是亮滅頻率為1KZH。該模塊同樣還有一個(gè)功能是切換分秒/時(shí)分/鬧鐘的顯示,通過CHG按鈕進(jìn)行。在以下程序中,利用一個(gè)模為3的計(jì)數(shù)器CHG_CON作為狀態(tài)機(jī),每按下一次CHG按鈕,CHG_CON自動(dòng)增一。當(dāng)CHG_CON=0時(shí),顯示分秒;CHG_CON=1時(shí),顯示時(shí)分;CHG_CON=2時(shí),顯示鬧鐘。為了區(qū)別鬧鐘與正常計(jì)時(shí)區(qū)別,在這里

38、鬧鐘的時(shí)鐘與分鐘之間沒有亮“點(diǎn)”間隔。元件視圖如下:源程序如下:-saoping.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY saoping IS PORT(-選擇顯示方式CHG:IN STD_LOGIC;-BCD輸入SL:IN STD_LOGIC_VECTOR(7 DOWNTO 0);SH:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ML:IN STD_LOGIC_VECTOR(7 DOWNTO

39、 0);MH:IN STD_LOGIC_VECTOR(7 DOWNTO 0);HL:IN STD_LOGIC_VECTOR(7 DOWNTO 0);HH:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ALARM_L:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ALARM_H:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-輸入時(shí)鐘CLK:IN STD_LOGIC;-輸出片選seg:out std_logic_vector(3 downto 0);-BCD輸出out_data:out std_logic_vector(7 downto 0);END saoping;ARCHITECTURE EXAMPLE OF sa

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論