同样的verilog代码,不同的sdc约束,综合出来的电路结构差异很大,什么原因?
时间:10-02
整理:3721RD
点击:
我写了一段代码:
module TST (A, B, C, CLK);
input CLK;
input [3:0] A,B;
output [3:0] C;
reg [3:0] C;
always @ (posedge CLK)
C <= A&B;
endmodule
然后综合,综合出来的电路结构是和设计的一样。
然后将sdc约束放宽,clock周期调大,综合出来的电路结构很奇怪,但是功能看上去是一样的,将B接到DFF的RESET,A接到了D ,输出为QN的反相。
为何修改约束会造成结构的这么大的改变呢?代码没有任何改动,综合脚本也没有改动
module TST (A, B, C, CLK);
input CLK;
input [3:0] A,B;
output [3:0] C;
reg [3:0] C;
always @ (posedge CLK)
C <= A&B;
endmodule
然后综合,综合出来的电路结构是和设计的一样。
然后将sdc约束放宽,clock周期调大,综合出来的电路结构很奇怪,但是功能看上去是一样的,将B接到DFF的RESET,A接到了D ,输出为QN的反相。
为何修改约束会造成结构的这么大的改变呢?代码没有任何改动,综合脚本也没有改动
这个应该是工具的理解能力吧,也许你放松了约束,它就可以更自由地去发挥自己的能力了,个人理解。
这是必然的啊 DC就是干这个的
谢谢各位的解释,受教了!
当你的约束条件很紧的时候,DC就用最可能为了满足critical path timing以牺牲面积功耗为代价,来满足。 当约束条件很宽松,那么DC对关键路径的优化可能选用一些面积小,功耗低,速度没那么快的方案来实现。
综合工具会根据你的约束条件去综合,从而达到优化的效果。
再次受教了
学习了!
综合工具根据你的SDC约束进行综合啊!翻译完了再寻找工艺库时,会自动去选择能满足面积和时间关系的结构