0

我正在尝试实现以下代码:

reg [7:0] next_busy;

always @* begin
    next_busy = busy; //default assignment

    if (condition determined by module input) begin
        next_busy[0]= 1'b1;
    end
end //always @*

always @(posedge clock) begin
    if (reset) begin
        busy <= 8'b0;
    end else begin
        busy <= next_busy;
    end
end //always @(posedge clock)

这在模拟中工作得很好,但在综合中似乎对 next_busy 信号存在某种争用。也就是说,如果busy 不是1(比如前一个周期有一个复位),那么它输出一个x(如果满足输入条件)。但是,如果busy 已经为1(并且满足输入条件),则next_busy 被正确分配为1。所以我只是想知道是否有一种正确的方法来做我想做的事情,这样它也可以在综合中起作用?

4

1 回答 1

0

您通常将复位包含在触发器的敏感度列表中。对于低电平有效复位always @(posedge clock or negedge reset)

在提供的示例中,busy 没有定义,假设它是reg [7:0] busy;.

我将按照以下方式实施:

reg [7:0] busy;

always @(posedge clock or negedge reset) begin
    if (reset == 1'b0) begin
        busy    <= 8'b0;
    end
    else if (condition determined by module input) begin
        busy[0] <= 1'b1; // busy <= 8'b1;
    end
    else begin
        busy    <= next_busy;
    end
end //always @(posedge clock)
于 2012-10-30T07:18:37.570 回答