版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計數器1、實現目標及介紹實驗實現了一個簡易的計數器,計數范圍可達899(0899),通過key4按鍵計數,每按下一次,計數加一,百位數顯示在led上,個位與十位顯示在數碼管上。為十進制計數,數碼管1計數到九后置零。數碼管2獲得進位加一,數碼管2到9后當再次獲得個位進位時再次向百位進一,點亮led1,每百位點亮一個led。此外key4為清零鍵,可隨時按鍵清零。2、效果展示計數99清零計數100視頻展示(雙擊觀看)3、代碼實現與模塊分析1.頂層模塊module jishuqi(input wire clk,rst, /時鐘和復位輸入input wire key1, /撥碼計output wire
2、7:0led,output wire 8:0 segment_led_1,segment_led_2 /數碼管輸出); wire key_pulse;reg7:0 cnt;/計時計數器reg 7:0 hud;/百位計數initial hud7:0 = 8b11111111;always (posedge clk or negedge rst) begin/數碼管顯示要按照十進制的方式顯示 if(!rst)begin cnt = 8h00;hud 7:0 = 8b11111111;endelse if(key_pulse)beginif(cnt3:0 = 4d9)/個位進位判斷begincnt3
3、:0 = 4d0;if(cnt7:4 = 4d9 )/十位進位判斷begin cnt7:4 = 4d0;hud7:0 = hud7:0 - 1b1; endelsecnt7:4 = cnt7:4 + 1b1;endelse cnt3:0 = cnt3:0 + 1b1;endelsecnt = cnt;endassign led = hud;/例化調用數碼管顯示模塊segment u2(.seg_data_1(cnt7:4), /g_data input.seg_data_2(cnt3:0), /g_data input.seg_led_1(segment_led_1), /MSBLSB = S
4、EG,DP,G,F,E,D,C,B,A.seg_led_2(segment_led_2) /MSBLSB = SEG,DP,G,F,E,D,C,B,A);/例化調用消抖模塊debounce u1 ( .clk (clk), .rst (rst), .key (key1), .key_pulse (key_pulse) ); endmodule2.數碼管顯示模塊module segment (seg_data_1,seg_data_2,seg_led_1,seg_led_2); input 3:0 seg_data_1;/數碼管需要顯示09十個數字,所以最少需要4位輸入做譯碼input 3:0
5、seg_data_2;/小腳丫上第二個數碼管output 8:0 seg_led_1;/在小腳丫上控制一個數碼管需要9個信號 MSBLSB=DIG、DP、G、F、E、D、C、B、Aoutput 8:0 seg_led_2;/在小腳丫上第二個數碼管的控制信號 MSBLSB=DIG、DP、G、F、E、D、C、B、A reg 8:0 seg 9:0; /定義了一個reg型的數組變量,相當于一個10*9的存儲器,存儲器一共有10個數,每個數有9位寬 initial /在過程塊中只能給reg型變量賦值,Verilog中有兩種過程塊always和initial /initial和always不同,其中語句
6、只執(zhí)行一次 begin seg0 = 9h3f; /對存儲器中第一個數賦值9b00_0011_1111,相當于共陰極接地,DP點變低不亮,7段顯示數字 0 seg1 = 9h06; /7段顯示數字 1 seg2 = 9h5b; /7段顯示數字 2 seg3 = 9h4f; /7段顯示數字 3 seg4 = 9h66; /7段顯示數字 4 seg5 = 9h6d; /7段顯示數字 5 seg6 = 9h7d; /7段顯示數字 6 seg7 = 9h07; /7段顯示數字 7 seg8 = 9h7f; /7段顯示數字 8 seg9 = 9h6f; /7段顯示數字 9 end assign seg_
7、led_1 = segseg_data_1; /連續(xù)賦值,這樣輸入不同四位數,就能輸出對于譯碼的9位輸出 assign seg_led_2 = segseg_data_2; endmodule3.按鍵消抖模塊/按鍵消抖module debounce (clk,rst,key,key_pulse); parameter N = 2; /要消除的按鍵的數量 input clk; input rst; input N-1:0 key; /輸入的按鍵output N-1:0 key_pulse; /按鍵動作產生的脈沖 reg N-1:0 key_rst_pre; /定義一個寄存器型變量存儲上一個觸發(fā)時
8、的按鍵值 reg N-1:0 key_rst; /定義一個寄存器變量儲存儲當前時刻觸發(fā)的按鍵值 wire N-1:0 key_edge; /檢測到按鍵由高到低變化是產生一個高脈沖 /利用非阻塞賦值特點,將兩個時鐘觸發(fā)時按鍵狀態(tài)存儲在兩個寄存器變量中 always (posedge clk or negedge rst) beginif (!rst) beginkey_rst = N1b1; /初始化時給key_rst賦值全為1,中表示N個1 key_rst_pre = N1b1; end else beginkey_rst = key; /第一個時鐘上升沿觸發(fā)之后key的值賦給key_rst,
9、同時key_rst的值賦給key_rst_prekey_rst_pre = key_rst; /非阻塞賦值。相當于經過兩個時鐘觸發(fā),key_rst存儲的是當前時刻key的值,key_rst_pre存儲的是前一個時鐘的key的值 end end assign key_edge = key_rst_pre & (key_rst);/脈沖邊沿檢測。當key檢測到下降沿時,key_edge產生一個時鐘周期的高電平 reg17:0 cnt; /產生延時所用的計數器,系統(tǒng)時鐘12MHz,要延時20ms左右時間,至少需要18位計數器 /產生20ms延時,當檢測到key_edge有效是計數器清零開始計數 al
10、ways (posedge clk or negedge rst)beginif(!rst)cnt = 18h0; else if(key_edge) cnt = 18h0; else cnt = cnt + 1h1; end reg N-1:0 key_sec_pre; /延時后檢測電平寄存器變量 reg N-1:0 key_sec; /延時后檢測key,如果按鍵狀態(tài)變低產生一個時鐘的高脈沖。如果按鍵狀態(tài)是高的話說明按鍵無效 always (posedge clk or negedge rst)beginif (!rst) key_sec = N1b1; else if (cnt=18h3f
11、fff) key_sec = key; end always (posedge clk or negedge rst)beginif (!rst)key_sec_pre = N1b1; else key_sec_pre = key_sec; end assign key_pulse = key_sec_pre & (key_sec); endmodule4、源碼與源碼圖片module jishuqi(input wire clk,rst, /時鐘和復位輸入input wire key1, /撥碼計output wire 7:0led,output wire 8:0 segment_led_1,
12、segment_led_2 /數碼管輸出); wire key_pulse;reg7:0 cnt;/計時計數器reg 7:0 hud;/百位計數initial hud7:0 = 8b11111111;always (posedge clk or negedge rst) begin/數碼管顯示要按照十進制的方式顯示 if(!rst)begin cnt = 8h00;hud 7:0 = 8b11111111;endelse if(key_pulse)beginif(cnt3:0 = 4d9)begincnt3:0 = 4d0;if(cnt7:4 = 4d9 )begin cnt7:4 = 4d0
13、;hud7:0 = hud7:0 - 1b1; endelsecnt7:4 = cnt7:4 + 1b1;endelse cnt3:0 = cnt3:0 + 1b1;endelsecnt = cnt;endassign led = hud;segment u2(.seg_data_1(cnt7:4), /g_data input.seg_data_2(cnt3:0), /g_data input.seg_led_1(segment_led_1), /MSBLSB = SEG,DP,G,F,E,D,C,B,A.seg_led_2(segment_led_2) /MSBLSB = SEG,DP,G
14、,F,E,D,C,B,A);debounce u1 ( .clk (clk), .rst (rst), .key (key1), .key_pulse (key_pulse) ); endmodule/按鍵消抖module debounce (clk,rst,key,key_pulse); parameter N = 2; /要消除的按鍵的數量 input clk; input rst; input N-1:0 key; /輸入的按鍵output N-1:0 key_pulse; /按鍵動作產生的脈沖 reg N-1:0 key_rst_pre; /定義一個寄存器型變量存儲上一個觸發(fā)時的按鍵值
15、 reg N-1:0 key_rst; /定義一個寄存器變量儲存儲當前時刻觸發(fā)的按鍵值 wire N-1:0 key_edge; /檢測到按鍵由高到低變化是產生一個高脈沖 /利用非阻塞賦值特點,將兩個時鐘觸發(fā)時按鍵狀態(tài)存儲在兩個寄存器變量中 always (posedge clk or negedge rst) beginif (!rst) beginkey_rst = N1b1; /初始化時給key_rst賦值全為1,中表示N個1 key_rst_pre = N1b1; end else beginkey_rst = key; /第一個時鐘上升沿觸發(fā)之后key的值賦給key_rst,同時ke
16、y_rst的值賦給key_rst_prekey_rst_pre = key_rst; /非阻塞賦值。相當于經過兩個時鐘觸發(fā),key_rst存儲的是當前時刻key的值,key_rst_pre存儲的是前一個時鐘的key的值 end end assign key_edge = key_rst_pre & (key_rst);/脈沖邊沿檢測。當key檢測到下降沿時,key_edge產生一個時鐘周期的高電平 reg17:0 cnt; /產生延時所用的計數器,系統(tǒng)時鐘12MHz,要延時20ms左右時間,至少需要18位計數器 /產生20ms延時,當檢測到key_edge有效是計數器清零開始計數 always
17、 (posedge clk or negedge rst)beginif(!rst)cnt = 18h0; else if(key_edge) cnt = 18h0; else cnt = cnt + 1h1; end reg N-1:0 key_sec_pre; /延時后檢測電平寄存器變量 reg N-1:0 key_sec; /延時后檢測key,如果按鍵狀態(tài)變低產生一個時鐘的高脈沖。如果按鍵狀態(tài)是高的話說明按鍵無效 always (posedge clk or negedge rst)beginif (!rst) key_sec = N1b1; else if (cnt=18h3ffff)
18、 key_sec = key; end always (posedge clk or negedge rst)beginif (!rst)key_sec_pre = N1b1; else key_sec_pre = key_sec; end assign key_pulse = key_sec_pre & (key_sec); endmodulemodule segment (seg_data_1,seg_data_2,seg_led_1,seg_led_2); input 3:0 seg_data_1;/數碼管需要顯示09十個數字,所以最少需要4位輸入做譯碼input 3:0 seg_data_2;/小腳丫上第二個數碼管output 8:0 seg_led_1;/在小腳丫上控制一個數碼管需要9個信號 MSBLSB=DIG、DP、G、F、E、D、C、B
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報參考:近代日本對中國茶業(yè)的侵奪研究
- 課題申報參考:教育高質量發(fā)展視域下大學體育一流本科課程建設實證研究
- 2025年園林景觀綠化地使用權轉讓合同4篇
- 2025年度新能源汽車充電站車位租賃合作協議書4篇
- 2025版委托擔保合同范本:知識產權質押貸款擔保合同3篇
- 2025年度家具行業(yè)綠色供應鏈管理合同4篇
- 二零二五版橋梁建設施工合作協議2篇
- 2025年度個人沿街店房租賃合同(含合同解除條件與爭議解決)4篇
- 二零二五年度國際交流項目教師選拔與聘用協議
- 2025年度星級酒店廚房設備采購與定期檢修合同4篇
- 數學-山東省2025年1月濟南市高三期末學習質量檢測濟南期末試題和答案
- 中儲糧黑龍江分公司社招2025年學習資料
- 湖南省長沙市2024-2025學年高一數學上學期期末考試試卷
- 船舶行業(yè)維修保養(yǎng)合同
- 2024年林地使用權轉讓協議書
- 物流有限公司安全生產專項整治三年行動實施方案全國安全生產專項整治三年行動計劃
- 基于ADAMS的汽車懸架系統(tǒng)建模與優(yōu)化
- 當前中國個人極端暴力犯罪個案研究
- 中國象棋比賽規(guī)則
- 7天減肥餐食譜給你最能瘦的一周減肥食譜
- GB/T 31525-2015圖形標志電動汽車充換電設施標志
評論
0/150
提交評論