Altera Corporation 9
AN 82: Highly Optimized 2-D Convolvers in FLEX Devices
Figure 7. fstconv.tdf (Part 2 of 2)
-- The shift by 3 data
inter_sh3[] = (row1[1][8], row1[1][]) + (row3[1][8], row3[1][]);
-- The shift by 2 data
inter_sh2[] = (row1[1][8], row1[1][]) - (row1[3][8], row1[3][]);
-- The shift by 1 data
inter_sh1_t[1][] = (row1[2][8], row1[2][]) +
(row2[1][8], row2[1][]); -- 2 + 4
inter_sh1_t[2][] = (row3[1][8], row3[1][]) +
(row3[3][8], row3[3][]); -- 7 + 9
inter_sh1[] = (inter_sh1_t[1][9], inter_sh1_t[1][]) +
(inter_sh1_t[2][9], inter_sh1_t[2][]);
-- The shift by zero data
inter_sh0_t1[1][] = (row1[2][8], row1[2][]) +
(row2[1][8], row2[1][]);
inter_sh0_t1[2][] = (row2[2][8], row2[2][]) -
(row2[3][8], row2[3][]);
inter_sh0_t1[3][] = (row1[3][8], row1[3][]) +
(row3[2][8], row3[2][]);
inter_sh0_t2a[] = (inter_sh0_t1[1][9], inter_sh0_t1[1][]) +
(inter_sh0_t1[2][9], inter_sh0_t1[2][]);
inter_sh0_t2b[] = inter_sh0_t1[3][];
inter_sh0[] = (inter_sh0_t2a[10], inter_sh0_t2a[]) -
(inter_sh0_t2b[9], inter_sh0_t2b[9],
inter_sh0_t2b[]);
-- Shift by 3 + shift by 2
inter_3_2[] = (inter_sh3[9], inter_sh3[], gnd) +
(inter_sh2[9], inter_sh2[9], inter_sh2[]);
-- Shift by 3 + shift by 2 + shift by 1
inter_3_2_1[] = (inter_3_2[11], inter_3_2[], gnd) +
(inter_sh1[10], inter_sh1[10], inter_sh1[10],
inter_sh1[]);
-- Shift by 3 + 2 + 1 + 0
inter_3_2_1_0[] = (inter_3_2_1[13], inter_3_2_1[], gnd) +
(inter_sh0[11], inter_sh0[11],
inter_sh0[11], inter_sh0[11], inter_sh0[]);
-- Output
out[] = inter_3_2_1_0[];
END;