![數(shù)字鐘verilog_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/332f3594-b4f7-42b6-b747-a8472eec0236/332f3594-b4f7-42b6-b747-a8472eec02361.gif)
![數(shù)字鐘verilog_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/332f3594-b4f7-42b6-b747-a8472eec0236/332f3594-b4f7-42b6-b747-a8472eec02362.gif)
![數(shù)字鐘verilog_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/332f3594-b4f7-42b6-b747-a8472eec0236/332f3594-b4f7-42b6-b747-a8472eec02363.gif)
![數(shù)字鐘verilog_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/332f3594-b4f7-42b6-b747-a8472eec0236/332f3594-b4f7-42b6-b747-a8472eec02364.gif)
![數(shù)字鐘verilog_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/332f3594-b4f7-42b6-b747-a8472eec0236/332f3594-b4f7-42b6-b747-a8472eec02365.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目 錄1 設(shè)計(jì)任務(wù)及要求12 總體設(shè)計(jì)分析13 各模塊設(shè)計(jì)23.1 數(shù)字鐘主體部分23.1.1小時(shí)計(jì)數(shù)器23.1.2 分、秒計(jì)數(shù)器33.2 分頻部分43.3 秒表模塊53.4 鬧鐘模塊53.5 時(shí)間設(shè)置模塊73.6 報(bào)時(shí)模塊73.7 控制顯示模塊83.8 頂層模塊114 總結(jié)114.1 本次作業(yè)遇到的問題114.2 建議和總結(jié)12附件13多功能數(shù)字鐘verilog HDL設(shè)計(jì)1 設(shè)計(jì)任務(wù)及要求本次大作業(yè)的要求為設(shè)計(jì)一個(gè)多功能數(shù)字鐘,其具體要求如下: 1.有基礎(chǔ)的實(shí)時(shí)數(shù)字鐘顯示功能,即時(shí)、分、秒的正常顯示模式,并且在此基礎(chǔ)上增加上,下午顯示。 2.手動(dòng)校準(zhǔn)。按動(dòng)方式鍵,將電路置于校時(shí)狀態(tài),則計(jì)時(shí)
2、電路可用手動(dòng)方式校準(zhǔn),每按一下校時(shí)鍵,時(shí)計(jì)數(shù)器加1;按動(dòng)方式鍵,將電路置于校分狀態(tài),以同樣方式手動(dòng)校分。 3.整點(diǎn)報(bào)時(shí),仿中央人民廣播電臺(tái)整點(diǎn)報(bào)時(shí)信號(hào),從59分50秒起每隔秒發(fā)出一次低音“嘟”信號(hào)(信號(hào)鳴叫持續(xù)時(shí)間,間隙時(shí)間)連續(xù)次,到達(dá)整點(diǎn)(00分00秒時(shí)),發(fā)一次高音“噠”信號(hào)(信號(hào)持續(xù)時(shí)間S)。 4.鬧時(shí)功能,按動(dòng)方式鍵,使電路工作于預(yù)置狀態(tài),此時(shí)顯示器與時(shí)鐘脫開,而與預(yù)置計(jì)數(shù)器相連,利用前面手動(dòng)校時(shí),校分方式進(jìn)行預(yù)置,預(yù)置后回到正常模式。當(dāng)計(jì)時(shí)計(jì)至預(yù)置的時(shí)間時(shí),揚(yáng)聲器發(fā)出鬧鈴信號(hào),時(shí)間為半分鐘,鬧鈴信號(hào)可以用開關(guān)“止鬧”,按下此開關(guān)后,鬧鈴聲立刻中止,正常情況下應(yīng)將此開關(guān)釋放,否則無鬧
3、時(shí)作用。5.秒表功能。按start鍵開始計(jì)秒,按stop鍵停止計(jì)秒并保持顯示數(shù)不變,直到復(fù)位信號(hào)加入。2 總體設(shè)計(jì)分析 設(shè)計(jì)的總體部分按照要求可以分為基本的數(shù)字時(shí)鐘顯示、手動(dòng)校準(zhǔn)、整點(diǎn)報(bào)時(shí)、鬧鐘功能和秒表功能5大部分。其總體設(shè)計(jì)框圖如下:秒 表鬧 鐘手 動(dòng) 校 準(zhǔn)整 點(diǎn) 報(bào) 時(shí) 數(shù)字鐘 圖1 總體設(shè)計(jì)框圖 其中整點(diǎn)報(bào)時(shí)跟鬧鐘部分要求不同頻率的聲響,所以需要加入分頻器模塊將輸入的1kHZ的分頻產(chǎn)生500HZ及1HZ的方波信號(hào),其中1HZ的信號(hào)對(duì)應(yīng)1S的周期,可以用作時(shí)鐘秒的顯示及秒表部分。3 各模塊設(shè)計(jì) 根據(jù)總體設(shè)計(jì)以及各分模塊的需要,將分立模塊分為7個(gè)部分運(yùn)用verilog HDL編程來實(shí)現(xiàn)。
4、其分別為數(shù)字鐘主體部分、手動(dòng)設(shè)置、分頻、整點(diǎn)報(bào)時(shí)、鬧鐘功能、秒表、控制顯示和頂層8個(gè)模塊。下面將對(duì)各個(gè)模塊的設(shè)計(jì)思想做一詳細(xì)的介紹。3.1 數(shù)字鐘主體部分?jǐn)?shù)字鐘主體小時(shí)計(jì)數(shù)器分計(jì)數(shù)器秒計(jì)數(shù)器24進(jìn)制計(jì)數(shù)器60進(jìn)制計(jì)數(shù)器6進(jìn)制計(jì)數(shù)器10進(jìn)制計(jì)數(shù)器<12(早上)>12(下午) 數(shù)字鐘主體部分主要由三個(gè)計(jì)數(shù)器組成,包括1個(gè)24進(jìn)制計(jì)數(shù)器,作為小時(shí)計(jì)數(shù)器,2個(gè)60進(jìn)制計(jì)數(shù)器分別作為分計(jì)數(shù)器和秒計(jì)數(shù)器。一個(gè)60進(jìn)制計(jì)數(shù)器由一個(gè)6進(jìn)制計(jì)數(shù)器和一個(gè)10進(jìn)制計(jì)數(shù)器組成,由于都是比較簡(jiǎn)單的計(jì)數(shù)器,所以在用verilog設(shè)計(jì)時(shí)作為一個(gè)整體部分進(jìn)行編程實(shí)現(xiàn)。同理小時(shí)計(jì)數(shù)器也作為整體部分來編程實(shí)現(xiàn)。設(shè)計(jì)的
5、流程框圖如下圖2所示。 圖2 數(shù)字鐘整體部分設(shè)計(jì)框圖3.1.1小時(shí)計(jì)數(shù)器 在verilog程序設(shè)計(jì)中,小時(shí)計(jì)數(shù)器為hour_counter模塊,其中hour_data0為24進(jìn)制計(jì)數(shù)器的低位,即4進(jìn)制計(jì)數(shù)器,hour_data1則為高位,2進(jìn)制計(jì)數(shù)器。編程用always語句實(shí)現(xiàn),并且用clk上升沿觸發(fā)實(shí)現(xiàn)計(jì)數(shù)。EN為使能端,高電平有效。zox為顯示早上、下午的標(biāo)志位,其中小于12點(diǎn)之前為早上,zox為0,否則zox輸出為1表示下午。其Quartus仿真波形如下圖3所示,由于verilog HDL程序顯示不便,均附在附件上,下面各模塊相同。 圖3 小時(shí)計(jì)數(shù)器仿真 從仿真圖中可以看出,當(dāng)使能信號(hào)信
6、號(hào)為高電平且始終上升沿到來時(shí)計(jì)數(shù)器開始計(jì)時(shí),hour_data0計(jì)數(shù)為01230···的計(jì)數(shù)規(guī)律,即4進(jìn)制計(jì)數(shù)器,同理hour_data1為2進(jìn)制計(jì)數(shù)器,zox信號(hào)由圖中看出當(dāng)小于12小時(shí)的時(shí)候輸出為0,大于12小時(shí)時(shí)輸出為1,與預(yù)計(jì)效果相同。3.1.2 分、秒計(jì)數(shù)器由于分、秒計(jì)數(shù)器均為60進(jìn)制計(jì)數(shù)器,所以以分計(jì)數(shù)器作為示例說明其編程思想。其中分計(jì)數(shù)器模塊在程序中為minute_counter程序段,由上面分析得分計(jì)數(shù)器由一個(gè)十進(jìn)制計(jì)數(shù)器與一個(gè)六進(jìn)制計(jì)數(shù)器組成,程序中有minute_data0表示分計(jì)數(shù)器低位即10進(jìn)制計(jì)數(shù)器,minute_data1表示分計(jì)數(shù)器的
7、高位為一個(gè)六進(jìn)制計(jì)數(shù)器(秒計(jì)數(shù)器的低位、高位分別由second_data0、second_data1表示,其余均與分計(jì)數(shù)器相同)。其它信號(hào)定義與小時(shí)計(jì)數(shù)器相同,clk為時(shí)鐘信號(hào),時(shí)鐘周期為1HZ,即1s,與小時(shí)計(jì)數(shù)器不同的是,EO為進(jìn)位信號(hào),即到60s后自動(dòng)進(jìn)位。Minute_data0、 minute_data1、second_data0、second_data1位寬均為4位reg型變量。仿真示意圖如下圖4所示。 圖4 分計(jì)數(shù)器仿真結(jié)果 由圖中可以看出,當(dāng)使能端信號(hào)端EN變?yōu)?的時(shí)候,計(jì)數(shù)器開始計(jì)時(shí),minute_data0計(jì)數(shù)規(guī)律為012345678901···
8、;當(dāng)計(jì)數(shù)到9的時(shí)候,minute_data1加1,minute_data1計(jì)數(shù)規(guī)則為01234501···當(dāng)高位minute_data1計(jì)數(shù)到5的時(shí)候,進(jìn)位信號(hào)EO變?yōu)?。秒計(jì)數(shù)器second_counter模塊與分計(jì)數(shù)器完全一樣,這里不再贅述。3.2 分頻部分分頻器的功能主要有三個(gè):一是產(chǎn)生計(jì)時(shí)用的標(biāo)準(zhǔn)秒脈沖1HZ信號(hào);二是提供仿電臺(tái)用的1kHZ高音頻信號(hào)和500HZ低音頻信號(hào);三是鬧鐘設(shè)置時(shí)用的200HZ閃爍信號(hào)和鬧鐘響鈴用的500HZ音頻信號(hào)。所用輸入信號(hào)為1kHZ的高頻信號(hào)。根據(jù)分析可知,1kHZ方波信號(hào)經(jīng)過2分頻可以得到500HZ方波,經(jīng)過5分頻得到20
9、0HZ信號(hào),最后將分頻得到的200HZ信號(hào)作為分頻1HZ的時(shí)鐘,經(jīng)過200分頻得到1HZ的信號(hào)。設(shè)計(jì)框圖如下圖5所示。2分頻5分頻1kHZ信號(hào)(clk)500HZ(f500hz)200HZ(f200hz)1HZ(f1hz)200分頻 圖5 分頻信號(hào)框圖 在程序設(shè)計(jì)的過程中,在復(fù)位信號(hào)rst為高電平時(shí)分頻器工作,輸入信號(hào)為1kHZ的高頻信號(hào),分別經(jīng)過2分頻、5分頻、200分頻得到f500HZ的500HZ信號(hào)、f200HZ的200HZ信號(hào)和f1HZ的1HZ信號(hào)。仿真結(jié)果如下圖6所示。 圖6 分頻信號(hào)結(jié)果仿真圖從仿真圖中可以看到,在rst為高電平時(shí)分頻過程開始,f500HZ、f200HZ和f1HZ也
10、與預(yù)期的輸出結(jié)果一樣。3.3 秒表模塊秒表模塊實(shí)現(xiàn)秒表功能,在實(shí)現(xiàn)的過程中,通過改變自動(dòng)工作模式下的時(shí)鐘頻率來實(shí)現(xiàn)秒表的功能。即按動(dòng)start鍵鬧鐘開始工作,再次按動(dòng)start鍵,鬧鐘便停止工作。由于秒表模塊比較簡(jiǎn)單,流程圖在此省略。根據(jù)分析,在verilog HDL實(shí)現(xiàn)過程中,clk作為時(shí)鐘正常工作時(shí)候的頻率,f500hz為秒表工作時(shí)候的頻率,仿真結(jié)果如下圖7所示。 圖7 秒表仿真模塊 由圖中可以看出,根據(jù)start高低電平的變化,時(shí)鐘在正常工作與秒表之間相互轉(zhuǎn)換。3.4 鬧鐘模塊鬧鐘模塊實(shí)現(xiàn)的是鬧鐘的設(shè)置及鬧鐘所設(shè)定的時(shí)間到之后的響鈴提示。鬧鐘模塊的設(shè)置主要思想是由控制鍵來設(shè)置數(shù)字鐘的鬧鐘
11、響的時(shí)間,經(jīng)過與當(dāng)前數(shù)字鐘實(shí)時(shí)時(shí)間的比較,來決定鬧鐘提醒的時(shí)間。設(shè)計(jì)框圖如下圖8所示。hour0hour1minute0minute1hour_set0hour_set1minute_set0minute_set1設(shè)置時(shí)間與當(dāng)前時(shí)間的比較不相等相等con_alarm01鬧鐘不響alarm=0鬧鐘響alarm=1 圖8 鬧鐘模塊設(shè)計(jì)框圖在verilog HDL實(shí)現(xiàn)的過程中,由SW1、SW2兩個(gè)調(diào)整鍵來實(shí)現(xiàn),其中SW1為移位控制鍵,即按SW1一次,將移位一次,閃爍顯示當(dāng)前設(shè)置為數(shù)字,SW2為當(dāng)前位的鬧鐘數(shù)字設(shè)置,每按SW2一次,當(dāng)前數(shù)字設(shè)置位數(shù)字增加1,每一位上數(shù)字變化范圍由當(dāng)前位循環(huán)上限決定,不
12、會(huì)超出范圍。EN為設(shè)置使能端,為1有效。Hour1、hour0、minute1和minute0分別為當(dāng)前時(shí)間每個(gè)位上顯示的數(shù)字,hour_set1、hour_set0、minute_set1和minute_set0為與當(dāng)前時(shí)間所對(duì)應(yīng)的每一位上設(shè)置的時(shí)間顯示,f200hz為鬧鐘設(shè)置過程中顯示閃爍的頻率。Con_alarm為鬧鐘響鈴的控制鍵,其值為1時(shí),表示鬧鐘已設(shè)置,并且在鬧鐘響的時(shí)候,如果設(shè)置其值為0,則鬧鐘關(guān)閉。Alarm為鬧鐘響鈴提示輸出,即設(shè)定時(shí)間到時(shí)alarm值為1,否則為0。Alarmclock_disp_select為鬧鐘設(shè)置中位選信號(hào),為4位reg型變量,其值采用獨(dú)熱編碼,為10
13、00、0100、0010和0001分別表示設(shè)置過程中hour1、hour0、minute1和minute0四個(gè)位。其仿真結(jié)果如下圖9所示。 圖9 鬧鐘模塊仿真示意圖 由于設(shè)置波形輸入的時(shí)候如果調(diào)整過多,將不容易看出仿真結(jié)果的正確與否,所以圖中輸入比較簡(jiǎn)單,以便可以更好地分析仿真結(jié)果。由圖中可以看出,經(jīng)過SW1的兩次調(diào)整,位選信號(hào)alarmclock_disp_select的值為0010,表示此時(shí)的設(shè)置位為hour_set0位,SW2鍵將其值設(shè)置為0001,其他位均為0000,然后在與當(dāng)前時(shí)鐘時(shí)間相等的情況下,并且在con_alarm值為1的時(shí)候鬧鐘響,即alarm值輸出為1,在當(dāng)前時(shí)間與鬧鐘時(shí)
14、間仍然相等的情況下,將鬧鐘控制鍵con_alarm值設(shè)置為0,鬧鐘停止,即alarm值為0。很好的完成了鬧鐘的功能。3.5 時(shí)間設(shè)置模塊 時(shí)間設(shè)置模塊實(shí)現(xiàn)的功能為通過按鍵調(diào)節(jié)可以對(duì)當(dāng)前時(shí)間進(jìn)行手動(dòng)控制。其主要是在時(shí)間設(shè)置使能端有效地情況下通過SW1和SW2兩個(gè)按鍵對(duì)數(shù)字鐘的小時(shí)和分鐘數(shù)進(jìn)行調(diào)節(jié)。Disp_drive為設(shè)置中的顯示控制,即通過SW1對(duì)位的調(diào)整,Disp_drive隨之變化。SW2為對(duì)每一位上的數(shù)字在其范圍內(nèi)進(jìn)行加1調(diào)節(jié),其調(diào)節(jié)過程與鬧鐘模塊相同。Disp_drive取值000、001、010和011分別對(duì)應(yīng)hour1、hour0、minute1和minute0的設(shè)置。Quartu
15、s下仿真結(jié)果如圖10所示。 圖10 時(shí)間設(shè)置模塊仿真效果 圖中,hour_set0、hour_set1、minute_set0和minute_set1為設(shè)置后的時(shí)間??梢钥吹?,當(dāng)前給的hour0為0010,hour1的值0001,在SW1經(jīng)過一次高電平之后,disp_drive的值變?yōu)?01,對(duì)hour0進(jìn)行設(shè)置,加1之后hour_set0變?yōu)?001,SW1再按一下,變?yōu)?010,在SW2兩次高電平之后,SW1的值變?yōu)?,此時(shí)對(duì)分的高位進(jìn)行加1設(shè)置,依此類推。3.6 報(bào)時(shí)模塊 整點(diǎn)報(bào)時(shí)模塊的主要功能為仿中央人民廣播電臺(tái)整點(diǎn)報(bào)時(shí)信號(hào),即從59分50秒起每隔秒發(fā)出一次低音“嘟”信號(hào),將其定義為5
16、00HZ的低頻信號(hào),到達(dá)整點(diǎn)(00分00秒時(shí)),發(fā)一次高音“噠”信號(hào),其響聲為高頻1kHZ信號(hào)。 由于整點(diǎn)報(bào)時(shí)程序比較簡(jiǎn)單,所以框圖省略。為了程序簡(jiǎn)化又與其他模塊有較好的兼容性,用minute、second分別表示minute1、minute0和second1,second0經(jīng)過位拼接之后的分和秒的當(dāng)前顯示時(shí)間。F1khz為到達(dá)整點(diǎn)之后的高音頻率,f500hz為59分50秒、52秒、54秒、56秒和58秒時(shí)的低音頻率,radio則為到達(dá)時(shí)間時(shí)的報(bào)時(shí)輸出。仿真圖如下圖11所示。 圖11 整點(diǎn)報(bào)時(shí)模塊仿真效果圖 從圖中可以看出,從59分50秒開始,輸出的radio開始以f500hz的頻率報(bào)時(shí),當(dāng)?shù)?/p>
17、達(dá)00分00秒時(shí),輸出信號(hào)頻率為f1khz,到達(dá)00分01秒的時(shí)候之后便變?yōu)?,符合設(shè)計(jì)要求。3.7 控制顯示模塊控制顯示模塊在整個(gè)數(shù)字鐘的設(shè)計(jì)中起著非常重要的作用。它的作用是將時(shí)間等數(shù)據(jù)用數(shù)碼管顯示的控制和數(shù)據(jù)傳輸模塊,包括數(shù)據(jù)的傳輸以及BCD碼譯碼等。通過幾個(gè)控制使能端將其不同功能時(shí)的時(shí)間在數(shù)碼管上顯示出來。本模塊中端口定義比較多,下面是其所對(duì)應(yīng)的功能。Time_EN:時(shí)間自動(dòng)模式工作使能信號(hào);Timeset_EN:時(shí)間設(shè)置使能信號(hào);Stopwatch_EN:秒表使能信號(hào);Alarmclock_EN:鬧鐘設(shè)置使能信號(hào);Radio_EN:整點(diǎn)報(bào)時(shí)使能信號(hào);Time_disp_select:時(shí)
18、間顯示位選信號(hào);Alarmclock_disp_select:鬧鐘設(shè)置的顯示位選信號(hào);Disp_select:顯示位選信號(hào)輸出;Disp_data:經(jīng)過譯碼之后顯示的數(shù)據(jù)。程序設(shè)計(jì)中,各使能端信號(hào)為1表示執(zhí)行該功能,以時(shí)間自動(dòng)工作模式使能信號(hào)有效為例說明,當(dāng)Time_EN為1時(shí),首先將時(shí)間顯示位選信號(hào)isp_select的值賦給顯示位選信號(hào)disp_select輸出,定義time_disp_select的狀態(tài)一共有6個(gè),分別為100000、010000、001000、000100、000010和000001,其在各狀態(tài)下分別依次表示將hour0、hour1、minute0、minute1、se
19、cond0和second1的值賦給data,用case語句來實(shí)現(xiàn),其實(shí)現(xiàn)語句如下:if(Time_EN = 1'b1) begin disp_select <= time_disp_select; case(time_disp_select) 6'b100000: Data <= hour1; 6'b010000: Data <= hour0; 6'b001000: Data <= minute1; 6'b000100: Data <= minute0; 6'b000010: Data <= second1;
20、6'b000001: Data <= second0; default: Data <= 4'b0; endcase在quartus下仿真圖12如下:圖12 控制顯示模塊當(dāng)前時(shí)間使能端有效時(shí)譯碼的顯示從圖中可以看出,在第一個(gè)時(shí)鐘周期內(nèi),時(shí)間顯示位選信號(hào)time_disp_select的值為000000,此時(shí)應(yīng)執(zhí)行case語句的default,Data的值為0;在第二個(gè)時(shí)鐘周期內(nèi),time_disp_select的值為000001,此時(shí)對(duì)應(yīng)其最后一種狀態(tài),將second0的值賦給Data,即Data的值為0110,從圖中看,仿真結(jié)果正確,disp_data表示的是將當(dāng)
21、前數(shù)據(jù)譯碼顯示之后七段數(shù)碼管的顯示,所以在第一個(gè)周期內(nèi)值為1111110,表示值為0,與Data所表示的數(shù)對(duì)應(yīng)。依次類推,可將Data的值全部表示出來。顯示譯碼數(shù)據(jù)段主要程序如下: case(Data) 4'b0000: disp_data<=7'b1111110; 4'b0001: disp_data<=7'b0110000; 4'b0010: disp_data<=7'b1101101; 4'b0011: disp_data<=7'b1111001; 4'b0100: disp_data<
22、=7'b0110011; 4'b0101: disp_data<=7'b1011011; 4'b0110: disp_data<=7'b1011111; 4'b0111: disp_data<=7'b1110000; 4'b1000: disp_data<=7'b1111111; 4'b1001: disp_data<=7'b1111011; default: disp_data<=7'b0; endcase 顯示譯碼程序說明了0到9十個(gè)數(shù)在7段數(shù)碼管中所對(duì)應(yīng)的值
23、,在case語句里面最重要的是一定不能忘了default,否則仿真會(huì)發(fā)生所不希望看到的結(jié)果。下圖13為鬧鐘設(shè)置使能有效時(shí)仿真結(jié)果。 圖13 控制顯示模塊當(dāng)鬧鐘設(shè)置使能信號(hào)有效時(shí)譯碼顯示從圖中可以看出,當(dāng)只有鬧鐘使能信號(hào)alarmclock_EN有效時(shí),其七段數(shù)碼管顯示結(jié)果,與數(shù)字鐘自動(dòng)工作使能端的區(qū)別為鬧鐘設(shè)置使能端有效時(shí)只需對(duì)hour0、hour1、minute0和minute1進(jìn)行設(shè)置,所以鬧鐘設(shè)置顯示位選信號(hào)alarmclock_disp_select的狀態(tài)只有4個(gè),由于其同樣需要將值賦給disp_select,為了統(tǒng)一期間,其值也設(shè)為6位,其4個(gè)狀態(tài)分別為100000、010000、0
24、01000和000100。其他與自動(dòng)工作模式相同。3.8 頂層模塊 將以上設(shè)計(jì)的各個(gè)模塊組合起來,就可以得到多功能數(shù)字鐘的整體仿真結(jié)果。其主要作用是將各個(gè)模塊銜接起來,圖14為時(shí)鐘正常工作模式下Quartus仿真結(jié)果。 圖14 整體仿真結(jié)果4 總結(jié) 4.1 本次作業(yè)遇到的問題在做本次作業(yè)中,遇到的問題主要有以下幾個(gè)方面:(1)軟件的安裝與學(xué)習(xí)。在軟件的安裝過程中,首先通過自己從網(wǎng)上下載軟件安裝,第一次安裝的時(shí)候未經(jīng)破解,導(dǎo)致安裝的軟件雖然裝上了,但是打不開,無法使用。軟件的學(xué)習(xí)過程中,首先經(jīng)過上課講解,自己從網(wǎng)上下視頻的學(xué)習(xí),運(yùn)行了幾個(gè)書上的小程序,對(duì)軟件進(jìn)行了熟悉。(2)由于Verilog
25、HDL這門語言對(duì)自己來說屬于一個(gè)從未接觸過的東西,所以學(xué)習(xí)起來比較困難。本次作業(yè)選擇的題目為多功能數(shù)字鐘,前面是資料的搜集與設(shè)計(jì)思路的理清,再有了一定的基礎(chǔ)之后,開始對(duì)整個(gè)大的模塊進(jìn)行分模塊分析設(shè)計(jì)。(3)在作業(yè)的過程中,遇到了許多的問題,首先發(fā)現(xiàn)自己對(duì)軟件的運(yùn)用上存在的一些問題,如剛開始的時(shí)候沒有生成功能網(wǎng)表,導(dǎo)致最后運(yùn)行出錯(cuò);還有沒有選功能仿真的時(shí)候,波形出現(xiàn)了一些毛刺和延時(shí)。(4)以為自己上課聽懂了阻塞與非阻塞賦值的區(qū)別,結(jié)果的程序的書寫上還是出現(xiàn)的問題,比如在秒表模塊中,用的電平觸發(fā),剛開始的時(shí)候時(shí)候用的阻塞賦值,發(fā)現(xiàn)仿真波形有延時(shí),以為是阻塞賦值的問題,將阻塞賦值改為了非阻塞賦值,延
26、時(shí)問題還是沒有解決,才發(fā)現(xiàn)進(jìn)行的是時(shí)序仿真。這是由于自己當(dāng)時(shí)還是沒有深刻的理解兩者之間的區(qū)別,才造成的誤解,給解決問題帶來了一定的困擾。(5)仿真過程中不夠細(xì)心,比如在整點(diǎn)報(bào)時(shí)模塊,波形輸入的時(shí)候,將minute與second的值設(shè)置反了,造成找了一下午的問題,radio就是不報(bào)時(shí),后來發(fā)現(xiàn)問題的時(shí)候,覺著特別不可思議,還把程序改了半天。(6)在控制顯示模塊,波形文件仿真的過程中,由于其輸入輸出接口比較多,為了看得更清楚期間,在數(shù)字鐘正常工作模式下顯示的過程中,將鬧鐘設(shè)置使能端去掉了,結(jié)果在仿真的過程中data跟disp_data就是沒有值,后來發(fā)現(xiàn)原因是在將鬧鐘使能端去掉之后,不確定鬧鐘使能
27、端是否有效。造成沒有顯示結(jié)果,后來把鬧鐘使能段加上之后并將其置為0,仿真結(jié)果正確。 作業(yè)過程中,遇到的小問題不計(jì)其數(shù),在多方努力之下,問題基本解決,這里就不一一列舉。總結(jié)出的寶貴經(jīng)驗(yàn)就是要多看書,學(xué)會(huì)自己解決問題,一般的問題在看書找資料之后基本都能解決;還有就是一定要細(xì)心,這樣可以避免很多不必要的麻煩。4.2 建議和總結(jié)首先非常感謝老師在每周末還那么辛苦的給我們上課,真的使我學(xué)到了很多的東西,在此對(duì)老師致以深深的謝意!對(duì)老師的建議就是可以在剛開始上課的時(shí)候就可以給同學(xué)布置一些小的作業(yè),然后可以讓同學(xué)慢慢接觸一下軟件,學(xué)一點(diǎn)淺顯的編程,這樣在最后寫大作業(yè)的時(shí)候就不會(huì)感覺無從下手,以便起到一個(gè)循序
28、漸進(jìn)的作用。附件 1.小時(shí)計(jì)數(shù)器模塊 module hour_counter(EN,clk,hour_data1,hour_data0,zox);input clk,EN; /時(shí)鐘與使能端output 3:0 hour_data1,hour_data0;/小時(shí)的高位和低位output zox; /上下午指示模塊reg 3:0 hour_data1,hour_data0;reg zox;always (posedge clk)begin if(EN = 1'b1) begin if(hour_data0 < 4'b0011) hour_data0 <= hour_da
29、ta0 + 4'b1; else begin zox <= 1'b0; hour_data0 <= 4'b0; if(hour_data1 < 4'b0001) hour_data1 <= hour_data1 + 4'b1; else begin hour_data1 <= 4'b0; zox <= 1'b1; end end endendendmodule2.分秒計(jì)數(shù)器模塊module minute_counter(EN,clk,minute_data1,minute_data0,EO);input
30、 clk,EN;output 3:0 minute_data1,minute_data0; 分高位、低位output EO; /進(jìn)位輸出端reg 3:0 minute_data1,minute_data0;reg EO;always (posedge clk) /上升沿觸發(fā)begin if(EN = 1'b1) /使能端為1有效 begin if(minute_data0 < 4'b1001) minute_data0 <= minute_data0 + 4'b1; else begin EO <= 1'b0; minute_data0 <
31、;= 4'b0; if(minute_data1 < 4'b0101) minute_data1 <= minute_data1 + 4'b1; else begin minute_data1 <= 4'b0; EO <= 1'b1; end end endendendmodule3. 分頻模塊module fdiv(clk,rst,f500hz,f200hz,f1hz);input clk,rst; /1KHz 輸入output f500hz,f200hz,f1hz; /分頻出500HZ、200HZ、1HZ輸出reg f500h
32、z,f200hz,f1hz;integer CNT1=0,CNT2=0; /兩個(gè)常數(shù)變量,分頻技術(shù)用always (posedge clk) /2分頻begin if(!rst) f500hz=0; else f500hz=f500hz;endalways (posedge clk) /5分頻 if (!rst) begin f200hz<=0; CNT2<=0; end else begin if(CNT2=4) begin CNT2 <= 0; f200hz <=f200hz; end else CNT2 <= CNT2+1; end always (pose
33、dge f200hz) /將200HZ信號(hào)200分頻為1HZ if (!rst) begin f1hz<=0; CNT1<=0; end else begin if(CNT1=199) begin CNT1 <= 0; f1hz <=f1hz; end else CNT1 <= CNT1+1; end endmodule4.秒表模塊module stopwatch(clk,f500hz,start,F_out);input clk,f500hz,start; /start為控制秒表信號(hào)output F_out; /輸出,秒表工作方式reg F_out; alway
34、s (start or clk or f500hz)begin case(start) 1'b0:F_out=clk; 1'b1:F_out=f500hz; default:F_out=1'b0; endcaseendendmodule5鬧鐘模塊module alarmclock(clk_200hz,EN, SW1,SW2, hour1,hour0,hour_set1,hour_set0, minute1,minute0, minute_set1,minute_set0, alarm,control_alarm, alarmclock_disp_select);inpu
35、t EN,SW1,SW2,clk_200hz; /SW1、SW2為鬧鐘設(shè)置鍵input 3:0 hour1,hour0,minute1,minute0;/顯示當(dāng)前時(shí)間input control_alarm; /鬧鐘控制鍵output alarm; /鬧鐘響鈴輸出output 3:0 alarmclock_disp_select; /鬧鐘設(shè)置位選信號(hào)output 3:0 hour_set1,hour_set0,minute_set1,minute_set0; reg 3:0 alarmclock_disp_select;reg alarm;reg 3:0 hour_set1,hour_set0;
36、 /存放設(shè)置的小時(shí)reg 3:0 minute_set1,minute_set0; /存放設(shè)置的分reg 2:0 disp_drive; /設(shè)置鬧鐘時(shí)間時(shí),數(shù)碼管顯示的動(dòng)態(tài)位選擇/鬧鐘一直工作(設(shè)置的鬧鐘時(shí)間與當(dāng)前時(shí)間比較)alwaysbegin if(hour_set1 = hour1)&&(hour_set0 = hour0) &&(minute_set1=minute1)&&(minute_set0=minute0)&&(control_alarm=1)alarm <= 1'b1; /相等,鬧鐘響 else i
37、f(control_alarm=0)alarm <= 1'b0; /不相等,輸出1 end/鬧鐘設(shè)置中,按SW1一次,將移位一次,顯示當(dāng)前設(shè)置位always (posedge SW1)begin if(EN = 1'b1)begin if(disp_drive != 3'b101) disp_drive <= disp_drive + 3'b1; else disp_drive <= 3'b000;endend/當(dāng)前位的鬧鐘數(shù)字設(shè)置,按SW2一次,數(shù)字增加1always (posedge SW2)begin case(disp_driv
38、e)3'b000: begin /000時(shí),設(shè)置小時(shí)的高位 if(hour_set1 < 4'b0010) hour_set1 <= hour_set1 + 4'b1; else hour_set1 <= 4'b0; end3'b001: begin /001時(shí),小時(shí)低位 if(hour_set1 < 4'b0010)&&(hour_set0 < 4'b1001) hour_set0 <= hour_set0 + 4'b1; else if(hour_set1=4'b00
39、10)&&(hour_set0 < 4'b0100) hour_set0 <= hour_set0 + 4'b1; else hour_set0 <= 4'b0; end3'b010: begin /010時(shí),分鐘高位 if(minute_set1 < 4'b0101) minute_set1 <= minute_set1 + 4'b1; else minute_set1 <= 4'b0; end3'b011: begin /011時(shí),分鐘低位 if(minute_set0 &l
40、t; 4'b1001) minute_set0 <= minute_set0 + 4'b1; else minute_set0 <= 4'b0; endendcaseend/閃爍顯示always (posedge clk_200hz) /設(shè)置時(shí)閃爍頻率begin case(disp_drive) 3'b000: alarmclock_disp_select <= 6'b1000;3'b001: alarmclock_disp_select <= 6'b0100;3'b010: alarmclock_disp
41、_select <= 6'b0010;3'b011: alarmclock_disp_select <= 6'b0001;default: alarmclock_disp_select <= 6'b0000; endcase endendmodule6.時(shí)間設(shè)置模塊module timeset( TimeSet_EN, SW1,SW2,disp_drive, hour1,hour0, minute1,minute0, hour_set1,hour_set0,minute_set1,minute_set0 );input TimeSet_EN;i
42、nput SW1,SW2;input 3:0 hour1,hour0;input 3:0 minute1,minute0; output 3:0 hour_set1,hour_set0;output 3:0 minute_set1,minute_set0;output 2:0 disp_drive;reg 3:0 hour_set1,hour_set0;reg 3:0 minute_set1,minute_set0;reg 2:0 disp_drive;/初始化initialbegin hour_set1 <= hour1; hour_set0 <= hour0; minute_s
43、et1 <= minute1; minute_set0 <= minute0;endalways (posedge SW1) /手動(dòng)設(shè)置使能begin if(TimeSet_EN = 1'b1) begin if(disp_drive < 3'b101) disp_drive <= disp_drive + 3'b1; else disp_drive <= 3'b0;endendalways (posedge SW2)begin case(disp_drive) 3'b000: begin /小時(shí)的高位 if(hour_se
44、t1 < 4'b0010) hour_set1 <= hour_set1 + 4'b1; else hour_set1 <= 4'b0; end 3'b001: begin /小時(shí)的低位 if(hour_set0 < 4'b1001) hour_set0 <= hour_set0 + 4'b1; else hour_set0 <= 4'b0; end 3'b010: begin /分的高位 if(minute_set1 < 4'b0101) minute_set1 <= mi
45、nute_set1 + 4'b1; else minute_set1 <= 4'b0; end 3'b011: begin /分的低位 if(minute_set0 < 4'b1001) minute_set0 <= minute_set0 + 4'b1; else minute_set0 <= 4'b0; end default:begin end endcaseendendmodule7.報(bào)時(shí)模塊Module Radio(alarm_radio,minute1,minute0,second1,second0,minut
46、e,second, f1khz,f500hz); input f1khz,f500hz; input3:0minute1,minute0,second1,second0; input7:0minute,second; output alarm_radio; /拼接之后時(shí)間 reg alarm_radio; /報(bào)時(shí)輸出信號(hào) always(minute1 or minute0 or second1 or second0) begin reg 7:0 minute,second; minute7:0=minute13:0,minute03:0; /分拼接 second7:0=second13:0,s
47、econd03:0; /秒拼接 end always(minute or second) if(minute=8'h59) /59分鐘時(shí) case(second) /秒為50、52、54、56、58低音報(bào)時(shí) 8'h50, 8'h52, 8'h54, 8'h56, 8'h58:alarm_radio<=f500hz; default:alarm_radio<=1'b0; endcase else if(minute=8'h00&&second=8'h00) /00分00秒高音報(bào)時(shí) alarm_radio<=f1khz; else alarm_radio<=1'b0;endmodule8.控制顯示模塊module disp_data_mux(Time_EN,TimeSet_EN,Stopwatch_EN, time_disp_select,Alarmclock_EN, alarmclock_disp_select, hour1,hour0,minute1,minute0,second1,second0, disp_select,disp_data,Data);input Time_EN,TimeSet_EN,Stopwatch_EN;i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 再生橡膠的再生工藝對(duì)環(huán)境影響評(píng)估考核試卷
- 2025-2030年數(shù)學(xué)題目解析器行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年即食魷魚絲企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 二零二五教育培訓(xùn)機(jī)構(gòu)股份合作合同樣本4篇
- 2025-2030年地震波傳播模擬軟件企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 聲學(xué)基礎(chǔ)與音響設(shè)備設(shè)計(jì)考核試卷
- 2025-2030年數(shù)字化酒店管理系統(tǒng)企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 2025-2030年手術(shù)室廢物處理設(shè)備行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 城際鐵路旅客運(yùn)輸與鄉(xiāng)村振興戰(zhàn)略考核試卷
- 原油加工工藝的模擬與優(yōu)化軟件考核試卷
- 機(jī)器狗:技術(shù)成熟性能優(yōu)越場(chǎng)景剛需放量在即2025
- 2025年村民代表會(huì)議講話稿(3篇)
- (一模)烏魯木齊地區(qū)2025年高三年級(jí)第一次質(zhì)量語文試卷(含答案)
- 2025開工大吉蛇年大吉開門紅模板
- 人教版小學(xué)英語單詞表(按首字母排列)
- GB/T 45006-2024風(fēng)電葉片用纖維增強(qiáng)復(fù)合材料拉擠板材
- 鍋爐、壓力容器制造質(zhì)量手冊(cè)含程序文件-符合TSG07-2019《許可規(guī)則》
- 邏輯思維訓(xùn)練500題(帶答案)
- 炎癥性腸病共識(shí)2024
- 《單片機(jī)應(yīng)用技術(shù)》課件第1章
- 《中等強(qiáng)國(guó)視域下韓國(guó)的“新南方政策”研究》
評(píng)論
0/150
提交評(píng)論