麻烦各位帮忙看看问题出在哪里,我写出来只亮b0001
`timescale 1ns / 1ps
module jfbka(
input sysclk,
input rst_n,
input key1,
input key2,
output reg [3:0] led
);
parameter delay = 500000;
parameter delay1 = 50000000;
reg [26:0] cnt1;
reg [26:0] cnt2; // key1和key2的消抖计时
reg [1:0] wa;
reg [26:0] cnt3; // key1和key2的流水计时
wire key1_flag;
wire key2_flag; // 按键指令
// 消抖程序
always@(posedge sysclk)
begin
if(!rst_n)
begin
cnt1<=0;
cnt2<=0;
end
else if(key1==0)
if(cnt1==delay-1)
cnt1<=cnt1;
else
cnt1<=cnt1+1;
else if(key2==0)
if(cnt2==delay-1)
cnt2<=cnt2;
else
cnt2<=cnt2+1;
else
begin
cnt1<=0;
cnt2<=0;
end
end
// 流水计时器
always @(posedge sysclk ) begin
if (!rst_n)
cnt3 <= 0;
else if (cnt3 == delay1 - 1)
cnt3 <= 0;
else
cnt3 <= cnt3 + 1;
end
// 流水程序
assign key1_flag = (cnt1 == delay - 2) ? 1 : 0;
assign key2_flag = (cnt2 == delay - 2) ? 1 : 0;
always @(posedge sysclk)begin
if(!rst_n)
wa<=0;
else if(key1_flag==1)
wa<=1;
else if(key2_flag==1)
wa<=2;
else
wa<=wa;
end
always @(posedge sysclk) begin
if (!rst_n)
led <= 4'b0001;
else
case(wa)
0:led=4'b0001;
1: begin
if(cnt3 == delay1-1)
led <= {led[2:0], led[3]};
else
led <= led;
end
2: begin
if(cnt3 == delay1-1)
led <= {led[0], led[3:1]};
else
led <= led;
end
default: led <=4'b0001 ;
endcase
end
endmodule
代码逻辑上毛病不少
1:cnt3,cnt4没赋值,没变化
2:key1_flag ,key2_flag ,wa 的逻辑也有问题
3:cnt1,cnt2 的计数也不对
需要大改