基于VHDL的FPGA數(shù)字鐘設計_第1頁
基于VHDL的FPGA數(shù)字鐘設計_第2頁
基于VHDL的FPGA數(shù)字鐘設計_第3頁
基于VHDL的FPGA數(shù)字鐘設計_第4頁
基于VHDL的FPGA數(shù)字鐘設計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

可編程數(shù)字系統(tǒng)設計課程設計實驗報告實驗名稱:基于VHDL的數(shù)字鐘設計_所屬課程:可編程數(shù)字系統(tǒng)設計《可編程數(shù)字系統(tǒng)》課程設計一、課程設計目的:熟悉EDA工具;掌握用VHDL語言進行數(shù)字系統(tǒng)設計的根本方法和過程。二、設計任務:設計一數(shù)字鐘,用數(shù)碼管顯示根本功能要求:〔1〕可以分屏顯示時、分、秒,可用數(shù)碼管的小數(shù)點“.〞代替時、分、秒的分隔符“:〞,分屏顯示是指由于數(shù)碼管只有4個,不能同時顯示時、分、秒,但可以只顯示時、分,或只顯示分、秒,通過按鍵來切換這兩種顯示方式。〔2〕可設置時鐘的開始時間。設置時,相應的數(shù)碼管要閃爍,指示當前設置的設置〔內(nèi)容〕。〔3〕具有鬧鈴功能,可以設定鬧鈴時間。鬧鈴時間到,LED閃爍進行指示。三、設計原理:數(shù)字鐘的邏輯框圖如圖1所示。它由校時局部、鬧鐘局部、計時局部、顯示局部組成。振蕩器產(chǎn)生穩(wěn)定的高頻脈沖信號,作為數(shù)字鐘的時間基準,然后經(jīng)過分頻器輸出標準秒脈沖。秒鐘計數(shù)器滿60后向分計數(shù)器進位,分鐘計數(shù)器滿60后向小時計數(shù)器進位,時鐘計數(shù)器按照“24歸0〞規(guī)律計數(shù)。計數(shù)器的輸出分別經(jīng)譯碼器送顯示。當計時出現(xiàn)誤差時或者到達另外一個時區(qū)時,可以用校時局部校時、校分、校秒。需要是用鬧鐘時,可以利用鬧鐘局部進行定時。四、系統(tǒng)分析:根據(jù)數(shù)字鐘的功能,我們可以將它的系統(tǒng)電路設方案分為四個局部:校時局部、鬧鐘局部、計時局部和顯示局部。其中計時局部又劃分為秒鐘計時模塊、分鐘計時模塊、時鐘計時模塊,顯示局部又劃分為BCD譯碼模塊和掃屏輸出模塊。校時模塊校時模塊秒鐘計時模塊分鐘計時模塊時鐘計時模塊譯碼模塊掃屏輸出鬧鐘模塊LED燈圖1數(shù)字鐘的頂層實體描述如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYdigitalclockIS PORT( --輸入時鐘 CLK:INSTD_LOGIC; --設定鬧鐘 ALARM_SET:INSTD_LOGIC; --雙鍵位校時 SET:INSTD_LOGIC; MODE:INSTD_LOGIC; --選擇顯示方式 CHG:INSTD_LOGIC; --八段譯碼輸出 out_data:OUTSTD_LOGIC_VECTOR(7DOWNTO0); --輸出片選 seg_out:OUTSTD_LOGIC_VECTOR(3DOWNTO0); --LED輸出ED_OUT:OUTSTD_LOGIC );ENDdigitalclock;ARCHITECTUREEXAMPLEOFdigitalclockIS--元件例化COMPONENTadjuster PORT( --輸入時鐘 CLK:INSTD_LOGIC; --雙鍵位校時 SET:INSTD_LOGIC; MODE:INSTD_LOGIC; --計數(shù)使能,接VCC EN:INSTD_LOGIC; --秒計數(shù)器進位輸入 S_ENOUT:INSTD_LOGIC; --分計數(shù)器進位輸入 M_ENOUT:INSTD_LOGIC; --輸出1HZ時鐘 CLK1HZ:OUTSTD_LOGIC; --輸出使能 S_CE:OUTSTD_LOGIC; M_CE:OUTSTD_LOGIC; H_CE:OUTSTD_LOGIC );ENDCOMPONENT;COMPONENTCNT60 PORT( --輸入1HZ時鐘 CLK1HZ:INSTD_LOGIC; --計數(shù)使能 EN:INSTD_LOGIC; --進位輸出 ENOUT:OUTSTD_LOGIC; --BCD輸出 LOW:OUTSTD_LOGIC_VECTOR(3DOWNTO0); HIGH:OUTSTD_LOGIC_VECTOR(3DOWNTO0) );ENDCOMPONENT;COMPONENTCNT24ORT( --輸入1HZ時鐘 CLK1HZ:INSTD_LOGIC; --計數(shù)使能 EN:INSTD_LOGIC; --BCD輸出 LOW:OUTSTD_LOGIC_VECTOR(3DOWNTO0); HIGH:OUTSTD_LOGIC_VECTOR(3DOWNTO0) );ENDCOMPONENT;COMPONENTdisplay PORT( --BCD輸入 in_data:INSTD_LOGIC_VECTOR(3DOWNTO0); --八段譯碼輸出 out_data:OUTSTD_LOGIC_VECTOR(7DOWNTO0) );ENDCOMPONENT;COMPONENTsaoping PORT( --選擇顯示方式 CHG:INSTD_LOGIC; --BCD輸入 SL:INSTD_LOGIC_VECTOR(7DOWNTO0); SH:INSTD_LOGIC_VECTOR(7DOWNTO0); ML:INSTD_LOGIC_VECTOR(7DOWNTO0); MH:INSTD_LOGIC_VECTOR(7DOWNTO0); HL:INSTD_LOGIC_VECTOR(7DOWNTO0); HH:INSTD_LOGIC_VECTOR(7DOWNTO0); ALARM_L:INSTD_LOGIC_VECTOR(7DOWNTO0); ALARM_H:INSTD_LOGIC_VECTOR(7DOWNTO0); --輸入時鐘 CLK:INSTD_LOGIC; --輸出片選 seg:outstd_logic_vector(3downto0); --BCD輸出 out_data:outstd_logic_vector(7downto0) );ENDCOMPONENT;COMPONENT alarm PORT( --輸入時鐘 CLK:INSTD_LOGIC; --設定鬧鐘 ALARM_SET:INSTD_LOGIC; --BCD輸入 IN_HL:INSTD_LOGIC_VECTOR(3DOWNTO0); IN_HH:INSTD_LOGIC_VECTOR(3DOWNTO0); IN_ML:INSTD_LOGIC_VECTOR(3DOWNTO0); IN_MH:INSTD_LOGIC_VECTOR(3DOWNTO0); --BCD輸出 LOW:OUTSTD_LOGIC_VECTOR(3DOWNTO0); HIGH:OUTSTD_LOGIC_VECTOR(3DOWNTO0); --LED輸出 LED_OUT:OUTSTD_LOGIC );ENDCOMPONENT;--常數(shù)說明CONSTANTVCC:STD_LOGIC:='1';--信號說明SIGNALVCC_CON:STD_LOGIC;SIGNALS_ENOUT:STD_LOGIC;SIGNALM_ENOUT:STD_LOGIC;SIGNALCLK1HZ:STD_LOGIC;--計數(shù)使能SIGNALS_CE:STD_LOGIC;SIGNALM_CE:STD_LOGIC;SIGNALH_CE:STD_LOGIC;--BCD碼SIGNALSL:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALSH:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALML:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALMH:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALHL:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALHH:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALALARM_LOW:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALALARM_HIGH:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALSL_OUT:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALSH_OUT:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALML_OUT:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALMH_OUT:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALHL_OUT:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALHH_OUT:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALALARM_L_OUT:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALALARM_H_OUT:STD_LOGIC_VECTOR(7DOWNTO0);BEGIN--元件聲明ADJUST_CONTROL:adjusterPORTMAP( --輸入時鐘 CLK=>CLK, --雙鍵位校時 SET=>SET, MODE=>MODE, --計數(shù)使能,接VCC EN=>VCC_CON, --秒計數(shù)器進位輸入 S_ENOUT=>S_ENOUT, --分計數(shù)器進位輸入 M_ENOUT=>M_ENOUT, --輸出信號 CLK1HZ=>CLK1HZ, --輸出使能 S_CE=>S_CE, M_CE=>M_CE, H_CE=>H_CE );VCC_CON<=VCC;S_CONTROL:CNT60PORTMAP( --輸入1HZ時鐘 CLK1HZ=>CLK1HZ, --計數(shù)使能,接VCC EN=>S_CE, --進位輸出 ENOUT=>S_ENOUT, --BCD輸出 LOW=>SL, HIGH=>SH );M_CONTROL:CNT60PORTMAP( --輸入1HZ時鐘 CLK1HZ=>CLK1HZ, --計數(shù)使能 EN=>M_CE, --進位輸出 ENOUT=>M_ENOUT, --BCD輸出 LOW=>ML, HIGH=>MH );H_CONTROL:CNT24PORTMAP( --輸入1HZ時鐘 CLK1HZ=>CLK1HZ, --計數(shù)使能 EN=>H_CE, --BCD輸出 LOW=>HL, HIGH=>HH );ALARM_CLOCK:alarmPORTMAP( --輸入時鐘 CLK=>CLK, --設定鬧鐘 ALARM_SET=>ALARM_SET, --BCD輸入 IN_HL=>HL, IN_HH=>HH, IN_ML=>ML, IN_MH=>MH, --BCD輸出 LOW=>ALARM_LOW, HIGH=>ALARM_HIGH, --LED輸出 LED_OUT=>LED_OUT );SL_DIS:displayPORTMAP( --BCD輸入 in_data=>SL, --八段譯碼輸出 out_data=>SL_OUT );SH_DIS:displayPORTMAP( --BCD輸入 in_data=>SH, --八段譯碼輸出 out_data=>SH_OUT );ML_DIS:displayPORTMAP( --BCD輸入 in_data=>ML, --八段譯碼輸出 out_data=>ML_OUT );MH_DIS:displayPORTMAP( --BCD輸入 in_data=>MH, --八段譯碼輸出 out_data=>MH_OUT );HL_DIS:displayPORTMAP( --BCD輸入 in_data=>HL, --八段譯碼輸出 out_data=>HL_OUT );HH_DIS:displayPORTMAP( --BCD輸入 in_data=>HH, --八段譯碼輸出 out_data=>HH_OUT );ALARM_L_DIS:displayPORTMAP( --BCD輸入 in_data=>ALARM_LOW, --八段譯碼輸出 out_data=>ALARM_L_OUT );ALARM_H_DIS:displayPORTMAP( --BCD輸入 in_data=>ALARM_HIGH, --八段譯碼輸出 out_data=>ALARM_H_OUT );SAOPINGQI:saopingPORTMAP( --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, --輸入時鐘 CLK=>CLK, --輸出片選 seg=>seg_out, --BCD輸出 out_data=>out_data );ENDEXAMPLE; 仿真結(jié)果如下:該頂層文件原理圖如下:系統(tǒng)實驗實驗結(jié)果如下:五、程序設計:1、校時模塊:采用的是雙鍵校時法,MODE和SET,其中MODE選擇需要調(diào)整的局部:時鐘、分鐘、秒鐘,而SET那么作為調(diào)整脈沖。校時模塊的核心思想是利用一個計數(shù)器CON來作為狀態(tài)機,CON=0時為正常工作狀態(tài),CON=1時為調(diào)整秒鐘狀態(tài),CON=2時為調(diào)整分鐘狀態(tài),CON=3時為調(diào)整時鐘狀態(tài)。調(diào)整的時候,利用SET代替CLK1HZ作為計數(shù)器輸入脈沖,相當于按一次SET那么被調(diào)整的計數(shù)器中的當前值+1,由此獲得一個數(shù)字鐘的時間設定效果。校時模塊同時還具有控制時鐘、分鐘、秒鐘計數(shù)器工作的功能,通過兩個進位輸入端以及三個使能控制端讓時鐘、分鐘、秒鐘計數(shù)器能夠有序工作。比方,當秒鐘計數(shù)器產(chǎn)生一個進位輸入校時模塊后,校時模塊才通過使能輸出端令分鐘計數(shù)器工作一下,以此類推控制分鐘、時鐘之間的有序工作。元件視圖如下:源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYadjusterIS PORT( --輸入時鐘 CLK:INSTD_LOGIC; --雙鍵位校時 SET:INSTD_LOGIC; MODE:INSTD_LOGIC; --計數(shù)使能,接VCC EN:INSTD_LOGIC; --秒計數(shù)器進位輸入 S_ENOUT:INSTD_LOGIC; --分計數(shù)器進位輸入 M_ENOUT:INSTD_LOGIC; --輸出1HZ時鐘 CLK1HZ:OUTSTD_LOGIC; --輸出使能 S_CE:OUTSTD_LOGIC; M_CE:OUTSTD_LOGIC; H_CE:OUTSTD_LOGIC );ENDadjuster;ARCHITECTUREEXAMPLEOFadjusterISSIGNALSEL:STD_LOGIC;SIGNALSCE_R:STD_LOGIC;SIGNALMCE_R:STD_LOGIC;SIGNALHCE_R:STD_LOGIC;SIGNALCON:INTEGERSIGNALCLKCON1:INTEGERSIGNALCLKCON2:INTEGERSIGNALOUTCLK:STD_LOGIC;SIGNALOUTCLK_TEMP:STD_LOGIC;BEGIN--變頻為1HZCLK1_PROC:PROCESS(CLK) BEGIN IFCLK'EVENTANDCLK='0'THEN IFCLKCON1=5000THEN CLKCON1<=0; OUTCLK_TEMP<='0';ELSE CLKCON1<=CLKCON1+1; OUTCLK_TEMP<='1';ELSEIF;ENDIF;ENDPROCESS;CLK2_PROC:PROCESS(OUTCLK_TEMP)BEGINIFOUTCLK_TEMP'EVENTANDOUTCLK_TEMP='0'THENIFCLKCON2=10000THEN CLKCON2<=0; OUTCLK<='0';ELSE CLKCON2<=CLKCON2+1; OUTCLK<='1';ENDIF;ENDIF;ENDPROCESS;-模為4的計數(shù)器CNT:PROCESS(MODE,SET)BEGINIFMODE'EVENTANDMODE='0'THENIFCON=3THENCON<=0;ELSECON<=CON+1;ENDIF;ENDIF;ENDPROCESS;--四個調(diào)整狀態(tài)CON_PRO:PROCESS(CON)BEGIN CASECONISWHEN0=>SEL<='1'; SCE_R<='0'; MCE_R<='0'; HCE_R<='0';WHEN1=> SEL<='0'; SCE_R<='1'; MCE_R<='0'; HCE_R<='0'; WHEN2=> SEL<='0'; SCE_R<='0'; MCE_R<='1'; HCE_R<='0'; WHEN3=> SEL<='0'; SCE_R<='0'; MCE_R<='0'; HCE_R<='1';ENDCASE;ENDPROCESS;SEL_PRO:PROCESS(SEL)BEGIN CASESELIS WHEN'0'=> S_CE<=SCE_R; M_CE<=MCE_R; H_CE<=HCE_R; CLK1HZ<=SET; WHEN'1'=> S_CE<=EN; M_CE<=S_ENOUT; H_CE<=M_ENOUT; CLK1HZ<=OUTCLK; ENDCASE;ENDPROCESS;ENDEXAMPLE;2、計時模塊:(1) 60進制計時模塊:利用計數(shù)器的方法設制一個60進制計數(shù)器,并設置個進位輸出端和個位、十位的BCD即時輸出端,其中BCD即時輸出端連接BCD譯碼模塊進行轉(zhuǎn)換數(shù)碼管程序所需的驅(qū)動譯碼。元件視圖如下:源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYCNT60IS PORT( --輸入1HZ時鐘 CLK1HZ:INSTD_LOGIC; --計數(shù)使能 EN:INSTD_LOGIC; --進位輸出 ENOUT:OUTSTD_LOGIC; --BCD輸出 LOW:OUTSTD_LOGIC_VECTOR(3DOWNTO0); HIGH:OUTSTD_LOGIC_VECTOR(3DOWNTO0) );ENDCNT60;ARCHITECTUREEXAMPLEOFCNT60ISSIGNALLOW_R:STD_LOGIC_VECTOR(3DOWNTO0):="0000";SIGNALHIGH_R:STD_LOGIC_VECTOR(3DOWNTO0):="0000";BEGIN--個位計數(shù)LOW_PROC:PROCESS(CLK1HZ,EN)BEGIN IFCLK1HZ'EVENTANDCLK1HZ='0'THEN IFEN='1'THEN IFLOW_R="1001"THEN LOW_R<="0000"; ELSE LOW_R<=LOW_R+"0001"; ENDIF; ENDIF; ENDIF;ENDPROCESS;LOW<=LOW_R;--十位計數(shù)HIGH_PROC:PROCESS(CLK1HZ,EN)BEGIN IFCLK1HZ'EVENTANDCLK1HZ='0'THEN IFEN='1'THEN IFLOW_R="1001"THEN IFHIGH_R="0101"THEN HIGH_R<="0000"; ELSE HIGH_R<=HIGH_R+"0001"; ENDIF; ENDIF; ENDIF; ENDIF;ENDPROCESS;HIGH<=HIGH_R;--計數(shù)值為59時,進位輸出ENOUT<='1'WHENLOW_R="1001"ANDHIGH_R="0101"ELSE'0';ENDEXAMPLE;〔2〕24進制計數(shù)模塊:利用計數(shù)器的方法設制一個24進制計數(shù)器,并設置、個位、十位的BCD即時輸出端,其中BCD即時輸出端連接BCD譯碼模塊進行轉(zhuǎn)換數(shù)碼管程序所需的驅(qū)動譯碼。元件視圖如下:源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYCNT24IS PORT( --輸入1HZ時鐘 CLK1HZ:INSTD_LOGIC; --計數(shù)使能 EN:INSTD_LOGIC; --BCD輸出 LOW:OUTSTD_LOGIC_VECTOR(3DOWNTO0); HIGH:OUTSTD_LOGIC_VECTOR(3DOWNTO0) );ENDCNT24;ARCHITECTUREEXAMPLEOFCNT24ISSIGNALLOW_R:STD_LOGIC_VECTOR(3DOWNTO0):="0000";SIGNALHIGH_R:STD_LOGIC_VECTOR(3DOWNTO0):="0000";SIGNALCLR:STD_LOGIC:='0';BEGIN--個位計數(shù)LOW_PROC:PROCESS(CLK1HZ,EN,CLR)BEGIN IFCLK1HZ'EVENTANDCLK1HZ='0'THEN IFEN='1'THEN IFLOW_R="1001"ORCLR='1'THEN LOW_R<="0000"; ELSE LOW_R<=LOW_R+"0001"; ENDIF; ENDIF; ENDIF;ENDPROCESS;LOW<=LOW_R;--十位計數(shù)HIGH_PROC:PROCESS(CLK1HZ,EN,CLR)BEGIN IFCLK1HZ'EVENTANDCLK1HZ='0'THEN IFEN='1'THEN IFCLR='1'THEN HIGH_R<="0000"; ELSIFLOW_R="1001"THEN HIGH_R<=HIGH_R+"0001"; ENDIF; ENDIF; ENDIF;ENDPROCESS;HIGH<=HIGH_R;--計數(shù)值為23時,清零CLR<='1'WHENLOW_R="0011"ANDHIGH_R="0010"ELSE'0';ENDEXAMPLE;3、鬧鐘模塊:該數(shù)字鐘具有可設置整點鬧鐘功能,當?shù)竭_鬧鐘設定時間時,LED燈會自動閃爍表示警告鬧鐘時間已到,閃爍時間為一分鐘,一分鐘之后自動停止。鬧鐘的核心思想是,從時鐘計時模塊以及分鐘計時模塊的BCD碼即時出去與鬧鐘模塊中的計數(shù)器所設的值〔也就是設定的時間〕進行比擬。由于該鬧鐘為整點鬧鐘,只能進行整點警告,利用ALARM_SET按鈕進行設定,每按一次,送給鬧鐘元件里面的計數(shù)器一個脈沖令設定的時間在原有的時間上加一小時。當比擬結(jié)果完全相同時,LED輸出端輸出10HZ的脈沖到LED中令LED顯示閃爍狀態(tài),到達警告目的。元件視圖如下:源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYalarmIS PORT( --輸入時鐘 CLK:INSTD_LOGIC; --設定鬧鐘 ALARM_SET:INSTD_LOGIC; --BCD輸入 IN_HL:INSTD_LOGIC_VECTOR(3DOWNTO0); IN_HH:INSTD_LOGIC_VECTOR(3DOWNTO0); IN_ML:INSTD_LOGIC_VECTOR(3DOWNTO0); IN_MH:INSTD_LOGIC_VECTOR(3DOWNTO0); --BCD輸出 LOW:OUTSTD_LOGIC_VECTOR(3DOWNTO0); HIGH:OUTSTD_LOGIC_VECTOR(3DOWNTO0); --LED輸出 LED_OUT:OUTSTD_LOGIC );ENDalarm;ARCHITECTUREEXAMPLEOFalarmISSIGNALclkcon1:integerrange0to5000;SIGNALclkcon2:integerrange0to1000;SIGNALclk50khz:std_logic;SIGNALclk10hz:std_logic;SIGNALLOW_R:STD_LOGIC_VECTOR(3DOWNTO0):="0000";SIGNALHIGH_R:STD_LOGIC_VECTOR(3DOWNTO0):="0000";SIGNALLED_CON:integerrange0to1;SIGNALCLR:STD_LOGIC:='0';BEGIN--變頻為10HZclkcon1_proc:process(CLK) BEGIN IFCLK'EVENTANDCLK='0'THEN IFclkcon1=5000THEN clkcon1<=0; clk50khz<='0';ELSE clkcon1<=clkcon1+1; clk50khz<='1';ENDIF;ENDIF;ENDPROCESS;clkcon2_proc:process(clk50khz) BEGIN IFclk50khz'EVENTANDclk50khz='0'THEN IFclkcon2=1000THEN clkcon2<=0; clk10hz<='1';ELSE clkcon2<=clkcon2+1; clk10hz<='0';ENDIF;ENDIF;ENDPROCESS;--設定鬧鐘個位LOW_PROC:PROCESS(ALARM_SET,CLR)BEGIN IFALARM_SET'EVENTANDALARM_SET='0'THEN IFLOW_R="1001"ORCLR='1'THEN LOW_R<="0000"; ELSE LOW_R<=LOW_R+"0001"; ENDIF; ENDIF;ENDPROCESS;LOW<=LOW_R;--設定鬧鐘十位HIGH_PROC:PROCESS(ALARM_SET,CLR)BEGIN IFALARM_SET'EVENTANDALARM_SET='0'THEN IFCLR='1'THEN HIGH_R<="0000"; ELSIFLOW_R="1001"THEN HIGH_R<=HIGH_R+"0001"; ENDIF; ENDIF;ENDPROCESS;HIGH<=HIGH_R;--計數(shù)值為23時,清零CLR<='1'WHENLOW_R="0011"ANDHIGH_R="0010"ELSE'0';--響應判定alarm_proc:PROCESS(IN_HL,IN_HH,IN_ML,IN_MH)BEGIN IFLOW_R=IN_HLandHIGH_R=IN_HHTHEN IFIN_ML="0000"ANDIN_MH="0000"THEN LED_CON<=0; ELSE LED_CON<=1; ENDIF; ENDIF;ENDPROCESS;--LED輸出LED_proc:PROCESS(LED_CON)BEGIN CASELED_CONIS WHEN0=>LED_OUT<=clk10hz; WHEN1=>LED_OUT<='0'; ENDCASE;ENDPROCESS;ENDEXAMPLE; 4、顯示模塊〔1〕BCD譯碼模塊:利用共陽端數(shù)碼管的性質(zhì)以及其在顯示“0-9〞過程中的驅(qū)動程序可以獲得該BCD譯碼模塊。元件視圖如下:源程序為:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYdisplayISPORT(--BCD輸入 in_data:INSTD_LOGIC_VECTOR(3DOWNTO0); --八段譯碼輸出 out_data:OUTSTD_LOGIC_VECTOR(7DOWNTO0) );ENDdisplay;ARCHITECTUREEXAMPLEOFdisplayISBEGINPROCESS(in_data) BEGIN CASEin_dataIS WHEN"0000"=>out_data<="11000000"; WHEN"0001"=>out_data<="11111001"; WHEN"0010"=>out_data<="10100100"; WHEN"0011"=>out_data<="10110000"; WHEN"0100"=>out_data<="10011001"; WHEN"0101"=>out_data<="10010010"; WHEN"0110"=>out_data<="10000010"; WHEN"0111"=>out_data<="11111000"; WHEN"1000"=>out_data<="10000000"; WHEN"1001"=>out_data<="10010000"; WHENOTHERS=> out_data<="00000000"; ENDCASE; ENDPROCESS;ENDEXAMPLE;〔2〕掃頻輸出模塊:該FPGA板只有一個數(shù)碼管驅(qū)動端而有四個數(shù)碼管,所以需要利用利用片選高速掃屏的方法進行顯示。當一個數(shù)碼管的亮滅頻率到達100HZ以上時,由于人眼的視覺暫留功能,并不會感覺到它出現(xiàn)了亮滅的變化。在該模塊中令掃屏頻率也就是亮滅頻率為1KZH。該模塊同樣還有一個功能是切換分秒/時分/鬧鐘的顯示,通過CHG按鈕進行。在以下程序中,利用一個模為3的計數(shù)器CHG_CON作為狀態(tài)機,每按下一次CHG按鈕,CHG_CON自動增一。當CHG_CON=0時,顯示分秒;CHG_CON=1時,顯示時分;CHG_CON=2時,顯示鬧鐘。為了區(qū)別鬧鐘與正常計時區(qū)別,在這里鬧鐘的時鐘與分鐘之間沒有亮“點〞間隔。元件視圖如下:源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYsaopingISPORT( --選擇顯示方式 CHG:INSTD_LOGIC; --BCD輸入 SL:INSTD_LOGIC_VECTOR(7DOWNTO0); SH:INSTD_LOGIC_VECTOR(7DOWNTO0); ML:INSTD_LOGIC_VECTOR(7DOWNTO0); MH:INSTD_LOGIC_VECTOR(7DOWNTO0); HL:INSTD_LOGIC_VECTOR(7DOWNTO0); HH:INSTD_LOGIC_VECTOR(7DOWNTO0); ALARM_L:INSTD_LOGIC_VECTOR(7DOWNTO0); ALARM_H:INSTD_LOGIC_VECTOR(7DOWNTO0); --輸入時鐘 CLK:INSTD_LOGIC; --輸出片選 seg:outstd_logic_vector(3downto0); --BCD輸出 out_data:outstd_logic_vector(7downto0) );ENDsaoping;ARCHITECTUREEXAMPLEOFsaopingISSIGNALsaoping_con:INTEGERSIGNALclkcon:INTEGERSIGNALclk1khz:std_logic;SIGNALCHG_CONINTEGERRANGE0to2;BEGIN--變頻為1KHZclk_proc:process(CLK) BEGIN IFCLK'EVENTANDCLK='0'THEN IFclkcon=50000THEN cl

溫馨提示

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

評論

0/150

提交評論