FPGA如何进行片上调试?

嵌入式ARM 2022-11-10 12:00

之前在《FPGA基础知识,入门必看!》一文中,我们简单介绍了FPGA的基本结构。今天,再给大家讲一讲FPGA如何进行片上调试。


一、FPGA也能片上调试吗?

FPGA与STM32等嵌入式开发最大的一个优点就是,可以在时序仿真阶段验证超过90%的功能发现90%的问题。当所有的仿真没问题了,才能进行最后一步:板级调试。如果仿真都不对,那就没必要下载到芯片里了。

STM32等单片机,使用J-Link或ST-Link等调试器,可以进行在线调试,由于C代码是顺序执行的,我们可以插入断点,让程序停在我们需要的位置,或者是实时查看一些变量的数值,大大提高了我们Debug的速度,提高产品的开发效率。

▲zynq芯片


对于FPGA来说,仿真毕竟是仿真,可以理解为理想条件,而最终我们的代码是需要运行在实际的FPGA芯片硬件上的。

所以也会遇到仿真正常,实际下载到板子里不正常的情况。这种现象有两种原因:程序有BUG、硬件有问题。比如,实际程序中复位信号是低电平复位,而实际电路中设计的复位按键按下才是高电平,这样按键未按下就会导致程序一直处于复位状态。

当然,这只是一种最简单的问题点,实际开发过程中,仿真与实际运行不匹配的情况还有很多。那么如何才能以最快的速度找到问题点呢?

早期的FPGA调试方法通常使用逻辑分析仪,连接到FPGA芯片的外部管脚上,如果想查看内部信号,还需要把这些信号定义成Output引出到外部管脚进行了测量,如果是多位数据,这样就会占用大量的管脚,但是此类工具有个优点就是支持多种协议解析,可以非常方便的查看协议的报文数据。

▲DSLogic IIC解析


如果有一种工具能像单片机开发那样,通过调试器JTAG接口实时获取运行过程中寄存器的数值就好了。有需求就有市场,FPGA厂商也考虑到了开发者的这种需求,都在自家产品上加上了这个功能,那就是片上逻辑分析仪,就像在芯片内装了一个逻辑分析仪ELA(Embedded Logic Analyzer),可以实时监测数据的变化,还可以设置触发条件等!

FPGA领域几大厂家提供嵌入式逻辑分析仪:

  • Intel(原Altera)的SignalTap工具
  • AMD(原Xilinx)的ChipScope工具
  • Microchip(原Microsemi)的Identify工具
  • Lattice的Reveal工具


这些工具都是嵌入式逻辑分析仪,大大提高了Debug速度。这类工具的原理通常是以预先设定的时钟速率实时采样FPGA的内部信号,并暂存于FPGA的内部RAM中,当满足预设的触发条件后,通过JTAG将存储在片内RAM中的数据传输至PC上,PC接收到数据后,通过上位机把数据展现出来。

以下是使用ChipScope工具抓取的铁电存储器FM25V05的SPI写时序:

▲FM25V05写时序


从FPGA学习流程来看,当了解了流水灯、按键、UART等基本例程后,再学习I2C,SPI之前,就需要掌握片上逻辑分析仪的使用,非常有利于代码的调试。

▲ChipScopePro


我个人使用过Xilinx和Microsemi的工具,还是挺好用的。而本文主要介绍的是Xilinx ISE开发环境下ChipScope工具的使用。

二、Xilinx ChipScope简介


Xilinx的FPGA片内逻辑分析仪被称为ChipScope,通过插入IP核的方式实现,主要包括3大IP核。

  • ICON

ICON(integrated controller),主要负责与JTAG口的通讯,最大支持连接15个Core,这里的Core可以是ILA或VIO。

  • ILA

ILA(integrated logic analyzer),嵌入式逻辑分析仪,可以抓取内部的任何信号,通过设置触发条件的方式,抓取一段时间的波形,时间长度取决于FPGA RAM资源大小。

  • VIO

VIO(virtual input/output),即输入输出,可以实时监控FPGA内部信号,并提供驱动信号给FPGA模块,类似于单片机调试中的变量值查看。

  • ATC2

ATC2(Agilent trace core),是属于特殊定制的调试IP核,需要配合新一代的Agilent逻辑分析仪一起使用,这个很少使用。

下面这张图是来自Xilinx官方文档:chipscope_pro_sw_cores_ug029.pdf的一张图片,关于ChipScope官方的使用指南可以查看这篇文档,介绍了ChipScope工具的整体框图。

▲ChipScope系统框图

既然是逻辑分析仪,就要涉及到逻辑分析仪最重要的两个参数:采样频率和采样深度,ILA的采样频率取决于输入时钟信号的频率,采样深度取决于FPGA的RAM大小。

三、示例工程创建


下面以Xilinx Spartan-6 XC6SLX9为例,演示ChipScope的使用,ILA抓取cnt实时数据。VIO实现在上位机控制LED亮灭,或选择闪烁频率。led1通过VIO来选择4档闪烁频率,led2通过VIO给的触发信号上升沿进行翻转,led3与VIO输出高低保持一致。

首先创建一个基于XC6SLX9的ISE基本工程,并新建源文件。

以下代码还未添加ChipScope:

module top(
    //Inputs
    input clk,          //50MHz
    input rst_n,

    //Outputs
    output reg led1,        //通过VIO来选择4种闪烁频率
    output reg led2,        //通过VIO来控制
    output led3         //通过VIO来控制
)
;

wire [1:0] level;       //来自VIO
wire trig;              //来自VIO, 按键产生高脉冲信号
wire trig_rise = (trig_reg == 2'b01);

reg [1:0] trig_reg;
reg [26:0] cnt;         //在ILA中查看数据变化

always @ (posedge clk) begin
    if(!rst_n)
        trig_reg <
'h0;
    else 
        trig_reg <= {trig_reg[0], trig};
end

always @ (posedge clk) begin
    if(!rst_n) 
        cnt <= '
d0;
    else 
        cnt <= cnt + 1;
end

always @ (posedge clk) begin
    if(!rst_n)
        led1 <
'd0;
    else begin
        //level来自VIO
        case (level)
            0:  led1 <= cnt[26];
            1:  led1 <= cnt[25];
            2:  led1 <= cnt[24];
            3:  led1 <= cnt[23];
        endcase
    end
end

always @ (posedge clk) begin
    if(!rst_n)
        led2 <= 0;
    else if(trig_rise)      //trig上升沿翻转
        led2 <= !led2;
end

endmodule


四、添加ChipScope ICON IP核


添加一个IP核源文件,保存在chipscope文件夹下。


▲添加ICON


选择ICON IP核,以下添加VIO和ILA核是一样的操作。

▲选择ICON


添加之后进入配置界面,因为我们连接了ILA和VIO两个IP核,这里控制端口需要两个:

▲配置端口


查看例化模板:

icon YourInstanceName (
    .CONTROL0(CONTROL0)
// INOUT BUS [35:0]
    .CONTROL1(CONTROL1) // INOUT BUS [35:0]
)
;


五、添加ChipScope ILA IP核


▲添加ILA


选择采样深度,数值越大,占用FPGA RAM资源越多,采样时间越长。

▲设置采样深度


选择采集通道,这里选择32个通道。

▲选择触发通道


等待生成完成,查看例化模板:

ila YourInstanceName (
    .CONTROL(CONTROL)
// INOUT BUS [35:0]
    .CLK(CLK)// IN
    .TRIG0(TRIG0) // IN BUS [31:0]
)
;


六、添加ChipScope VIO IP核


同样的方式添加VIO核:


▲添加VIO


选择32路输入,用于监测cnt的值,4路输出,用于控制LED。

▲配置输入输出通道


设置为异步输入32位,输出4位。

七、将ChipScope的3个IP核添加到顶层模块


module top(
    //Inputs
    input clk,          //50MHz
    input rst_n,

    //Outputs
    output reg led1,        //通过VIO来选择4种闪烁频率
    output reg led2,        //通过VIO来控制
    output led3         //通过VIO来控制
)
;

wire [1:0] level;       //来自VIO
wire trig;              //来自VIO, 按键产生高脉冲信号
wire trig_rise = (trig_reg == 2'b01);

reg [1:0] trig_reg;
reg [26:0] cnt;         //在ILA中查看数据变化

always @ (posedge clk) begin
    if(!rst_n)
        trig_reg <
'h0;
    else 
        trig_reg <= {trig_reg[0], trig};
end

always @ (posedge clk) begin
    if(!rst_n) 
        cnt <= '
d0;
    else 
        cnt <= cnt + 1;
end

always @ (posedge clk) begin
    if(!rst_n)
        led1 <
'd0;
    else begin
        //level来自VIO
        case (level)
            0:  led1 <= cnt[26];
            1:  led1 <= cnt[25];
            2:  led1 <= cnt[24];
            3:  led1 <= cnt[23];
        endcase
    end
end

always @ (posedge clk) begin
    if(!rst_n)
        led2 <= 0;
    else if(trig_rise)      //trig上升沿翻转
        led2 <= !led2;
end

/* Xilinx ChipScope Config */

wire [35:0] CONTROL0;
wire [35:0] CONTROL1;
wire [31:0] TRIG0;
wire [31:0] ASYNC_IN;
wire [3:0] ASYNC_OUT;

assign ASYNC_IN[26:0] = cnt[26:0];

assign level = ASYNC_OUT[1:0];
assign trig  = ASYNC_OUT[2];
assign led3  = ASYNC_OUT[3];

assign TRIG0[26:0] = cnt[26:0];
assign TRIG0[28:27] = level[1:0];
assign TRIG0[29] = led1;
assign TRIG0[30] = led2;
assign TRIG0[31] = led3;

icon icon_ut0(
    .CONTROL0(CONTROL0[35:0]),
    .CONTROL1(CONTROL1[35:0])
);

ila ila_ut0(
    .CONTROL(CONTROL0[35:0]), 

    .CLK(clk), 
    .TRIG0(TRIG0[31:0])
);

vio vio_ut0(
    .CONTROL(CONTROL1[35:0]),

    .ASYNC_IN(ASYNC_IN[31:0]),
    .ASYNC_OUT(ASYNC_OUT[3:0])
);

endmodule


八、编译下载


管脚分配,编译通过,生成bit文件,打开ChipScope,下载bit文件。

▲ChipScope


下载Bit文件:

▲选择bit文件


对信号进行重新命名,设置触发信号,或者控制VIO输出状态。

▲设置触发方式


trig设置成PushButton类型,并设置为高脉冲。

led3设置成ToggleButton类型,即按一下状态翻转一次。

▲VIO配置


九、总结


单片机在线调试可以设置断点,让程序停下,FPGA只要时钟信号存在,就会一直运行下去,所以无法人为的设置断点,中止代码的运行。

任何事物都不可能达到十全十美,使用管脚外接的逻辑分析仪不会占用任何的逻辑资源,可以通过逻辑分析仪解析协议的报文,缺点是不能查看内部信号;使用片内逻辑分析仪的优点是可以实时查看内部信号,设置触发条件,缺点是会占用FPGA的逻辑资源,比如RAM等。

Xilinx新一代的集成开发工具Vivado最低支持Spartan-7系列的FPGA芯片,由于手头只有Spartan-6系列的开发板,所以无法演示在Vivado环境下的ChipScope使用,基本上都大同小异,使用方法类似,毕竟是同一家的调试工具。

END

作者:wcc149

来源:电子电路开发学习

版权归原作者所有,如有侵权,请联系删除。

推荐阅读
泰坦导弹制导计算机内部结构曝光!
嵌入式工资为什么比纯软工资低那么多?
为什么中国程序员不如外国程序员有创造性?

→点关注,不迷路←

嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-11 17:58 114浏览
  • 铁氧体芯片是一种基于铁氧体磁性材料制成的芯片,在通信、传感器、储能等领域有着广泛的应用。铁氧体磁性材料能够通过外加磁场调控其导电性质和反射性质,因此在信号处理和传感器技术方面有着独特的优势。以下是对半导体划片机在铁氧体划切领域应用的详细阐述: 一、半导体划片机的工作原理与特点半导体划片机是一种使用刀片或通过激光等方式高精度切割被加工物的装置,是半导体后道封测中晶圆切割和WLP切割环节的关键设备。它结合了水气电、空气静压高速主轴、精密机械传动、传感器及自动化控制等先进技术,具有高精度、高
    博捷芯划片机 2024-12-12 09:16 121浏览
  • 本文介绍瑞芯微RK3588主板/开发板Android12系统下,APK签名文件生成方法。触觉智能EVB3588开发板演示,搭载了瑞芯微RK3588芯片,该开发板是核心板加底板设计,音视频接口、通信接口等各类接口一应俱全,可帮助企业提高产品开发效率,缩短上市时间,降低成本和设计风险。工具准备下载Keytool-ImportKeyPair工具在源码:build/target/product/security/系统初始签名文件目录中,将以下三个文件拷贝出来:platform.pem;platform.
    Industio_触觉智能 2024-12-12 10:27 115浏览
  • 全球智能电视时代来临这年头若是消费者想随意地从各个通路中选购电视时,不难发现目前市场上的产品都已是具有智能联网功能的智能电视了,可以宣告智能电视的普及时代已到临!Google从2021年开始大力推广Google TV(即原Android TV的升级版),其他各大品牌商也都跟进推出搭载Google TV操作系统的机种,除了Google TV外,LG、Samsung、Panasonic等大厂牌也开发出自家的智能电视平台,可以看出各家业者都一致地看好这块大饼。智能电视的Wi-Fi连线怎么消失了?智能电
    百佳泰测试实验室 2024-12-12 17:33 121浏览
  • 首先在gitee上打个广告:ad5d2f3b647444a88b6f7f9555fd681f.mp4 · 丙丁先生/香河英茂工作室中国 - Gitee.com丙丁先生 (mr-bingding) - Gitee.com2024年对我来说是充满挑战和机遇的一年。在这一年里,我不仅进行了多个开发板的测评,还尝试了多种不同的项目和技术。今天,我想分享一下这一年的故事,希望能给大家带来一些启发和乐趣。 年初的时候,我开始对各种开发板进行测评。从STM32WBA55CG到瑞萨、平头哥和平海的开发板,我都
    丙丁先生 2024-12-11 20:14 101浏览
  • 在智能化技术快速发展当下,图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进步,对于图像数据的采集、处理和分析的需求日益增长,这不仅要求我们拥有高性能的相机硬件,还要求我们能够高效地集成和测试各种算法。我们探索了一种多源相机数据采集与算法集成测试方案,能够满足不同应用场景下对图像采集和算法测试的多样化需求,确保数据的准确性和算法的有效性。一、相机组成相机一般由镜头(Lens),图像传感器(Image
    康谋 2024-12-12 09:45 117浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 141浏览
  • 应用环境与极具挑战性的测试需求在服务器制造领域里,系统整合测试(System Integration Test;SIT)是确保产品质量和性能的关键步骤。随着服务器系统的复杂性不断提升,包括:多种硬件组件、操作系统、虚拟化平台以及各种应用程序和服务的整合,服务器制造商面临着更有挑战性的测试需求。这些挑战主要体现在以下五个方面:1. 硬件和软件的高度整合:现代服务器通常包括多个处理器、内存模块、储存设备和网络接口。这些硬件组件必须与操作系统及应用软件无缝整合。SIT测试可以帮助制造商确保这些不同组件
    百佳泰测试实验室 2024-12-12 17:45 115浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 140浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 123浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-12 10:13 80浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦