Matrix 如何在Verilog代码中给出输入矩阵?

Matrix 如何在Verilog代码中给出输入矩阵?,matrix,verilog,Matrix,Verilog,我正在编写verilog代码,用于在4x4矩阵中插入值 我需要在4x4矩阵中收集16个输入。我该怎么做 reg [15:0]fun_out; integer x, y; always @(posedge clk or negede rst_n) begin if (~rst_n) begin for (x=0,x<4,x=x+1) begin for (y=0,y<4,y=y+1) begin data[0][0] <= fun_

我正在编写verilog代码,用于在4x4矩阵中插入值 我需要在4x4矩阵中收集16个输入。我该怎么做

reg [15:0]fun_out;    
integer x, y;
always @(posedge clk or negede rst_n) begin
  if (~rst_n) begin
    for (x=0,x<4,x=x+1) begin
      for (y=0,y<4,y=y+1) begin
        data[0][0] <= fun_out[0];
        data[0][1] <= fun_out[1];
        data[0][2] <= fun_out[2];
        data[0][3] <= fun_out[3];
        data[1][0] <= fun_out[4];
        data[2][0] <= fun_out[5];
         ........
         ........
        data[4][3] <= fun_out[14];
        data[4][4] <= fun_out[15]; 
      end
    end
  end
  else begin
    data[x][y]<=4'b0;
  end
end ```

  

reg[15:0]fun\u out;
整数x,y;
始终@(posedge clk或negede rst_n)开始
如果开始

对于(x=0,x,考虑到NUM_WIDTH是矩阵中每个值的位数:

localparam NUM_WIDTH = 4;
localparam NUM_X = 4;
localparam NUM_Y = 4;
我们可以使用“+:”索引数组的一个块。也就是说,我们可以将矩阵中每一行的数据打包并分配为:

genvar I, J;

wire [(NUM_WIDTH*NUM_X)-1:0] matrix [NUM_Y-1:0];

generate
  for(I = 0; I < 4; I = I + 1) begin: matrix_gen_y
    for(J = 0; J < 4; J = J + 1) begin: matrix_gen_x
      assign matrix[I][(J*NUM_WIDTH)+:NUM_WIDTH] = (I*NUM_X)+J+1; //..from 1 to 16
    end
  end
endgenerate
assign value = matrix[y_idx][(x_idx*NUM_WIDTH)+:NUM_WIDTH];