【问题标题】:Can I use an array 'arr[x][y]' inside an always block? Is it Synthesizable?我可以在 always 块中使用数组 'arr[x][y]' 吗?可以合成吗?
【发布时间】:2015-12-12 07:04:12
【问题描述】:
always@(posedge clk)
begin
r00<=r01;
r01<=r02;
r02<=arr[x][y];
//code
end

这可以在生成块中合成吗? 'arr' 也是二维的。

【问题讨论】:

  • 这取决于综合工具。许多合成器为这种类型的数组创建了类似 RAM 的结构。
  • 是的,为什么不呢。对于生成的块或总是块来说,这没什么大不了的。真正的问题是,如果 arr 非常庞大,那么综合工具会创建一个大型寄存器组来对其进行建模,并导致运行时间长,有时会耗尽所有内存空间并崩溃。

标签: system-verilog synthesis


【解决方案1】:

为了详细说明上面的 cmets,您的综合工具应该推断这是内存,但根据您的声明和使用情况,有几种情况。

  1. 由于访问模式导致的 read-during-write 和其他内存接口错误,您的代码会出现不可综合或错误

  2. 您的内存实际上将被推断为寄存器,这会使您的设计由于大小而无法综合。

  3. 一切都会很好。

许多工具(例如 Quartus)都带有内置功能,可以为您的代码添加内存(例如 Megafunction 工具)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2013-04-12
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2020-06-24
    相关资源
    最近更新 更多