【发布时间】:2012-10-30 06:52:30
【问题描述】:
我正在尝试实现以下代码:
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。所以我只是想知道是否有一种正确的方法来做我想做的事情,以便它也可以在合成中工作?
【问题讨论】:
-
您的代码对我来说看起来不错。在门级仿真中,您在哪里看到了争用?您是否在该模块中的其他任何地方分配给
next_busy?综合日志中是否有提及该信号的警告消息。
标签: simulation verilog synthesis mismatch contention