请编写程序,可以给出仿真图,题目如下图,请按题目要求编写,并给出程序。
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
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录