vhdl fpga入门问题 使用一号按键控制4个LED灯,每按动一次,灯从左到右依次亮起,且每次只有一个灯亮。
1条回答 默认 最新
- 斜阳日落 2022-10-11 17:40关注
module key_new( input wire sclk, input wire rst_n, input wire key_in, output reg [3:0] LED_out ); //==========================// parameter T_10ms=19'd499_999; //==========================// reg [18:0] cnt_10ms; reg flag_10ms; reg key_value; //==========cnt_10ms==========// always@(posedge sclk or negedge rst_n) if(!rst_n) cnt_10ms <=19'd0; else if(key_in==1'b1) cnt_10ms <=19'd0; //key_in=1时,清零,遇到0时就累积加,所以,必须要添加此句 else if(cnt_10ms==T_10ms) //为的是cnt_10ms>T_10ms,如此就不会执行 cnt_10ms <=cnt_10ms+1'b1; cnt_10ms <=19'd500_000; // else if(key_in==1'b0) // else if(key_in==1'b0&&cnt_10ms<=T_10ms) //目的 是:计数T_10ms+1'b1之后,就不加1 cnt_10ms <=cnt_10ms+1'b1; //==========flag_10ms========// always@(posedge sclk or negedge rst_n) if(!rst_n) flag_10ms <=1'b0; //因为key_value要取反,所以光有flag_10ms=0是不行的,还需要key_in==1'b0;按下了才有效果 else if(cnt_10ms==T_10ms-1'b1) flag_10ms <=1'b1; else flag_10ms <=1'b0; //==================// always@(posedge sclk or negedge rst_n) if(!rst_n) key_value <=1'b0; else if(flag_10ms==1'b1&&key_in==1'b0) key_value <=1'b1; else key_value <=1'b0; always@(posedge sclk or negedge rst_n) if(!rst_n) LED_out <=4'b0001; else if(key_value==1'b1) LED_out <= {LED_out[2:0],LED_out[3]}; endmodule
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 网络科学导论,网络控制
- ¥100 安卓tv程序连接SQLSERVER2008问题
- ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd