假设我有一个多维数组:
logic [7:0] mda [7:0];
我现在要做的是将 mda[7:4]
分配给输出端口,即定义如下:
output [31:0] odata;
当然,我可以使用连接来完成:
assign odata = {mda[7], mda[6], mda[5], mda[4]};
但是应该有(而且可能是)更简单的方法来做到这一点。第一次尝试是:
assign odata = mda[7:4];
这是错误的,因为类型(未打包 <-> 打包数组)不匹配。我所有的转换尝试(例如 32'(mda[7:4])
)都失败了。问题是:将该切片分配给输出端口的最佳方法是什么?
最佳答案
您可以使用 for 循环...大多数综合工具都可以在恒定范围内使用 for 循环:
module dut(output [31:0] odata);
logic [7:0] mda [7:0];
reg[31:0] data;
always @* begin
data = 0;
for(int i=7; i >=4; i--) begin
data <<= 8;
data |= mda[i];
end
end
assign odata = data;
endmodule
这是一个快速测试:http://www.edaplayground.com/x/GfM
关于multidimensional-array - 如何输出多维数组切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883974/