verilog通过中+:与-:解决变量内固定长度数据位的动态选取

        在FPGA设计过程,尤其是算法实现时hi,有时往往需要选取某个变量的动态范围地址,而verilog中常规的向量标识方法a[ MSB: LSB]往往会发生错误,在此可借用a[ BASE :- WIDTH]的方式实现。
a[ BASE+:(/-:) WIDTH]

BASE:基地址
WIDTH:数据宽度,固定。

       举例如下:
       在半色调像素处理算法中,对输入序列依次动态选取固定长度的常规写法为
        PV[n][m]<=pixel_bits[((m-1)*N_col*pixel_size+(n-1)*pixel_size+1'b1:((m-1)*N_col*pixel_size+n*pixel_size)];
       此时通过quartus II 软件进行综合软件将会报错:
Error (10734): Verilog HDL error at PP_Memory_Unit.v(212): m is not a constant
Error (10734): Verilog HDL error at PP_Memory_Unit.v(212): n is not a constant
       此时可通过改写为PV[n][m]<=pixel_bits[((m-1)*N_col*pixel_size+(n-1)*pixel_size+1'b1)+:pixel_size];
       可有效解决上述问题,达到算法设计目标。

你可能感兴趣的:(verilg)