Vivado的安装以及使用_入门-程序员宅基地

技术标签: fpga开发  硬件工程  

Vivado的安装以及使用

零. Vivado简要介绍

Vivado是FPGA厂商赛灵思提供的一款EDA(Electronic Design Automation)工具. 在电子设计自动化方面, 其主要提供了四种功能: RTL代码编写, 功能仿真, 综合(synthesis)以及实现(implementation).

  • 其中, RTL代码编写用于编写设计的HDL描述(利用VHDL和System Verilog两种语言);
  • 功能仿真用于测试编写出的代码功能是否符合预期, 需要编写相关的testbench文件;
  • 综合用于讲RTL级描述转换为门级网表(门级网表是指设计的门级实现,包含门级元件和元件之间的连接, 从而更接近底层设计);
  • 实现用于将门级网表转换为可以下载到FPGA开发板上的比特流.

在这里插入图片描述

vivado在数字集成电路设计过程中的作用

一. vivado的安装

Vivado的安装已经有好多文章介绍过, 在这里给出一篇文章
https://blog.csdn.net/taowei1314520/article/details/74860356

二. 使用vivado完成一个小设计-计数器

在这里我们以一个4进制计数器的设计为例, 讲解我们如何使用Vivado进行工程设计
1. 新建工程
在菜单中点击file->project->new新建project
在这里插入图片描述

新建工程命令所在位置

新建project的时候注意选择合适的存放路径, 然后点击next; 选择RTL Project, 点击next; 选择对应的开发板, 点击next; 点击finish, 完成工程的新建.
在这里插入图片描述

新建工程过程示意图

在这里插入图片描述

新建工程project 4 后的Vivado界面
  1. 新建设计文件
    在界面中找到"Source"框, 点击"+", 选择"Add or create design sources", 点击next.
    在这里插入图片描述
新建设计文件过程示意图一

点击Creat file, 指定语言类型, 文件名字, 文件存放的位置, 完成设计文件的新建.
在这里插入图片描述

新建设计文件过程示意图二

新建file之后的界面, 如下图, 双击Source的设计文件(在这里, 我命名为counter), 即可打开, 进行编辑.
在这里插入图片描述

新建完成设计文件后的Source窗口示意图
  1. 完成设计文件的编写
    这里以一个四进制的计数器为例, 代码如下所示.
// 这是一个从0开始计数, 可配置位数(更改WIDTH), 输入为时钟信号和复位信号, 输出计数器当前的值和计满信号的计数器.
module counter
	#( parameter WIDTH = 4)
	(
    input clk,
    input preset,
    output reg [WIDTH-1:0] count,
    output reg full
	);
	
	// always时许块中使用非阻塞赋值
	always @ (posedge clk or negedge preset) begin //时钟上升沿和复位下降沿触发
		if(~preset)begin
			count <= 0;
		end
		else begin //一定要加else
			count <= count+1;
		end
		
	end
	
	always@(*)begin
	   full = (count==2**WIDTH-1);
	end
	
endmodule
  1. 新建仿真文件
    与新建设计文件类似
    • 在界面中找到"Source"框, 点击"+", 选择"Add or create simulation sources", 点击next.
    • 点击Creat file, 指定语言类型, 文件名字, 文件存放的位置, 完成仿真文件的新建.
    • 双击Source窗口下面, "Simulation Sources"下的设计文件(在这里, 我命名为counter), 即可打开, 进行编辑.
      在这里插入图片描述
仿真文件所在处
  1. 完成仿真文件的编写
    该四进制的计数器的tesetbenc文件如下:
`timescale 1ns / 1ps


module counter_testbench
	#(parameter WIDTH=4)(

    );
    // 给出对应的端口
    reg clk;
	reg reset;
    wire [WIDTH-1:0] count; // 接收模块的输出(wire)
    wire full;
    
	
    // 激励的产生
    
    initial begin
        clk = 0;
	    reset = 1;
	    #25 reset = 0;
	    
	    #25 reset = 1; 
    end
    
    always begin
		# 5 clk = ~clk;
	end
	
    always begin
      #100;
      if ($time >= 10000)  $finish ;
   end
   
   // 连接
   counter c1(
	   .clk(clk),
	   .preset(reset),
	   .count(count),
	   .full(full)
	   );
   
endmodule

  1. 点击"Run Simulation"进行功能仿真
    在这里插入图片描述
SIMULATION按钮所在处

仿真结果如下图所示, 可见, 该计数器功能正常
在这里插入图片描述

仿真结果
  1. 点击SYTHESIS按钮, 进行综合, 以获得对应门级网表
    在这里插入图片描述
综合按钮所在处
  1. 点击IMPLEMENTATUON按钮, 进行实现, 以获得比特流
    在这里插入图片描述
实现按钮所在处

三. 使用vivado过程中可能遇到的问题(持续更新中)

  1. 功能仿真时显示(current time: 0fs)
    遇到这个问题, 点击结束仿真, 会跳到出现问题的那一行
    可能原因:
    - 在设计文件中, always没有加敏感信号列表
    - 循环为死循环, 缺少跳出循环的条件
  2. 功能仿真时, 输出信号均为X
    可能原因:
    - reset信号没有连接上, 在写异步复位时候一定要严格按照以下格式(if 和 else)
	always @ (posedge clk or negedge preset) begin //时钟上升沿和复位下降沿触发
		if(~preset)begin
			count <= 0;
		end
		else begin //一定要加else
			count <= count+1;
		end
		
	end

四. 扩展阅读资料

上面只是简单介绍了Vivado的部分内容, 想要更加详细, 更加具体地了解Vivado的使用, 还可以阅读Vivado的官方用户手册.查找地址: https://china.xilinx.com/products/design-tools/vivado.html#resources

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42452031/article/details/122956894

智能推荐

栈——后进先出(LIFO:last in first out)_栈的后进先出例题-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏2次。栈:后进先出(LIFO:last in first out)例如:自助餐中的自取餐盘面试题目:有六个元素6 5 4 3 2 1 的顺序进栈,哪一个不是合法的出栈序列:A. 5 4 3 6 1 2 B.4 5 3 2 1 6 C.3 4 6 5 2 1 D.2 3 4 1 5 6解析:进入栈的顺序保持6 5 4 3 2 1 ,3出栈所以栈中现在是从栈底-->栈顶依次为6..._栈的后进先出例题

java实现post请求(PostMethod)-程序员宅基地

文章浏览阅读3.9k次。项目要求:实现post请求,且请求格式是json格式。maven依赖包<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version></dependency><dependency> ..._postmethod

N皇后问题-n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。_在n×n的方格棋盘放置3个皇后,任意两个皇后不能相邻,否则她们会相互攻击(也就是说-程序员宅基地

文章浏览阅读4.4k次。n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。相互攻击就是说:在同一行、同一列或者在同一斜线方向时,不能同时存在两个皇后。示例:输入: 4输出: [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 "Q...", "...Q", ".Q..._在n×n的方格棋盘放置3个皇后,任意两个皇后不能相邻,否则她们会相互攻击(也就是说

使用Docker安装达梦数据库_docker pull安装达梦8-程序员宅基地

文章浏览阅读1.8k次。前言最近公司要求对老项目进行维护,需要安装达梦数据库,我采用了centos7.8的docker进行安装,这里做个记录。一、docker的安装查看当前centos系统内核版本,高于3.10才能安装docker#uname -r下载和安装docker#yum -y install docker安装完成后,查看docker版本#docker version启动docker服务#systemctl start docker设置docker开机启动#systemctl enable _docker pull安装达梦8

Springboot集成高低版本kafka_spring-kafka版本-程序员宅基地

文章浏览阅读3.7k次。springboot整合kafka的时候一定要根据自己springboot版本选择对应版本的kafka,两者版本对应关系可以直接查看官网。_spring-kafka版本

Java性能优化:数据传输优化_java数据推送方案优化-程序员宅基地

文章浏览阅读1.2k次。数据传输优化一、前言客户端与服务端经常进行着频繁的数据传输,数据传输又影响着用户体验,本小节就传输速率的优化,整理了部分注意事项。二、数据传输优化2.1 减少数据字节数:在开始的时候,采用的是xml传输,这就要使用到Serializable/Parcelable序列化以及反序列化,其传输速度之慢,基本已经被遗弃,后来又出现了JSON序列化传输,其常用工具就是GSON和fastjson,但随着时代的进步,json也体现出了局限性json的局限性主要体现在其是基于字符串的传输,在_java数据推送方案优化

随便推点

QT常见错误:"multiple definition of xxx"_e:\34[c++]\11[20230323qt_test]\example\contach.cpp-程序员宅基地

文章浏览阅读904次。错误原因重复定义解决方法打开QT工程文件*.pro查看SOURCES += \ 以及 HEADERS += \下方是否有重复的源文件名或头文件名,删掉重复的即可_e:\34[c++]\11[20230323qt_test]\example\contach.cpp:3: error: multiple defini

ajax jsonp跨域_ajax 什么时候 jsonp跨域-程序员宅基地

文章浏览阅读1.6k次。js跨域问题是指:js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。js跨域参考:http://www.cnblogs.com/2050/p/3191744.html可以通过jsonp实现js跨域,但是获取的数据必须是脚本文件,例如json。下面_ajax 什么时候 jsonp跨域

自然语言处理(NLP)学习路线总结_nlp自然语言处理流程-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏29次。文章目录1、自然语言处理概述2、自然语言处理入门基础2.1 数学基础2.2 语言学基础2.3 Python基础2.4 机器学习基础2.5 深度学习基础2.6 自然语言处理的理论基础3、自然语言处理的主要技术范畴3.1 语义文本相似度分析3.2 信息检索(Information Retrieval, IR)3.3 信息抽取(Information Extraction)3.4 文本分类(Text Categorization)3.5 文本挖掘(Text Mining)3.6 文本情感分析(Textual Af_nlp自然语言处理流程

【转载】梦断计院--一个计算机学院学生大学学习生活的回顾与反省-程序员宅基地

文章浏览阅读272次。作为正值大学毕业的我,无意中看到这篇博文,只看了点开头,就决定给他转载。此刻的我没有工作,时不时的还得为感情事而发愁,一天天的吵架,合好,吵架。我也不像以前的我啦,学习没激情,目标不坚定,生活挺颓废,工作也不找,整天待在寝室进行所谓的“学习”,其实是为工作做准备,把这大学以来丢的东西补上,然后再去找工作,学到现在,也没发觉学得怎么样,离成为一个合格的计算机科学与技术专业的学生相差甚远。

洛谷P4180 严格次小生成树-程序员宅基地

文章浏览阅读360次。题意就是求严格次小生成树。其实思路挺明确的,跟非严格次小生成树差不多。那么先回忆一下非严格次小生成树:先求出最小生成树,再利用Kruskal的贪心思路,对每一条非树边求它连成的环上最大的一条边,用这条非树边替换掉,对于替换掉每一条边后的树权值取min就是答案。严格与非严格的区别:不能相等了。所以好像只求最大值会出问题,如果一个环上有两条一样长的边,得到的结果就是非严格的。所以改进算法,倍增..._p4180

java的cp命令_"java -cp \"./bin"-程序员宅基地

文章浏览阅读9.6k次。-cp 参数后面是类路径,是指定给解释器到哪里找到你的.class文件, 写法: java -cp .;myClass.jar packname.mainclassname classpath中的jar文件能使用通配符,如果是多个jar文件,要一个一个地罗列出来,从某种意义上说jar文件也就是路径。要指定各个JAR文件具体的存放路径,相同路径有多个可使用通配符 java -cp .;c:/classes/myClass.jar;d:_"java -cp \"./bin"