FPGA上板调试方式总结----VIO/ILA

        在Vivado中,VIO(Virtual Input/Output)是一种用于调试和测试FPGA设计的IP核,它允许设计者通过JTAG接口实时读取和写入FPGA内部的寄存器,从而检查设计的运行状态并修改其行为。VIO IP核提供了一个简单易用的接口,使得用户可以轻松地与FPGA内部寄存器进行交互。

         在Vivado中,ILA(Integrated Logic Analyzer)是一种强大的在系统调试工具,它可以捕获并分析FPGA内部的信号。使用ILA时,需要确保ILA的时钟信号与被观察信号的时钟域一致,以避免由于时钟域不匹配导致的数据捕获错误。此外,ILA的探针数量和数据深度应根据实际需求进行配置,以平衡资源消耗和调试需求。

        VIO与ILA基本上就是我们在板调试FPGA的主要工具,在vivado中均有相应的IP core,具体的步骤如下:

1. vivado中打开IP Catalog

2. 搜索ila,在Debug&Verification 中选择ILA(Inegrated Logic Analyzer)

3. 右键Customize IP ,设置参数,多数的选择可以采用默认的选择。

由于其使用比较简单,且CSDN博客中也有诸多大佬已经详细阐述过其使用方式。这里贴出我个人认为最细致的ILA使用方式的博客链接:

FPGA — Vivado下ILA(逻辑分析仪)详细使用方法_vivado ila-CSDN博客

这里对ILA的特殊参数做一点说明:

Capture Control:即可以选择一个条件信号,仅条件信号满足设置要求时,才会进行采样或者触发操作,用于我们在需要某些信号进行触发时勾选;

Advanced Trigger:支持高级触发功能,它允许用户通过编写触发状态机(Trigger State Machine,TSM)来定义更复杂的触发条件。TSM是一个简单的脚本语言,用于定义触发状态机。可以在ILA的属性窗口中编写TSM代码,或者创建一个后缀为.tsm的文件来编写TSM脚本,实现相应的触发设置,可以利用ILA的高级触发功能来更精确地捕获和分析FPGA设计中的信号。

Setup Debug:由于这种Debug方式是将Debug信息写入XDC文件的方式,vivado提示我们需要更新XDC文件,可以选择覆盖overwite现有的XDC文件,该选项并不会删除我们现有的XDC文件约束,而是将Debug信息添加在XDC约束后面,实际操作中会发现,并不是完全将新的ILA约束信息,添加在原有XDC文件之后,而是以vivado自己的方式,重新写我们的约束文件,即如果我们有重要的约束信息,建议新增XDC文件save constraints as ,这样可以保障原有XDC信息不被修改。

ILA其他注意事项

(1)ILA核的采样深度不宜过大,采样深度尽量设置在1024bit以内:在每个采样时钟下,ILA都会将捕获到的探针信号的值送入RAM中,由于RAM的存储空间是有限的,其数值越大,消耗的RAM资源也越多,从而对设计性能产生不利影响。

(2)ILA核的采样宽度不宜过大,随探针宽度增加,对资源利用率和时序的影响也会增大。

(3)请确保输入到ILA核的时钟与抓取的信号是同步关系,否则在设计编程到器件中时会产生时序问题并导致通信失败。

(4)抓信号的时钟必须为全局时钟网络。

(5)请尽量确保ILA核选择的时钟均为自由运行的时钟(常开稳定时钟),否则可能造成在器件上加载版本时无法与调试核通信。

(6)请尽量确保FPGA JTAG时钟比Debug Hub时钟慢2.5倍,否则可能出现运行后报错或者运行后不报错但不显示任何结果的情况,ug908。

        VIO的配置界面中,设置Input Probe Count和Output Probe Count,即输入和输出探头的数量。

Enable Input Probe Activity Detectors:当输入信号发生变化时,Vivado会显示一个活动指示,帮助追踪信号的变化。启用Input Probe Activity Detectors后,你可以在ILA调试波形中看到哪些信号是活动的,这有助于快速定位问题。

ILA与VIO的其他设置均所见即所得,不会引起很大的歧义,大家按照IP说明使用即可。最后远程调试上板的步骤请参考:

FPGA远程烧录bit流_vivadao2018.2怎么烧写bit-CSDN博客

### FPGAVIO 模块的冗余设计与实现 在FPGA开发中,VIO(Virtual Input/Output)模块用于提供虚拟输入输出端口,允许开发者通过集成逻辑分析仪(ILA)观察内部信号状态并对其进行操作。为了提高系统的可靠性和灵活性,采用冗余设计方案是非常重要的。 #### 1. 条件编译方式实现模块调用控制 一种有效的方法是在顶层文件中利用条件编译语句来决定是否实例化VIO模块。这样可以在不改变原有代码结构的情况下轻松启用或禁用调试工具。具体做法如下: ```verilog `ifdef DEBUG_MODE vio_0 your_instance_name ( .clk(clk), // input wire clk .probe_in(probe_in),// output wire [7 : 0] probe_in .probe_out() // input wire [31 : 0] probe_out ); `endif ``` 这种方式不仅保持了代码整洁度,还便于管理不同版本之间的差异[^1]。 #### 2. 参数配置法 另一种方法是基于参数设置来进行动态调整。可以通过定义全局宏定义或其他形式的参数,在综合阶段指定是否包含特定的功能模块。例如: ```verilog module top_module #(parameter USE_VIO = 0)(/*...*/); if (USE_VIO == 1) begin:vio_inst vio_0 u_vio( /* ... */ ); end ``` 此方案的优势在于能够在不影响其他部分的前提下灵活切换功能选项,特别适合于多平台或多应用场景下的产品开发需求。 #### 3. 使用外部控制信号 还可以考虑引入额外的控制位作为使能开关,由上层软件或者其他硬件单元负责设定其值。当该位被置高时,则激活对应的VIO资源;反之则将其关闭。这有助于构建更加智能化、自动化的系统架构。 ```verilog wire enable_vio; assign enable_vio = some_condition ? 1'b1 : 1'b0; always @(posedge clk or negedge rst_n) begin if (!rst_n) // Reset logic here... else if (enable_vio) // Enable VIO related operations. end ``` 这种机制能够更好地适应复杂环境变化的要求,并且有利于简化整体电路布局。 综上所述,针对FPGA内的VIO模块实施有效的冗余策略可以从多个角度出发,既包括静态层面的设计考量也涵盖了运行期间的状态监测与响应处理等方面的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值