我們將分析 lint目標運行期間產生的違規行為。我們可以使用 SpyGlass GUI 中的各種調試工具來了解違規,在 RTL 代碼中調試,并查看如何在 SpyGlass 環境本身中修復這些違規。
并且在更改 RTL或者.prj文件之后都必須重新運行。
使用以下命令打開 SpyGlass GUI,將自動加載上次運行目標 (lint/lint_rtl)
spyglass-projectwb_subsystem.prj&
在沒有-batch時,SpyGlass 默認會打開 GUI。
生成對應于每個目標運行的多個報告,可從菜單欄的報告部分訪問,如下所示:
在GUI底部的Violations可查看違規信息。在顯示出違規信息后,點擊違規信息窗口頂部的Group By,然后選擇Goal by Rule。
W415 Multiple drivers錯誤
該規則確定了可以由設計中的 2 個或更多非三態驅動器同時驅動的網絡。打開原理圖窗口,增量示意圖窗口顯示違規的結構:
可以看到兩個驅動程序正在驅動信號 (WB_master_data_o[0]) ,即端口m0_data_i由端口dat_o(例如 ahb2wb_u0)和m0_data_o(例如 conmax_u1)同時驅動。因此,這是一個違規行為。
通過查看RTL代碼知道該部分使用ifdef構造來啟用固定代碼。
因此在wb_subsystem.prj中添加以下內容來啟用宏,從而啟用Fix_W415宏:
set_optiondefine{Fix_W415}
設置后重新加載項目文件和重新運行spyglass -project wb_subsystem.prj &
SYNTH_5159警告
規則 SYNTH_5159識別可能無法綜合的結構。該語句包含在synthesis編譯指示中,表明該語句不用于分析,但默認情況下,SpyGlass 僅將synopsys和pragma注釋識別為pragma(編譯指示)(與 Design Compiler 相同)。我們需要通過在.prj文件中添加以下內容來啟用synthesis的pragma處理:
set_optionpragma{synopsyspragamsynthesis}
由于此錯誤發生在ima_adpcm_lib預編譯庫中,SpyGlass會檢查該庫的RTL是否已更改,只有在更改后才會重新編譯,因此我們需要刪除現有的預編譯庫,使用新的pragma設置重新編譯該庫。
rm-rfima_adpcm_lib
重新運行后,SYNTH_5159警告消除。
注意: 手動刪除 ima_adpcm_lib的替代方法是在.prj文件中臨時添加set_option force_compile yes以強制重新編譯庫。
UndrivenInTerm-ML錯誤
查看違規消息,發現“conmax_u1”矢量輸入端口“m0_addr_i”的上半部分(31:16)范圍被發現是浮動的:
首先雙擊違規消息, RTL 代碼中突出顯示的行顯示了矢量端口m0_addr_i的端口映射,該端口映射與矢量信號WB_master_addr。
在RTL顯示行上,選擇WB_master_addr信號(雙擊),從右鍵菜單窗口中選擇選項Signal:WB_master_addr:
折疊菜單顯示了聲明、加載和驅動程序的許多超鏈接(藍色字樣)??梢钥吹较蛄啃盘朩B_master_addr的寬度為32位,與映射的實際端口m0_addr_i的寬度相同,即端口與相同大小的信號總線完全連接,不是問題所在。
因此我們繼續檢查向量信號WB_master_addr的驅動程序:
使用 View -> Windows -> HDL Navigator打開 HDL Navigator窗口,這顯示了所選WB_master_addr的驅動器和負載。
注意到存在一個 RTL 驅動程序信息:
驅動程序是實例ahb2wb_u0的o/p端口adr_0,但這僅驅動矢量信號WB_master_addr的低位(15:0),其余位沒有報告其他驅動程序 WB_master_addr ,即高位沒有驅動程序。
此違規的修復方法是將高 16 位賦值為0,并需要更新 RTL。
可以看到RTL中有通過拼接進行的驅動程序,但通過ifdef結構進行控制。
因此可以通過設置Fix_UndrivenInTerm宏來調用目標程序:
set_optiondefine{Fix_UndrivenInTerm}
通常,用戶不希望每次運行 SpyGlass 時都看到違規消息??梢酝ㄟ^定義Waive來過濾它們 。
右鍵單擊Waive Selected Messages這將打開Waive編輯器窗口,并為其填充相關信息(違規消息、規則和設計單元 (DU))
單擊Apply,如下圖,已忽略剛剛的警告信息。
在界面底部選擇Waiver Tree可以查看已經被過過濾掉的錯誤選項。
如果想在后續繼續使用當前生成的Waiver,可以將這些信息保存在一個Waiver文件 (.awl) 中。在waivers編輯器窗口中右鍵文件,然后選擇選項Save Waiver Files。:
SpyGlass會為每個Goal保存一個關于檢查過濾的文件,本例中文件路徑為:
./wb_subsystem/wb_subsystem/lint/lint_rtl/wb_subsystem_waiver_file.awl
我們可以將其復制到當前工作目錄下,方便調用:
cp./wb_subsystem/wb_subsystem/lint/lint_rtl/wb_subsystem_waiver_file.awl./wb_subsystem.awl
然后將該過濾文件包含到工程中并將其設置為默認waiver 文件:
read_file-typeawl./wb_subsystem.awl set_optiondefault_waiver_file./wb_subsystem.awl
然后重新加載工程文件且運行Goal。
生成Dashboard/Datasheet
在GUI界面下打開shell命令窗口,輸入如下命令生成Dashboard/Datasheet:
write_aggregate_reportdatasheet write_aggregate_reportdashboard
通過在終端中輸入下面命令可以在瀏覽器中查看報告
firefoxwb_subsystem/html_reports/dashboard.html firefoxwb_subsystem/html_reports/datasheet.html
最后可以查看.prj文件:
審核編輯:劉清
-
驅動器
+關注
關注
52文章
8226瀏覽量
146251 -
RTL
+關注
關注
1文章
385瀏覽量
59759 -
過濾器
+關注
關注
1文章
428瀏覽量
19593 -
GUI
+關注
關注
3文章
659瀏覽量
39654
原文標題:Spyglass 中常見Lint錯誤
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論