系统verilog - 流操作符多维数组到比特流

时间:2018-03-07 12:04:45

标签: system-verilog

我无法弄清楚如何采用多维数组,例如:

 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操作之后。

2 个答案:

答案 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

非常感谢你的帮助,我希望有一天能帮助别人。