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