【发布时间】:2018-03-07 12:04:44
【问题描述】:
我不知道如何获取多维数组,例如:
bit unsigned [10:0] img [3:0][3:0];
并将这个数组作为比特流。 把它想象成一个 4X4 图像,每个像素是我想要读取的内存中的 11 位,并且我有 1 个输入引脚可以将我的图像作为位流,如果你知道如何做到这一点,我更喜欢,获取 11 位流中的数据(假设我有一个 typedef)。 我想在测试台中声明一个这样的数组,并将这个数组作为比特流发送到我想要测试的模块。
我尝试了我在网上看到的任何变化,但没有任何用处:
stream = { >> {img}};
或
stream = { << {img}};
将流定义为 bits 或 int ,exc.
编辑: 我从上述尝试中得到的错误是相同的:
"near text ">>"; expecting an operand"
非常感谢您的帮助。
edit:我正在使用 quartus2 和 modelsim-sltera 模拟器。
编辑:完整示例,这是我的测试台(起初我只是试图让流式操作符工作):
module streamtest();
logic clk;
bit unsigned [10:0] img [3:0][3:0]= '{'{11'b10001000000,11'b10001000000,11'b10001000000,11'b10001000000},'{11'b10001000000,11'b10001000000,11'b10001000000,11'b10001000000},'{11'b10001000000,11'b10001000000,11'b10001000000,11'b10001000000},'{11'b10001000000,11'b10001000000,11'b10001000000,11'b10001000000}};
bit unsigned [10:0] kernel[2:0][2:0] = '{'{11'b10001000000,11'b10001000000,11'b10001000000},'{11'b10001000000,11'b10001000000,11'b10001000000},'{11'b10001000000,11'b10001000000,11'b10001000000}};
bit [31:0] stream = { >> {img}};
initial begin
clk = 1'b0;
// stream = { >> {img}};//tried inside and outside of initial block
end
StreamConv(.pixelin(stream));
endmodule
StreamConv 是我想将数组作为比特流发送的模块,他现在是空的,所以我没有发布他。
当我使用上面的 tb 时,还有一件事我得到了错误:“Error(10170):near text: “>>”;期待一个操作数。”这是点击Analysis&Synthesis操作后的样子。
【问题讨论】:
-
我觉得两者都不错。你用的是什么模拟器?
-
感谢您的回复,我会更新我的问题,这是我的问题所必需的。
-
Modelsim 绝对支持流式操作符。但是一些语法错误是由它之前的代码引起的。你能给我们展示一个最小的完整示例吗?
-
"交叉发帖不被接受:"-> 我在两个不同且不相关的论坛上发帖有什么问题? Dave Ill 用一个完整的例子更新我的帖子。谢谢。
标签: system-verilog