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

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

3天内不再提示

FPGA设计调试流程

FPGA设计论坛 来源:FPGA设计论坛 2025-03-04 11:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

FPGA设计调试流程

FPGA开发是一个不断迭代的过程,一般的FPGA设计流程一般包含下面几个步骤:

硬件架构和算法验证:实现需要的功能需要哪几个模块,模块和模块之间如何进行通信和连接;硬件算法是否可行和稳定(以图像处理算法为例,一般可以采用MATLAB进行算法验证);

RTL代码编写;

硬件调试与验证:一般这个过程会耗费大量的时间,如果没有一定的经验以及技巧,有可能会使得开发时间延长几倍,甚至开发失败;

调试,即Debug,有一定开发经验的人一定会明确这是设计中最复杂最磨人的部分。对于一个庞大复杂的FPGA工程而言,出现问题的概率极大,这时如果没有一个清晰的Debug思路,调试过程只能是像无头苍蝇一样四处乱撞。在FPGA设计中一般的调试思路如下所示:

首先排查硬件问题:在出现问题时,首先怀疑并排除硬件问题。首先检查开发板的供电和连接是否正常,是否有电子元件被烧毁,是否出现元件虚焊等问题。确认开发板以及供电没有问题后,使用例程或者已有的程序或者工程对出现问题的核心部件进行测试。例如,在读写DDR时,如果DDR没有反应,可以通过网络查找例程,或者使用开发板官方提供的例程对DDR读写进行测试,确认DDR可以正常工作;在读写SD卡时,可以尝试换一张SD卡操作,或者通过将SD卡切换到其他设备上,确保SD卡没有损坏等。实际工程应用中,需要灵活选择测试和排查方案,但是目的基本都是相同的。

其次排查全局信号:确认硬件连接没有问题后,排查全局信号可能出现的问题。全局信号一般指接在内部所有模块的信号,例如i_sys_clk和i_sys_rst_n等。需要确保这些信号正常工作,之后的RTL排查才有意义。

最后排查RTL代码:在确保硬件和全局信号没有问题后,再开始排查RTL代码。在RTL代码排查中也有一定的顺序可以参考,一般可以参考下面的顺序:

检查主从设备(模块)之间的握手机制,或者说检查主从设备之间是否正常连接。很多时候可以参考设备的官方Datasheet检查主从模块之间的初始化指令是否书写正确。

检查状态跳转是否正常:在初始化过程中,经常使用状态机进行RTL编程

检查读写数据是否正常:可以设计一些“假数据”,例如人为规定的一些有规律的数据,检查这些数据在从设备中的地址是否正常,数据是否正确。

检查执行操作的触发信号:检查信号的Trigger是否正常工作。

总之,RTL调试是最枯燥的部分,很多时候需要“抽丝剥茧”、“追本溯源”才能找到问题所在。但是笔者认为这恰恰是体现一个FPGA工程师硬实力的必要技能和心境。

Vivado ILA IP 的使用

ILA,全称Integrated Logic Analyzer,是Xilinx FPGA芯片中设计的芯片内部集成逻辑分析仪。它可以在一定程度上替代外部的传统逻辑分析仪的作用。ILA通常和VIO(Vritual Input/Output)结合使用,VIO不仅可以实时监控内部的逻辑信号和端口信号,还可以充当模拟输入驱动内部端口。ILA监控内部信号输出给PC端,而VIO接收PC端的实时指令从而给内部端口提供输入信号。

ILA调试有多种方法,可以直接在代码中通过原语添加,也可以在原理图中通过Debug添加,也可以在网络列表Netlist中添加。

在这里先创建一个示例工程,使用一个呼吸灯模块作为顶层代码:

module Breath_LED (
    input sys_clk,
    input sys_rst_n,
    output reg led
);  
    parameter CNT_2US_MAX = 7'd100;
    parameter CNT_2MS_MAX = 10'd1000;
    parameter CNT_2S_MAX = 10'd1000;

    reg [6:0] cnt_2us;  // sys_clk = 50MHz, T = 20ns, cnt_2us: 0 ~ 99
    reg [9:0] cnt_2ms;
    reg [9:0] cnt_2s;  // cnt_2ms, cnt_2s: 0 ~ 999
    reg inc_dec_flag;   // 0: increase, 1: decrease

    // count to 2us
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            cnt_2us <= 7'd0;
        else if (cnt_2us == (CNT_2US_MAX - 7'd1))
            cnt_2us <= 7'd0;
        else 
            cnt_2us <= cnt_2us + 7'd1;
    end

    // count to 2ms by cnt_2us
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            cnt_2ms <= 10'd0;
        else if ((cnt_2us == (CNT_2US_MAX - 7'd1)) && 
            (cnt_2ms == (CNT_2MS_MAX - 10'd1)))
            cnt_2ms <= 10'd0;
        else if (cnt_2us == (CNT_2US_MAX - 7'd1))
            cnt_2ms <= cnt_2ms + 10'd1;
    end

    // count to 2s by cnt_2ms
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            cnt_2s <= 10'd0;
        else if ((cnt_2us == (CNT_2US_MAX - 7'd1)) && 
            (cnt_2ms == (CNT_2MS_MAX - 10'd1)) && 
            (cnt_2s == (CNT_2S_MAX - 10'd1)))
            cnt_2s <= 10'd0;
        else if ((cnt_2us == (CNT_2US_MAX - 7'd1)) && 
            (cnt_2ms == (CNT_2MS_MAX - 10'd1)))
            cnt_2s <= cnt_2s + 10'd1;
    end

    // inc_dec_flag
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            inc_dec_flag <= 1'b0;
        else if ((cnt_2us == (CNT_2US_MAX - 7'd1)) && 
            (cnt_2ms == (CNT_2MS_MAX - 10'd1)) && 
            (cnt_2s == (CNT_2S_MAX - 10'd1)))
            inc_dec_flag <= ~inc_dec_flag;
        else 
            inc_dec_flag <= inc_dec_flag;
    end

    // led PWM configuration
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n)
            led <= 1'b0;
        else if ((inc_dec_flag == 1'b0) && (cnt_2ms <= cnt_2s)) // increase
            led <= 1'b1;
        else if ((inc_dec_flag == 1'b1) && (cnt_2ms >= cnt_2s)) // decrease
            led <= 1'b1;
        else 
            led <= 1'b0;
    end

endmodule

IP核配置

在IP Catalog中搜索ILA即可找到ILA IP核,双击之后就会跳出配置界面。

f4fa2ee2-f720-11ef-9310-92fbcf53809c.png

设置部件名称、探针数量(需要测量信号的数量)和采样深度。clk信号一般是系统的时钟信号,ILA IP会在每个clk上升沿(或下降沿、具体有待考量)采一次对应信号的数据,直到采信号的次数达到采样深度为止。

f50a1ffa-f720-11ef-9310-92fbcf53809c.png

在这里,假设代码出现了问题,我们需要检测sys_clk、led、sys_rst_n、cnt_2us、cnt_2ms四个信号。四个信号的宽度分别为1,1,7,10。

f5273158-f720-11ef-9310-92fbcf53809c.png

完成设置后,点击OK,出现下面界面。如果综合选项选择Global,代码会在每次综合时都对ILA进行综合;如果选择OutofconextperIP(OOC模式),代码只会在ILA设置发生改变时对ILA进行综合。一般选择后者即可,可以加快综合速度。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1656

    文章

    22304

    浏览量

    630771
  • Vivado
    +关注

    关注

    19

    文章

    848

    浏览量

    70520
  • 硬件调试
    +关注

    关注

    1

    文章

    12

    浏览量

    10904
  • ILA
    ILA
    +关注

    关注

    0

    文章

    6

    浏览量

    3858

原文标题:使用ILA进行FPGA硬件调试

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FPGA板下载调试流程

    今天主要介绍一下整个FPGA板下载运行调试流程。 1、首先,参考网址https://doc.nucleisys.com/hbirdv2/soc_peripherals/ips.html#gpio 第
    发表于 10-29 06:37

    FPGA板下载运行调试流程

    今天主要介绍一下整个FPGA板下载运行调试流程。 1、首先,参考网址https://doc.nucleisys.com/hbirdv2/soc_peripherals/ips.html#gpio 第
    发表于 10-29 06:57

    FPGA基本开发流程概述

    验证无误,则可以生产下载配置文件烧录的实际器件中进行板级的调试工作。图5.15 FPGA/CPLD开发流程当然了,对于没有实际工程经验的初学者而言,这个流程图可能不是那么容易理解。不过
    发表于 01-28 02:29

    FPGA基本开发设计流程

    、板级仿真以及芯片编程与调试等主要步骤。图1-10 FPGA开发的一般流程1.电路功能设计在系统设计之前,首先要进行的是方案论证、系统设计和FPGA芯片选择等准备工作。系统工程师根据任
    发表于 07-23 09:12

    FPGA的设计流程是怎样的

    第二章 FPGA 开发流程FPGA 的设计流程就是利用 EDA 开发软件和编程工具对 FPGA 芯片进行开发的过程。原理图和HDL(Hard
    发表于 02-23 06:23

    FPGA调试工具-chipscope

    FPGA调试工具chipscope,学习与使用FPGA必用的工具。。
    发表于 03-23 09:45 86次下载

    加速FPGA系统实时调试技术

    随着 FPGA 的设计速度、尺寸和复杂度明显增长,使得整个设计流程中的实时验证和调试成为当前FPGA 系统的关键部分。获得FPGA 内部信号
    发表于 06-10 15:42 28次下载
    加速<b class='flag-5'>FPGA</b>系统实时<b class='flag-5'>调试</b>技术

    FPGA设计流程指南

    FPGA设计的流程,步骤,选型,仿真,软硬件设计,调试流程
    发表于 05-11 14:33 29次下载

    FPGA进行测试和调试有哪些办法?

    FPGA的设计速度、尺寸和复杂度明显增加,使得整个设计流程中的验证和调试成为当前FPGA系统的关键部分。获得FPGA内部信号有限、
    发表于 07-19 14:19 1.4w次阅读
    对<b class='flag-5'>FPGA</b>进行测试和<b class='flag-5'>调试</b>有哪些办法?

    关于FPGA它的开发流程是怎样的

    FPGA的设计流程就是利用EDA开发软件和编程工具对FPGA芯片进行开发的过程。FPGA的开发流程一般包括功能定义/器件选型、设计输入、功能
    发表于 11-06 15:17 2823次阅读

    FPGA的开发流程以及它的适用场景

    FPGA的设计流程就是利用EDA开发软件和编程工具对FPGA芯片进行开发的过程。FPGA的开发流程包括功能定义/器件选型、设计输入、功能仿真
    发表于 11-20 15:06 2244次阅读

    FPGA设计与调试教程说明

    FPGA概述FPGA调试介绍调试挑战设计流程概述■FPGA
    发表于 09-22 17:43 12次下载
    <b class='flag-5'>FPGA</b>设计与<b class='flag-5'>调试</b>教程说明

    FPGA基础知识----第二章 FPGA 开发流程

    第二章 FPGA 开发流程FPGA 的设计流程就是利用 EDA 开发软件和编程工具对 FPGA 芯片进行开发的过程。原理图和HDL(Hard
    发表于 12-29 19:40 9次下载
    <b class='flag-5'>FPGA</b>基础知识----第二章 <b class='flag-5'>FPGA</b> 开发<b class='flag-5'>流程</b>

    FPGA入门之FPGA 开发流程

    硬件电路描述方法。其中,运用 HDL 设计方法具有更好的移植性、通用性以及利于模块划分的特点,在工作学习中被广泛使用。典型 FPGA 的开发流程一般如下图所示, 其包括功能定义/器件选型、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及芯片编程与
    的头像 发表于 03-21 10:26 4296次阅读

    FPGA设计流程

    FPGA的设计流程主要包括HDL代码编写、RTL综合、布局布线、静态时序分析、生成下载文件。下面将逐一介绍各部分。下面是FPGA设计的流程图。
    的头像 发表于 07-04 12:06 2080次阅读
    <b class='flag-5'>FPGA</b>设计<b class='flag-5'>流程</b>