Home Articles

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

Asked
Viewed 268 times
0

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

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):接近文本:”>>“;期望一个操作数 . ”这是在点击Analysis&Synthesis操作之后 .

2 Answers

  • 1

    这是一个综合工具/版本支持问题 . 您编写的代码是合法的SystemVerilog语法,但目标 stream 需要至少16 * 111 = 176位 .

  • 0

    首先,非常感谢dave_59,我已经尝试了更大的流量大小没有帮助 .

    但我确实找到了答案,我使用quartus 2并且该工具不支持流操作符,如下面的链接中的第11- "Operators and Expressions"节所示:http://quartushelp.altera.com/14.1/mergedProjects/hdl/vlog/vlog_list_sys_vlog.htm

    非常感谢你的帮助,我希望有一天我们会帮助别人 .

Related