【问题标题】:Indexed part select synthesizable in verilog在verilog中可合成的索引部分选择
【发布时间】:2016-01-29 02:15:08
【问题描述】:
我可以在我的 verilog 代码中使用类似下面的代码(向量索引中的计数器值)吗?
data_out[cnt*32 + 31 : cnt*32] = data_in;
这个结构可以在 xst 中合成吗?我有一个常量定义的 data_out 范围,并且 cnt 在时钟上递增,并且永远不会达到大于 data_out 的最大范围的值。其他一切都与一个 clk 同步。
【问题讨论】:
标签:
indexing
verilog
counter
xilinx
synthesis
【解决方案2】:
我很自信地说你不能用任何合成器来合成它。
据我了解,您希望在计数器增加时保留输出的先前值(较低索引的)。我看不出没有寄存器怎么做。
在我看来,一种方法是将每个 32 位存储在寄存器中(由计数器值启用)并将这些寄存器的串联分配给输出。
【解决方案3】:
我认为在上面的陈述中:data_out[cnt*32 + 31 : cnt*32] = data_in; 如果cnt = 0,它将是data_out[31:0] = data_in;。
此外,同样的语句可以写成 data_out[cnt*32 +: 32] = data_in;,正如 Morgan 所解释的那样。