verilog带消抖功能的约翰逊移位计数器,通过led灯显示,可通过按键变化流水方向以及控制灯的开关,用到的工具:modelsim;verilog,quartus ii。可用但不仅限于以上工具。
module john(
clk,
rst_n,
led,
sw3_n,sw2_n,sw1_n);
input clk;//50mhz
input rst_n;
output[3:0] led;
input sw3_n,sw2_n,sw1_n;
reg[11:0] cnt12;
reg led_dir;
reg led_on;
always @(posedge clk or negedge rst_n)
if(!rst_n) cnt12<=12'd0;
else cnt12<=cnt12+1'b1;
reg[3:0] led_r;
always @(posedge clk or negedge rst_n)
if(!rst_n) led_r<=4'b1110;
else if (cnt12 == 12'hfff && led_on) begin
if(led_dir)led_r<={led_r[2:0],led[3]};
else led_r<={led_r[0],led[3:1]};
end
assign led=led_r;
reg[2:0] key_rst;
always @(posedge clk or negedge rst_n)
if(!rst_n) key_rst<=3'b111;
else key_rst <= {sw3_n,sw2_n,sw1_n};