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矩阵转置。