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的更多相关文章

  1. Team Foundation Server 2013 with Update 3 Install LOG

    [Info   @10:14:58.155] ====================================================================[Info   @ ...

  2. 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 ...

  3. Xilinx ISE 14.1利用Verilog产生clock

    <一>建立如下的Verilog Module module myClock( input clock ); endmodule <二>建立 Verilog Test Fixtu ...

  4. Verilog Tips and Interview Questions

    Verilog Interiew Quetions Collection :  What is the difference between $display and $monitor and $wr ...

  5. 【设计经验】5、Verilog对数据进行四舍五入(round)与饱和(saturation)截位

    一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件:Vivado2015.4.2  Matlab2016a 仿真工具:Vivado自带仿真器 二.引言 在利用 ...

  6. Verilog对数据进行四舍五入(round)与饱和(saturation)截位

    转自https://www.cnblogs.com/liujinggang/p/10549095.html 一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件 ...

  7. verilog FAQ(zz)

    1. What is the race condition in verilog? Ans :The situation when two expressions are allowed to exe ...

  8. system verilog的一些总结(从其他博客复制来的)

    转载自 http://blog.sina.com.cn/s/blog_e7fec2630101f5t9.html SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 136 ...

  9. FPGA Verilog HDL 系列实例--------步进电机驱动控制

    [连载] FPGA Verilog HDL 系列实例 Verilog HDL 之 步进电机驱动控制 步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心.那么,下面我 ...

  10. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

随机推荐

  1. 2023年度低代码平台企业TOP50榜单公布—以开源起家的JeecgBoot格外亮眼

    近日,中国科学院主管.科学出版社主办的国家级核心期刊<互联网周刊>联合eNet研究院.德本咨询评选的<2023低代码企业50强>榜单正式公布.这一榜单的公布引起了业内外的广泛关 ...

  2. Python——Html(HEAD头部)

    HTML中HEAD头部设置(了解) 在HTML中,<head> 元素是文档的头部部分,通常包含了一些关于文档的元信息和链接到外部资源的标签.以下是一些常见的 <head> 元素 ...

  3. 【推荐】Helix 常用命令与设置

    目录 Helix常用命令 配置 编辑器 [editor]字段 [editor.statusline] 字段 [editor.lsp] 字段 [editor.cursor-shape] 字段 [edit ...

  4. 文心一言 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)上的操作 ...

  5. SQL Server系列:系统函数之日期和时间函数

    1.current_timestamp :获取数据库系统时间戳 --获取数据库系统时间戳 select current_timestamp go 2.getdate() :获取数据库系统时间戳 --获 ...

  6. SQL Server系列:系统函数之字符串函数

    1.ascii()  :返回ascii码 --返回ascii码 select ascii('a') go 2.char() :返回ascii对应的字符 --返回ascii对应的字符 select ch ...

  7. Karmada:让跨集群弹性伸缩FederatedHPA突破新边界

    本文分享自华为云社区<Kubernetes多集群管理Karmada,跨集群弹性伸缩FederatedHPA突破新边界!>,作者:华为云云原生团队. 根据 Flexera 最新发布的< ...

  8. WSDM Cup 2020大赛金牌参赛方案全解析

    近日,在美国休斯敦闭幕的第13届网络搜索与数据挖掘国际会议(WSDM 2020)上,华为云语音语义创新Lab带领来自华南理工大学.华中科技大学.江南大学.武汉大学的四位学生组成的联合团队"X ...

  9. 数据安全无小事:揭秘华为云GaussDB(openGauss)全密态数据库

    摘要:全密态数据库,专门处理密文数据的数据库系统,数据以加密形态存储在数据库服务器中,数据库支持对密文数据的检索与计算. 1.云数据库安全现状及问题 伴随着云基础设施的快速增长和成熟,与之对应的云数据 ...

  10. 从零开始学习python | 实例讲解如何制作Python模式程序

    摘要:在本文中,我们将学习python中的各种模式程序. Python编程语言很容易学习.易于语法实现的各种库使其脱颖而出,这是它成为本世纪最流行的编程语言的众多原因之一.虽然学习很容易,但访问员通常 ...