http://hsanyi.blog.163.com/blog/static/55022325201141410240710/
矩阵转置,算是矩阵运算里头最常用也是比较简单的操作,其算法思想是比较简单的,
但是放到FPGA上来实现,我们要考虑的就没有那么简单了,
因为我们并不只是单单实现其功能,还用考虑速度和面积这两个因素;
由于矩阵转置中,没有涉及其他运算,比如乘、加等,涉及的主要是移位,因此,个人认为可以着重考虑面积这个因素;
这里采用了折叠的设计思路,
首先根据3×3矩阵与其转置矩阵间元素的关系,列出了元素的寿命表,分析寿命图,主要是因果违例,以此得到最小寄存器的个数---4个。
寿命分析时,也可以采用循环寿命图,这个更加简单一些;
接下来采用“前向后向”寄存器分配技术,得到寄存器分配表,并根据寄存器分配表,绘制最终的电路。
参考图1-4:
Cycle | Input | R1 | R2 | R3 | R4 | Output |
0 | a |
|
|
|
|
|
1 | b | a |
|
|
|
|
2 | c | b | a |
|
|
|
3 | d | c | b | a |
|
|
4 | e | d | c | b | a | a |
5 | f | e | d | c | b | d |
6 | g | f | e | b | c | g |
7 | h | c | f | e | b | b |
8 | i | h | c | f | e | e |
9 |
| i | h | c | f | h |
10 |
|
| i | f | c | c |
11 |
|
|
| i | f | f |
12 |
|
|
|
| i | i |
最终电路:
Synplify Pro 综合后信息:
这是测试数据(IEEE-754):
inpX_int | inpX_ieee | oupX_int | oupX_ieee |
1 | 1065353216 | 1 | 1065353216 |
2 | 1073741824 | 4 | 1082130432 |
3 | 1077936128 | 7 | 1088421888 |
4 | 1082130432 | 2 | 1073741824 |
5 | 1084227584 | 5 | 1084227584 |
6 | 1086324736 | 8 | 1090519040 |
7 | 1088421888 | 3 | 1077936128 |
8 | 1090519040 | 6 | 1086324736 |
9 | 1091567616 | 9 | 1091567616 |
这里实现的是3×3矩阵转置,接下来,考虑实现M×N矩阵转置。