一般常見的時序優化手段有:
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:避免一個模塊驅動多個模塊
這點事從模塊設計的大框架上考慮的,如果實在是要用一個模塊驅動多個模塊,可以考慮將這個模塊例化多次來實現,以多消耗一些硬件資源爲代價換取較好的時序