2012-11-08 18 views
0

我在Verilog有一個學校項目,我很新手。該計劃的一個部分是此Verilog while error

integer x; 
    assign x=1; 
    **LINE 49** while(x<=9) 
      begin 
       assign lastBitsofP=P[1:0]; 
       if(lastBitsofP == 2'b00 || lastBitsofP ==2'b11) 
        begin 
        rightShift r1(shiftedValue,P); 
        end 
       x=x+1; 
      end 

,但我總是得到這個錯誤:「mainModule.v」線49期待「endmodule」,發現「而」

+0

verilog中的assign語句表示_continuously_將此值分配給此線路。因此,當您寫入賦值x = 1時,意味着x的值爲_always_等於1. – dave

+0

ok。我改變了。現在我得到一個錯誤,當我嘗試實例化rightShift r1(shiftedValue,P)..它說意想不到的r1 ..你有任何ideea? –

回答

3

你需要停下來編碼和思考到底是怎麼回事。您正在建模硬件和連接。當你寫分配x =意味着「我有一根電線,我希望你用這個值驅動那條電線」。如果你有一個像r1那樣你想連接的模塊,它必須連接總是你不能去「哦,等等,如果發生這種情況,只需要爲我創建一個乘法單元」。

您需要在開始時實例化您的連接。如果你只是想要正確的移位值,那麼你可以有一個像assign out = select ? shiftedValue : unshiftedValue;這樣的語句然後你只需要編寫select的邏輯。

而且你可能需要一個觸發器來輸出。類似於

reg [31:0] result; 
always @(posedge clk) 
begin 
    result <= out; 
end 
相關問題