數字鐘verilog_第1頁
數字鐘verilog_第2頁
數字鐘verilog_第3頁
數字鐘verilog_第4頁
數字鐘verilog_第5頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、目 錄1 設計任務及要求12 總體設計分析13 各模塊設計23.1 數字鐘主體部分23.1.1小時計數器23.1.2 分、秒計數器33.2 分頻部分43.3 秒表模塊53.4 鬧鐘模塊53.5 時間設置模塊73.6 報時模塊73.7 控制顯示模塊83.8 頂層模塊114 總結114.1 本次作業遇到的問題114.2 建議和總結12附件13多功能數字鐘verilog HDL設計1 設計任務及要求本次大作業的要求為設計一個多功能數字鐘,其具體要求如下: 1.有基礎的實時數字鐘顯示功能,即時、分、秒的正常顯示模式,并且在此基礎上增加上,下午顯示。 2.手動校準。按動方式鍵,將電路置于校時狀態,則計時

2、電路可用手動方式校準,每按一下校時鍵,時計數器加1;按動方式鍵,將電路置于校分狀態,以同樣方式手動校分。 3.整點報時,仿中央人民廣播電臺整點報時信號,從59分50秒起每隔秒發出一次低音“嘟”信號(信號鳴叫持續時間,間隙時間)連續次,到達整點(00分00秒時),發一次高音“噠”信號(信號持續時間S)。 4.鬧時功能,按動方式鍵,使電路工作于預置狀態,此時顯示器與時鐘脫開,而與預置計數器相連,利用前面手動校時,校分方式進行預置,預置后回到正常模式。當計時計至預置的時間時,揚聲器發出鬧鈴信號,時間為半分鐘,鬧鈴信號可以用開關“止鬧”,按下此開關后,鬧鈴聲立刻中止,正常情況下應將此開關釋放,否則無鬧

3、時作用。5.秒表功能。按start鍵開始計秒,按stop鍵停止計秒并保持顯示數不變,直到復位信號加入。2 總體設計分析 設計的總體部分按照要求可以分為基本的數字時鐘顯示、手動校準、整點報時、鬧鐘功能和秒表功能5大部分。其總體設計框圖如下:秒 表鬧 鐘手 動 校 準整 點 報 時 數字鐘 圖1 總體設計框圖 其中整點報時跟鬧鐘部分要求不同頻率的聲響,所以需要加入分頻器模塊將輸入的1kHZ的分頻產生500HZ及1HZ的方波信號,其中1HZ的信號對應1S的周期,可以用作時鐘秒的顯示及秒表部分。3 各模塊設計 根據總體設計以及各分模塊的需要,將分立模塊分為7個部分運用verilog HDL編程來實現。

4、其分別為數字鐘主體部分、手動設置、分頻、整點報時、鬧鐘功能、秒表、控制顯示和頂層8個模塊。下面將對各個模塊的設計思想做一詳細的介紹。3.1 數字鐘主體部分數字鐘主體小時計數器分計數器秒計數器24進制計數器60進制計數器6進制計數器10進制計數器<12(早上)>12(下午) 數字鐘主體部分主要由三個計數器組成,包括1個24進制計數器,作為小時計數器,2個60進制計數器分別作為分計數器和秒計數器。一個60進制計數器由一個6進制計數器和一個10進制計數器組成,由于都是比較簡單的計數器,所以在用verilog設計時作為一個整體部分進行編程實現。同理小時計數器也作為整體部分來編程實現。設計的

5、流程框圖如下圖2所示。 圖2 數字鐘整體部分設計框圖3.1.1小時計數器 在verilog程序設計中,小時計數器為hour_counter模塊,其中hour_data0為24進制計數器的低位,即4進制計數器,hour_data1則為高位,2進制計數器。編程用always語句實現,并且用clk上升沿觸發實現計數。EN為使能端,高電平有效。zox為顯示早上、下午的標志位,其中小于12點之前為早上,zox為0,否則zox輸出為1表示下午。其Quartus仿真波形如下圖3所示,由于verilog HDL程序顯示不便,均附在附件上,下面各模塊相同。 圖3 小時計數器仿真 從仿真圖中可以看出,當使能信號信

6、號為高電平且始終上升沿到來時計數器開始計時,hour_data0計數為01230···的計數規律,即4進制計數器,同理hour_data1為2進制計數器,zox信號由圖中看出當小于12小時的時候輸出為0,大于12小時時輸出為1,與預計效果相同。3.1.2 分、秒計數器由于分、秒計數器均為60進制計數器,所以以分計數器作為示例說明其編程思想。其中分計數器模塊在程序中為minute_counter程序段,由上面分析得分計數器由一個十進制計數器與一個六進制計數器組成,程序中有minute_data0表示分計數器低位即10進制計數器,minute_data1表示分計數器的

7、高位為一個六進制計數器(秒計數器的低位、高位分別由second_data0、second_data1表示,其余均與分計數器相同)。其它信號定義與小時計數器相同,clk為時鐘信號,時鐘周期為1HZ,即1s,與小時計數器不同的是,EO為進位信號,即到60s后自動進位。Minute_data0、 minute_data1、second_data0、second_data1位寬均為4位reg型變量。仿真示意圖如下圖4所示。 圖4 分計數器仿真結果 由圖中可以看出,當使能端信號端EN變為1的時候,計數器開始計時,minute_data0計數規律為012345678901···

8、;當計數到9的時候,minute_data1加1,minute_data1計數規則為01234501···當高位minute_data1計數到5的時候,進位信號EO變為1。秒計數器second_counter模塊與分計數器完全一樣,這里不再贅述。3.2 分頻部分分頻器的功能主要有三個:一是產生計時用的標準秒脈沖1HZ信號;二是提供仿電臺用的1kHZ高音頻信號和500HZ低音頻信號;三是鬧鐘設置時用的200HZ閃爍信號和鬧鐘響鈴用的500HZ音頻信號。所用輸入信號為1kHZ的高頻信號。根據分析可知,1kHZ方波信號經過2分頻可以得到500HZ方波,經過5分頻得到20

9、0HZ信號,最后將分頻得到的200HZ信號作為分頻1HZ的時鐘,經過200分頻得到1HZ的信號。設計框圖如下圖5所示。2分頻5分頻1kHZ信號(clk)500HZ(f500hz)200HZ(f200hz)1HZ(f1hz)200分頻 圖5 分頻信號框圖 在程序設計的過程中,在復位信號rst為高電平時分頻器工作,輸入信號為1kHZ的高頻信號,分別經過2分頻、5分頻、200分頻得到f500HZ的500HZ信號、f200HZ的200HZ信號和f1HZ的1HZ信號。仿真結果如下圖6所示。 圖6 分頻信號結果仿真圖從仿真圖中可以看到,在rst為高電平時分頻過程開始,f500HZ、f200HZ和f1HZ也

10、與預期的輸出結果一樣。3.3 秒表模塊秒表模塊實現秒表功能,在實現的過程中,通過改變自動工作模式下的時鐘頻率來實現秒表的功能。即按動start鍵鬧鐘開始工作,再次按動start鍵,鬧鐘便停止工作。由于秒表模塊比較簡單,流程圖在此省略。根據分析,在verilog HDL實現過程中,clk作為時鐘正常工作時候的頻率,f500hz為秒表工作時候的頻率,仿真結果如下圖7所示。 圖7 秒表仿真模塊 由圖中可以看出,根據start高低電平的變化,時鐘在正常工作與秒表之間相互轉換。3.4 鬧鐘模塊鬧鐘模塊實現的是鬧鐘的設置及鬧鐘所設定的時間到之后的響鈴提示。鬧鐘模塊的設置主要思想是由控制鍵來設置數字鐘的鬧鐘

11、響的時間,經過與當前數字鐘實時時間的比較,來決定鬧鐘提醒的時間。設計框圖如下圖8所示。hour0hour1minute0minute1hour_set0hour_set1minute_set0minute_set1設置時間與當前時間的比較不相等相等con_alarm01鬧鐘不響alarm=0鬧鐘響alarm=1 圖8 鬧鐘模塊設計框圖在verilog HDL實現的過程中,由SW1、SW2兩個調整鍵來實現,其中SW1為移位控制鍵,即按SW1一次,將移位一次,閃爍顯示當前設置為數字,SW2為當前位的鬧鐘數字設置,每按SW2一次,當前數字設置位數字增加1,每一位上數字變化范圍由當前位循環上限決定,不

12、會超出范圍。EN為設置使能端,為1有效。Hour1、hour0、minute1和minute0分別為當前時間每個位上顯示的數字,hour_set1、hour_set0、minute_set1和minute_set0為與當前時間所對應的每一位上設置的時間顯示,f200hz為鬧鐘設置過程中顯示閃爍的頻率。Con_alarm為鬧鐘響鈴的控制鍵,其值為1時,表示鬧鐘已設置,并且在鬧鐘響的時候,如果設置其值為0,則鬧鐘關閉。Alarm為鬧鐘響鈴提示輸出,即設定時間到時alarm值為1,否則為0。Alarmclock_disp_select為鬧鐘設置中位選信號,為4位reg型變量,其值采用獨熱編碼,為10

13、00、0100、0010和0001分別表示設置過程中hour1、hour0、minute1和minute0四個位。其仿真結果如下圖9所示。 圖9 鬧鐘模塊仿真示意圖 由于設置波形輸入的時候如果調整過多,將不容易看出仿真結果的正確與否,所以圖中輸入比較簡單,以便可以更好地分析仿真結果。由圖中可以看出,經過SW1的兩次調整,位選信號alarmclock_disp_select的值為0010,表示此時的設置位為hour_set0位,SW2鍵將其值設置為0001,其他位均為0000,然后在與當前時鐘時間相等的情況下,并且在con_alarm值為1的時候鬧鐘響,即alarm值輸出為1,在當前時間與鬧鐘時

14、間仍然相等的情況下,將鬧鐘控制鍵con_alarm值設置為0,鬧鐘停止,即alarm值為0。很好的完成了鬧鐘的功能。3.5 時間設置模塊 時間設置模塊實現的功能為通過按鍵調節可以對當前時間進行手動控制。其主要是在時間設置使能端有效地情況下通過SW1和SW2兩個按鍵對數字鐘的小時和分鐘數進行調節。Disp_drive為設置中的顯示控制,即通過SW1對位的調整,Disp_drive隨之變化。SW2為對每一位上的數字在其范圍內進行加1調節,其調節過程與鬧鐘模塊相同。Disp_drive取值000、001、010和011分別對應hour1、hour0、minute1和minute0的設置。Quartu

15、s下仿真結果如圖10所示。 圖10 時間設置模塊仿真效果 圖中,hour_set0、hour_set1、minute_set0和minute_set1為設置后的時間。可以看到,當前給的hour0為0010,hour1的值0001,在SW1經過一次高電平之后,disp_drive的值變為001,對hour0進行設置,加1之后hour_set0變為0001,SW1再按一下,變為0010,在SW2兩次高電平之后,SW1的值變為1,此時對分的高位進行加1設置,依此類推。3.6 報時模塊 整點報時模塊的主要功能為仿中央人民廣播電臺整點報時信號,即從59分50秒起每隔秒發出一次低音“嘟”信號,將其定義為5

16、00HZ的低頻信號,到達整點(00分00秒時),發一次高音“噠”信號,其響聲為高頻1kHZ信號。 由于整點報時程序比較簡單,所以框圖省略。為了程序簡化又與其他模塊有較好的兼容性,用minute、second分別表示minute1、minute0和second1,second0經過位拼接之后的分和秒的當前顯示時間。F1khz為到達整點之后的高音頻率,f500hz為59分50秒、52秒、54秒、56秒和58秒時的低音頻率,radio則為到達時間時的報時輸出。仿真圖如下圖11所示。 圖11 整點報時模塊仿真效果圖 從圖中可以看出,從59分50秒開始,輸出的radio開始以f500hz的頻率報時,當到

17、達00分00秒時,輸出信號頻率為f1khz,到達00分01秒的時候之后便變為0,符合設計要求。3.7 控制顯示模塊控制顯示模塊在整個數字鐘的設計中起著非常重要的作用。它的作用是將時間等數據用數碼管顯示的控制和數據傳輸模塊,包括數據的傳輸以及BCD碼譯碼等。通過幾個控制使能端將其不同功能時的時間在數碼管上顯示出來。本模塊中端口定義比較多,下面是其所對應的功能。Time_EN:時間自動模式工作使能信號;Timeset_EN:時間設置使能信號;Stopwatch_EN:秒表使能信號;Alarmclock_EN:鬧鐘設置使能信號;Radio_EN:整點報時使能信號;Time_disp_select:時

18、間顯示位選信號;Alarmclock_disp_select:鬧鐘設置的顯示位選信號;Disp_select:顯示位選信號輸出;Disp_data:經過譯碼之后顯示的數據。程序設計中,各使能端信號為1表示執行該功能,以時間自動工作模式使能信號有效為例說明,當Time_EN為1時,首先將時間顯示位選信號isp_select的值賦給顯示位選信號disp_select輸出,定義time_disp_select的狀態一共有6個,分別為100000、010000、001000、000100、000010和000001,其在各狀態下分別依次表示將hour0、hour1、minute0、minute1、se

19、cond0和second1的值賦給data,用case語句來實現,其實現語句如下: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 控制顯示模塊當前時間使能端有效時譯碼的顯示從圖中可以看出,在第一個時鐘周期內,時間顯示位選信號time_disp_select的值為000000,此時應執行case語句的default,Data的值為0;在第二個時鐘周期內,time_disp_select的值為000001,此時對應其最后一種狀態,將second0的值賦給Data,即Data的值為0110,從圖中看,仿真結果正確,disp_data表示的是將當

21、前數據譯碼顯示之后七段數碼管的顯示,所以在第一個周期內值為1111110,表示值為0,與Data所表示的數對應。依次類推,可將Data的值全部表示出來。顯示譯碼數據段主要程序如下: 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十個數在7段數碼管中所對應的值

23、,在case語句里面最重要的是一定不能忘了default,否則仿真會發生所不希望看到的結果。下圖13為鬧鐘設置使能有效時仿真結果。 圖13 控制顯示模塊當鬧鐘設置使能信號有效時譯碼顯示從圖中可以看出,當只有鬧鐘使能信號alarmclock_EN有效時,其七段數碼管顯示結果,與數字鐘自動工作使能端的區別為鬧鐘設置使能端有效時只需對hour0、hour1、minute0和minute1進行設置,所以鬧鐘設置顯示位選信號alarmclock_disp_select的狀態只有4個,由于其同樣需要將值賦給disp_select,為了統一期間,其值也設為6位,其4個狀態分別為100000、010000、0

24、01000和000100。其他與自動工作模式相同。3.8 頂層模塊 將以上設計的各個模塊組合起來,就可以得到多功能數字鐘的整體仿真結果。其主要作用是將各個模塊銜接起來,圖14為時鐘正常工作模式下Quartus仿真結果。 圖14 整體仿真結果4 總結 4.1 本次作業遇到的問題在做本次作業中,遇到的問題主要有以下幾個方面:(1)軟件的安裝與學習。在軟件的安裝過程中,首先通過自己從網上下載軟件安裝,第一次安裝的時候未經破解,導致安裝的軟件雖然裝上了,但是打不開,無法使用。軟件的學習過程中,首先經過上課講解,自己從網上下視頻的學習,運行了幾個書上的小程序,對軟件進行了熟悉。(2)由于Verilog

25、HDL這門語言對自己來說屬于一個從未接觸過的東西,所以學習起來比較困難。本次作業選擇的題目為多功能數字鐘,前面是資料的搜集與設計思路的理清,再有了一定的基礎之后,開始對整個大的模塊進行分模塊分析設計。(3)在作業的過程中,遇到了許多的問題,首先發現自己對軟件的運用上存在的一些問題,如剛開始的時候沒有生成功能網表,導致最后運行出錯;還有沒有選功能仿真的時候,波形出現了一些毛刺和延時。(4)以為自己上課聽懂了阻塞與非阻塞賦值的區別,結果的程序的書寫上還是出現的問題,比如在秒表模塊中,用的電平觸發,剛開始的時候時候用的阻塞賦值,發現仿真波形有延時,以為是阻塞賦值的問題,將阻塞賦值改為了非阻塞賦值,延

26、時問題還是沒有解決,才發現進行的是時序仿真。這是由于自己當時還是沒有深刻的理解兩者之間的區別,才造成的誤解,給解決問題帶來了一定的困擾。(5)仿真過程中不夠細心,比如在整點報時模塊,波形輸入的時候,將minute與second的值設置反了,造成找了一下午的問題,radio就是不報時,后來發現問題的時候,覺著特別不可思議,還把程序改了半天。(6)在控制顯示模塊,波形文件仿真的過程中,由于其輸入輸出接口比較多,為了看得更清楚期間,在數字鐘正常工作模式下顯示的過程中,將鬧鐘設置使能端去掉了,結果在仿真的過程中data跟disp_data就是沒有值,后來發現原因是在將鬧鐘使能端去掉之后,不確定鬧鐘使能

27、端是否有效。造成沒有顯示結果,后來把鬧鐘使能段加上之后并將其置為0,仿真結果正確。 作業過程中,遇到的小問題不計其數,在多方努力之下,問題基本解決,這里就不一一列舉。總結出的寶貴經驗就是要多看書,學會自己解決問題,一般的問題在看書找資料之后基本都能解決;還有就是一定要細心,這樣可以避免很多不必要的麻煩。4.2 建議和總結首先非常感謝老師在每周末還那么辛苦的給我們上課,真的使我學到了很多的東西,在此對老師致以深深的謝意!對老師的建議就是可以在剛開始上課的時候就可以給同學布置一些小的作業,然后可以讓同學慢慢接觸一下軟件,學一點淺顯的編程,這樣在最后寫大作業的時候就不會感覺無從下手,以便起到一個循序

28、漸進的作用。附件 1.小時計數器模塊 module hour_counter(EN,clk,hour_data1,hour_data0,zox);input clk,EN; /時鐘與使能端output 3:0 hour_data1,hour_data0;/小時的高位和低位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.分秒計數器模塊module minute_counter(EN,clk,minute_data1,minute_data0,EO);input

30、 clk,EN;output 3:0 minute_data1,minute_data0; 分高位、低位output EO; /進位輸出端reg 3:0 minute_data1,minute_data0;reg EO;always (posedge clk) /上升沿觸發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; /兩個常數變量,分頻技術用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信號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為控制秒表信號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為鬧鐘設置鍵input 3:0 hour1,hour0,minute1,minute0;/顯示當前時間input control_alarm; /鬧鐘控制鍵output alarm; /鬧鐘響鈴輸出output 3:0 alarmclock_disp_select; /鬧鐘設置位選信號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、 /存放設置的小時reg 3:0 minute_set1,minute_set0; /存放設置的分reg 2:0 disp_drive; /設置鬧鐘時間時,數碼管顯示的動態位選擇/鬧鐘一直工作(設置的鬧鐘時間與當前時間比較)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/鬧鐘設置中,按SW1一次,將移位一次,顯示當前設置位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/當前位的鬧鐘數字設置,按SW2一次,數字增加1always (posedge SW2)begin case(disp_driv

38、e)3'b000: begin /000時,設置小時的高位 if(hour_set1 < 4'b0010) hour_set1 <= hour_set1 + 4'b1; else hour_set1 <= 4'b0; end3'b001: begin /001時,小時低位 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時,分鐘高位 if(minute_set1 < 4'b0101) minute_set1 <= minute_set1 + 4'b1; else minute_set1 <= 4'b0; end3'b011: begin /011時,分鐘低位 if(minute_set0 &l

40、t; 4'b1001) minute_set0 <= minute_set0 + 4'b1; else minute_set0 <= 4'b0; endendcaseend/閃爍顯示always (posedge clk_200hz) /設置時閃爍頻率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.時間設置模塊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) /手動設置使能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 /小時的高位 if(hour_se

44、t1 < 4'b0010) hour_set1 <= hour_set1 + 4'b1; else hour_set1 <= 4'b0; end 3'b001: begin /小時的低位 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.報時模塊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; /拼接之后時間 reg alarm_radio; /報時輸出信號 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分鐘時 case(second) /秒為50、52、54、56、58低音報時 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秒高音報時 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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論