0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在FPGA设计中集成事件断点的实现过程

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2025-11-07 11:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

如果对处于全速(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 <= 0;break <= 0;endelseif (clk_en)beginif (counter == breakpoint)beginbreak <= 1'b1;endelsebeginif (sig_in) counter <= counter + 1;break <= 1'b0;endendend  BUFGCE inst_bufgce (.O(task_clk),.I(sys_clk),.CE(clk_en & ~break) ); always @(posedge task_clk)    beginif (!sys_reset)          begin             cycles <= 0;        endelsebegin             cycles <= cycles + 1;        endendendmodule

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

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
    +关注

    关注

    1664

    文章

    22571

    浏览量

    640756
  • 硬件
    +关注

    关注

    13

    文章

    3666

    浏览量

    69231
  • 时钟
    +关注

    关注

    11

    文章

    2005

    浏览量

    135396

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    编码不能没调试,调试不能没断点

    编码不能没调试,调试不能没断点断点是仿真器非常重要的功能,用户仿真程序过程中几乎离不开断点
    发表于 10-10 09:30 1341次阅读

    FPGA在线配置模块和自动测试模块实现过程

    数据的分析来诊断故障。因此,用于FPGA测试的仪器或系统的关键技术在于:如何加快单次配置的时间,以节省测试过程中的配置时间开销;如何实现自动重复配置和测试,将FPGA较快速度的在线配置
    发表于 05-14 07:00

    通用微控制器MSP430中集成多种功能介绍

    通用微控制器MSP430中集成多种功能
    发表于 12-29 06:44

    FPGA体系结构能够实现的并行运算

    和软件设计层次上逐渐被克服。FPGA硬件结构正在实现增强的DSP块。并具有更多的功能和更强的性能。系统级设计软件正在简化从块级到硬件描述语言(HDL),级的转换。一些系统工具中集成了流行的DSP算法开发工具(例如MATLAB),
    发表于 12-15 06:30

    如何使用嵌入式Jetty容器Jersey中集成Webapp应用

    本文介绍如何使用嵌入式Jetty容器Jersey中集成Webapp应用,前端以最简单的html和jquery方式实现。业务场景几乎所有Apache所有的大数据组件自带的Web界面都采用Jersey
    发表于 12-16 06:47

    FPGA中集成ARM核的话可以做些什么事情

    处理,产生各种控制信号。如果早FPGA中集成了ARM,这个过程能精简吗?或者可以得到哪些方面的优化或者功能?之前做asic的,对现在的各种软硬件、驱动、系统有点混,望高手指点!多谢多谢
    发表于 06-07 15:44

    如何实现硬件断点呢?

    我想问一下如何实现硬件断点呢,我底层debug模块中定义了如下寄存器 但是顶层运行硬件断点的时候依旧会提示报错 请问这种情况是顶层
    发表于 08-11 12:54

    HTS221最终客户应用中集成的硬件指南和参考设计

    本文档介绍了 HTS221 最终客户应用中集成的硬件指南和参考设计
    发表于 09-05 06:05

    FPGA,FPGA工作原理是什么?

    FPGA,FPGA工作原理是什么? FPGA(现场可编程门阵列)是专用集成电路(ASIC)中集成度最高的一种,用户可对
    发表于 03-26 17:07 4093次阅读

    一个FPGA中现在可集成多少32位RISC处理器?

    Jan Gray是FPGA中集成32位RISC处理器的专家,他写了一篇博客叫作FPGA CPU 新闻,副标题为 “使用FPGA开发并行计算
    发表于 02-10 08:55 2466次阅读
    一个<b class='flag-5'>FPGA</b>中现在可<b class='flag-5'>集成</b>多少32位RISC处理器?

    如何使用FPGA实现FIR抽取滤波器的设计

    FPGA实现抽取滤波器比较复杂,主要是因为FPGA中缺乏实现乘法运算的有效结构,现在,FPGA
    发表于 09-25 10:44 3次下载
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>FIR抽取滤波器的设计

    MSP430™ 微控制器 (MCU) 中集成多种功能

    MSP430™ 微控制器 (MCU) 中集成多种功能
    发表于 10-28 12:00 0次下载
    <b class='flag-5'>在</b> MSP430™ 微控制器  (MCU) <b class='flag-5'>中集成</b>多种功能

    成为一个更好厨师的真正秘诀:厨房电器中集成智能规模技术

    成为一个更好厨师的真正秘诀:厨房电器中集成智能规模技术
    发表于 11-02 08:16 0次下载
    成为一个更好厨师的真正秘诀:<b class='flag-5'>在</b>厨房电器<b class='flag-5'>中集成</b>智能规模技术

    硬件断点和软件断点是什么

    调试程序时,可以通过断点(Breakpoint)设置使程序暂停执行的条件标准。当特定的条件标准满足时,会暂停程序执行。 断点可分为两大类:硬件断点和软件
    的头像 发表于 01-22 17:42 4521次阅读
    硬件<b class='flag-5'>断点</b>和软件<b class='flag-5'>断点</b>是什么

    iOS中集成Vue是什么

    上一节Vue非浏览器环境下的尝试我们利用了weexvue中的dom实现成功的非浏览器环境中Vue的实例,接下来我们将Vue集成到iOS
    的头像 发表于 03-03 09:56 1434次阅读
    <b class='flag-5'>在</b>iOS<b class='flag-5'>中集成</b>Vue是什么