verilog2005中矩阵到阵列的转换
我知道在Verilog中矩阵不能传递到端口,所以我想知道如何将矩阵转换成数组 以代码为例:verilog2005中矩阵到阵列的转换,verilog,Verilog,我知道在Verilog中矩阵不能传递到端口,所以我想知道如何将矩阵转换成数组 以代码为例: input [7:0] matrix1 [0:3][0:3]; 该代码在systemverilog中有效,但在Verilog 2005标准中无效 有人知道怎么做吗?我需要它是可合成的。你有选择 将其拆分为更小的端口: module top(); // ... example dut( .matrix1_0_0(matrix1[0][0]), .matrix1_0_1(matrix1[0][1])
input [7:0] matrix1 [0:3][0:3];
该代码在systemverilog中有效,但在Verilog 2005标准中无效
有人知道怎么做吗?我需要它是可合成的。你有选择
将其拆分为更小的端口:
module top();
// ...
example dut(
.matrix1_0_0(matrix1[0][0]),
.matrix1_0_1(matrix1[0][1]),
// ...
.matrix1_3_2(matrix1[3][2]),
.matrix1_3_3(matrix1[3][3]),
// ... other ports ...
);
// ...
endmodule
module example(
input [7:0] matrix1_0_0,
input [7:0] matrix1_0_1,
// ...
input [7:0] matrix1_3_2,
input [7:0] matrix1_3_3,
// ... other ports ...
);
wire [7:0] matrix1 [0:3][0:3];
assign matrix1[0][0] = matrix1_0_0;
// ...
assign matrix1[3][3] = matrix1_3_3;
// ... other logic
endmodule
合并到单个总线中,然后使用+:
或-:
将其拆分回矩阵(请参阅):
moduletop();
// ...
整数i,j;
reg[8*4*4-1:0]矩阵1_总线;
总是开始
对于(i=0;i你确定你的合成工具不能处理系统verilog语法吗?我的不能,而且我已经使用了硅的2D阵列(该阵列工作正常,正在出售给客户)。在将设计读入合成工具时,您可能只需要添加-sv
开关。@nguthrie您使用的是什么工具?Cadence Engus。由于verilog 2005已有13年历史,我希望此时许多其他工具会支持一些sv语法,但我不确定,因为我只使用了这一个。@nguthrie我还发现对systemverilog的支持(在验证之外)是相当令人惊讶的-以一种糟糕的方式。为了简单起见,我将使用systemverilog。尽管我非常有兴趣看到关于如何在verilog中实现它的答案。
module top();
// ...
integer i,j;
reg [8*4*4-1:0] matrix1_bus;
always @* begin
for(i = 0; i<4; i=i+1) begin
for(j = 0; j<4; j=j+1) begin
matrix1_bus[ 8*( 4*i + j) +: 8] = matrix1[i][j];
end
end
end
example dut(
.matrix1_bus(matrix1_bus),
// ... other ports ...
);
// ...
endmodule
module example(
input [8*4*4-1:0] matrix1_bus,
// ... other ports ...
);
integer i,j;
reg [7:0] matrix1 [0:3][0:3];
always @* begin
for(i = 0; i<4; i=i+1) begin
for(j = 0; j<4; j=j+1) begin
matrix1[i][j] = matrix1_bus[ 8*( 4*i + j) +: 8];
end
end
end
// ... other logic
endmodule