2014-12-07 83 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。

感謝任何考慮此問題的人。

感謝格雷格的答案,但我想出瞭如何使其工作,我很高興你的迴應,因爲它清除了它爲什麼現在的作品。謝謝!