【问题标题】:Error when trying to synthesize verilog code尝试合成verilog代码时出错
【发布时间】:2014-12-07 00:14:19
【问题描述】:

如果 msb 为 1,我正在尝试制作一个执行值的二进制补码的模块。它按节奏工作,但是当我尝试合成它时,我收到以下错误:

无法测试变量X_parallel,因为它不在事件表达式中或极性错误。

模块代码如下:

module xTwosComp (X_parallel, Clk, Reset, X_pos);
input [13:0] X_parallel;
input Clk, Reset;
//wire X_msb; //was an attempt at fixing the problem
output [13:0] X_pos;
reg [13:0] X_pos;

//assign X_msb=X_parallel[13];//failled attempt at fixing

always @ (posedge Clk or posedge Reset)
begin
        if (X_parallel[13]) begin
             X_pos = ~(X_parallel) +1;
        end else begin
             X_pos = X_parallel;
        end
end

endmodule

【问题讨论】:

    标签: verilog synthesis


    【解决方案1】:

    您缺少重置语句。不确定这是否能修复确切的错误,但合成器希望代码在存在多个边缘事件时确定哪些事件是异步的。

    if (X_parallel[13]) 之前需要一个if (Reset) begin X_pos <= 14'b0; else。否则posedge Reset 被视为另一个时钟而不是异步复位。这会混淆合成器。

    仅供参考:应为触发器分配非阻塞分配 (<=)。它将使您免于调试虚假竞争条件和 RTL 到门模拟不匹配。

    【讨论】:

      【解决方案2】:

      经过无数个小时,我想通了。这是因为我没有在 always 块中引用 Clk 或 Reset。

      感谢任何考虑过这个问题的人。

      感谢 Greg 的回答,虽然我知道如何让它发挥作用,但我很高兴你的回复,因为它阐明了为什么它现在有效。谢谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-18
        • 1970-01-01
        • 1970-01-01
        • 2016-07-15
        • 2014-06-06
        相关资源
        最近更新 更多