Vivado调用VIO核

article/2025/9/17 2:34:32

文章目录

  • 前言
  • 一、IP核的介绍
  • 二、VIO核
    • 1.作用
    • 2.调用方法
  • 总结


前言

提示:本篇文章所使用的软件为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的值赋值给out2'b01: out=b;               //当sel为 01 时 把b的值赋值给out2'b10: out=c;               //当sel为 10 时 把c的值赋值给out2'b11: out=d;               //当sel为 11 时 把d的值赋值给outdefault: out=2'bx;          //武上述条件时,把out赋值x不确定态endcaseend
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的值赋值给out2'b01: out=b;               //当sel为 01 时 把b的值赋值给out2'b10: out=c;               //当sel为 10 时 把c的值赋值给out2'b11: out=d;               //当sel为 11 时 把d的值赋值给outdefault: out=2'bx;          //武上述条件时,把out赋值x不确定态endcaseendvio_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]

总结

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


http://chatgpt.dhexx.cn/article/ZKlXpkni.shtml

相关文章

海思3519 VIO Sample例程讲解

海思VIO Sample例程讲解 海思SDK解压出来后,Sample包含各个功能模块的历程,本篇讲解VIO Sample历程。 进入VIO模块可以看到,VIO的main函数文件,先从main函数执行程序。 进入文件后首先看下VIO实现的功能,可以看到VIO…

PL-VIO论文阅读

PL-VIO: Tightly-Coupled Monocular Visual–Inertial Odometry Using Point and Line Features Yijia He 1,2,* , Ji Zhao 3, Yue Guo 1,2, Wenhao He 1 and Kui Yuan 1 2018 摘要 To address the problem of estimating camera trajectory and to build a structural 3D m…

DM-VIO简析

今天主要是针对DMVIO/DM-VIO的简析,中文网上有的东西都太少了,只能靠看完论文和组员们一起改代码。Lukas组这个东西在中文网被称为有史以来最好的VIO,但是实际过程中我们还是发现了许多不完美的地方。。。(比如ZUPT更新改造中该有的问题仍然在…

VIOSLAM 综述

文章目录 1.VIO 松耦合/紧耦合。2. 相机和IMU的缺点及互补性3. VIO融合算法流程及其模块分解:4. VIO 算法核心:5. 实验结果与总结:6. 参考文献: 1.VIO 松耦合/紧耦合。 Visual-Inertial Odometry(VIO)即视觉惯性里程计,有时也叫视觉惯性系统…

VIO系统介绍

VIO(visual-inertial odometry)即视觉惯性里程计,有时也叫视觉惯性系统(VINS,visual-inertial system),是融合相机和IMU数据实现SLAM的算法,根据融合框架的区别又分为紧耦合和松耦合…

vivado VIO (virtual input output)虚拟IO的使用

转自:https://blog.csdn.net/wordwarwordwar/article/details/77150930 一般情况下ILA和VIO都是用在chipscope上使用,VIO可以作为在chipscope时模拟IO。 譬如: 在使用chipscope时需要使用按键出发,但是没有设计按键或者板子不再身…

【Vivado那些事儿】-VIO原理及应用

虚拟输入输出(Virtual Input Output,VIO)核是一个可定制的IP核,它可用于实时监视和驱动内部FPGA的信号,如图所示。 可以定制VIO的输入和输出端口的数量与宽度,用于和FPGA设计进行连接。由于VIO核与被监视和驱动的设计同步&#xf…

python logger.exception_Python logging设置和logger解析

一、logging模块讲解 1.函数:logging.basicConfig() 参数讲解: (1)level代表高于或者等于这个值时,那么我们才会记录这条日志 (2)filename代表日志会写在这个文件之中,如果没有这个字段则会显示在控制台上 (3)format代表我们的日志显示的格式自定义,如果字段为空,那么默认…

Logger 基本用法

Logger 基本用法 简介 Simple, pretty and powerful logger for android 为Android提供的,简单、强大而且格式美观的工具 本质就是封装系统提供的Log类,加上一些分割线易于查找不同的Log;logcat中显示的信息可配置。最初的样子如下图 包含…

【Logback】<logger>、<root>标签详解

文章目录 背景一、\<logger>使用1.1、使用示例1.1、属性配置说明 & 演示1.1.1、name1.1.2、level1.1.3、additivity1.1.3.1、效果演示&#xff1a;additivitytrue1.1.3.1、效果演示&#xff1a;additivity"false" 1.2 appender-ref 二、\<root>使用2…

python之logger

import logging import os.path import time def test_log():"""指定保存日志的文件路径&#xff0c;日志级别&#xff0c;以及调用文件将日志存入到指定的文件中:paramlogger:"""# 创建一个loggerlogger logging.getLogger()logger.setLevel(l…

Python中logger日志模块详解

1 logging模块简介 logging模块是Python内置的标准模块&#xff0c;主要用于输出运行日志&#xff0c;可以设置输出日志的等级、日志保存路径、日志文件回滚等&#xff1b;相比print&#xff0c;具备如下优点&#xff1a; 可以通过设置不同的日志等级&#xff0c;在release版…

logger:一款管理日志的Python神器

最近要新开一个项目&#xff0c;需要配个 logger 来管理日志&#xff0c;今天分享一下&#xff0c;喜欢记得点赞、关注、收藏。 【注】文末提供交流互助群 import logging ori_logger logging.getLogger(custom_logger) ori_logger.setLevel(logging.INFO) ori_logger.addHa…

Tensorboard + Logger 日志记录

在Pytorch 训练模型的时候&#xff0c;需要日志帮助开发者记录些重要信息和参数&#xff0c;以方便开发者更好的调节模型及参数&#xff0c;常见的日志非 Tensorboard不可&#xff0c;但是Pytorch 对 Tensorboard 的支持不是十分完美&#xff0c;在记录模型重要参数时 Tensorbo…

深入理解 rootLogger、logLogger、qtLogger

作者: 一去、二三里个人微信号: iwaleon微信公众号: 高效程序员 在使用 Log4Qt 时,你会发现有一系列的 logger - rootLogger()、logLogger()、qtLogger(),简直傻傻分不清楚! 为什么会有这么多 logger? 各 logger 之间有什么关系? 它们均适用于哪种场景? 参考文档对这部…

logger 报错

logger 报错&#xff1a;&#xff08;log4j 起不来&#xff0c;log message打不出来&#xff09; No appenders could be found for logger (com.vip.qa.android.base.DriverFactory). log4j:WARN Please initialize the log4j system properly. 原因&#xff1a; log4j.prop…

java的logger_java.util.logging.Logger 使用详解

概述: 第1部分 创建Logger对象 要使用J2SE的日志功能,首先要取得java.util.logging.Logger实例,这可以通过Logger类的两个静态getLogger()方法来取得: staticLogger getLogger(String name) 查找或创建一个logger。staticLogger getLogger(String name, String resourceBun…

Logger日志使用教程

Java util Logger的使用步骤 Java util Logger是java原生的日志生成工具&#xff0c;不需要另外引用类库&#xff0c;使用方便&#xff0c;学习简单&#xff0c;能够在小型应用中灵活使用。下面从实际应用角度&#xff0c;对Logger的使用步骤作出总结&#xff0c;以实现快速掌握…

Logger 日志管理

转载请注明出处&#xff1a; http://blog.csdn.net/like_program/article/details/52986553 1.Logger 是什么 在我们日常的开发中&#xff0c;肯定是少不了要和 Log 打交道&#xff0c;回想一下我们是怎么使用 Log 的&#xff1a;先定义一个静态常量 TAG&#xff0c;TAG 的值通…

【转】最详细的Log4J使用教程一、入门实例二、Log4J基本使用方法三、Spring中使用Log4J四、实战经验总结

原文地址&#xff1a;http://www.codeceo.com/article/log4j-usage.html 日志是应用软件中不可缺少的部分&#xff0c;Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站&#xff1a;jakarta.apache.org/log4j可以免费下载到Log4j最新版本的软…