我可以在我的verilog代码中使用下面的代码(向量索引中的计数器值)吗?
data_out[cnt*32 + 31 : cnt*32] = data_in;
这个构造在xst中是否可以合成?我有一个常量定义的data_out范围,cnt在时钟上递增,永远不会达到大于data_out最大范围的值。其他一切都与一个clk同步。
答案 0 :(得分:2)
我很确定你的例子不会编译但是从Verilog 2001你可以这样做:
data_out[cnt*32 +: 32] = data_in;
IEEE 1364-2005矢量位选择和部分选择寻址中的第5.2.1节
答案 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;
。