请给我一些可以实现流水线以实现六阶多项式的方法。
我的想法:
同时执行三个添加,即:
aox^0 + a1x^1 = sa10;
a2x^2 + a3x^3 = sa32;
a4x^4 + a5x^5 = sa54;
还将sa10
、sa32
的值存储在flipflop1中。
接下来添加sa10 + sa32 = sa3210
,将其存储在flipflop2中,也将sa54
存储在flifflop2 中
接下来加sa3210 + sa54
得到结果。
对上面的逻辑有什么想法吗?
我建议,首先尝试在一个时钟周期内不使用流水线,然后将其分解为多个阶段。
设计取决于几个因素:
- 您想要分配多少资源(影响面积/功率)
- 你的时钟周期是多少?由于乘法器速度慢且价格昂贵,您不想将其中的许多乘法器连接起来
- 您的吞吐量是多少?你想要每个时钟周期一个结果,还是每个N个时钟周期的结果(这样你就可以进行资源共享)
以下是一个示例:假设每个时钟周期只能容忍两个连续乘法器的延迟,并且每个时钟周期需要一个多项式的吞吐量。您的管道结构可以是这样的:
第1阶段:输入:{a5,…,a0,x}
Combination circuit:
{a5,...,a0,x}---------------------->{a5,...,a0,x}
|-->------->x^2
x->[mult]->x^2->[mult]->x^3
第2阶段:输入:{a5,…,a0,x,x^2,x^3}
Combination circuit:
{a5,...,a0,x,x^2,x^3}------------------------>{a5,...,a0,x,x^2,x^3}
|-->------->x^4
x^3->[mult]->x^4->[mult]->x^5
第3阶段:输入:{a5,…,a0,x,x^2,x^3,x^4,x^5}
Combination circuit:
(a0,x^0)->[mult]->a0x^0--
(a1,x^1)->[mult]->a1x^1--
(a2,x^2)->[mult]->a2x^2-->[sum]-> a0x^0+a1x^1+...+a5x^5
(a3,x^3)->[mult]->a3x^3--/
(a4,x^4)->[mult]->a4x^4--/
(a5,x^5)->[mult]->a5x^5--/
请注意,我们正在使用大量资源(乘数)来实现每个周期一个结果的吞吐量。
如果每个阶段不能有一个以上的乘法器,则需要将阶段1和阶段2分为两个阶段。