欢迎来到纳米网!
首页 > 公众号文章>正文

FPGA事件断点集成:提升调试能力的详解

如果对处于全速(at-speed)运行下的FPGA调试,工程师在现有通用“能力技术”基础上,再增加“硬件断点”功能,那么对高速运行FPGA,也就拥有像调试软件程序类似的完整可观测能力(Full Visibility)和可控制能力(Controllability)。

以赛灵思FPGA的应用开发为例,用户已经能从硬件的运行特征出发,为设计增加两类硬件断点。除了前文所介绍的时钟断点功能,本文将详细介绍事件断点(Event-based Breakpoint)的集成和使用。

与适用于算法设计、接口控制等全同步设计的时钟断点相比,事件断点是由用户自定义的事件触发信号来冻结时钟,即以“事件发生的次数”为中断地址。适用于对包含UART、以太网等通信接口在内,较复杂的FPGA应用开发设计。

例如,在网络处理系统中,可将“数据包接收/发送”作为事件断点;在数据加密处理应用中,将“一个数据块处理结束”作为事件触发信号。

用户在设计阶段,与前文介绍的时钟断点类似,事先将硬件断点控制模块(interruption logic)集成到待测DUT的顶层(hw_top),就可获得这样的在线调试能力。

1530b170-b956-11f0-8c8f-92fbcf53809c.png

本文将以按图索骥的方式,详细介绍在设计中集成事件断点的实现过程,对原有设计的改动非常小,仍然保持优异的时序性能。

以下为正文

1. 样例简要介绍

uart-demo作为串口数据传输样例,用于控制uart串口数据的发送,以及led输出。

通信协议设置为“9600 bps,8位数据位,没有校验位、1位停止位”。

源码获取地址:https://gitee.com/forgeda/forgedaX-35T/tree/master/demo/vivado-uart/Source

2. 事件断点控制模块

模块定义如下:

moduleinterruption_logic(  (* dont_touch ="true"*)outputreg[63:0] cycles,  inputsig_in,  inputsys_clk,inputsys_reset,outputtask_clk );wireclk_en;wire[63:0] breakpoint;  reg[63:0] counter;  regbreak;     il_vio_0 il_vio (    .clk(sys_clk),    .probe_in0(counter),    .probe_in1(cycles),    .probe_out0(breakpoint),    .probe_out1(clk_en)   );always@(posedgesys_clk)beginif(!sys_reset)begincounter 

该模块非常精简,对您的原生设计的改动很小,所占用的硬件资源也很少。

3. 将事件断点模块集成到设计中

在原有设计中集成事件断点控制模块,全程在Xilinx Vivado环境下完成,共有以下四个步骤。

Step 1.导入控制模块interruption logic,并对VIO进行参数设置

158872d4-b956-11f0-8c8f-92fbcf53809c.png

单击“Finish”,确认导入该模块文件。

导入断点控制模块所使用的VIO IP核

在Vivado中,选择“IP Catalog”,导入VIO IP核。

15e76b90-b956-11f0-8c8f-92fbcf53809c.png

在IP Catalog搜索框中,直接输入VIO,显示如下:

1646f9b6-b956-11f0-8c8f-92fbcf53809c.png

设置VIO IP核的输出端口(PROBE_OUT0),设置事件断点的初始地址。

在Customize IP核界面,对VIO IP进行参数设置:

16a1f474-b956-11f0-8c8f-92fbcf53809c.png

16ff71da-b956-11f0-8c8f-92fbcf53809c.png

接下来,设置两个关键输出端口的参数:

事件断点的初始地址(PROBE_OUT0)

信号位宽Probe Width [1-256]:64;

初始值Initial Value (in hex):0x31

即该样例在位流载入完成之后,在运行阶段遇到的首个断点地址。

在本样例中,UART端口在板卡上电后,直接输出“ ARTY GPIO/UART DEMO! ”消息,我们选择将UART设计中的“bit_done”作为中断触发信号,表示“串口已发送1 bit数据”。

换而言之,当事件断点设置为0x31,表示设计将在传输49 bit,即传输第五个字符“T”的停止位时,暂停运行。

时钟使能信号(PROBE_OUT1)

信号位宽Probe Width [1-256]:1;

初始值Initial Value (in hex):0x1

初始值设置为1,表示开启时钟使能。

点击“OK”,确认以上参数配置。

175b9780-b956-11f0-8c8f-92fbcf53809c.png

点击“Generate”,生成VIO IP核。

显示“Generation of output products completed successfully”消息,表示IP核已成功导入。

17b84192-b956-11f0-8c8f-92fbcf53809c.png

Step 2. 对设计顶层(hw_top)进行更改处理

以下为集成事件断点模块后的设计顶层,原有设计的改动部分已用红色标记。

1816dd74-b956-11f0-8c8f-92fbcf53809c.png

186ede02-b956-11f0-8c8f-92fbcf53809c.png

18cc41be-b956-11f0-8c8f-92fbcf53809c.png

192ab258-b956-11f0-8c8f-92fbcf53809c.png

1986bcc4-b956-11f0-8c8f-92fbcf53809c.png

19e6c2f4-b956-11f0-8c8f-92fbcf53809c.png

1a406444-b956-11f0-8c8f-92fbcf53809c.png

1a9ffe90-b956-11f0-8c8f-92fbcf53809c.png

1afb561e-b956-11f0-8c8f-92fbcf53809c.png

1b5323ee-b956-11f0-8c8f-92fbcf53809c.png

1baea19c-b956-11f0-8c8f-92fbcf53809c.png

1c0cfa44-b956-11f0-8c8f-92fbcf53809c.png

1c64120c-b956-11f0-8c8f-92fbcf53809c.png

1cbf83ee-b956-11f0-8c8f-92fbcf53809c.png

集成断点控制模块之后的Vivado工程文件,详见
https://gitee.com/forgeda/forgedaX-35T/tree/master/demo/vivado_uart_event_bp/uart_breakpoint

Step 3.重新启动Vivado编译过程
启动Vivado编译,生成新的设计结果文件(.dcp), 得到的配置位流文件top.bit,以及调试支撑文件debug_nets.ltx。

完成以上工作后,就可以直接下载运行,并通过Hardware Manager,自行验证以上集成过程是否已经正确无误。

4. 自检方法

您可直接在Vivado Hardware Manager中快速验证,具体步骤如下:

1d1c57d6-b956-11f0-8c8f-92fbcf53809c.png

如下图所示,样例在初始化结束后,输出字符“ART”之后暂停运行,该断点地址即为Step 2 设置的0x31。

1d712446-b956-11f0-8c8f-92fbcf53809c.png

可继续在VIO窗口,设置新的断点地址,例如,输入“0x3B”,表示设计将在传输59 bit,即第六个字符“Y”发送结束时,暂停运行。

最后,将断点地址设置为FFFF_FFFF_FFFF_FFFF,清除断点,如下图所示。

1dcd2282-b956-11f0-8c8f-92fbcf53809c.png

样例将继续全速运行,输出完整的“ARTY GPIO/UART DEMO! ”消息。

在前文的时钟断点、本文的事件断点这两个硬件断点准备工作后,下一篇我们将介绍如何在板级在线调试过程中,无需在源码、网表插探针,在不占用任何硬件资源,就可得FPGA运行状态的全可观测能力,对设计拥有100%的信号可见性,这是ILA、Chipscope等现有工具不能提供的功能;

以及RTL代码在经过硬件编译后,信号名称可能会被优化改变,那么如何在源码和调试信号(位流数据)之间建立精准对应关系,大幅减少工程师的硬件经验成本;

包括更先进的以硬件速度仿真,直接对关键寄存器、状态机的故障注入测试,高效验证。真正做到所见即所得,所改即所需。

原文标题:如何将FPGA设计验证效率提升

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

猜你喜欢

  • 艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    在消费电子持续追求轻薄化与长续航的当下,背光系统能效成为关键瓶颈。传统方案在轻载场景效率低下,散热性能不足,严重制约设备续航并带来可靠性风险。数模龙头艾为电子推出新一代升压型WLED驱动芯片——AW9967FSR,以科学先进的热管理技术,打造卓越的散热...

    2025-12-01
  • Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    该服务器支持跨AI平台获取可信产品信息,简化工作流程、加速设计并提高生产力 为进一步兑现公司为嵌入式工程师开发AI解决方案的承诺,Microchip Technology Inc.(微芯科技公司)今日推出模型语境协议(MCP)服务器。作为AI接口,MCP服务器可直接连接兼容的AI...

    2026-01-23
  • Microchip第22届中国技术精英年会北京站成功闭幕,下一站深圳

    Microchip第22届中国技术精英年会北京站成功闭幕,下一

    Microchip第22届中国技术精英年会(MASTERs)北京站于今日圆满落幕!来自各地的技术专家、行业伙伴和客户齐聚一堂,共同探讨前沿技术与创新应用。活动伊始,Microchip大中华区副总裁Edward Ho先生为本站致开幕词,欢迎各位嘉宾的到来,并分享了对行业发展的展望...

    2026-01-23
  • 国星半导体车规级LED芯片获2025年广东省名优高新技术产品

    国星半导体车规级LED芯片获2025年广东省名优高新技术

    近日,广东省高新技术企业协会正式发布《2025年第二批广东省名优高新技术产品名单》,国星半导体自主研发的车规级LED芯片与垂直LED芯片两大系列产品成功入选。该认定严格围绕技术创新性、质量稳定性、市场成熟度及产业化能力四大维度进行评审,是广东省...

    2025-12-02
  • 云英谷科技荣登2025中国半导体企业影响力百强,专注OLED显示驱动芯片

    云英谷科技荣登2025中国半导体企业影响力百强,专注OLED

    11月14日,世界集成电路协会(WICA)主办的“2025全球半导体市场峰会”在上海成功召开。本次峰会发布了2026全球半导体市场趋势展望暨2025中国半导体企业影响力百强及集成电路新锐企业50强报告。云英谷科技股份有限公司荣登“2025中国半导体企业影响力百...

    2026-01-23
^