FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真

这篇具有很好参考价值的文章主要介绍了FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

一、FPGA学习笔记(一)入门背景、软件及时钟约束

二、FPGA学习笔记(二)Verilog语法初步学习(语法篇1)

三、FPGA学习笔记(三) 流水灯入门FPGA设计流程

四、FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写

五、FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真

六、FPGA学习笔记(六)Modelsim单独仿真和Quartus联合仿真

七、FPGA学习笔记(七)verilog的深入学习之任务与函数(语法篇3)


Testbench文件

编写Testbench的目的是在Modsim中进行仿真验证,查看仿真波形和打印信息验证代码逻辑。

例如下面代码:

`timescale 1ns/1ns
module tb_led_dynamic();

//parameter define
parameter   T =20 ;

//reg define
reg sys_clk;
reg sys_rst_n;

//wire define
wire [7:0]seg_led;
wire [5:0]sel;
reg  key;
wire led;
//*****************************************************
//**                    main code
//*****************************************************

initial begin
    sys_clk              <=1'b0;
    sys_rst_n            <=1'b0;
	key					 <=1'b1;
    #50 sys_rst_n          <=1'b1;	
    #1200_000_000    key   <=1'b0;
    #50_000_000      key   <=1'b1; 
    #950_000_000     key   <=1'b0;
    #50_000_000      key   <=1'b1;
end
   
always # (T/2) sys_clk <= ~sys_clk;

top_seg_led  u0(

	.sys_clk    (sys_clk),
	.sys_rst_n  (sys_rst_n),
	.seg_sel        (sel),
	.seg_led        (seg_led),
	.key		(key),
	.led		(led)	

);

endmodule  

变量声明

声明信号或变量的关键字为reg和wire,在initial语句或者always语句(过程赋值语句)中使用的变量定义成reg类型,在assign(连续赋值语句)语句或者用于连接被例化模块名的信号定义成wire类型。

关于为什么会出现reg和wire的区别:

链接: Verilog 中定义信号为什么要区分 wire 和 reg 两种类型?

经典解释:wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。reg表示一定要有触发,输出才会反映输入的状态。reg相当于存储单元,wire相当于物理连线。

寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动。wire使用在连续赋值语句中,而reg使用在过程赋值语句(initial ,always)中。wire若无驱动器连接,其值为z,reg默认初始值为不定值 x 。

时间单位/精度

timescale

定义时间单位: `timescale 1ns/1ns 表示时间单位为1ns,时间精度为1ns。

通常由值 1、10、和 100 以及单位 s、ms、us、ns、ps 和 fs 组成。

定义的是仿真过程所有与时间相关量的单位(即1单位的时间)。
例如常用的延时函数:#50,代表着延时50个单位时间。

define

`define clock_period 20

always #(`clock_period/2) clock = ~clock;

可以自己宏定义,后面调用的时候在名字前面加 `。

测试模块

module tb_led_dynamic();
......
.....
...
endmodule  

这里是定义了测试模块的名字为tb_led_dynamic,编写的.v文件中的模块叫功能模块,那里也有名字的定义。

在测试模块中,输入信号一般定义为 reg 型信号,因为后面需要在always/initial语句块中被赋值,输出信号一般为 wire型即可。

输入信号初始化

用initial 语句进行初始化,该语句中的代码块只执行一次

always 语句实现信号变化

这里的意思是每隔10个时间单位,sys_clk时钟信号反转一次。实现了50Mhz的时钟。

还有例如:

always #10 in <= {$random} % 8

表示每隔10个时间单位in的电平变化一次

{$random}%8 表示随机选取[0,7]之间的数。

in <= {$random} % 8; 在赋值时会自动进行数据类型转换

实例化

如何把自定义的信号以及模拟的信号和实际功能模块挂钩呢,所以采用的是实例化,即把模拟的输入信号传入到功能模块中。

系统函数

例如:

        $timeformat(-9, 0, "ns", 6);
        $monitor("time:%t in:%b out:%b",$time,in,out);

$timeformat 设置显示时间的格式
FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真

常见的有:
FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真

(1)$time

作用:返回所在模块的仿真时间,可以查看信号的出现的时间,用来把握信号的时序。
如: d i s p l a y ( ′ ′ t h e t i m e i s display(''the time is %t'', display(thetimeistime) ;//显示当时的时间

(2)$display

作用: 将需要显示的内容在命令栏显示出来
如: $display(“the signal is %d”,ad); //将ad信号以十进制的方式显示出来

(3)$monitor

作用:监视变量的变化,一旦变量变化,则将变量显示出
如:$ monitor (“at time is %t and the signal is %b\n”,$time , signal) ;

(3) 文件操作类

$fopen
作用:打开一个文件面,对文件的操作
$fdisplay
作用:在打开的文件里,写入显示的内容
$fmonitor
作用:在打开的文件里,写入监视的变量变化时的内容
$fclose
作用:关闭当前的内容

FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真文章来源地址https://www.toymoban.com/news/detail-469884.html

到了这里,关于FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核

    目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 Hamming编码过程 2.2 Hamming解码与纠错 2.3 FPGA实现 3.Verilog核心程序 4.完整算法代码文件 本系统进行了Vivado2019.2平台的开发,测试结果如下:        在现代数字通信和存储系统中,错误检测和纠正(Error Detection and Correction, EDC)机

    2024年01月23日
    浏览(25)
  • 基于FPGA的ECG心电信号峰值检测和心率计算,包括testbench测试文件和ECG数据转换为coe文件程序

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 vivado2019.2 matlab2022a         心电图(ECG)是一种广泛应用于医疗诊断的技术,用于监测心脏的电活动。随着医疗技术的发展,基于FPGA(现场可编程门阵列)的ECG信号处理系统

    2024年02月10日
    浏览(32)
  • m基于FPGA的RS+卷积级联编译码实现,RS用IP核实现,卷积用verilog实现,包含testbench测试文件

    目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 卷积码编码 2.2 RS码编码 2.3 级联编码 2.4 解码过程 3.Verilog核心程序 4.完整算法代码文件获得 Vivado2019.2仿真结果如下:         级联码是一种通过将两种或多种纠错码结合使用来提高纠错能力的编码方案。在RS+卷积级联编码中,

    2024年02月22日
    浏览(38)
  • 【0基础学会Verilog】003. 为Verilog模块编写测试模块testbench

    完成了C语言函数( function )或Verilog功能模块( module )的编写,接下来我们需要对其进行测试、仿真等手段来验证函数或模块的正确性。本篇博文介绍为一个给定的Verilog模块编写仿真模块,也就是所谓 testbench 的方法。 我们为上一篇博文【0基础学会Verilog】002. Verilog时序逻辑实现

    2024年04月17日
    浏览(21)
  • ASIC-WORLD Verilog(10)编写测试脚本Testbench的艺术

            在自己准备写一些简单的verilog教程之前,参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。         这是网站原文:Verilog Tutorial         这是系列导航:

    2024年02月07日
    浏览(27)
  • 基于FPGA的Lorenz混沌系统verilog开发,含testbench和matlab辅助测试程序

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 将vivado的仿真结果导入到matlab显示三维混沌效果:     vivado2019.2 matlab2022a testbench如下所示:        洛伦兹混沌系统是一种非线性动力系统,最初由爱德华·洛伦兹(Edward

    2024年02月11日
    浏览(30)
  • 学习如何独立的使用Modelsim进行仿真验证?——编写verilog文件并查看仿真波形

    本篇记录如何独立的使用Modelsim进行仿真,便于之后查看。 Modelsim独立仿真的步骤: 创建工作文件夹——编译设计文件——导入及运行仿真——调试结果 具体的: 1、新建一个工程 指定工程名称、路径和默认库名称。一般情况下,设定Default Library Name默认库名称为work。 指定的

    2023年04月08日
    浏览(31)
  • K8S学习笔记-01(yaml文件编写)

    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:yinwanit@163.com 记录k8s中yaml文件编写相关内容。 k8s官网文档库:https://kubernetes.io/docs/home/ kubelet 命令参考:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands k8s中yaml文件结尾需以.yml或.yaml结

    2024年02月14日
    浏览(27)
  • 【软件测试】学习笔记-统一测试数据平台

    这篇文章主要探讨全球大型电商企业中关于准备测试数据的最佳实践,从全球大型电商企业早期的测试数据准备实践谈起,分析这些测试数据准备方法在落地时遇到的问题,以及如何在实践中解决这些问题。其实,这种分析问题、解决问题的思路,也是推动着测试数据准备时

    2024年01月17日
    浏览(31)
  • k8s学习笔记-3(Pod yaml文件编写)

    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:yinwanit@163.com Pod在k8s中归属apiVersion版本为v1。在编写yaml文件中apiVersion应该设置为v1。kind才能设置成Pod。 编写Pod的yaml文件时可以参考  kubectl explain --api-version=v1  pod. 一级一级查看具体的配置项

    2024年02月14日
    浏览(95)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包