索引部分选择可在verilog中合成

时间:2016-01-29 02:15:08

标签: indexing verilog counter xilinx synthesis

我可以在我的verilog代码中使用下面的代码(向量索引中的计数器值)吗?

data_out[cnt*32 + 31 : cnt*32] = data_in;

这个构造在xst中是否可以合成?我有一个常量定义的data_out范围,cnt在时钟上递增,永远不会达到大于data_out最大范围的值。其他一切都与一个clk同步。

3 个答案:

答案 0 :(得分:2)

我很确定你的例子不会编译但是从Verilog 2001你可以这样做:

data_out[cnt*32 +: 32] = data_in;

IEEE 1364-2005矢量位选择和部分选择寻址中的第5.2.1节

Section 7.4.3 of IEEE 1800-2012

答案 1 :(得分:1)

我非常有信心说你不能用任何合成器合成它。

据我了解,当计数器递增时,您希望保留输出的先前值(较低索引)。没有寄存器,我不知道怎么做。

在我看来,一种方法是将每个32位存储在寄存器中(由计数器值启用)并将这些寄存器的串联分配给输出。

答案 2 :(得分:0)

我认为在上面的语句中:data_out[cnt*32 + 31 : cnt*32] = data_in;如果cnt = 0将是data_out[31:0] = data_in;

此外,正如Morgan所解释的,相同的语句可以写为data_out[cnt*32 +: 32] = data_in;