系列文章目录

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

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

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

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

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

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

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


这里写目录标题

  • 系列文章目录
  • Testbench文件
    • 变量声明
    • 时间单位/精度
      • timescale
      • define
    • 测试模块
    • 输入信号初始化
    • 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

变量声明

声明信号或变量的关键字为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 20always #(`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 设置显示时间的格式

常见的有:

(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仿真相关推荐

  1. Docker学习笔记五 在测试中使用Docker

    2019独角兽企业重金招聘Python工程师标准>>> 5.1 使用Docker测试静态网站(Nginx) 将项目命名为Sample 首先建立构建环境 mkdir sample cd ...

  2. FPGA学习笔记(八)同步/异步信号的打拍分析处理及亚稳态分析

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  3. FPGA学习笔记(十二)IP核之FIFO的学习总结

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  4. FPGA学习笔记(六)Modelsim单独仿真和Quartus联合仿真及signaltap使用

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  5. FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程

    FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程 很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序 ...

  6. FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇尾

    FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇一 FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇二 ...

  7. opencv学习笔记五--文件扫描+OCR文字识别

    opencv学习笔记五--文件扫描+OCR文字识别 文件扫描 定义函数 边缘检测 获取轮廓 变换 OCR文字识别 环境配置 代码 文件扫描 # 导入工具包 import numpy as np imp ...

  8. 小梅哥FPGA学习笔记

    小梅哥FPGA学习笔记 一.38译码器 功能: 译码器其任一时刻的稳态输出,仅仅与该时刻的输入变量的取值有关,它是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等).38 ...

  9. FPGA学习笔记(1)简单的时序逻辑电路——流水灯

    FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...

最新文章

  1. windows服务程序设置为自动 重启后又变为手动启动_系统小技巧:解决Windows无法正常关机的问题...
  2. js regex var highlight
  3. MySQL 5.6.11 GA 发布
  4. python 文件操作 os.readline()函数用法
  5. Electron中提示:Refused to execute inline event handler because it violates
  6. decode encode
  7. 用心整理,1000行MySQL命令,很实用,建议收藏
  8. 文件的记录c语言程序,c语言程序学生籍贯信息记录簿设计.docx
  9. Android pid uid
  10. django 1.8 官方文档翻译:7-2 管理操作
  11. 马化腾出售腾讯股份,四天套现近20亿港元;朋友圈发红包测试视频红包玩法...
  12. Ssm角色权限后台管理实战开发
  13. Docker容器-cgroups资源配置
  14. 最新WIN10系统封装教程2019系列(六)——常规软件安装
  15. 路由与交换技术(复习知识点-全)
  16. 电气与计算机哪个好考吗,电气工程师难考吗 含金量怎么样
  17. C++学习记录7:定义教师类Teacher和干部类Cadre,采用多重继承的方式由这两个类派生出新类Teacher_Cadre(教师兼干部类)
  18. 微软苏州2018冬季实习面试经历
  19. UVA12235 - Help Bubu
  20. mk编译报错-提示找不到符号

热门文章

  1. android手机存储空间猛增,网友实测从安卓升级到鸿蒙2.0:可用内存和机身存储容量都增加了...
  2. 二、SSM整合按步骤详解(清晰的思路加代码)从零开始一步步整合【二】(完结)
  3. 揭秘12306技术改造(三):传统框架云化迁移到内存数据平台
  4. 黑马探花交友----4.动态评论-FastDFS视频上传
  5. FastDFS搭建单机图片服务器(二)
  6. 网络安全工程师学习路线汇总
  7. 原生JS幻灯片案例——与tab栏切换类似
  8. 如何用3个方法做到照片数据恢复…
  9. 这才是计算机科学_计算机大量应用
  10. 平面设计素材网站有哪些?常用的找素材两个网站就够