请编写程序,可以给出仿真图,题目如下图,请按题目要求编写,并给出程序。
1条回答 默认 最新
- 老皮芽子 2022-11-07 09:56关注
module led_play ( input clk, //0.5MHz 时钟 input key0, //按键,低电平按下,高电平抬起 input key1, //按键,低电平按下,高电平抬起 input key2, //按键,低电平按下,高电平抬起 output [7:0] ledr //8 个流水灯,左边高位 ledr[7] ,右边低位 ledr[0] ); //三个按键,假定优先级 key0>key1>key2 parameter CLK_IN_FREQ = 500*1000; //0.5MHz reg clk1s = 0; //1Hz 秒脉冲 reg clk1_ck = 0; //1Hz 方波,闪烁脉冲 reg [31:0] cnt = 0; reg [7:0] led_cnt = 0; reg [1:0] led_st = 0; //按键状态 assign ledr = clk1_ck == 0 ? led_cnt:~led_cnt; always @(posedge clk) begin if(cnt < CLK_IN_FREQ-1) begin cnt <= cnt + 1; clk1s <= 0; end else begin cnt <= 0; clk1s <= 1; end end always @(posedge clk) begin if(cnt == CLK_IN_FREQ/2-1 || cnt == CLK_IN_FREQ-1) begin clk1_ck <= ~clk1_ck; end end always @(posedge clk or negedge key0) begin if( key0 == 0 ) //key0 按下 led_st <= 0; else if( key1 == 0 ) //key1 按下 led_st <= 1; else if( key2 == 0 ) //key1 按下 led_st <= 2; end always @(posedge clk or negedge key0) begin if( key0 == 0 ) //key0 按下 led_cnt <= 8'b1111_1111; else if(key1 == 0) led_cnt <= 8'b1111_1110; else if(key2 == 0) led_cnt <= 8'b0111_1111; else if(clk1s == 1) //1Hz 秒脉冲 begin if( led_st == 1 ) //key1 按下 led_cnt <= {led_cnt[6:0],led_cnt[7]}; //左循环 else if( led_st == 2 ) //key2 按下 led_cnt <= {led_cnt[0],led_cnt[7:1]}; //右循环 end end endmodule
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥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
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵