在項目初期,在使用FPGA工具quartus或者vivado生成版本燒入開發板進行調試時(DC開啟優化選項后同樣會優化掉寄存器),我們有時會發現部分寄存器被優化掉了,今天簡單聊聊被優化的幾種情況。
1、寄存器被優化的原因
目前鴿子發現寄存器被優化的原因主要有兩種:
1)驅動寄存器的信號沒有驅動源
a. 至少有一個信號沒有驅動源,也可能是多個
2)寄存器負載是懸空的,包含如下場景
a. 寄存器的唯一負載時懸空
b. 寄存器的所有負載均懸空
部分場景下被優化的問題很好排查,有些場景排查會比較麻煩,僅僅從信號連線上看都是正常的,無法通過肉眼快速發現問題,這時候需要去看綜合報告,找到問題的源頭。
2、案例--大量寄存器被優化
如下圖所示,crm是復制產生時鐘復位的模塊,其中輸出clka/clka_rst_n給模塊a,其中輸出clkb/clkb_rst_n給模塊b。Soft_reset_n是clka_rst_n和clkb_rst_n的源頭之一。Soft_reset_n為0,則clka_rst_n/clkb_rst_n為0,處于復制狀態。Soft_reset_n是配置讀寫模塊CSR的一個可配置寄存器,其內部偏移地址為0x60。
通過quartus/vivado查看網表結構和資源利用率,我們發現模塊A和模塊B大量資源被優化,不符合常理。經過檢測發現,所有信號連接均正常,沒有懸空,所有信號均存在負載。
經過反復排查后發現,CSR模塊被手動添加的Soft_reset_n寄存器地址分配在0x60,而CSR入口wr_addr[5:0]只有6bit,只能訪問0x40以內的地址范圍,因此Soft_reset_n在實際網表中是不存在的,導致clka_rst_n/clkb_rst_n都沒有驅動源,因此模塊A和模塊B大量資源被優化。
3、推薦檢查方法
在進行FPGA版本調試之前,首先進行spyglass lint檢查 或者檢查quartus/vivado產生的綜合報告,檢查是否存在如下warning:
- 信號沒有驅動
- 信號懸空
把這些warning確認完后再進行版本調試。
4、簡單的規律
大量模塊邏輯被優化,重點看時鐘復位
少量模塊邏輯被優化,重點看資源獨享的驅動信號。
-
FPGA
+關注
關注
1626文章
21667瀏覽量
601862 -
驅動器
+關注
關注
52文章
8156瀏覽量
146019 -
寄存器
+關注
關注
31文章
5317瀏覽量
120010 -
CSR
+關注
關注
3文章
118瀏覽量
69598 -
Vivado
+關注
關注
19文章
808瀏覽量
66327
發布評論請先 登錄
相關推薦
評論