代码简单,有4个led灯。 当按下按的时候, led灯会随着输入4个bit数来亮灭。    这个按钮信号就是en, 数据是dat4. 想用VIO来测试。这里仅仅是记录下VIO的使用。下面代码。

 

`timescale 1ns/1ns

module topVio(clk50M, rst_n, led3 ,led2,led1,led0);
input clk50M;
input rst_n;
output reg led3,led2, led1, led0;
wire en;
wire  [3:0] dat4;

always @ (posedge clk50M or negedge rst_n ) begin 
    if (rst_n == 1'b0)  begin 
        led0 <= 1'b1;
        led1 <= 1'b1;
        led2 <= 1'b1;
        led3 <= 1'b1;
    end
    else   
    begin
        if (en ) begin
        led0 <= dat4[0];
        led1 <= dat4[1];
        led2 <= dat4[2];
        led3 <= dat4[3];
        end
    end
end

 vio_0 vio (
         .clk(clk50M),
       .probe_out0(en),
       .probe_out1(dat4)
   );

 

endmodule

 

添加VIO核,

1: 单击左侧的  IP  category, 

2:在右边界面如下图, 输入 VIO再回车。  他会出现  VIO(Virtual input/Output) .在 它上面右键选择 “customize IP"

VIO 简单总结_VIO简单使用例子

3: VIO这里没有输入。输出的是两个信号,使能和数据。点击general Options,  Input Probe count 这里输入0

Output Probe Count 输入2

VIO 简单总结_VIO简单使用例子_02

4:点击PROBE_OUT Ports选项卡,来设置位宽, 在 PROBE_OUT0 输入1 ; 在PROBE_OUT1输入4

VIO 简单总结_VIO简单使用例子_03

5 点击确定按钮。 它会产生VIO核  ,他的名字叫做 vio_0 . 在图的右上角那里,可以修改模块的名字。

 

编译bit文件,  下载bit文件。 下载完成后,会自动弹出下面界面,注意 en 和dat4这两行是没有的。 需要点击加号,来添加进来。

把en 和 dat4 加进来之后。  对应en来说他是高电平有效, 当用鼠标点击的时候他是高,不点的时候是低。 可以选择activity那一列,右键选择XXX(忘了可以自己摸索一下)VIO 简单总结_VIO简单使用例子_04

dat4的值,可以在value那一行输入, 当点击 [H]的时候,弹出来一个小编辑框,在里面可以输入数值,H标明16进制,这里输入C

然后点击一下en那行的 ,Value列,的单元格。 会发现1100会设置到led灯。  有两个灯会亮。  再设置成0011,再次点击 单元格,另外两个led会亮。