Vio使用过程:
1、ip catalog搜索vio
2、配置属性
上图设置输入probe数量和输出probe数量
我设置输入1 ,输出 0
如果不对后面可以再次修改
设置位宽。然后ok
Generate
3、例化
例化我一般是先找到veo文件位置,然后再进行例化。
点击文件属性,
复制文件路径
粘贴到文件夹路径,然后找到veo文件
可以右键用记事本打开
里面有例化程序:
4、关于probe
Vio的Probe_out端口,在逻辑上级联的是模块的输入端口,比如模块的一个输入a,
需要注意,a并不能用input去声明,否则会出现“多驱动”错误。
想用vio虚拟控制模块的输入端口a,我是用以下语句(不完整)
Wire a;
Probe_out0(a);
而且,用vio的本意就是用虚拟端口代替实际端口,所以不需要input也是理所当然。
后记:
关于vio的使用
如果按照这个图来的话,我自己认为的操作是这样的
(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的例化