我正在尝试管道一个模块,该模块由5个乘法器和5个串联的加法器组成。该模块是一个多项式计算器。如果没有流水线,模块到目前为止工作正常。
+----+---------+
| id | name |
+----+---------+
| 1 | seats |
| 3 | tires |
+----+---------+
没有流水线,结构如下所示,
multipliers [31:0] m0,m1,m2,m3,m4; // separate module
adders [31:0] a0,a1,a2,a3,a4; // separate module
user_input [31:0] input; // register
constants [31:0] c0,c1,c2,c3,c4; // registers
pipeliners [31:0] p0,p1,p3,p4,p4; // pipelining resisters
wires [31:0] w0,w1,w2,w3,w4; // wires
由于所有这些都是串联连接,关键路径由10个组件组成。
我实现了流水线操作的想法,
[input]*[c0] => w0 => [w0]+[c1] => w1 => [w1]*[input] => w2 => [w2]+[c2] => w3 ... //goes on like this
我有一个错误,“不能由原语或连续赋值驱动。”这是由于p0,p1,p3 ...寄存器。将它们转换为导线可以解决错误,但之后它们不再是寄存器。我使用iverilog作为编译器。
我的问题是,如何进行流水线操作以便使用最少的时钟周期获得输出并解决错误?
*******使用代码*******编辑的版本
[input]*[c0] => w0 => p0 => [p0]+[c1] => w1 => p1 => [p1]*[input] => w2=> p2 => [p2]+[c2] => w3 ... //goes on like this