如何将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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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模式 修改…