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

vivado新建工程命令所在位置

新建project的时候注意选择合适的存放路径, 然后点击next;

选择RTL Project, 点击next;

选择对应的开发板, 点击next;

点击finish, 完成工程的新建.

vivado新建工程命令所在位置 新建工程过程示意图 vivado新建工程命令所在位置

新建工程project 4后的Vivado界面

2.新建设计文件

在界面中找到"Source"框, 点击"+", 选择"Add or create design sources", 点击next.

vivado新建设计文件过程示意图一

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

点击Creat file, 指定语言类型, 文件名字, 文件存放的位置, 完成设计文件的新建.

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

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

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

vivado新建完成设计文件后的Source窗口示意图

新建完成设计文件后的Source窗口示意图

3.完成设计文件的编写

这里以一个四进制的计数器为例, 代码如下所示.

// 这是一个从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

4.新建仿真文件

与新建设计文件类似

在界面中找到"Source"框, 点击"+", 选择"Add or create simulation sources", 点击next.

点击Creat file, 指定语言类型, 文件名字, 文件存放的位置, 完成仿真文件的新建.

双击Source窗口下面, “Simulation Sources"下的设计文件(在这里, 我命名为counter), 即可打开, 进行编辑.

vivado新建完成设计文件后的Source窗口示意图

仿真文件所在处

5.完成仿真文件的编写

该四进制的计数器的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

7.点击"Run Simulation"进行功能仿真

vivado SIMULATION按钮所在处

SIMULATION按钮所在处

仿真结果如下图所示, 可见, 该计数器功能正常

vivado SIMULATION按钮所在处

仿真结果

点击SYTHESIS按钮, 进行综合, 以获得对应门级网表

vivado SIMULATION按钮所在处

综合按钮所在处

点击IMPLEMENTATUON按钮, 进行实现, 以获得比特流

vivado SIMULATION按钮所在处

实现按钮所在处

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

功能仿真时显示(current time: 0fs)

遇到这个问题, 点击结束仿真, 会跳到出现问题的那一行

可能原因:

  • 在设计文件中, always没有加敏感信号列表
  • 循环为死循环, 缺少跳出循环的条件

功能仿真时, 输出信号均为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