如何将FPGA设计的验证效率提升1000倍以上(3)

发布于:2025-07-10 ⋅ 阅读:(24) ⋅ 点赞:(0)

本文为系列文章的第三篇。

FPGA以硬件编程方式进行电路定制,还可随时修改设计,但终归是芯片,其内部是完全不可见的。对于CPU芯片,用户需要的是指令精确的01数据;对于FPGA,则是需要周期精确的01位流数据。

在掌握并熟练使用最基础的时钟、事件两大硬件断点功能后,这也是芯片设计行业IC设计验证工程师的必备技能点。除了用于在线观测,加快调试工作过程,还能够以故障注入方式,对高可用、高可靠、高安全设计进行验证,特别是其中涉及的三大棘手问题,也会变得相当轻松。

What:故障注入的目标信号是哪些?

When:应该在什么时候进行故障注入?

How: 该如何进行故障注入?

FPGA的性能介于CPU和ASIC之间,也为称为平民版的ASIC,用户可根据自身应用需求,以在自家作坊“流片制造”的方式,快速定制开发为自己的专用芯片。

在硬件加速一切的异构计算时代,数字化的时间轴停留在每一个命令行里,数字技术带来的冲击,已经不再是变化本身带来的冲击,而是变化速度带来的冲击。如今与企业相关的三个重要事项:企业寿命、产品生命周期、以及争夺客户的时间窗口,都在变短,天下武功,唯快不破!

以一个在Xilinx 7A35T的简单设计为例,仅占用FPGA 1% 硬件资源的计数器设计,直接在位流级别进行故障注入验证的效率,是RTL源码级仿真的400余倍,网表级仿真的2230倍。

FPGA规模越大,用户设计越复杂,获得的收益也越高。

现在,就即刻点亮全新的技能树,为您的日常工具箱再增添新法宝,从此开启效率加速之旅吧!

以下为正文

对于集成了硬件断点功能的DUT,我们已经为您准备了FPGA的新一代调试验证工具,可直接在软件界面上点击“暂停”键,冻结时钟,获取周期精确的信号数据;释放时钟,FPGA恢复至全速运行状态,拥有与软件程序开发类似的在线调试能力。

各个行业都会经历自动化、数字化,再到智能化三个阶段,FPGA应用开发也将概莫能外。作为创新开发的位流工具forgedaX软件,完全是像使用傻瓜相机一样的操作方式,零门槛。

我们将forgedaX软件定位为做好工程师的人柱力,在AI时代,帮助工程师继续以碳基之心,驭硅基之智。将以往大量复杂、繁琐重复且易于出错的人工处理过程,尽可能用EDA工具算力自动完成。

01 功能特点

业内领先的数据快照技术,提供FPGA目标信号的100%可见性,提升设计开发效率

  • 智能解析布局布线后的设计文件,直接获取芯片在运行工作时,整个系统的状态数据
  • 不占硬件资源,拥有与软件(数字)仿真类似的全局可观测能力(Global State Visibility)

快速建立FPGA目标信号与RTL源码的精准对应关系,无任何“编译器优化”风险

  • 软件界面一键溯源(Trace to RTL)功能,自动在Vivado环境对目标信号进行高亮标记
  • 减少在编译环节,因编译器优化、设计中原有信号被“重命名”等增加的人工经验成本

验证SEU应对/缓解等设计加固的有效性,直接观察多模设计、表决器的具体行为

  • 支持用户获取周期精确的信号数据,并对选定的任意目标信号在线改写,完成硬件故障注入
  • 对状态机(FSM)、关键寄存器(Key Register)的故障注入验证效率,是软件(数字)仿真1000倍

02 准备工作

请在Windows安全中心,“病毒和威胁防护”设置“排除项”,将forgedaX软件目录<forgedax-dir>加入白名单,以免被操作系统作为“无法识别的应用”,影响使用体验,或者核心工作组件被误删除后不能正常工作。

以及事先确认Vivado开发工具的环境变量,已经正确安装;只需三个步骤,即可快速完成自检:

如下图所示,首先启动Window命令行,通过以下3个步骤确认Vivado工具是否已正确安装。

# ① 进入Vivado安装目录

cd /d C:\Xilinx\Vivado\2018.2

# ② 设置环境变量

settings64.bat

# ③ 直接启动vivado

Vivado

以上基本自检工作完成后,进入forgedaX软件的正常使用流程。

03 创建项目

Step 1. 创建项目专用空白文件夹

用于保存和记录信号列表和结果数据,例如,本样例将创建名为led_counter的空白目录,如图所示。

Step 2. 在forgedaX软件主界面工具栏选择“创建新项目”

在“设置项目参数”对话框中,对该项目进行命名。本样例将counter作为项目名称,并设置项目工作目录。

选择forgedaX软件提供的counter样例设计文件top_routed.dcp,该文件位于forgedaX-35T-master/demo/vivado_counter_clk_bp/counter-bp/counter-bp.runs/impl_1目录

参数设置完成,点击“确定”,完成项目创建。右下角状态栏提示“new project created successfully”,表明项目已成功创建。

软件界面右侧会显示项目名称、工作目录、设计文件、FPGA芯片型号等信息。

该步骤完成后,在项目工作目录下,自动产生后缀名为.mpr的项目描述文件(counter.mpr),即位流分析项目文件(Bitstream Analysis Project files),以便后续用于项目导入操作。

Step 3. 在forgedaX软件主界面工具栏选择“启动数据分析”

这是forgedaX软件非常重要的一个核心工作流程,主要技术创新之一。同时也是后续使用软件进行信号观测、信号与RTL源码精准溯源,以及硬件故障注入等高级功能的基础。

在运行过程中,界面右侧的控制台消息窗口实时显示当前工作进度,并在右下角状态栏显示“data analysis started”。

分析结束,在软件界面左侧,以非折叠、全平铺方式显示用户设计的全部寄存器信号。

这些信号数据提供了用户设计中所有寄存器的“全景视图”(Full Visibility),可视为FPGA在线调试的“信号数据库(Runtime Debug DB)”,100%信号数据全覆盖。

如上图示,在该样例中,forgedaX软件自动分析、快速识别出设计中包含的全部寄存器信号,共1952个。

在硬件电路运行过程中,用户可在软件界面上直接读取这些信号的值,对所有信号的读取访问操作,不会占用任何FPGA硬件资源,非常轻量便捷。

Step 4. 在forgedaX软件主界面工具栏选择“位流载入参数设置”

在对话框中,选择并设置“选择位流文件(.bit)”,“调试支撑文件.ltx”。

选择“确定”,当前项目准备就绪,可进入在线调试工作流程。

04 在线调试

在forgedaX软件主界面,选择 “启动调试”,进入调试界面。

该界面共包括4个功能区域:

—信号选择区域

—位流下载和时钟控制

—目标信号显示

  • —信号观测和故障注入

以下是各功能的具体使用说明:

4.1 选择目标信号

Step 1,使用“Search”功能,进行目标信号筛选

在界面左上方的“Filter”搜索框中,输入想要查看的信号数据关键词,单击“Apply”,搜索结果实时呈现,并在下方“Nets”信号列表中显示:

Step 2,添加目标信号

可使用“Add All”按钮,将左侧Nets列表中的全部信号,一次添加到软件右侧的“Selected Signals”信号列表;

也可选择任意单个信号,或者通过“+Ctrl按键”同时选择任意多个信号,再使用“Add”按钮逐次添加。

Step 3, 对目标信号进行删减

通过右侧上方“Delete”按钮,将“Selected Signals”列表中的目标信号逐个删除;如选择“Delect All”,则是一次全部删除。

4.2 位流下载

在调试界面左下方“编程和时钟控制”(Programming and Clock Control)区域,通过“下载”功能按键,将位流载入到FPGA芯片(待测DUT)

当提示“位流下载完成”,表明位流载入成功,可启动信号观测”操作。

4.3  信号观测

点击“Get Value”,读取信号数据,界面右侧将显示读取的目标信号值,如下图。

在“Programming and Clock Control”区域,显示当前时钟周期数Current Cycles为0x10,表明该样例在运行15个周期之后,暂停执行,即本系列文章第一部分中,所设置的首个时钟断点地址(0xF)。

您可以在forgedaX软件的调试界面,按需设置硬件断点,实现周期精确的状态信号读取,以及在线强制赋值改写数据,实现故障注入等软件的高级功能。

在集成了时钟断点控制模块的设计中,自上电reset开始,以时钟周期为计数单位, 从零开始计数。输入的硬件断点地址,表示该设计将在“运行该地址设定的时钟周期数”之后,暂停运行。

按照forgedaX软件定义的硬件断点格式,输入以“_”为分隔符、长度为16的十六进制数,设置所需的硬件断点。

通过界面中的“Set Breakpoint”功能按钮,向DUT设计写入该地址。断点地址写入成功,软件界面会出现“操作已完成”提示消息。

在本样例中,当输入“0000_0000_0000_0300”硬件断点地址,点击“Set Breakpoint”。FPGA 会在启动运行0x300个时钟周期之后暂停运行。

此时在forgedaX软件左下角,显示当前的时钟周期数(即Current Cycles)0x301,右侧则显示周期精确的目标信号值,拥有与软件(数字)仿真类似的全局可观测能力(Global State Visibility)。

在软件仿真过程中,可使用“run <time>”命令,在运行指定的时钟周期暂停,以上时钟断点操作,与之相类似。

下图是样例的仿真结果,FPGA在启动运行0x300个时钟周期之后,冻结时钟,暂停运行,该断点时刻所在的时钟周期数为0x301,两者完全一样。

当设计处于“暂停”状态时,输入下一个断点地址,点击“Set Breakpoint”,将释放当前被冻结的时钟,FPGA继续全速运行。直至到达用户设置的下一个硬件断点时自动刹车,原位静止、再次暂停运行。

换而言之,用户可使用forgedaX软件,获得100%的信号可见性,并在任意时钟断点处,查看任意寄存器信号的值。

当用户输入“FFFF_FFFF_FFFF_FFFF”并点击“Set Breakpoint”,将自动清除硬件断点,FPGA设计将以无中断方式,一直保持全速运行状态。

4.4  立即暂停与恢复运行

在调试验证过程中,除了使用时钟断点,提供“预设条件”下的暂停功能,还支持用户以无条件方式随时冻结时钟,让FPGA在高速运行过程中,随时随地“原位静止不动”。

点击“暂停”按钮,提示“Pausing”,FPGA设计即将暂停运行。

与您在软件仿真过程中,通过“break”命令无条件中断仿真过程,进行信号观测与故障注入的工作方式类似。

一旦提示“操作已完成”,代表FPGA时钟已被冻结、停止运行,并显示当前时钟周期数,如下图所示。

点击“恢复”按钮,释放被“冻结”的时钟,FPGA设计将恢复至全速运行状态。

4.5  硬件故障注入

通过forgedaX软件直接对目标寄存器的0/1数据进行改写,在芯片处于实际运行环境下完成硬件故障注入,全部在FPGA位流级别完成。

没有硬件重编译过程,也不需要重配置,超高效率。

对信号进行故障注入的工作机制,就像在软件仿真中使用“强制赋值操作”类似。

前者是直接用FPGA的硬件速度完成(真实物理世界),后者是依赖CPU算力进行(数字逻辑世界),两者在测试验证效率上,有几个数量级的差异。

在FPGA在线调试验证过程中,只需在DUT暂停运行后,使用forgedaX软件对目标信号进行原位改写,即可完成硬件故障注入:“所见即所得、所改即所需”。

在本样例中,以“0000_0000_1FFF_FFFF”为硬件断点,在DUT暂停运行后,选择对inst_count/Q[2]信号进行故障注入,涉及三个操作:

  • 点击软件的“Get Value”,读取目标信号的值

如下图所示,在断点处,对应的时钟周期数(Current Cycles)为0x0000_0000_2000_0000,“Value Read”数据列显示,inst_count/Q[2]的信号值为“1”,如下图:

  • 在线数据改写

在“Value Write”的数据列中,选择目标信号,直接进行数据改写,即从0->1,或者1 -> 0;具体到本样例,在Value Write 数据列中,直接将inst_count/Q[2]的值从1 -> 0

  • 硬件故障注入

点击“Fault Injection”,进行强制赋值,实现非破坏性的写入操作;

故障注入完成后,与inst_count/Q[2]输出信号相对应,FPGA板卡上对应的led灯状态发生变化,从亮到灭。

除了对单个信号的故障注入操作,forgedaX软件还可同时改写多个信号,进行并行式故障注入(Concurrent Fault Injection),如下图所示。

下一篇我们将详细介绍如何利用forgedaX软件的“一键溯源”功能(Trace to RTL ),将布局布线后的网表信号与RTL源码精准对应,加快问题的定位——在Vivado环境快速构建自己的专属调试图标(forgeda FindMax),实现信号数据追踪( sigTrace),。

只需三个操作,自动为用户快速搭建芯片物理世界(FPGA)与数字逻辑设计(RTL code)高效联结的桥梁,Mapping the FPGA registers to the RTL source code

点击软件的“Trace to RTL”功能按钮,在Vivado工具栏显示专属图标“”,目标信号在Vivado环境自动高亮标记提示,以自动化工作方式,有效降低人工经验成本,节省工程师的时间开销。

以及在集成事件断点功能的基础上,介绍如何以硬件速度,在真实硬件环境下直接对关键寄存器、状态机的故障注入测试(即01数据改写),对设计进行高效验证:所见即所得,所改即所需。

全文完,感谢您的耐心阅读


网站公告

今日签到

点亮在社区的每一天
去签到