在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];
可有效解决上述问题,达到算法设计目标。