本文為系列文章的完結篇。
用戶應用設計中的信號,在經歷編譯器的多次迭代優化之后,在FPGA芯片內部運行時,可能已經被重新命名、“改頭換面”或“機里機氣”。要想以人工經驗進行追蹤,構建目標寄存器信號與RTL設計源碼之間的映射關系,往往耗時且費力。
用戶可通過forgedaX軟件提供“一鍵溯源”功能,以自動化方式,快速構建RTL 源碼與芯片內部寄存器信號之間的精準映射關系,用EDA工具的自動化算力,直接代替或高效輔助以往建立在大量工程實踐基礎上才能具備的手工尋址過程,進一步提升定位解決問題的工作效率。
所見即所得(Full Visibility):無需事先在源碼或網表級別植入探針,即可獲得對整個系統的可觀測能力(Global State Visibility),這是廠商ILA/Chipscope工具無法提供的能力。
所改即所需(Controllability):直接在FPGA位流級別完成0/1數據改寫,沒有硬件重新編譯過程。
以下為正文
forgedaX軟件的“溯源”功能,是將布局布線后的網表信號,與RTL源碼精準對應(Mapping the FPGA registers to the RTL source code),幫助用戶加快問題的定位,實現加速設計左移;
然后是如何在集成事件斷點功能的基礎上,通過對狀態機(FSM)、關鍵寄存器(Key Register)的0/1數據改寫,以硬件速度進行故障注入,在線查看待測設計(DUT)的反應。
01?信號的RTL溯源功能
Step 1??功能安裝與卸載
在您選擇目標信號,并首次使用“Trace to RTL”功能時,將自動在后臺安裝該功能。
安裝成功后,在Vivado工具欄,將顯示名為“sigTrace”的forgedaX軟件專屬溯源圖標,如下圖所示。
注意:首次安裝時,如果Vivado已處于打開狀態,請先退出。在重新啟動后,將載入并顯示已安裝的forgedaX sigTrace功能按鈕
如果您想刪除已安裝的RTL溯源功能圖標,可通過Vivado工具欄中的“Tools -> Custom Commands -> Custom Commands”菜單項,進行設置。
進入到“自定義功能按鈕設置”對話框,點擊刪除按鈕,即可卸載該圖標。
Step 2???????? 點擊forgedaX軟件“Trace to RTL”功能
在forgedaX調試界面,選擇任意目標信號,依次點擊信號追蹤功能“Trace to RTL”,將其增加到待追蹤分析的信號列表中。
Step 3???????? 信號溯源
在forgedaX軟件已經對目標信號進行精準定位的基礎上,用戶可利用在Vivado環境“Go to Source”功能,直接查找對應的RTL源碼。
例如,以上一篇文章中counter為例,使用“Trace to RTL”功能,對信號inst_count/count_reg[3]進行溯源分析。
先在Vivado工具中打開counter樣例設計,點擊forgedaX軟件專屬溯源功能按鈕sigTrace,將自動加載目標信號的電路圖(Schematic)。
單擊電路圖中高亮顯示的count_reg[3]目標信號,顯示如下:
繼續點擊右鍵,在賽靈思給出的功能菜單中選擇“Go to Source(F7)”。
自動加載該信號對應的RTL源碼,并用黃色高亮顯示相應的代碼行位置,如下圖所示。
如果選擇的是inst_count/count_o[0],Vivado左下的Net Properties窗口欄顯示類型為SIGNAL。
此時,表示該信號為互連線,無法直接定位RTL源碼,但用戶可在電路圖中,選擇驅動該互連線的相鄰寄存器信號count_out_reg[0],進行溯源操作。
02? 對狀態機和關鍵寄存器的故障注入
對包含UART、以太網等通信接口在內,較復雜的FPGA應用開發設計,通過集成事件斷點方式,由用戶自定義的事件觸發信號來凍結時鐘,對設計中的狀態機和關鍵寄存器直接進行故障注入,以高效便捷的方式,服務日常調試驗證。
即便是那些FPGA在運行數小時、甚至數天,才能“重現”的事件,您也能夠按照自己的調試驗證需要,在設定的事件觸發時點,對目標狀態機和關鍵寄存器信號的值,進行一次或者多次0 ->1、1 -> 0 改寫,在線查看待測目標設計(DUT)的反應。
以下以本系列文章第二篇中的uart通信為例,介紹如何對選擇的狀態機、關鍵寄存器信號進行在線故障注入。
如下圖所示,uart樣例在初始化結束后,發送完整的歡迎消息。在首個斷點處,輸出字符“T”之后暫停運行。
Step 1?????????點擊“Get Value”,獲取目標信號值
選擇“已發送字符的計數指針strIndex”作為關鍵寄存器信號,對其進行故障注入操作。
Step 2?????????在“Value Write”的數據列表中,直接進行0/1數據改寫
將strIndex_reg[3]的值,從0 改寫為1,如下圖所示 。
Step 3?????????點擊“Fault Injection”,對目標信號進行強制賦值,完成在線故障注入
此時,strIndex_reg[4:0]從“00101”,原位修改為“01101”,即從“已發送5個字符”,更改為“已發送13個字符”。
Step 4???????? 釋放凍結的時鐘,設計恢復全速運行
在界面左側“Programming and Clock Control”區域,輸入“FFFF_FFFF_FFFF_FFFF”,點擊“Set Breakpoint”,清除硬件斷點,使FPGA繼續全速運行。
在“串口調試助手”界面中,顯示DUT運行結果:輸出被錯誤截斷的消息。
對目標狀態機的故障注入操作,與關鍵寄存器的操作過程完全相同。
以uart樣例中的“數據發送狀態機”state為例,點擊“暫停運行"按鈕,把uartState[2:0]從101(WAIT_BTN),強制賦值為010(SEND_CHAR),再通過“Fault Injection”確認以上更改,完成故障注入操作。
在釋放時鐘,設計恢復全速運行后,UART狀態機進入“跑飛”的無限循環狀態。
對信號進行故障注入的工作機制,就像在軟件仿真中使用“強制賦值操作”類似。前者是直接用FPGA的硬件速度完成(真實物理世界),后者是依賴CPU算力進行(數字邏輯世界),兩者在驗證效率上,有幾個數量級的差異。
對于非常簡單的counter設計,軟件仿真速度通常只有幾K Hz,而FPGA是100M Hz;對于更復雜的設計,前者的速度在極端情況下,比如EDA硬件輔助驗證行業的超大規模設計,軟仿速度甚至低至幾個Hz,FPGA高性能原型驗證平臺可達數M Hz以上,用FPGA制造的硬件仿真平臺(Emulation),性能則是介于兩者之間。
同樣的,對于狀態機(FSM)、關鍵寄存器(Key Register)的故障注入效率,在真實硬件環境下,可將FPGA凍結時鐘、在暫停運行時,在位流級別直接對01數據進行改寫,即可完成,沒有硬件重新編譯的時間開銷,以硬件速度進行故障注入,效率自然比軟件仿真要快數千倍以上。
換而言之,我們就是把EDA硬件輔助驗證行業已經長期成熟使用的技術,在易用性、可獲得性等方面進行創新和深度重構后,使“普通/常規”的FPGA應用開發設計,也能使用,因為前者的諸多調試驗證技術,本身就是來源賽靈思、然后再“高于”賽靈思的,兩者技術同源。
Using emulation to verify today's complex designs
source:用硬件仿真工具驗證今天的復雜設計
在提供EDA硬件輔助驗證服務的三大核心能力象限中,除了專用于超大規模IC設計的“劃片(Partitionning)”技術外,像在線調試和信號可見性(Debugging/Visibility)技術,IC設計和FPGA應用開發,兩者完全一樣,并且隨著FPGA自身越來越先進、容量規模更大,換句話說,FPGA應用市場的用戶,類似的先進技術同樣可以用來服務日常的設計開發;
用戶使用此類EDA工具可以獲得的諸多收益是,不僅能夠加快設計開發效率,還可以提升設計質量,進而提升產品可靠性、系統可用性。
軟件下載地址:https://www.gitee.com/forgeda,解鎖更多位流級別EDA工具相關信息。
全文完,感謝您的耐心閱讀