我无法弄清楚如何采用多维数组,例如:
bit unsigned [10:0] img [3:0][3:0];
将此数组作为比特流。 把它想象成一个4X4图像,每个像素在我想要读取的内存中是11位,我有1个输入引脚可以将我的图像作为比特流,我更喜欢,如果你知道如何做到这一点,获取11位流中的数据(假设我有一个typedef)。 我想在testbench中声明一个这样的数组,并将这个数组作为一个位流发送到我想要测试的模块。
我尝试做任何我在网上看到的变化,但没什么用处:
stream = { >> {img}};
或
stream = { << {img}};
将流定义为位或int,exc。
编辑: 我从上述尝试中得到的错误是相同的:
"near text ">>"; expecting an operand"
非常感谢您的帮助。
编辑:我正在使用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时,还有一件事我得到错误:“错误(10170):接近文本:”&gt;&gt;“;期待操作数。”这是在点击Analysis&amp; Synthesis操作之后。
答案 0 :(得分:1)
这是一个综合工具/版本支持问题。您编写的代码是合法的SystemVerilog语法,但目标stream
需要至少16 * 111 = 176位。
答案 1 :(得分:0)
首先非常感谢dave_59,我已经尝试了更大的尺寸,因为没有帮助。
但是我确实找到了答案,我使用了quartus 2并且该工具不支持流媒体运算符,如第11节 - &#34;运算符和表达式&#34;中所示,在下面的链接中: http://quartushelp.altera.com/14.1/mergedProjects/hdl/vlog/vlog_list_sys_vlog.htm
非常感谢你的帮助,我希望有一天能帮助别人。