2016-03-03 63 views
0

我是Verilog中的新手,我嘗試使用verilog實現單精度浮點加法 - 減法。我收到了一個我無法糾正的錯誤。誰能幫幫我嗎?verilog中的「生成」和「endgenerate」附近的語法錯誤

module addModule(Rs,Re,Rm,As,Ae,Am,Bs,Be,Bm);

//Declarations of ports 
    Rs,Re,Rm; 
    As,Bs; 
    input [7:0] Ae,Be; 
    input [22:0] Am,Bm; 

reg [7:0] Re; 
reg [22:0] Rm; 
reg Rs; 
//wire declarations. 
wire [23:-1] C; 
assign C[-1] = 0; 
wire [23:1] sum; 
//variable declaration. 
genvar count; 

always @(*) 
begin 
//Add two mantissas. 
if ((As^Bs)==0) 
    begin 
     generate //getting error here "Syntax error near "generate"." 
     for(count=0;count<24;count=count+1) 
      begin 
       add add_1(.c_out(C[count]),.sum(sum[count]),.in1(tempAm[count]),.in2(tempBm[count]),.c_in(C[count-1])); 
      end 
     endgenerate //syntax error near "endgenerate" 
    end 

else 
    begin 
     generate //Syntax error near "generate". 
     for(count=0;count<24;count=count+1) 
      begin 
       subtract sub_1(.c_out(C[count]),.dif(sum[count]),.in1(tempAm[count]),.in2(tempBm[count]),.c_in(C[count])); 
      end 
     endgenerate //Syntax error near "endgenerate". 
    end 


end 
endmodule 

在此先感謝。 :)

+0

實例(即'減去sub_1')不會進入'always'或'initial'塊 – Morgan

回答

6

在Verilog的,當你實例一個模塊,這意味着你要添加額外的硬件板。

在模擬開始前(即在編譯時)必須添加此硬件。在這裏,您可以在每個時鐘脈衝上添加/刪除硬件,而不是而不是

一旦實例化,模塊將被執行/檢查每個時間戳的模擬,直到結束。

所以要執行任何模塊,只需實例化它,提供clk和其他所需的輸入,並且將always塊添加到子模塊本身中。

一旦硬件是實例,應當根據用於整個壽命它裏面的邏輯,來執行。

在這裏你正在實例化模塊錯誤的地方。使用generate塊必須完成以外的任何程序塊。

// generate outside any other blocks 
    generate 
    for(count=0;count<24;count=count+1) 
     begin 
      add add_1(.c_out(C[count]),.sum(sum[count]),.in1(tempAm[count]),.in2(tempBm[count]),.c_in(C[count-1])); 
     end 
    endgenerate 

always @(*) 
begin 
// Other stuff here. 
end 

如果你想處理輸入信號subtract sub_1模塊的,只需操縱CsumaddModule模塊聲明的其他變量。由於它們連接,所以的變化也反映在subtract sub_1模塊中的

有關生成塊的更多信息,請參閱Module InstantiationGenerate block examplesimilar question鏈接。

+0

我想調用add模塊或減去模塊,具體取決於if塊是否滿足條件。我嘗試在兩個任務中定義生成塊,一個用於調用add模塊,另一個用於調用總是在@(*)之上的減法模塊,並在if else塊中調用任務,但它仍然不工作。 –

+2

@vishnupriya你不** ** CALL **模塊** **實例化**它們。你描述的硬件不寫軟件。您必須使添加和減去始終存在,然後選擇要使用哪一個的輸出。 – Morgan

+2

模塊在仿真開始時被實例化一次。正如Morgan所指出的,模塊代表物理硬件,而任務和功能則用於計算重複代碼。在你的情況下,可以有一個解決方法來添加一個信號/線作爲輸入到每個模塊'add'和'subtract'。只有當控制線的值變高時才執行操作。例如。當「As^Bs = 1」並且執行加法時,導線變爲高電平狀態。同時給「sub1」模塊倒相。還可以有其他的邏輯。然而在任何情況下,生成塊都需要在程序塊之外。 – sharvil111