2016-03-04 629 views
-1

我想乘以1x3 * 3X64矩陣,這裏因爲矩陣中的每個值都是十進制數,所以對於每個值我都採用了4位,即4x64位總共訪問每行的4位。如何在Verilog中進行矩陣乘法?

我試圖推廣它。

基質是形式的1x3 [2,4,3] &

3*64(64 decimal value in each row)

row 1[111111111111111111111111111111(64)]

row 2[11111111(8)22222222(8).....88888888(8)]

row 3[1234567812345678..................12345678]

其中我試圖

[email protected](h1,h2,h3) 
     begin 
z1 =((w0[3:0]*h1[3:0])+(w1[3:0]*h2[3:0])+(w2[3:0]*h3[3:0])); 
z2=((w0[3:0]*h1[7:4])+(w1[3:0]*h2[7:4])+(w2[3:0]*h3[7:4])); 

. 
. 
. 
. 
. 
z64=((w0[3:0]*h1[255:252])+(w1[3:0]*h2[255:252])+(w2[3:0]*h3[255:252])); 


    end 

     endmodule 

我需要的這個廣義形式..

錯誤代碼我已經得到了:

ERROR:HDLCompilers:110 - "mat.v" line 36 Least significant bit operand in part-select of vector wire 'h1' is illegal

for(i=3;i<255;i=i+4) 
     begin 
      for(j=0;j<255;j=j+4) 

      begin 
       z[i:j]=((w0[3:0]*(h1[i:j]))+(w1[3:0]*h2[i:j])+(w2[0]*h3[i:j])); 

      end 

回答

0

a。選擇Verilog的一部分,就必須不斷髮展。 h1[i:j]是非法的。 h1[i +: 4]是合法的,意味着與非法h1[i:(i+3)]相同。 (並且h1[i+3 -: 4]的含義與非法的h1[(i+3):i]相同)。

但是,使用二維數組不能解決您的問題嗎?例如:

reg [3:0] h1 [0:63];