在多项式中流水线化

时间:2014-02-20 22:29:41

标签: verilog pipelining

请建议我使用一些方法来实现流水线操作以实现6阶多项式。

我的想法:
同时执行三个添加,即:

aox^0 + a1x^1 = sa10;
a2x^2 + a3x^3 = sa32;
a4x^4 + a5x^5 = sa54;

同时在flipflop1中存储sa10sa32的值。

接下来添加sa10 + sa32 = sa3210将其存储在flipflop2中,同时将sa54存储在flipflop2中

接下来添加sa3210 + sa54以获得结果。

关于上述逻辑的任何想法?

1 个答案:

答案 0 :(得分:2)

我建议,首先尝试在一个时钟周期内不进行流水线操作,然后将其分解为多个阶段。

设计取决于几个因素:

  • 您想分配多少资源(影响面积/功率)
  • 你的时钟周期是多少?由于乘数很慢且成本很高,因此您不希望将其中的许多连接回来。
  • 您的吞吐量是多少?您希望每个时钟周期得到一个结果,还是每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分成两个阶段。