- 时序优化,往往需要解决的问题是缩短关键路径(critical path)
参考
- pipeline
- retiming(寄存器配平),目的是尽可能将寄存器与寄存器间的延迟配置为差不多的延迟,木桶效应
- 逻辑复制,如果某一寄存器输出fanout过大,会导致信号到各个逻辑节点的路径边长,从而成为关键路径,因此可用多个寄存器分担fanout。
- 操作符平衡,(加法树,乘法数),不用等待上一层结果出来再一层层计算,可以分组计算,降低逻辑延迟。
- 消除代码优先级(无优先级的逻辑用case代替ifelse)
- 关键信号后移,即将关键信号移动到if-else的第一级,这样会减小最长路径延迟
- 面积优化
- 串行化
- 资源共享
if(sel)x <= a* b; else x <= a * c;
if(sel) q <= b;else q <= c; assign x = a * q;少一个乘法器 - 模块复用
计算复数的乘积:(a + bj)*(c + dj) = (ac-bd) + j(ad + bc)
ac-bd = a(c-d)+d(a-b)
ad+bc = a(d+c)-c(a-b)只用了三个乘法器 - 逻辑优化
- 时序优化一般而言是面积换时间,面积优化反之。
=============================================2022.03.23