是否在 verilog 中使用可合成的信号索引到数组中?

Is indexing into an array with a signal synthesizable in verilog?

下面合成有问题吗?:

 // Read entry
  assign entry[7:0] = my_array[read_address[10:0]][7:0];

其中 read_address 是用于读取 my_array.

的信号

我习惯了 AND-OR 逻辑来读取数组,但我想知道上面是否 1) 可综合和 2) 它会创建什么样的逻辑?

是的,您可以使用另一个变量或表达式作为数组的索引。问题是您只能在连续作业的 RHS 上执行此操作。你不会被允许做相反的事情

assign my_array[read_address[10:0]] = entry; // illegal

此外,如果这是元素或信号的整个范围,则无需 select [7:0]。事实上,这会导致有符号信号出现问题,使它们成为无符号操作数。