004---FPGA在线调试(二)---虚拟输入输出(VIO)


摘要

文章主要介绍Xilinx VIVADO定制IP核—虚拟输入输出(VIO)的使用方法。以led工程为例,观察信号timer_cnt 和 led的变化,并模拟rst_n。


一、VIO配置

(1)单击 IP Catalog 添加 VIO 的 IP

在这里插入图片描述

(2)Input Probe Count用于观察timer_cnt 和 led的变化,
Output Probe Count用于模拟rst_n。

在这里插入图片描述

(3)设置被观察信号的位宽

在这里插入图片描述

(4)设置模拟信号的位宽和初值

在这里插入图片描述

二、RTL

module led(
    input            sys_clk,
//    input            rst_n,
                           
    output reg [3:0] led
    );
    
reg  [31:0] timer_cnt;
wire  rst_n;

always@(posedge sys_clk or negedge rst_n)
begin
    if (!rst_n)
        timer_cnt <= 32'd0 ;
    else if(timer_cnt >= 32'd49_999_999)
        timer_cnt <= 32'd0;
    else
        timer_cnt <= timer_cnt + 32'd1;
end

always@(posedge sys_clk or negedge rst_n)
begin
    if (!rst_n)  
        led <= 4'd0 ;
    else if(timer_cnt >= 32'd49_999_999)
        led <= ~led;  
    else
        led <= led;   
end


vio vio_inst1 
(
  .clk(sys_clk),                // input wire clk
  .probe_in0(led),    // input wire [3 : 0] probe_in0
  .probe_in1(timer_cnt),    // input wire [31 : 0] probe_in1
  .probe_out0(rst_n)  // output wire [0 : 0] probe_out0
);

endmodule

三、在线调试

(1)生成 Bitstream、连接硬件、下载程序。

在这里插入图片描述

(2)双击VIO模块,添加进入VIO调试,并添加信号进入观察窗口。

在这里插入图片描述
(3)可以看到,信号timer_cnt 和 led随着时间不断的变化。
在这里插入图片描述
(4)手动调节restn信号为0,进行复位。信号timer_cnt 和 led全部变为0。
在这里插入图片描述

### 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、付费专栏及课程。

余额充值