新手上路
- 积分
- 48
- 金钱
- 48
- 注册时间
- 2023-12-1
- 在线时间
- 4 小时
|
想要实现的功能:按下按键后,改变state寄存器的值,并且按键按下后是边缘触发的。
仿真pass,但是综合后刷进FPGA后无法实现仿真的功能。
原代码如下:
reg [1:0] state;
assign key_sum = &key[3:0];
always @(negedge key_sum) begin
case (key[3:0])
4'b1110:state[1:0] <= 2'b00;
4'b1101:state[1:0] <= 2'b01;
4'b1011:state[1:0] <= 2'b10;
4'b0111:state[1:0] <= 2'b11;
endcase
end
今天看到有帖子说,这种情况可能是边缘触发的敏感变量在下文的代码中没有被检测到,属于“编译器”的差异。
修改代码如下(增加了一个if)
always @(negedge key_sum) begin
if(!key_sum)
case (key[3:0])
4'b1110:state[1:0] <= 2'b00;
4'b1101:state[1:0] <= 2'b01;
4'b1011:state[1:0] <= 2'b10;
4'b0111:state[1:0] <= 2'b11;
endcase
end
异常被修复
总结:这vivado的综合能力真是堪忧啊。。。。
|
|