一般常见的时序优化手段有:
1:关键路径插入寄存器
当一段代码里组合逻辑过多地时候很容易出现这个问题
2:打两拍
当模块之间的数据交互涉及到跨时钟域的时候,通常可以采用打两拍的方式来避免亚稳态的出现,这是一种非常有用的办法
reg [7:0]data_reg1;
reg [7:0]data_reg2;
always@(posedge clk_50M or negedge rst_n)
if(!rst_n)
data_reg1 <= 8'b0;
else
data_reg1 <= data;
always@(posedge clk_50M or negedge rst_n)
if(!rst_n)
data_reg2 <= 8'b0;
else
data_reg2 <= data_reg1;
3:避免一个模块驱动多个模块
这点事从模块设计的大框架上考虑的,如果实在是要用一个模块驱动多个模块,可以考虑将这个模块例化多次来实现,以多消耗一些硬件资源为代价换取较好的时序