Vivado调用VIO核


前言

提示:本篇文章所使用的软件为Vivado2018.3:

以四选一数据选择器为例,使用verilog hdl语言以及Vivado自带的VIO,IP来实现功能


提示:以下是本篇文章正文内容,下面案例可供参考

一、IP核的介绍

IP核有三种不同的存在形式:HDL语言形式,网表形式、版图形式。分别对应我们常说的三类IP内核:软核、固核和硬核。软核就是RTL代码,方便修改。固核是综合后的网表,不宜修改。硬核就是经过完整后端设计的掩模,基本不能修改。
简单来说,就是相当于嵌入式开发调用的库文件。下面以VIO核为介绍,简单阐述IP的调用方法

二、VIO核

1.作用

VIO:Virtual input output,即虚拟IO。
主要用作虚拟IO使用;VIO的输出可以控制模块的输入,VIO的输入可以显示模块的输出值。 即在设置VIO的输入和输出时,将实际应用中的输入设置成VIO核中的输出,将实际应用中的输出设置成VIO核中的输入。
连接如下图:
代码如下(示例):
VIO核连接示意图

2.调用方法

1).添加源文件。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/04/07 14:46:17
// Design Name: MoWenQi
// Module Name: MUX4_MWQ
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 基于verilog hdl调用VIO核的四选一多路器
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module MUX4_MWQ(input sys_clk );    //定义一个输入时钟信号
    reg[3:0] out;                   //定义四位的一个输出
    wire[1:0] a, b, c, d;           //定义四个2位的输入
    wire[1:0] sel;                  //定义一个两位的sel使能端

    always @(*)                     //always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行。包括电平触发和时沿触发
    begin                           //自上而下,按照顺序逐个对分支表达式进行判断,如果这一分支表达式等于控制表达式的值,就执行其对应操作;均不相等时,执行default操作;
	  case(sel)                     //判断条件为sel的值
        2'b00: out=a;               //当sel为 00 时 把a的值赋值给out
		2'b01: out=b;               //当sel为 01 时 把b的值赋值给out
		2'b10: out=c;               //当sel为 10 时 把c的值赋值给out
		2'b11: out=d;               //当sel为 11 时 把d的值赋值给out
		default: out=2'bx;          //武上述条件时,把out赋值x不确定态
	endcase
    end
endmodule

2).点击IP Catalog-搜索VIO进行添加(完成初始化配置)
在这里插入图片描述

双击完成对初始化的配置
3)对输入输出个数和位宽的配置
在这里插入图片描述

位宽,按代码中来
在这里插入图片描述
点击生成
在这里插入图片描述

4)例化
点击IP Sources-打开vio-0.evo文件
在这里插入图片描述
找到vio_0.evo文件中大概57行,拷贝到源文件中,将()里面的名称改成源文件的名称

vio_0 your_instance_name (
  .clk(clk),                // input wire clk
  .probe_in0(probe_in0),    // input wire [3 : 0] probe_in0
  .probe_out0(probe_out0),  // output wire [1 : 0] probe_out0
  .probe_out1(probe_out1),  // output wire [1 : 0] probe_out1
  .probe_out2(probe_out2),  // output wire [1 : 0] probe_out2
  .probe_out3(probe_out3),  // output wire [1 : 0] probe_out3
  .probe_out4(probe_out4)  // output wire [1 : 0] probe_out4
);

再进行,分析综合,布局布线

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/04/07 14:46:17
// Design Name: MoWenQi
// Module Name: MUX4_MWQ
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 基于verilog hdl调用VIO核的四选一多路器
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module MUX4_MWQ(input sys_clk );    //定义一个输入时钟信号
    reg[3:0] out;                   //定义四位的一个输出
    wire[1:0] a, b, c, d;           //定义四个2位的输入
    wire[1:0] sel;                  //定义一个两位的sel使能端

    always @(*)                     //always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行。包括电平触发和时沿触发
    begin                           //自上而下,按照顺序逐个对分支表达式进行判断,如果这一分支表达式等于控制表达式的值,就执行其对应操作;均不相等时,执行default操作;
	  case(sel)                     //判断条件为sel的值
        2'b00: out=a;               //当sel为 00 时 把a的值赋值给out
		2'b01: out=b;               //当sel为 01 时 把b的值赋值给out
		2'b10: out=c;               //当sel为 10 时 把c的值赋值给out
		2'b11: out=d;               //当sel为 11 时 把d的值赋值给out
		default: out=2'bx;          //武上述条件时,把out赋值x不确定态
	endcase
    end
    vio_0 MUX4_MWQ (
  .clk(sys_clk),                // input wire clk
  .probe_in0(out),    // input wire [3 : 0] probe_in0
  .probe_out0(a),  // output wire [1 : 0] probe_out0
  .probe_out1(b),  // output wire [1 : 0] probe_out1
  .probe_out2(c),  // output wire [1 : 0] probe_out2
  .probe_out3(d),  // output wire [1 : 0] probe_out3
  .probe_out4(sel)  // output wire [1 : 0] probe_out4
);
endmodule


添加约束文件,进行管脚分配

create_clock -period 20.00 -name clk [get_ports sys_clk]

set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS33} [get_ports sys_clk]



总结

后面测试部分等拿到板子再仿真测试

  • 9
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值