分配4 * 4矩阵的值

时间:2015-04-25 09:06:18

标签: matrix verilog

我试图以这种形式创建一个4 * 4矩阵:

  

2 3 1 1
  1 2 3 1
  1 1 2 3
  3 1 1 2

然后我需要在每个位置分配values元素,每个8位乘以4个输入。

a0, a1, a2, a3

我试过写这段代码:

module Mix_Nibbles_Matriex(
  out_0,out_1,out_2,out_3,nibble_0,nibble_1,nibble_2,nibble_3,
  clk,rst,load  
);

  input clk,rst,load ;
  output reg [7:0] out_0,out_1,out_2,out_3;
  input [7:0] nibble_0,nibble_1,nibble_2,nibble_3; 
  //wire matrix[3:0][0:3];

  reg [1:0][7:0] a_unpacked_array[4];

  always @( posedge clk or negedge rst)
  if (!rst)
    a_unpacked_array[0][0]=0;
  else if (load)
    assign a_unpacked_array[0][0]=2;
    assign a_unpacked_array[0][1]=3;
    assign a_unpacked_array[0][2]=1;
    assign a_unpacked_array[0][3]=1;

    assign a_unpacked_array[1][0]=2;
    assign a_unpacked_array[1][1]=3;
    assign a_unpacked_array[1][2]=1;
    assign a_unpacked_array[1][3]=1;

    assign a_unpacked_array[2][0]=2;
    assign a_unpacked_array[2][1]=3;
    assign a_unpacked_array[2][2]=1;
    assign a_unpacked_array[2][3]=1;

    assign a_unpacked_array[3][0]=2;
    assign a_unpacked_array[3][1]=3;
    assign a_unpacked_array[3][2]=1;
    assign a_unpacked_array[3][3]=1;

    //display ("a_unpacked_array      = %b", a_unpacked_array);
endmodule

我仍然有这些错误:

  

错误:HDLC编译器:939 - " D:/Embedded_Project/Mix_Nibbles_Matriex.v"第38行:在这种verilog模式下不允许单值范围   错误:HDLC编译器:1439 - " D:/Embedded_Project/Mix_Nibbles_Matriex.v"第38行:在这种verilog模式下不允许多个包装尺寸   错误:HDLC编译器:1417 - " D:/Embedded_Project/Mix_Nibbles_Matriex.v"第44行:非net a_unpacked_array的assign语句中不允许进行位选择或部分选择
  错误:HDLC编译器:598 - " D:/Embedded_Project/Mix_Nibbles_Matriex.v"第27行:由于先前的错误而忽略了模块。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

  1. Verilog不支持多个打包尺寸。你need使用SystemVerilog来使这个结构工作。您也可以按照@Greg建议使用解压缩维度。
  2. reg [1:0][7:0] a_unpacked_array[4]; - 编译器尝试将4视为范围,但不允许单值范围。也许你的意思是[3:0][1:0]也应该是[3:0]
  3. 您的always阻止了一些问题:缺少begin-end,不必要的assign关键字等:

    always @(posedge clk or negedge rst)
      if (!rst) begin
        a_unpacked_array[0][0] <= 0;
        //...
      end else if (load) begin
        a_unpacked_array[0][0] <= 2;
        //...
      end