Matrix 分配4*4矩阵的值

Matrix 分配4*4矩阵的值,matrix,verilog,Matrix,Verilog,我正试图以这种形式创建一个4*4矩阵: 2 3 1 1231 1 12 3 3112 然后我需要分配每个位置的values元素乘以4个输入,每个输入8位 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 re

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

2 3 1
1231
1 12 3
3112

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

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
我仍然有这些错误:

错误:HDLCompiler:939-“D:/Embedded\u Project/Mix\u Nibbles\u matrix.v”第38行:verilog的这种模式下不允许单值范围
错误:HDLCompiler:1439-“D:/Embedded\u Project/Mix\u Nibbles\u matrix.v”第38行:在verilog的这种模式下不允许多个压缩维度
错误:HDLCompiler:1417-“D:/Embedded\u Project/Mix\u Nibbles\u matrix.v”第44行:非网络a\u unpacketed\u数组的assign语句中不允许位选择或部分选择
错误:HDLCompiler:598-“D:/Embedded\u Project/Mix\u Nibbles\u matrix.v”第27行:由于以前的错误,模块被忽略


您的代码有几个问题

  • Verilog不支持多个压缩维度。您需要使用SystemVerilog来实现此构造。您也可以按照@Greg建议使用未打包维度
  • reg[1:0][7:0]一个未打包的数组[4]-编译器尝试将
    4
    视为范围,但不允许使用单值范围。也许你的意思是
    [3:0]
    ?而且
    [1:0]
    可能应该是
    [3:0]
  • 您的
    始终
    块存在一些问题:缺少
    开始-结束
    ,不必要的
    分配
    关键字,等等:

    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
    
    始终@(posedge clk或negedge rst)
    如果(!rst)开始
    
    a_unpackage_array[0][0]非常感谢,我已经修改了您在回复中提到的代码,但是我仍然有这个错误:在verilog的这种模式下不允许多个压缩维度。。注:我拥有ISE Project navigator版本14.6版权所有(c)1995-2013…如果我试图在上述评论中提及您,是否可以@qiupase——Qiu@user2014,错误消息显示:“不允许多个打包维度”,因此请尝试多个未打包维度:
    reg[7:0]a_unpacketed_数组[0:3][0:3]
    @user2014:很抱歉造成混淆,我对我的答案做了一点编辑。