Vio使用过程:

1、ip catalog搜索vio

vivado 关于VIO的IP核配置步骤

 

2、配置属性

vivado 关于VIO的IP核配置步骤

上图设置输入probe数量和输出probe数量

我设置输入1 ,输出 0

vivado 关于VIO的IP核配置步骤

如果不对后面可以再次修改

vivado 关于VIO的IP核配置步骤

设置位宽。然后ok

vivado 关于VIO的IP核配置步骤

Generate

 

3、例化

例化我一般是先找到veo文件位置,然后再进行例化。

vivado 关于VIO的IP核配置步骤

点击文件属性,

vivado 关于VIO的IP核配置步骤

复制文件路径

粘贴到文件夹路径,然后找到veo文件

vivado 关于VIO的IP核配置步骤

可以右键用记事本打开

里面有例化程序:

vivado 关于VIO的IP核配置步骤

4、关于probe

vivado 关于VIO的IP核配置步骤

 

Vio的Probe_out端口,在逻辑上级联的是模块的输入端口,比如模块的一个输入a,

需要注意,a并不能用input去声明,否则会出现“多驱动”错误。

 

想用vio虚拟控制模块的输入端口a,我是用以下语句(不完整)

Wire a;

Probe_out0(a);

 

而且,用vio的本意就是用虚拟端口代替实际端口,所以不需要input也是理所当然。

 

 

 

后记:

 

关于vio的使用

vivado 关于VIO的IP核配置步骤

如果按照这个图来的话,我自己认为的操作是这样的

(1)设计一个input indata[7:0]

(2)设计一个output outdata[7:0]

(3)然后创建一个vio核,设置对应的参数

(4)将vio例化,连接对应的端口

 

但是这样做的话会有几个问题

(1)input的端口还需要进行管脚约束吗?(因为本身就是在管脚不够用的情况下才使用虚拟io来替代,如果还需要管脚约束的话,是不是本末倒置了)

(2)在implement的时候报错,indata是一个多驱动的端口,系统说是input和vio例化程序这两个都是驱动。

(3)如果进行了管脚约束,那么是vio起作用还是实际的按键起作用呢?

 

 

后面我只使用了wire indata[7:0]关键字,这样implement时候没有再报错了,使用wire关键字的变量是不能进行管脚约束的。这说明我一开始的想法是错误的,不能用input去定义想要用在vio的端口。

 

我用led灯的程序实验了一下,发现是可以只用vio去控制wire型变量的。

 

后续我用了vio尝试去调试分频比,下图是vio的调试界面,我设置了两个端口,一个是输入调试口divnum,一个是输出调试口,spi_pout,其中divnum是分频比,通过改这个分频比,我可以通过示波器观察到波形的变化,这是实际操作成功了的。

示波器显示spi的工作频率已经被改变了。

 

Vio的例化

vivado 关于VIO的IP核配置步骤

vivado 关于VIO的IP核配置步骤

相关文章: