1.适当进行逻辑复制以优化设计速度(减少扇出)
逻辑复制是指当某个信号扇出比较大时,会造成该信号到各个目的逻辑节点的路径变得过长,从而成为设计中的关键路径,为了解决这个问题,可以通过在书写代码时对该信号进行复制,已达到分担该信号扇出过多的目的。
例如: assign a=b &c; 而在代码中多处用到a,可以改写为如下
assign a1=b&c;
assign a2=b&c;
在代码中使用a1 a2来分担a,从而减小了a的扇出,缩短布线延时
2.通过减少关键路径上的组合逻辑级数来优化时序
FPGA逻辑设计中时序路径上的组合逻辑都会给路径增加延时,从而影响设计性能的往往只有几条关键的路径而已,所以可以通过减少关键路径上的组合逻辑单元数来减小该路径上的延时,从而达到优化的目的。关键路径重组是常用技术,多用于关键路径由多个路径组合而成的场合,而且这些被组合的路径之间又可以重组互相之间的相互顺序。
上图红色部分所示,这行代码需要在一个周期内完成加法,判断大小和与三个操作,组合逻辑的级数太大,成为了关键路径,
对于时序有一定的改善作用。
3. 适当地较少数据的位宽。
比如在上面代码中如果tx_cnt最大不超过2048,则可以将
signal tx_cnt: (15 downto 0) std_logic_vector ; 改为
signal tx_cnt: (10 downto 0) std_logic_vector ;
4. 充分利用二进制的优势,比如
通过判断计数器的寄存器counter的最高位来进行状态的跳转。
5. ddr3的前后通常有RAM作为数据的缓存,如果ram离ddr3的路径太长,容易导致时序变差。
解决办法有:
A,将块ram变成分布式ram,因为块ram是在fpga中是固定位置。
B, 多打几拍,相当于在路径中间设置几个加油站