2014-12-07 80 views
0

我想做一个模块,执行值的二进制补码,如果msb是1.它工作在节奏,但是当我尝试合成它时,我得到以下错误:错误当试图合成verilog代码

无法测试变量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 

回答

1

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

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

仅供参考:触发器应分配非阻塞分配(<=)。它可以帮助您避免调试错误的竞态条件和RTL来解决模拟失配问题。

0

无数小时后,我已经知道了。这是因为我并没有在我的总是封锁中引用Clk或Reset。

感谢任何考虑此问题的人。

感谢格雷格的答案,但我想出了如何使其工作,我很高兴你的回应,因为它清除了它为什么现在的作品。谢谢!