14-Verilog for Verification
Verilog for Verification

1.引言
Testbench也是一个模块(module...endmodule)

Testbench没有输入和输出,因为它是一个闭环,自己产生激励,灌给module,module输出响应,testbench会捕捉响应,进行比较,自己在自己内部形成闭环
完成对待测设计的例化,测试代码的封装,提供测试激励,收集测试结果
无需综合,行为级描述优先
module module_name_tb;
//测试代码
endmodule
2.变量声明
- 给待测设计的输入端口提供激励
- 通过待测实际的输出端口收集激励
- 提供激励的信号:reg类型信号进行声明,便于在initial和always中进行赋值
- 收集激励的信号:reg或wire,多数情况下使用wire
- 也可以使用logic变量进行声明

// 名称关联的方式
apd_slave U_apb_slave(
.pclk (pclk),
.prestn (prestn),
.paddr (paddr),
.psel (psel),
.pwrite (pwrite),
.penable (penable),
.pwdata (pwdata),
.prdata (prdata)
);
3.激励
3.1 时钟产生

- forever语句,必须写在initial中
- forever后面执行多条语句,加begin end
// clock generate
initial begin
pclk = 0;
forever
begin
#10 pclk = ~pclk; // 时钟周期是20个时间单位
end
3.2 reset信号
- 低电平有效
- 在某个时间点将reset置为0
reg rst_n;
initial begin
rst_n = 1'b0; // 复位信号置为低电平
#45;
rst_n = 1'b1; // 延迟45个时间单位之后,将复位撤销
end
3.3 产生激励
- wait(条件表达式),条件表达式为真的时候解除等待
initial begin
......
wait(rst_n = 1'b1);
wait(sim_start)
......
end
- @(posegde clk) ...
initial
begin
.....
wait(rst_n = 1'b1);
wait(sim_start);
@(posedge pclk);
a = 1'b1;
end
initial
begin
.....
wait(rst_n = 1'b1);
wait(sim_start);
@(posedge pclk);
#3; // 寄存器d到q端的延迟
a = 1'b1;
end
- function是不能有延迟信息语句的
- task是可以具有延迟信息语句的
- 将读写操作封装成task
task apb_write(input [31:0] addr,input [31:0] wdata);
begin
end
endtask
task apb_read(input [31:0] addr,output [31:0] rdata);
begin
end
endtask
reg [31:0] memory [1024:0]
FILE0 = $open("block90");
for(address=32'h0,address<32'h80;address=address+1)
$fwriteh(FILE0,32'hFFFFFFFF,"\n")
$fclose(FILE0)
$readmemh("block0",memory);
3.4 dump 波形
`ifdef VPD_ON
initial begin
$vcdpluson();
end
`endif
3.5 显示激励

3.6 结束仿真

3.7 预编译

3.8 include



4.实例
4.1 设计代码

4.2 验证流程

4.3 APB Slave testbench

- testbench中输入定义为reg,输出定义为wire

- 例化模块

- 产生时钟和复位

- 产生激励,产生激励的时候要给模块的输入一定的初始值,不给初始值就会产生x态










14-Verilog for Verification的更多相关文章
- Team Foundation Server 2013 with Update 3 Install LOG
[Info @10:14:58.155] ====================================================================[Info @ ...
- SpringBoot+mybatis:报错Fri Oct 19 14:29:24 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requiremen
报错:Fri Oct 19 14:29:24 CST 2018 WARN: Establishing SSL connection without server's identity verifica ...
- Xilinx ISE 14.1利用Verilog产生clock
<一>建立如下的Verilog Module module myClock( input clock ); endmodule <二>建立 Verilog Test Fixtu ...
- Verilog Tips and Interview Questions
Verilog Interiew Quetions Collection : What is the difference between $display and $monitor and $wr ...
- 【设计经验】5、Verilog对数据进行四舍五入(round)与饱和(saturation)截位
一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件:Vivado2015.4.2 Matlab2016a 仿真工具:Vivado自带仿真器 二.引言 在利用 ...
- Verilog对数据进行四舍五入(round)与饱和(saturation)截位
转自https://www.cnblogs.com/liujinggang/p/10549095.html 一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件 ...
- verilog FAQ(zz)
1. What is the race condition in verilog? Ans :The situation when two expressions are allowed to exe ...
- system verilog的一些总结(从其他博客复制来的)
转载自 http://blog.sina.com.cn/s/blog_e7fec2630101f5t9.html SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 136 ...
- FPGA Verilog HDL 系列实例--------步进电机驱动控制
[连载] FPGA Verilog HDL 系列实例 Verilog HDL 之 步进电机驱动控制 步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心.那么,下面我 ...
- Verilog语法基础讲解之参数化设计
Verilog语法基础讲解之参数化设计 在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...
随机推荐
- 如何使用libgdx做游戏01---libgdx的安装
一般来说使用这个工具做游戏的都是java开发者,这种技术在国外勉强算是必学的,而在国内却很少有这方面的知识. 接下来,我将讲解如何安装libgdx,也算是简单的libgdx入门 工具:idea.jdk ...
- 多维数组、Arrays类、稀疏数组、冒泡排序
多维数组 多维数组可以看成是数组的数组 比如二维数组就是一个特殊的一堆数组 其中每个元素就是一个数组. 二维数组: int a[][] = new int[2][5]; 解析:二维数组a可以看成一个两 ...
- 设计模式之设计模式概述-shejimoshigaishu
title: 设计模式之设计模式概述 date: 2022-12-04 00:21:18.469 updated: 2022-12-11 23:03:45.617 url: https://www.y ...
- 文心一言 VS 讯飞星火 VS chatgpt (178)-- 算法导论13.4 1题
一.用go语言,在执行 RB-DELETE-FIXUP 之后,证明:树根一定是黑色的. 文心一言: 在证明 RB-DELETE-FIXUP 之后,树根一定是黑色的的过程中,我们首先需要理解红黑树的性质 ...
- 2023-05-30:Redis6.0为什么要引入多线程呢?
2023-05-30:Redis6.0为什么要引入多线程呢? 答案2023-05-30: Redis多线程比单线程性能提升一倍: Redis 6.0 引入多线程 IO 特性对性能提升至少是一倍以上.据 ...
- LeetCode 回溯篇(46、77、78、51)
46. 全排列 给定一个 没有重复 数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1, ...
- antd ui的from使用问题
select 的allowClear失效问题 select的value与allowClear同时使用会导致allowClear失效 解决方法 from包装一层,通过const [form] = For ...
- 在线编辑Word——插入内容控件
内容控件是可添加和自定义的以在模板.窗体和文档中使用的单个控件.Word中支持添加多种类型的控件用于不同文档的设计需求.本文,将通过在线编辑的方式展示如何在Word中插入内容控件,这里使用的在线编辑器 ...
- 4种方法帮你解决IntelliJ IDEA控制台中文乱码问题
摘要:在本文中总结了4 种方法完美解决 IntelliJ IDEA 控制台中文乱码问题. 前言 IntelliJ IDEA 如果不进行配置的话,运行程序时控制台中文乱码问题会非常严重,严重影响我们对信 ...
- 毕昇 JDK:为啥是ARM 上超好用的 JDK
摘要:毕昇 JDK 是华为基于 OpenJDK 定制的开源版本,是一款高性能.可用于生产环境的 OpenJDK 发行版. 本文分享自华为云社区<[云驻共创]毕昇 JDK:"传奇再现&q ...