verilog把长位宽数据剪切成短位宽,把短位宽数据拼接成长位宽
将一段长数据分配给几个短数据;
例如:将16bit的数据,分成4bit一组,且最先取出最高四位,然后从左至右
因为直接使用i进行坐标选择时会报出错误
Error:Range must be bounded by constant expressions.
考虑使用移位,每次移四次,每次取最高四位,但是这样会消耗多余的资源
//reg [15:0] din ; // 16 位输入数据 (测试时,设为输入,不然下面的*没有敏感信号)
reg [3:0] split_data [0:3]; // 存储拆分的 4 位数据,总共 4 个 4 位数据
integer i;
always @(*) begin
for (i = 0; i < 4; i = i + 1) begin
//split_data[i] = din[i * 4 +: 4]; // 使用位切片 从低位开始切
split_data[i] = din[16 - (i * 4) - 1 -: 4];// 使用位切片 从高位开始切
//split_data[i] = xbit[W0 - (i * W1): W0 - ((i+1) * W1)]; //直接赋值有i这个变量,编译不通过,原因是两边都有i,导致位宽不确定
end
end
相当于直接对应连线
而把短位宽拼接成长位宽也是一样,调换一下位置就可以了
reg [15:0] split_data1;
always @(*) begin
for (i = 0; i < 4; i = i + 1) begin
//split_data1[i * 4 +: 4] = split_data[i];
split_data1[16 - (i * 4) - 1 -: 4] = split_data[i];
end
end
原文地址:https://blog.csdn.net/qq_43811597/article/details/142961048
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!