Verilog 流水灯模块实现 - 6位按键控制
module ledshow( input [5:0]key, // 6位按键输入 input [3:0]led_control, // 4位LED控制输入 output reg [15:0]led); // 16位LED输出 always @(key or led_control) // 按键和LED控制输入变化时执行以下操作 begin if(key[0]==1) // 如果按键0被按下 case(led_control) // 根据LED控制输入值进行不同操作 4'h0:led=16'h1; 4'h1:led=16'h3; 4'h2:led=16'h7; 4'h3:led=16'hf; 4'h4:led=16'h1f; 4'h5:led=16'h3f; 4'h6:led=16'h7f; 4'h7:led=16'hff; 4'h8:led=16'h1ff; 4'h9:led=16'h3ff; 4'ha:led=16'h7ff; 4'hb:led=16'hfff; 4'hc:led=16'h1fff; 4'hd:led=16'h3fff; 4'he:led=16'h7fff; 4'hf:led=16'hffff; endcase else if(key[1]==1) // 如果按键1被按下 case(led_control) 4'h0:led=16'h8000; 4'h1:led=16'hc000; 4'h2:led=16'he000; 4'h3:led=16'hf000; 4'h4:led=16'hf800; 4'h5:led=16'hfc00; 4'h6:led=16'hfe00; 4'h7:led=16'hff00; 4'h8:led=16'hff80; 4'h9:led=16'hffc0; 4'ha:led=16'hffe0; 4'hb:led=16'hfff0; 4'hc:led=16'hfff8; 4'hd:led=16'hfffc; 4'he:led=16'hfffe; 4'hf:led=16'hffff; endcase else if(key[2]==1) // 如果按键2被按下 case(led_control) 4'h0:led=16'haaaa; 4'h1:led=16'h5555; 4'h2:led=16'haaaa; 4'h3:led=16'h5555; 4'h4:led=16'haaaa; 4'h5:led=16'h5555; 4'h6:led=16'haaaa; 4'h7:led=16'h5555; 4'h8:led=16'haaaa; 4'h9:led=16'h5555; 4'ha:led=16'haaaa; 4'hb:led=16'h5555; 4'hc:led=16'haaaa; 4'hd:led=16'h5555; 4'he:led=16'haaaa; 4'hf:led=16'h5555; endcase else if(key[3]==1) // 如果按键3被按下 case(led_control) 4'h0:led=16'hffff; 4'h1:led=16'h0000; 4'h2:led=16'hffff; 4'h3:led=16'h0000; 4'h4:led=16'hffff; 4'h5:led=16'h0000; 4'h6:led=16'hffff; 4'h7:led=16'h0000; 4'h8:led=16'hffff; 4'h9:led=16'h0000; 4'ha:led=16'hffff; 4'hb:led=16'h0000; 4'hc:led=16'hffff; 4'hd:led=16'h0000; 4'he:led=16'hffff; 4'hf:led=16'h0000; endcase else if(key[4]==1) // 如果按键4被按下 case(led_control) 4'h0:led=16'h8181; 4'h1:led=16'h4242; 4'h2:led=16'h2424; 4'h3:led=16'h1818; 4'h4:led=16'h3c3c; 4'h5:led=16'h7e7e; 4'h6:led=16'hffff; 4'h7:led=16'hffff; 4'h8:led=16'h7e7e; 4'h9:led=16'h3c3c; 4'ha:led=16'h1818; 4'hb:led=16'h2424; 4'hc:led=16'h4242; 4'hd:led=16'h8181; 4'he:led=16'h0000; 4'hf:led=16'h8181; endcase else if(key[5]==1) // 如果按键5被按下 case(led_control) 4'h0:led=16'he007; 4'h1:led=16'h700e; 4'h2:led=16'h381c; 4'h3:led=16'h1c38; 4'h4:led=16'h0e70; 4'h5:led=16'h07e0; 4'h6:led=16'h07e0; 4'h7:led=16'h0e70; 4'h8:led=16'h1c38; 4'h9:led=16'h381c; 4'ha:led=16'h700e; 4'hb:led=16'he007; 4'hc:led=16'hc003; 4'hd:led=16'h8001; 4'he:led=16'h8001; 4'hf:led=16'hc003; endcase else led=16'h0000; // 如果没有按键被按下,则LED输出为0 end endmodule
module flowlight_1(
input clk, // 时钟输入
input rst, // 复位输入
input [5:0] key, // 6位按键输入
output [15:0] led); // 16位LED输出
reg [25:0] counter; // 计数器,用于控制流水灯速度
reg [3:0] led_control; // LED控制输入
always @(posedge clk)
begin
if(rst==0) counter<=26'd0; // 复位时计数器清零
else if(counter<26'd499_9999) counter<=counter+1'd1; // 计数器小于4999999时加1
else counter<=26'd0; // 计数器大于等于4999999时清零
end
always @(posedge clk)
begin
if(rst==0) led_control<=4'b0000; // 复位时LED控制输入清零
else if(counter==26'd499_9999) led_control<=led_control+1'b1; // 计数器等于4999999时LED控制输入加1
else led_control<=led_control; // 否则LED控制输入不变
end
ledshow u1 (.key(key),.led_control(led_control),.led(led)); // 调用ledshow模块进行LED输出控制
endmodule
原文地址: https://www.cveoy.top/t/topic/oSas 著作权归作者所有。请勿转载和采集!