一、打2拍输出的寄存器链void register_chain_2stage(data_t input[1024], data_t output[1024]) {// 5级寄存器链data_t reg1, reg2;for (int i 0; i 1024; i) {#pragma HLS PIPELINE II1// 移位操作reg2 reg1;reg1 input[i];// 输出是5个周期前的输入if (i 1) {output[i-1] reg2;}}}二、打5拍输出的寄存器链void register_chain_5stage(data_t input[1024], data_t output[1024]) {// 5级寄存器链data_t reg1, reg2, reg3, reg4, reg5;for (int i 0; i 1024; i) {#pragma HLS PIPELINE II1// 移位操作reg5 reg4;reg4 reg3;reg3 reg2;reg2 reg1;reg1 input[i];// 输出是5个周期前的输入if (i 4) {output[i-4] reg5;}}}三、上述的两个设计打拍存在的问题1.寄存器链本身是没有问题的2.存在的问题是输出的数据少了一部分四、如何解决少了的一部分数据void register_chain_5stage(data_t input[1024], data_t output[1024]) {// 5级寄存器链data_t reg1, reg2, reg3, reg4, reg5;for (int i 0; i (1024 5); i) {#pragma HLS PIPELINE II1// 移位操作reg5 reg4;reg4 reg3;reg3 reg2;reg2 reg1;if(i1024)reg1 input[i];// 输出是5个周期前的输入if (i 4) {output[i-4] reg5;}}五、寄存器链的核心设计部分// 移位操作reg5 reg4;reg4 reg3;reg3 reg2;reg2 reg1;reg1 input[i];要仔细体会这块代码。这个和verilog和system verilog设计不一样的。vivado hls中必须倒着写才能实现移位的操作设计因为这个是阻塞式的设计不是非阻塞的设计阻塞式的设计必须这么干否则功能是不正确的。