0
 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

上面的代码没有合成,报错:

综合不支持在多个单边下赋值

在此处输入图像描述

根据我的解释,代码应该已经合成如上图所示。我无法找到问题。什么是停止合成代码?

4

1 回答 1

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

请注意,多路复用器的代码已被简化。

于 2015-10-07T17:30:00.480 回答