Vivado在尝试使用非恒定整数切片数组时出现问题

时间:2019-01-17 01:51:06

标签: arrays verilog synthesis

我正在使用Verilog进行设计,并且正在使用一个整数,每次always模块在时钟正沿运行时都会重新定义该整数。这对于我在always块中的两个数组之一正常工作,但是Vivado抱怨(仅)第二个数组使用“非常量”作为索引,以选择数组的切片。 o_pl_inst是一个128位的寄存器,而csh_reg是一个128兆位的寄存器,我一次要选择128位存储在o_pl_inst中。在相同情况下,如何分配数组的动态切片没有问题,就像在“ csh_reg[i*i-127] = activ_inst;”中一样,但是在相同的庄园中我没有价值?任何帮助将不胜感激。

我尝试将数组声明移到Always块之外,但这会引起新的问题。

    always@(posedge clk) begin
            // Load instructions into the CSH
            int i = (inst_width*(sp_csh+1))-1; /*Reference index generation for dynamic array slicing*/
            int j = (i_pl_sp*128)-1; /*Reference index generation for dynamic array slicing*/

            csh_reg[i*i-127] = activ_inst; /*Load 128-bit instructions into the array 128 bits apart*/
            sp_csh = sp_csh +1; /*Increment internal CSH_sp*/
            activ_inst = i_ps_inst; /*Get next instruction*/

            // Save instruction from CSH
            o_pl_inst = csh_reg[j:j-127]; /*Retrieve 128-bit instruction from 1 of 1048576 positions in CSH*/
    end

我需要修订/替代可以综合。根据我的阅读,Vivado在使用非常数切片时往往会遇到问题,但这仅在第二个数组中发生了……

1 个答案:

答案 0 :(得分:1)

这个问题已经得到解决,这在很大程度上要归功于这些评论。我将分享所做的更改以使其正常运行;首先,我的BRAM使用率太高。显然,在尝试进行合成之前,我没有得到任何警告,但是在合成或实施过程中都会碰到它,因此我根据芯片的数据表进行了调整,以不使用超过可用的BRAM的内存。其次,我使用的是动态切片的形式,该切片在Vivado中不受支持,但在Quartus之类的其他工具中得到支持,因此我使用@dwikle在注释中共享的链接进行了更改。之后,我在声明中留下了一个愚蠢的错误:我已将我的一个参数声明为向量,并试图将其分配给数组。所以我改变了。谢谢大家。