尝试合成verilog代码时出错

时间:2014-12-07 00:14:20

标签: verilog synthesis

如果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

2 个答案:

答案 0 :(得分:1)

您错过了重置声明。不确定这是否修复了确切的错误,但是合成器期望代码在有多个边缘事件时确定哪些事件是异步的。

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

仅供参考:应为flops分配非阻止分配(<=)。它将使您免于调试错误竞争条件和RTL到门模拟不匹配。

答案 1 :(得分:0)

经过无数个小时,我已经弄明白了。这是因为我在我的always块中没有引用Clk或Reset。

感谢所有考虑过这个问题的人。

感谢格雷格的回答,虽然我想出了如何让它发挥作用我很高兴你的回应,因为它清理了为什么现在有效。谢谢!