FPGA学习笔记(7)——Vivado Simulator仿真软件的使用

1 仿真概述

Simulator仿真虽然不需要使用硬件资源,但是需要编写激励文件,也就是testbench代码。

仿真是设计输入后的第一个步骤,也是实现后的最后一个步骤,可以分为功能仿真(RTL仿真)和时序仿真。

  • 功能仿真:验证电路的功能是否符合设计要求,不考虑电路门延迟与线延迟。
  • 时序仿真:布局布线后仿真,电路映射到特定的工艺环境以后,综合考虑FPGA芯片的路径延迟与门延迟,验证电路能否在一定时序条件下满足设计构想的过程,能较好地反映芯片实际工况。

2 Testbench文件

激励程序是输入设计顶层模块的信号波形,TB文件的结构如下:

typescript 复制代码
`timescale 仿真单位/仿真精度
module test_bench();
// 通常testbench没有输入与输出端口
// 信号或变量定义声明
//使用initial初始化信号电平
//使用always语句产生时钟波形
//例化设计模块 模块名 例化名(...)
endmodule
  • `timescale 1ns/1ps较为常见。
  • 在以上仿真时间情况下,# 100表示延迟100ns。
  • 如果是`timescale 1ps/1ps,# 100表示延迟100ps,延迟只看timescale的仿真单位。

3 试验步骤

本节使用之前的LED交替闪烁试验工程作为模板,添加tb文件进行仿真试验。

3.1 编写testbench文件

1、在Sources窗口右键Simulation Sources,Add Sources。

2、新建源文件:Create Source File,文件取名为tb_test_project.v。

3、编写测试文件:

查看test_project模块的输入输出,tb中如果对端口使用always或initial进行赋值,则使用reg类型;如果对端口使用assign进行赋值,则使用wire进行赋值

复制代码
// 000_test_project.v

module test_project(
    input sys_clk,
    input sys_rst_n,
    
    output [1:0] led
);

// ......

模块中初始化赋值使用initialbeginend一头一尾相对应。#200为延时200ns,模拟复位按钮按下一段时间后弹起。

如果sys_clk时钟周期为20ns,则时钟频率为50MHz,在一个时钟周期内高电平和低电平分别占据10ns。因此采用always语句来模拟时钟。

typescript 复制代码
// tb_test_project.v

`timescale 1ns / 1ps

module tb_test_project();

// 信号或变量定义声明
reg sys_clk;
reg sys_rst_n;
wire [1:0] led;

//使用initial初始化信号电平
initial begin
    sys_clk = 1'b0;
    sys_rst_n = 1'b0;
    #200 
    sys_rst_n = 1'b1;
end

//使用always语句产生时钟波形
always #10 sys_clk = ~sys_clk;

//例化设计模块 模块名 例化名(...)
test_project u_test_project(
    .sys_clk(sys_clk),
    .sys_rst_n(sys_rst_n),
    .led(led)
);

endmodule

3.2 开始仿真

点击Vivado左侧窗口SimulationRun Simulation,选择Run Behavioral Simulation

五个选项分别为:

  • Run Behavioral Simulation:运行行为仿真(功能是否完整)。
  • Run Post-Synthesis Functional Simulation:运行综合后的功能仿真
  • Run Post-Synthesis Timing Simulation:运行综合后的时序仿真
  • Run Post-Implementation Functional Simulation:运行实现后的功能仿真
  • Run Post-Implementation Timing Simulation:运行实现后的时序仿真

运行一段时间后,可以观察到波形如下所示:

如果需要查看cnt计数器的值,点击u_test_project,然后将cnt拖动到右侧波形图中,然后重新运行仿真就可以看到cnt的变化情况。

运行较长时间后,可以在波形图中观察到当cnt的值为25000000后,led的值发生改变。

Ctrl+S就可以保存波形信息为.wcfg格式。

相关推荐
Terasic友晶科技29 分钟前
第13篇:Linux程序访问控制FPGA端Switch<二>
fpga开发·嵌入式系统·de1-soc开发板
时光追逐者32 分钟前
MongoDB从入门到实战之MongoDB快速入门(附带学习路线图)
数据库·学习·mongodb
一弓虽37 分钟前
SpringBoot 学习
java·spring boot·后端·学习
晓数2 小时前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
我的golang之路果然有问题2 小时前
速成GO访问sql,个人笔记
经验分享·笔记·后端·sql·golang·go·database
genggeng不会代码2 小时前
用于协同显著目标检测的小组协作学习 2021 GCoNet(总结)
学习
lwewan2 小时前
26考研——存储系统(3)
c语言·笔记·考研
搞机小能手3 小时前
六个能够白嫖学习资料的网站
笔记·学习·分类
nongcunqq3 小时前
爬虫练习 js 逆向
笔记·爬虫
汐汐咯4 小时前
终端运行java出现???
笔记