国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品
搜索
熱門(mén)關(guān)鍵詞:
看門(mén)狗
555
仿真
Altium
村田
手機(jī)版
官方微博
微信公眾號(hào)
登錄
|
免費(fèi)注冊(cè)
首頁(yè)
新聞
新品
文章
下載
電路
問(wèn)答
視頻
職場(chǎng)
雜談
會(huì)展
工具
博客
論壇
在線研討會(huì)
技術(shù)頻道:
單片機(jī)/處理器
FPGA
軟件/編程
電源技術(shù)
模擬電子
PCB設(shè)計(jì)
測(cè)試測(cè)量
MEMS
系統(tǒng)設(shè)計(jì)
無(wú)源/分立器件
音頻/視頻/顯示
應(yīng)用頻道:
消費(fèi)電子
工業(yè)/測(cè)控
汽車(chē)電子
通信/網(wǎng)絡(luò)
醫(yī)療電子
機(jī)器人
當(dāng)前位置:
EEChina首頁(yè)
›
FPGA/CPLD
›
文章
明德?lián)P至簡(jiǎn)設(shè)計(jì)法--分享一份實(shí)現(xiàn)矩陣鍵盤(pán)的verilog代碼 可直接使用
發(fā)布時(shí)間:2017-2-21 12:00 發(fā)布者:
mdykj33
關(guān)鍵詞:
明德?lián)P
,
verilog
,
至簡(jiǎn)設(shè)計(jì)法
,
矩陣鍵盤(pán)
,
verilog代碼
`define SCAN
module key_scan(
clk ,
rst_n ,
key_col, //鍵盤(pán)列輸入
key_row, //鍵盤(pán)行輸出
key_num, //指示哪一個(gè)按鍵按下,用0~15指示
key_vld //按下有效指示信號(hào),其為1表示按下一次。
);
parameter KEY_W = 4 ;
parameter COL = 0 ;
parameter ROW = 1 ;
parameter DLY = 2 ;
parameter FIN = 3 ;
parameter COL_CNT = 16;
parameter TIME_20MS= 1000000;
//輸入信號(hào)定義
input clk ;
input rst_n ;
input [3:0] key_col;
//輸出信號(hào)定義
output key_vld;
output[3:0] key_num;
output[KEY_W-1:0] key_row;
//輸出信號(hào)reg定義
reg [3:0] key_num;
reg [KEY_W-1:0] key_row;
reg key_vld;
reg [ 3:0] key_col_ff0 ;
reg [ 3:0] key_col_ff1 ;
reg [ 1:0] key_col_get ;
reg shake_flag ;
reg shake_flag_ff0;
reg [ 3:0] state_c ;
reg [19:0] shake_cnt ;
reg [ 3:0] state_n ;
reg [ 1:0] row_index ;
reg [15:0] row_cnt ;
reg [ 2:0] x ;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
key_col_ff0 <= 4'b1111;
key_col_ff1 <= 4'b1111;
end
else begin
key_col_ff0 <= key_col ;
key_col_ff1 <= key_col_ff0;
end
end
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
shake_cnt <= 0;
end
else if(add_shake_cnt)begin
if(end_shake_cnt)
shake_cnt <= 0;
else
shake_cnt <= shake_cnt + 1;
end
else begin
shake_cnt <= 0;
end
end
assign add_shake_cnt = key_col_ff1!=4'hf && shake_flag==0;
assign end_shake_cnt = add_shake_cnt && shake_cnt==TIME_20MS-1;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
shake_flag <= 0;
end
else if(end_shake_cnt) begin
shake_flag <= 1'b1;
end
else if(key_col_ff1==4'hf) begin
shake_flag <= 1'b0;
end
end
`ifdef SCAN
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
state_c <= COL;
end
else begin
state_c <= state_n;
end
end
always @(*)begin
case(state_c)
COL: begin
if(col2row_start)begin
state_n = ROW;
end
else begin
state_n = state_c;
end
end
ROW: begin
if(row2dly_start)begin
state_n = DLY;
end
else begin
state_n = state_c;
end
end
DLY : begin
if(dly2fin_start)begin
state_n = FIN;
end
else begin
state_n = state_c;
end
end
FIN: begin
if(fin2col_start)begin
state_n = COL;
end
else begin
state_n = state_c;
end
end
default: state_n = COL;
endcase
end
assign col2row_start = state_c==COL && end_shake_cnt;
assign row2dly_start = state_c==ROW && end_row_index;
assign dly2fin_start = state_c==DLY && end_row_index;
assign fin2col_start = state_c==FIN && key_col_ff1==4'hf;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
key_row <= 4'b0;
end
else if(state_c==ROW)begin
key_row <= ~(1'b1 << row_index);
end
else begin
key_row <= 4'b0;
end
end
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
row_cnt <= 0;
end
else if(add_row_cnt) begin
if(end_row_cnt)
row_cnt <= 0;
else
row_cnt <= row_cnt + 1;
end
end
assign add_row_cnt = state_c==ROW || state_c==DLY;
assign end_row_cnt = add_row_cnt && row_cnt==COL_CNT-1;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
row_index <= 0;
end
else if(add_row_index) begin
if(end_row_index)
row_index <= 0;
else
row_index <= row_index + 1;
end
end
assign add_row_index = end_row_cnt;
assign end_row_index = add_row_index && row_index==x-1;
always @(*)begin
if(state_c==ROW)
x = 4;
else
x = 1;
end
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
key_col_get <= 0;
end
else if(col2row_start) begin
if(key_col_ff1==4'b1110)
key_col_get <= 0;
else if(key_col_ff1==4'b1101)
key_col_get <= 1;
else if(key_col_ff1==4'b1011)
key_col_get <= 2;
else
key_col_get <= 3;
end
end
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
key_num <= 0;
end
else if(state_c==ROW && end_row_cnt)begin
key_num <= {row_index,key_col_get};
end
else begin
key_num <= 0;
end
end
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
key_vld <= 1'b0;
end
else if(state_c==ROW && end_row_cnt && key_col_ff1[key_col_get]==1'b0)begin
key_vld <= 1'b1;
end
else begin
key_vld <= 1'b0;
end
end
`else
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
key_vld <= 0;
end
else begin
key_vld <= end_shake_cnt;
end
end
always @(*)begin
key_num = 0;
end
`endif
endmodule
復(fù)制代碼
本文地址:
http://m.qingdxww.cn/thread-354409-1-1.html
【打印本頁(yè)】
本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
相關(guān)文章
現(xiàn)代數(shù)字邏輯設(shè)計(jì)資料
VHDL和Verilog兩種語(yǔ)言的具體比較
FPGA至簡(jiǎn)設(shè)計(jì)法案例4 【12401003385】
矩陣鍵盤(pán)原理剖析
明德?lián)Pfpga公開(kāi)課系列視頻,長(zhǎng)期更新!!
明德?lián)P公開(kāi)課《FPGA中原碼、補(bǔ)碼和小數(shù)的運(yùn)算》錄播視頻
本次公開(kāi)課主題:FPGA中原碼、補(bǔ)碼和小數(shù)的運(yùn)算
FPGA-全網(wǎng)公開(kāi)課-第02期錄播-算法的verilog實(shí)現(xiàn)-fir濾波器
至簡(jiǎn)設(shè)計(jì)法經(jīng)典案例2 1241003385
網(wǎng)友評(píng)論
高級(jí)模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登錄后才可以發(fā)表評(píng)論
登錄
|
立即注冊(cè)
發(fā)表評(píng)論
貿(mào)澤電子有獎(jiǎng)問(wèn)答視頻,答對(duì)領(lǐng)10元微信紅包
廠商推薦
Microchip視頻專(zhuān)區(qū)
無(wú)線充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程3
想要避免發(fā)生災(zāi)難,就用MPLAB® SiC電源仿真器!
了解一下Microchip強(qiáng)大的PIC18-Q24 MCU系列
基于CEC1712實(shí)現(xiàn)的處理器SPI FLASH固件安全彈性方案培訓(xùn)教程
貿(mào)澤電子(Mouser)專(zhuān)區(qū)
相關(guān)視頻
VerilogHDL教程(一)
8504
VerilogHDL教程(二)
7911
VerilogHDL教程(三)
7807
VerilogHDL教程(五)
7668
VerilogHDL教程(四)
7634
關(guān)于我們
-
服務(wù)條款
-
使用指南
-
站點(diǎn)地圖
-
友情鏈接
-
聯(lián)系我們
電子工程網(wǎng)
© 版權(quán)所有
京ICP備16069177號(hào)
| 京公網(wǎng)安備11010502021702
快速回復(fù)
返回頂部
返回列表
主站蜘蛛池模板:
玖玖精品在线观看
|
国产精品视频观看
|
黄视频在线观看www 黄视频网址
|
99re视频在线播放
|
国产乱弄视频在线观看
|
日产精品卡二卡三卡四卡乱码视频
|
精品欧美一区二区三区免费观看
|
欧美城天堂网
|
欧美性生交xxxxx久久久
|
日韩中文字幕精品视频在线
|
女老师伦理片
|
国产精品久久自在自2021
|
日日干日日草
|
午夜精品久久久久
|
日日摸狠狠的摸夜夜摸
|
国产成在线人视频免费视频
|
日本99热
|
亚洲一区二区三区四区视频
|
欧美 日韩 国产 在线
|
久久精品视频免费
|
2021久久精品99精品久久
|
免费观看精品视频999
|
日本午夜网站
|
2021色噜噜狠狠综曰曰曰
|
亚洲免费在线视频观看
|
亚欧乱色视频网站大全
|
欧美一区二区在线观看视频
|
色5月婷婷
|
日韩在线看片中文字幕不卡
|
免费看一级做a爰片久久
|
国产男人的天堂
|
韩剧网最新的韩国电视剧免费观看
|
69免费在线视频
|
青青草国产成人久久91网
|
中文字幕一区精品欧美
|
亚洲综合日韩中文字幕v在线
|
女同在线播放
|
国产一区二区三区在线观看视频
|
9久热精品免费观看视频
|
亚洲精品一卡2卡3卡三卡四卡
|
国内偷自拍对白视频
|