26 template <
typename T,
int N>
29 for (
int i = 0; i < N; i++)
34 arr[N - 1] = new_data;
36 template <
typename T,
int N>
39 #pragma HLS array_partition variable = arr dim = 1 type = complete
40 for (
int i = N - 1; i > 0; i--)
60 template <
typename T,
int M,
int N,
int LEN>
61 void Copy(T (&src)[M], T (&dst)[N], idx_t len, T default_num)
63 for (
int i = 0; i < LEN; i++)
66 dst[i] = i < len ? src[i] : default_num;
70 template <
typename T,
int N>
71 void Copy(T (&src)[N], T (&dst)[N])
73 for (
int i = 0; i < N; i++)
98 template <
typename T,
int LEN>
102 for (
int i = 0; i < LEN; i++)
113 template <
typename T,
int N>
117 for (
int i = 0; i < N; i++)
123 template <
typename T,
int N>
124 void ArrSet(T (&arr)[N], idx_t layer, T val)
127 for (
int i = 0; i < N; i++)
129 arr[i][layer] = val[layer];
133 template <
typename T,
int LAY,
int N>
134 void Linspace(hls::vector<T, LAY> (&arr)[N], idx_t starting_idx, idx_t layer, type_t start, type_t step)
137 for (
int i = starting_idx; i < N; i++)
144 template <
typename T>
145 void Linspace(T &arr, idx_t starting_idx, idx_t layer, type_t start, type_t step,
int len)
148 for (
int i = starting_idx; i < len; i++)
167 template <
typename PACK,
typename IDX_T,
int LEN>
169 IDX_T max_pe = (qry_len - 1) % PE_NUM;
170 IDX_T max_ck = (qry_len - 1) / PE_NUM;
171 local_maximum[max_pe].score = INF;
172 local_maximum[max_pe].p_col = (max_ck) * (MAX_REFERENCE_LENGTH + PE_NUM - 1) + max_pe + ref_len - 1;
173 local_maximum[max_pe].ck = max_ck;
176 template <
typename PACK,
typename IDX_T,
int PE_NUM_,
int BANDWIDTH_,
int TB_CHUNK_WIDTH_>
178 IDX_T max_pe = (qry_len - 1) % PE_NUM;
179 IDX_T max_ck = (qry_len - 1) / PE_NUM;
180 max[max_pe].score = INF;
181 max[max_pe].p_col = max_ck * (TB_CHUNK_WIDTH_) + max_pe + ref_len - ( max_ck * PE_NUM - BANDWIDTH_ ) - 1;
182 max[max_pe].ck = max_ck;
264 template <
typename T,
int LEN,
int BLK>
266 for (idx_t j = 0; j < BLK; j++){
271 template <
typename T,
int LEN,
int BLK>
274 for (idx_t i = 0; i < LEN; i ++){
275 #pragma HLS PIPELINE II=1
277 for (idx_t j = 0; j < BLK; j++){
278 internal[j][i] = ddr_in[i][j];
287 template <
typename T,
int LEN,
int BLK>
289 for (idx_t i = 0; i < LEN; i++){
290 #pragma HLS PIPELINE II=1
291 for (idx_t j = 0; j < BLK; j++){
292 ddr_out[i][j] =
internal[j][i];
void Copy(T(&src)[M], T(&dst)[N], idx_t len, T default_num)
Copy length LEN of data from src to dst. If more than len, fill the rest with default_num. We need to use fixed length array rather than a pointer is because HLS is not pointer friendly.
Definition: utils.h:61
void top_level_readin(T ddr_in[LEN][BLK], T internal[BLK][LEN])
Definition: utils.h:272
void DetermineGlobalTracebackCoordinate(PACK(&local_maximum)[LEN], IDX_T qry_len, IDX_T ref_len)
ONLY FOR RECTANGULAR KERNEL Global alignment start the traceback at the bottom right corner of the sc...
Definition: utils.h:168
void Switch(T **arr1, T **arr2)
Definition: utils.h:91
void Linspace(T(&arr)[LEN], T start, T step)
Definition: utils.h:99
void DetermineFixedBandingGlobalTracebackCoordinate(PACK(&max)[PE_NUM_], IDX_T qry_len, IDX_T ref_len)
Definition: utils.h:177
void top_level_radin_line(T src[BLK], T dst[BLK][LEN], idx_t i)
Definition: utils.h:265
void Linspace(hls::vector< T, LAY >(&arr)[N], idx_t starting_idx, idx_t layer, type_t start, type_t step)
Definition: utils.h:134
void ArrSet(T(&arr)[N], T val)
Definition: utils.h:114
void top_level_writeout(T internal[BLK][LEN], T ddr_out[LEN][BLK])
Definition: utils.h:288
void ShiftRight(T(&arr)[N], T new_data)
Definition: utils.h:37
void ShiftLeft(T(&arr)[N], T new_data)
Definition: utils.h:27