作爲處理器設計的一部分,我正在使用Verilog實現一個簡單的行爲右移器。Verilog中的算術右移
移位器輸入一個32位變量,並根據變量(輸入)選擇輸出右邏輯移位或右算術移位。
以下是代碼:
module ShiftRight(
input signed[31:0] inp,
input [31:0] shamt,
output [31:0] out,
input choice
);
assign out = (choice)? (inp>>>shamt):(inp>>shamt);
endmodule
這將導致一個正確的行爲實現,但給人合成過程中以下警告:
Unit ShiftRight : the following signal(s) form a combinatorial loop: out_shift0000<31>.
(括號把係數基本上是最顯著位inp,我的情況是31)。所以我想知道這是否與inp貝因簽署了任何關係。
聽起來像你有一把梳子。在這個模塊之外循環。輸入和輸出來自哪裏,你把它們送回邏輯? out_shift0000是另一個層級的信號嗎? – Tim
FYI'shamt'只需要5位寬就可以代表32位的換檔。 – Morgan
@Tim我試着將模塊作爲頂層模塊來實現。同樣的警告。所以我猜這肯定是內在的東西。 –