module dff_async(clk,r1,r2,dout);
input clk,r1,r2;
output reg dout;
always@(posedge clk or negedge r1)
begin
if(r2)
dout<=1'b1;
else
dout<=1'b0;
end
endmodule
上面的代码没有合成,并且有错误:
根据我的解释,代码可以如上图所示合成。我无法找到问题,在合成代码时停止了什么。回复将不胜感激!合成不支持多个单边下的分配
答案 0 :(得分:1)
当dout
为低时,您需要异步重置r1
:
module dff_async (clk,r1,r2,dout);
input clk,r1,r2;
output reg dout;
always @(posedge clk or negedge r1) begin
if (!r1) begin
dout <= 1'b0;
end
else begin
dout <= r2;
end
end
endmodule
请注意,多路复用器的代码已经简化。