2012-12-06 44 views
1

我正在嘗試生成128個parellel XOR門,然後將它們的輸出連接到Verilog中的64個XOR門。我使用準備名爲「EXOR」的模塊。我的問題是:當我把這個模塊「EXOR」放到循環中時,程序給出語法錯誤「意外標記:'EXOR'」。我想命名大門exor0,exor1,...。如何在Verilog的循環中使用準備好的模塊?

我該如何解決?

initial begin 
    for (i=0; i<128 ; i=i +1) 
    EXOR exor[i](.I1(m[2*i]), .I2(m[2*i+1]), .o(t[i])); 
end 

initial begin 
    for (i=0; i<64 ; i=i +1) 
    EXOR exor[i+128](.I1(t[2*i]), .I2(t[2*i+1]), .o(f[i])); 
end 

initial begin 
    for (i=0; i<32 ; i=i +1) 
    EXOR exor[i+192](.I1(f[2*i]), .I2(f[2*i+1]), .o(g[i])); 
end 
+0

生成語句時,不能將實例化放在初始或總是@塊中 – Morgan

+0

爲什麼在已有原生基元'xor'時創建EXOR模塊?這是否需要像大門一樣完成?作爲行爲會更容易,例如:對於(i = 0; i <128; i = i + 1)t [i] = m [2 * i]^m [2 * i + 1] – Greg

回答

3

爲了詳細說明Munkymorgy的回答,您要查找的內容是生成循環。 「初始」和「總是」塊用於「運行時」結構。既然你正試圖在實例上創建一個數組,你需要在精化時解釋一些東西。

genvar i; 

generate 
    for (i = 0; i < 64; i = i + 1) begin : gen_loop 
     EXOR exor(.I1(m[2 * i]), .I2(m[2 * i + 1], .o(t[i])); 
    end 
endgenerate 

兩件事情:

1)循環變量必須被聲明爲 'genvar'

2)for循環需要被命名。這將在實例的分層名稱中使用。