最近我在思考一个问题,自己有一个初步的答案。写出来看看有没有高人可以指点。
我们都知道写完RTL code是需要做综合的,确定一下自己的代码会不会有timing不meet的问题。如果有的话,既不是multicycle又不是flase path,就说明组合逻辑太大了,需要做逻辑切割。把一段长的组合逻辑切割成两段或者多段更短的。
问题在于,我们切割的时候,是修改的RTL代码,RTL代码的coding能力跨度比较大的,既可以coding 行为,比如加减乘除,基本的case语句,if语句,for循环,也可以coding基本的门电路,比如说与或非等逻辑。
考虑下面的简单的逻辑(=表示左边是wire型,<=表示左边是reg型):
A = B & C & D & E & F & G;
我们可以切割成下面两段,中间加一级寄存器H和I,从而优化timing:
H <= B & C & D;
I <= E & F & G;
A= H & I;
上面的RTL代码是比较好切割的,因为在RTL代码,有一堆离散的变量和门电路,可以很好的分离切割。
考虑下面一个情况,你应该怎么切割:
reg [31:0