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语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...
随机推荐
- 2023年度低代码平台企业TOP50榜单公布—以开源起家的JeecgBoot格外亮眼
近日,中国科学院主管.科学出版社主办的国家级核心期刊<互联网周刊>联合eNet研究院.德本咨询评选的<2023低代码企业50强>榜单正式公布.这一榜单的公布引起了业内外的广泛关 ...
- Python——Html(HEAD头部)
HTML中HEAD头部设置(了解) 在HTML中,<head> 元素是文档的头部部分,通常包含了一些关于文档的元信息和链接到外部资源的标签.以下是一些常见的 <head> 元素 ...
- 【推荐】Helix 常用命令与设置
目录 Helix常用命令 配置 编辑器 [editor]字段 [editor.statusline] 字段 [editor.lsp] 字段 [editor.cursor-shape] 字段 [edit ...
- 文心一言 VS 讯飞星火 VS chatgpt (62)-- 算法导论6.5 1题
文心一言 VS 讯飞星火 VS chatgpt (62)-- 算法导论6.5 1题 一.试说明 HEAP-EXTRACT-MAX在堆A=(15,13,9,5,12,8,7,4,0,6,2,1)上的操作 ...
- SQL Server系列:系统函数之日期和时间函数
1.current_timestamp :获取数据库系统时间戳 --获取数据库系统时间戳 select current_timestamp go 2.getdate() :获取数据库系统时间戳 --获 ...
- SQL Server系列:系统函数之字符串函数
1.ascii() :返回ascii码 --返回ascii码 select ascii('a') go 2.char() :返回ascii对应的字符 --返回ascii对应的字符 select ch ...
- Karmada:让跨集群弹性伸缩FederatedHPA突破新边界
本文分享自华为云社区<Kubernetes多集群管理Karmada,跨集群弹性伸缩FederatedHPA突破新边界!>,作者:华为云云原生团队. 根据 Flexera 最新发布的< ...
- WSDM Cup 2020大赛金牌参赛方案全解析
近日,在美国休斯敦闭幕的第13届网络搜索与数据挖掘国际会议(WSDM 2020)上,华为云语音语义创新Lab带领来自华南理工大学.华中科技大学.江南大学.武汉大学的四位学生组成的联合团队"X ...
- 数据安全无小事:揭秘华为云GaussDB(openGauss)全密态数据库
摘要:全密态数据库,专门处理密文数据的数据库系统,数据以加密形态存储在数据库服务器中,数据库支持对密文数据的检索与计算. 1.云数据库安全现状及问题 伴随着云基础设施的快速增长和成熟,与之对应的云数据 ...
- 从零开始学习python | 实例讲解如何制作Python模式程序
摘要:在本文中,我们将学习python中的各种模式程序. Python编程语言很容易学习.易于语法实现的各种库使其脱颖而出,这是它成为本世纪最流行的编程语言的众多原因之一.虽然学习很容易,但访问员通常 ...