實驗任務: 本實驗中要設計一個對按鍵信號(key_in)進行計數的計數器。
實驗原理: 整個實驗電路包含四個模塊:
① erzp模塊完成按鍵消抖功能,默認抖動時間為10MS;
② detect_module模塊用于檢測按鍵信號的下降沿,當檢測到下降沿后,輸出一個時鐘周期的高電平。
③ get_state模塊:將按鍵信號轉換成狀態信號,當按鍵按下后,狀態轉換0→1→0→1→……..。
④ cnt10模塊:完成對按鍵信號進行計數。clk:系統時鐘,cnt_en:計數使能(1:計數,0:暫停),cnt_single:計數信號,rst_n:復位信號,updown_state:加1計數或減1計數控制(1:加1計數,0:減1計數)。data:計數結果輸出。
源代碼撰寫:
erzp****模塊:
默認抖動時間最多為10ms,框1與框2的功能就是,計數當前電平若處于一直處于低電平就key_low一直自加1 ,一旦不是低電平了key_low就清0.高電平key_hign同理。當key_low或key_hign當前計數到了10ms,說明當前已經過了抖動狀態。并且輸出當前消抖后的對應電平。
detect_module****模塊:
這里主要是利用了一個寄存器,讓上一個時鐘狀態的按鍵狀態和當前的對比,不一樣說明有了邊緣變化。
get_state****模塊:
cnt10****模塊:
原理圖繪制頂層文件流程:
1.將以上四個.v文件依次轉換為電路器件,生成BSF文件如右圖所示
2.建立一個頂層原理圖bdf(后建立的要設為頂層,與項目工程名稱一致。)
在原理圖中可以放置器件,可以看到剛剛生產的器件。并按邏輯進行連接。并修改對應端口名。完成之后,為了之后仿真,可以轉成.v文件。
生成如圖所示:以后也可將此項目作為整個調用的器件,生成BSF文件
RTL視圖:
測試代碼撰寫: 測試時,需將原理圖移除,將轉化的.V文件加進來。
測試結果
-
寄存器
+關注
關注
31文章
5321瀏覽量
120016 -
計數器
+關注
關注
32文章
2254瀏覽量
94358 -
CLK
+關注
關注
0文章
127瀏覽量
17126 -
按鍵消抖
+關注
關注
2文章
27瀏覽量
10442
發布評論請先 登錄
相關推薦
評論