一、SRL移位寄存器说明
1.SRL移位寄存器的称谓
Shift Register Look-Up-Table (LUT)
二、HLS实现移位寄存器常用方式
1.在HLS中的算法,使用数组按照顺序移动来实现SRL移位寄存器
for(i=1;i<N;i++){
array[i] = arrray[i-1];
}
array[0] = in_data;
这个代码是HLS常用的实现移位寄存器的模型设计代码架构。
2.这个算法在数组的开始处添加新值,也就是in_data;
3.在数组中移动现有的数据;
4.删除最早的数据值;
以上的操作过程在硬件中是使用移位寄存器来实现的。
如果要将上述的方式实现硬件的移位寄存器,需要将array数组完全展开,也就是array_partition。
for (int i = 3; i > 0; i–) {
arr[i] = arr[i-1]; // 前一个元素赋值给后一个
}
arr[0] = new_data;
这个代码,前后两个元素组成链式关系,也就是所谓的支持RTL中元素之间的数据依赖关系。
综合工具发现这种链式关系之后,就暗示工具这个使用移位寄存器来综合。
上述代码是否综合为SRL的资源,并不是完全确定的,工具并不是能够完全推断。
三、ap_shift_reg类
1.HLS高层次综合工具使用ap_shift_reg
确保 C 语言代码中定义的移位寄存器始终使用 SRL 资源来实现。ap_shift_reg 类采用 2 种方法来执行 SRL 组件支持的各种读写访问
static ap_shift_reg<int, 4> Sreg;
int var1;
// Read location 2 of Sreg into var1
var1 = Sreg.read(2);
注意:static qualifier使用static限定符是必须的

