昨天在跑fpga的时候出现了这个错误。今天就来好好的谈一谈这个错误是什么意思。
首先先补充几个概念,在Verilog中,reg型变量会形成一个类似于寄存器的单元。当reg出现在always语句中时,他会根据always的条件来生成对应的寄存器类型
module sample
(
input a1,
input a2,
output b1
);
reg b1;
reg b2;
reg c1;
always @( negedge a1 or posedge a2) begin
b1 <= a1;
end
always @( a1) begin
b2 <= a1;
end
endmodule
上面代码中,
第一个always是沿触发,所以b1会被综合成一个沿触发的寄存器
第二个always是电平触发,所以b2会被综合成一个电平触发的寄存器。
下面谈一下上面那个报错,先放报错代码
module sample
(
input a1,
input a2,
output b1
);
reg b1;
reg b2;
reg c1;
always @( negedge a1 or posedge a2) begin
if(c1) begin
b1 <= a1;
end
end
endmodule
Logic for b1 does not match a standard flip-flop
这句报错的意思是b1没有匹配一个标准的触发器。从上面的代码中我们可以看到,问题在于,在上升沿触发的always里面用到了一个电平信号的if,而且这个电平信号没有在always的敏感列表里面。
通俗的说就是,你if的条件既不是always的触发条件,还不是

在FPGA开发中遇到"Logic for b1 does not match a standard flip-flop"错误,本文详细解释了该错误的含义。错误源于Verilog代码中上升沿触发的always块内使用了电平信号的if条件,且电平信号未包含在always的敏感列表。解决方法包括将信号添加到敏感列表或修改条件,但后者可能导致逻辑冲突。开发者应仔细检查代码,确保always块的触发条件与内部逻辑一致。
最低0.47元/天 解锁文章
1573

被折叠的 条评论
为什么被折叠?



