我试图以这种形式创建一个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行:由于先前的错误而忽略了模块。
答案 0 :(得分:0)
您的代码存在一些问题。
reg [1:0][7:0] a_unpacked_array[4];
- 编译器尝试将4
视为范围,但不允许单值范围。也许你的意思是[3:0]
? [1:0]
也应该是[3:0]
。您的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