Vivado綜合設置選項分析:-keep_equivalent_registers

  • 2019 年 10 月 31 日
  • 筆記

所謂等效暫存器(equivalent registers)是指具有同源的暫存器即共享輸入埠(時鐘埠和數據埠)的暫存器。等效暫存器可能是設計者無意引入,也可能是有意為之。對於無意引入的暫存器,Vivado在綜合階段可將其優化掉,從而避免了額外的觸發器(Flip Flop)開銷,讓利於關鍵模組或關鍵路徑。這裡重點關注「特意」構造的等效暫存器。

一個典型案例如下圖所示。程式碼(VHDL和Verilog版本含義是等效的,選擇適合自己的一種閱讀即可)中訊號rst_rep1和rst_rep2都是訊號rst一個時鐘周期延遲後的輸出結果。從數字電路的角度看,可理解為有兩個D觸發器,它們的輸入數據埠均為rst,時鐘埠均為clk,而輸出數據埠分別為rst_rep1和rst_rep2。此時,稱這兩個暫存器為等效暫存器。

對於上述程式碼,在綜合階段,如果勾選-keep_equivalent_registers,那麼rst_rep1和rst_rep2對應的暫存器均會被保留,打開綜合後的設計,在Schematic中會看到rst_rep1和rst_rep2這兩個net。但是,通常上述程式碼只是工程中的一個很小的部分,勾選-keep_equivalent_registers會造成Vivado無法對其他無意引入的等效暫存器進行優化,這是不利的方面。鑒於此,可利用綜合屬性KEEP,如下圖所示。

採用KEEP作用於rst_rep1和rst_rep2,確保了這兩個暫存器不被優化,同時不勾選-keep_equivalent_registers也使得Vivado可以對其他無意引入的暫存器進行優化。

「特意」引入等效暫存器(也可稱之為手工複製暫存器)的一個重要原因是可以有效降低關鍵路徑上的扇出,優化時序,尤其對於全局複位或全局使能訊號而言是一種行之有效的方式。

結論:

-通常情況下,建議不要勾選-keep_equivalent_registers,以確保工具對無意引入的等效暫存器進行優化;

-對於手工複製的暫存器,可通過綜合屬性KEEP確保其不被優化掉;

-對於全局複位或全局使能訊號可通過手工複製暫存器的方式降低扇出,優化時序。

Tags: