FPGA学习笔记(五)Testbench文件编写

news/2024/5/2 15:20:38/文章来源:https://blog.csdn.net/zerokingwang/article/details/127194511

这里写目录标题

  • Testbench文件
    • 时间单位/精度
    • 测试模块
    • 输入信号初始化
    • always 语句实现信号变化
    • 实例化
    • 系统函数

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 beginsys_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;
endalways # (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  

时间单位/精度

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

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

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

测试模块

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 设置显示时间的格式
在这里插入图片描述

常见的有:
在这里插入图片描述

(1)$time

作用:返回所在模块的仿真时间,可以查看信号的出现的时间,用来把握信号的时序。
如:display(′′thetimeisdisplay(''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
作用:关闭当前的内容

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_19843.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python数据容器---list

目录 1、列表的定义 1.1 基本语法 1.2 定义变量 1.3 定义空列表 2、列表的下标&#xff08;索引&#xff09; 2.1 基本语法 2.1.1 正向查找 2.1.2 方向查找 2.1.3 嵌套列表 3、列表的常用操作 3.1 查找某元素的下标 3.2 修改特定索引的值 3.3 插入追加元素 3.4 删…

基于java+jsp+ssm水果蔬菜销售系统

生活中,人们买水果或者蔬菜都是去菜市场买,因为那里是卖水果、蔬菜的聚集地。农商们把水果、蔬菜从远处运到那里,进行销售。但是这种销售方式的不足在于每次运输的数量是有限的,并且运输过程中也影响了水果、蔬菜的口感。随着生活节奏的加快,人们越来越注重高效的在线服务。在线…

让GPU跑的更快

作为一个cuda爱好者 一定要好好看看 不再让CPU和总线拖后腿&#xff1a;Exafunction让GPU跑的更快&#xff01;确实只用cpu会卡的一比... 在云服务中使用 GPU 是获得低延迟深度学习推理服务最经济的方式。使用 GPU 的主要瓶颈之一是通过 PCIe 总线在 CPU 和 GPU 内存之间复制…

关卡一: ajax

【学习前提】 完成前端开发基础和JavaScript基础学习 【阶段说明】 Ajax这个术语源自描述从基于 Web 的应用到基于数据的应用。 Ajax 不是一种新的编程语言&#xff0c;而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。 使用 JavaScript 向服务器提出请求并处理响…

有被惊艳到 复刻一个大型互联网项目有多简单?大型网约车项目实战+东宝商城(附项目白皮书+核心源码)

从上图可以看出&#xff0c;面试准备其实可以分为两个部分&#xff1a;第一个部分是日常工作中对自己负责项目的抽象、提效、数据化表达&#xff1b;不断反思如何用技术的手段提升业务价值&#xff0c;就是我们日常常说的技术为业务赋能&#xff1b;第二个部分才是决定面试后 &…

第八章 CSP 架构 - CSP 网关配置

文章目录第八章 CSP 架构 - CSP 网关配置CSP 网关配置CSP 网关管理器定义服务器访问定义应用程序访问CSP 网关参数第八章 CSP 架构 - CSP 网关配置 CSP 网关配置 CSP 网关是安装在 Web 服务器上并由其加载的 DLL 或共享库。 CSP 网关检测对扩展名为 .csp 或 .cls 的文件的任何…

ApplicationRunner和CommandLineRunner的作用和区别

一、作用 ApplicationRunner和CommandLineRunner都用于在容器启动后&#xff08;也就是SpringApplication.run()执行结束&#xff09;执行某些逻辑。 可用于项目的一些准备工作&#xff0c;比如加载配置文件&#xff0c;加载执行流&#xff0c;定时任务等 二、共同点和区别 …

nodejs+vue+elementui学生成绩管理系统python/php/java445

前台首页功能模块 学生成绩管理系统设计&#xff1b;主要实现首页、优秀教师、优秀班主任、学校简介、教学课件、公告信息、优秀学生、试卷列表、新闻资讯、我的、跳转到后台&#xff0c;功能。 优秀教师&#xff0c;在优秀教师页面可以填写标题、教师工号、荣誉等详细&#xf…

经典论文研读:《F1:A Distributed SQL Database That Scales》

一 简介 F1是Google提出的分布式关系型数据库&#xff0c;支持便捷的水平伸缩。这篇论文是NewSQL分布式数据库架构的基石。论文首先定义了F1分布式数据库设计的关键方向&#xff1a; 可伸缩性&#xff1a;数据库要提供对业务透明的水平扩展能力&#xff0c;并支持数据迁移、数…

全同态加密(FHE)体系概述

同态加密定义 假设有这样一个场景&#xff0c;用户有一组私密数据&#xff0c;被加密存储在了第三方的云平台&#xff0c;现在&#xff0c;该用户想对这组数据进行某种处理&#xff0c;但是处理过程和结果都不想让第三方云平台看到。当然&#xff0c;用户可以选择将数据下载下…

ITU-T G.781解读(一)

引言 本系列是作者在学习ITU-T时做学习笔记之用&#xff0c;ITU-T的标准库是一个非常庞大的系列&#xff0c;尽管网络上有许多对标准的解读&#xff0c;但作者认为要想系统的掌握一个系列的知识&#xff0c;还是要自己看一遍原汁原味的原文。 时钟同步准则 同步信息通过同步…

【操作系统】第三章:内存管理

第三章&#xff1a;内存管理 OVERVIEW第三章&#xff1a;内存管理一、内存管理1.内存管理内容&#xff08;1&#xff09;地址转换&#xff1a;Point1&#xff1a;程序装入Point2&#xff1a;程序链接&#xff08;2&#xff09;内存保护&#xff1a;&#xff08;3&#xff09;内…

Linux命令:netstat【监控TCP/IP网络,可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息】【TCP的11种状态】

netstat命令是一个监控TCP/IP网络的非常有用的工具&#xff0c;它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。 netstat [选项] 选项描述-a显示所有网络连接和监听的所有端口。-b显示创建每个连接或者监听商品的相关可执行程序。有时候有些已知的可执行…

参数传递和重定向

目录 1、参数传递 方法一 &#xff08;1&#xff09;修改路由配置, 主要是router下的index.js中的 path 属性中增加了 :id 这样的占位符 &#xff08;2&#xff09;视图层传递参数 &#xff08;3&#xff09;接收参数 &#xff08;4&#xff09;测试 方法二&#xff08;…

2022年中国研究生数学建模竞赛A题——移动场景超分辨定位问题

目录一、题目原文1、背景2、研究现状3、待解决的问题二、雷达基础知识三、解决方案一、题目原文 1、背景 在日常家庭生活中&#xff0c;人们可能需要花费大量时间去寻找随意摆放在家中某些角落里的小物品。但如果给某些重要物品贴上电路标签&#xff0c;再利用诸如扫地机器人…

IS-IS(v4)协议分析

IS-IS协议分析 基本概述 工作原理 基本配置 一、基本概述 IS-IS&#xff08;Intermediate System to Intermediate System&#xff0c;中间系统到中间系统&#xff09;是ISO &#xff08;International Organization for Standardization&#xff0c;国际标准化组织&#x…

BGP(边界网关)协议的介绍与配置

边界网关协议&#xff08;BGP&#xff09;是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议&#xff0c;也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系…

无法打开源文件opencv2

目录 一般有三种情况&#xff1a; 没有下载opencv&#xff1a; 配置环境变量&#xff1a; 属性配置&#xff1a; 一般有三种情况&#xff1a; 1、没有下载opencv的库 2、下载但是没有配置系统的环境变量 3、以上二者都已完成&#xff0c;但当前项目&#xff08;每一个新…

《Google软件工程》读书笔记

文章目录理论什么是软件工程时间与变化规模与效率权衡与成本软件工程 VS 编程文化如何更好地参与团队合作隐藏有害一切为了团队谷歌范儿知识共享学习的挑战知识共享的哲学设定基调&#xff1a;心理安全不断充实知识扩大提问渠道&#xff1a;向社区提问分享你的知识&#xff1a;…

青少年CTF-Web-Robots

题目信息题目名称:Robots 题目描述:昨天十三年社团讲课,讲了Robots.txt的作用,小刚上课没有认真听课正在着急,你能不能帮帮忙? 题目难度:一颗星 解题过程 访问题目链接浏览器里是空白的,题目名称是Robots,我们访问robots.txt看看。发现有个Disallow的f1ag_1n_the_h3re…