如何將FPGA設計的驗證效率提升1000倍以上(4)

本文為系列文章的完結篇。

用戶應用設計中的信號,在經歷編譯器的多次迭代優化之后,在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工具相關信息。

全文完,感謝您的耐心閱讀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88899.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux驅動11 --- buildroot雜項驅動開發方法

目錄 一、Buildroot 1.1介紹 文件系統 1.一個完整的操作系統需要包含大量的文件 2.在嵌入式開發中目前應用最廣泛的文件系統制作工具就是 buildroot,busybox 3.buildroot 制作文件系統(了解) 二、雜項驅動編程 1.1 驅動編程做的內容 2.2…

Unity物理系統由淺入深第三節:物理引擎底層原理剖析

Unity物理系統由淺入深第一節:Unity 物理系統基礎與應用 Unity物理系統由淺入深第二節:物理系統高級特性與優化 Unity物理系統由淺入深第三節:物理引擎底層原理剖析 Unity物理系統由淺入深第四節:物理約束求解與穩定性 Unity 物理…

Docker一鍵安裝中間件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)腳步

1、Docker安裝RocketMq 2、Docker安裝Nginx 3、Docker安裝MySql 4、Docker安裝Minio 5、Docker安裝jenkins 6、Docker安裝Redis 1、Docker安裝RocketMq #!/bin/bash# 定義變量 NAMESRV_CONTAINER"rocketmq-namesrv" BROKER_CONTAINER"rocketmq-broker&quo…

WPF學習筆記(27)科學計算器

科學計算器1. 前端界面2. 功能代碼3. 效果展示1. 前端界面 <Window x:Class"Cal.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http:/…

【Linux系列】unzip file 命令

博客目錄掌握 unzip -o 命令&#xff1a;高效解壓并覆蓋文件的完整指南一、unzip 命令基礎二、-o 選項的核心作用三、典型應用場景四、與其他選項的組合使用五、注意事項與風險防范六、替代方案與高級技巧掌握 unzip -o 命令&#xff1a;高效解壓并覆蓋文件的完整指南 在日常的…

1965–2022年中國大陸高分辨率分部門用水數據集,包含:灌溉用水、工業制造用水、生活用水和火電冷卻

1965–2022年中國大陸高分辨率部門用水數據集 高質量用水數據集對推進變化環境下的水資源研究至關重要。然而&#xff0c;現有中國用水數據通常按行政區劃或流域匯總&#xff0c;時空分辨率不足&#xff0c;難以支撐人類用水模式及時空變化特征的精細化分析。為此&#xff0c;…

git中的指令解釋

在 Git 的 diff 輸出中&#xff0c;---、 和 ... 塊的含義如下&#xff1a; 1. --- a/1.py 和 b/1.py --- a/1.py&#xff1a;表示舊版本的文件路徑&#xff08;通常是工作目錄或上一次提交的版本&#xff09;。 b/1.py&#xff1a;表示新版本的文件路徑&#xff08;通常是暫存…

STM32實現四自由度機械臂(SG90舵機)多功能控制(軟件篇freertos)

書接上回的硬件篇STM32控制四自由度機械臂&#xff08;SG90舵機&#xff09;&#xff08;硬件篇&#xff09;&#xff08;簡單易復刻&#xff09;-CSDN博客 此時硬件平臺已經搭建完畢&#xff0c;軟件總共設計了三種模式&#xff0c;分別為 模式1&#xff1a;搖桿&藍牙模…

docker常用命令集(2)

接前一篇文章&#xff1a;docker常用命令集&#xff08;1&#xff09; 本文內容參考&#xff1a; Docker build 命令 | 菜鳥教程 docker基礎(二)之docker build-CSDN博客 Docker push 命令 | 菜鳥教程 Docker pull 命令 | 菜鳥教程 特此致謝&#xff01; 3. docker build …

舒爾特方格訓練小游戲流量主微信小程序開源

功能特點 游戲核心功能&#xff1a; 隨機生成55舒爾特方格 按順序點擊數字1-25 實時計時和嘗試次數統計 錯誤點擊反饋&#xff08;視覺和觸覺&#xff09; 數據統計&#xff1a; 記錄每次完成時間 保存歷史最佳成績 保存最近5次嘗試記錄 統計嘗試次數&#xff08;錯誤點擊&…

在Spring Boot 開發中 Bean 的聲明和依賴注入最佳的組合方式是什么?

在Spring Boot 開發中&#xff0c;社區和 Spring 官方已經形成了一套非常明確的最佳實踐。這個黃金組合就是&#xff1a; Bean 聲明&#xff1a;使用構造型注解&#xff08;Stereotype Annotations&#xff09;&#xff0c;如 Service, Repository, Component 等。依賴注入&…

Oxygen XML Editor 26.0編輯器

Oxygen XML Editor 26.0編輯器 歡迎使用Oxygen XML Editor 26.0編輯器準備工作安裝javajdk安裝jdk驗證Oxygen XML Editor 26.0安裝歡迎使用Oxygen XML Editor 26.0編輯器 準備工作安裝java Java官網下載地址:https://www.oracle.com/java/technologies/ Oxygen XML Editor 2…

AWS Lambda Container 方式部署 Flask 應用并通過 API Gateway 提供訪問

前言 一年前寫過一篇 Lambda 運行 Flask 應用的博文: https://lpwmm.blog.csdn.net/article/details/139756140 當時使用的是 ZIP 包方式部署應用代碼, 對于簡單的 API 開發用起來還是可以的, 但是如果需要集成到 CI/CD pipeline 里面就有點不太優雅. 本文將介紹使用容器方式…

React虛擬DOM的進化之路

引言 在Web前端開發中&#xff0c;用戶交互的流暢性和頁面性能一直是核心挑戰。早期&#xff0c;開發者直接操作真實DOM&#xff08;Document Object Model&#xff09;時&#xff0c;頻繁的重排&#xff08;reflow&#xff09;和重繪&#xff08;repaint&#xff09;導致性能…

(7)機器學習小白入門 YOLOv:機器學習模型訓練詳解

— (1)機器學習小白入門YOLOv &#xff1a;從概念到實踐 (2)機器學習小白入門 YOLOv&#xff1a;從模塊優化到工程部署 (3)機器學習小白入門 YOLOv&#xff1a; 解鎖圖片分類新技能 (4)機器學習小白入門YOLOv &#xff1a;圖片標注實操手冊 (5)機器學習小白入門 YOLOv&#xff…

初識MySQL(三)之主從配置與讀寫分離實戰

主重復制 主重復制原理master開啟二進制日志記錄slave開啟IO進程&#xff0c;從master中讀取二進制日志并寫入slave的中繼日志slave開啟SQL進程&#xff0c;從中繼日志中讀取二進制日志并進行重放最終&#xff0c;達到slave與master中數據一致的狀態&#xff0c;我們稱作為主從…

RabbitMQ面試精講 Day 2:RabbitMQ工作模型與消息流轉

【RabbitMQ面試精講 Day 2】RabbitMQ工作模型與消息流轉 開篇 歡迎來到"RabbitMQ面試精講"系列的第2天&#xff0c;今天我們將深入探討RabbitMQ的工作模型與消息流轉機制。這是面試中最常被問到的核心知識點之一&#xff0c;90%的RabbitMQ面試都會涉及消息流轉流程…

基于SpringBoot3集成Kafka集群

1. build.gradle依賴引入 implementation org.springframework.kafka:spring-kafka:3.2.02. 新增kafka-log.yml文件 在resource/config下面新增kafka-log.yml&#xff0c;配置主題與消費者組 # Kafka消費者群組 kafka:consumer:group:log-data: log-data-grouptopic:log-data: …

wpf Canvas 導出圖片

在WPF中將Canvas導出為圖片主要涉及以下關鍵步驟和注意事項: ?核心實現方法?使用RenderTargetBitmap將Canvas渲染為位圖,再通過PngBitmapEncoder保存為PNG文件。需注意臨時移除Canvas的布局變換(LayoutTransform)以避免渲染異常?1。示例代碼片段:CanvasExporter.cs pu…

lvs負載均衡實操模擬

目錄 一、配置準備 二、NET模式 修改LVS端 開啟路由 修改對內網卡 ens160 修改對外網卡 ens224 加載網卡配置文件 修改web1端 修改網卡信息 重啟網絡 檢測 配置web2 檢測 驗證配置是否正常 啟動nginx服務 驗證以上配置 添加lvs規則 驗證 三、DR模式 修改…