04-SV连接设计和测试平台
1、验证一个设计的步骤:
生成输入激励,捕捉输出响应,决定对错和进度
2、连接设计和测试平台
信号连接:SystemVerilog已经扩展了传统的reg类型,可以像wire那样用来连接模块,它的新名字为logic,logic不能多驱动。
-缺点:使用信号连接极易出错。
接口:接口可以看作是一捆智能的连线,在接口中使用modport结构能够将信号分组并指定方向,使用时钟块可以指定同步信号相对于时钟的时序。将接口中的信号定义为logic,则可以直接被过程赋值语句驱动,wire类型只能被连续赋值语句驱动。
-优点:使得连接变得简洁不易出错,要增加一个信号时,在接口中只需要声明一次,不需要再更高层的模块层中声明。
3、接口中的双向信号用wire,单向信号用logic
4、module和program
在模块module里描述设计,在program里搭建测试平台,再用接口把它们连接起来。程序块可以读写模块中的所有信号,可以调用模块中的所有例程,但是模块看不到程序块。这是因为测试平台需要访问和控制设计,但是涉及却独立于测试平台中的任何东西。程序块可以减少待测器件和测试平台之间的竞争状态:
5、接口采样和驱动
接口信号采样:当你从时钟块中读取一个信号的时候,你是在时钟沿之前得到采样值
接口信号驱动:当在modport中使用时钟块时,任何同步接口信号都必须加上接口名(arbif)和时钟块名(cb)的前缀,如arbif.cb.request
通过时钟块驱动接口信号:如果测试平台在时钟的有效沿驱动同步接口信号,那么其值会立即传递到设计中。这是因为时钟块的默认输出延时是 #0。如果测试平台在时钟有效沿之后驱动输出,那么该值直到时钟的下一个有效沿才会被捕获。在时钟块中应当使用同步驱动(synchronous drive),即“<=”来驱动信号。
6、示例
interface:
`timescale 1ns/1ns
interface arb_if(input bit clk);
logic [:] grant,request;
logic rst; clocking cb @(posedge clk);
output request;
input grant;
endclocking modport TEST (clocking cb,
output rst);
modport DUT (input request,rst,
output grant);
endinterface
module:
`timescale 1ns/1ns
module arb(arb_if.DUT arbif);
initial begin
# arbif.grant <= ;
# arbif.grant <= ;
# arbif.grant <= ;
$display("@%0t:arbif.request=%b",$time,arbif.request);
end
endmodule
program:
`timescale 1ns/1ns
program automatic test(arb_if.TEST arbif);
initial begin
# arbif.cb.request <= ;
//$display("@%0t:Drive req=3",$time);
# arbif.cb.request <= ;
//$display("@%0t:Drive req=2",$time);
# arbif.cb.request <= ;
//$display("@%0t:Drive req=1",$time); $display("@%0t:arbif.cb.grant = %b",$time,arbif.cb.grant); repeat () @arbif.cb;
#50ns;
end
endprogram
top:
`timescale 1ns/1ns
module top;
bit clk;
always # clk = !clk;
arb_if arbif(clk);
arb a1 (arbif.DUT);
test t1 (arbif.TEST); endmodule
7、示例输出
# @25:arbif.request=11
# @25:arbif.cb.grant = 10
可以看到,arbif.cb.grant在时钟上升沿之前获得数值,当接口的输入信号恰好在时钟沿(25ns)变化(top.a1.arbif.grant:10-11)的时候,信号的新值在下一个时钟上升沿(35ns)传递给测试平台(top.arbif.cb.grant)。
如果测试平台在时钟的有效沿(25ns)驱动同步接口信号(top.arbif.cb.request: 10-01),那么其值会立即传递到设计(top.a1.arbif.request)中: arbif.request没有采到10数据,直接采到01数据.
总结来说就是,测试平台通过接口驱动设计是“立即”的,但是测试平台通过接口采样数据不是“立即”的
7、断言
分为立即断言、并发断言
`timescale 1ns/1ns
program assert_test();
initial begin
bit a;
a <= ;
#;
a1:assert (a==)
else $error("customized error message");
end
endprogram
# ** Error: customized error message
# Time: 10 ns Scope: assert_test.#ublk#168691044#3.a1 File: D:/MyFiles/code_and_projects/ModelSim/sv_test4.sv Line: 8
# ** Note: implicit $finish from program
# Time: 10 ns Iteration: 0 Instance: /assert_test
8、结论
(1)接口可以取代很多的信号连接,使代码更加容易维护和修改,还可以减少出错。
(2)程序块可以减少待测器件和测试平台之间的竞争状态。
(3)在接口中使用modport进行信号分组,使用时钟块使得测试平台能够相对于时钟正确地驱动和采样设计信号。
04-SV连接设计和测试平台的更多相关文章
- 一文揭秘测试平台中是如何将测试用例一键转化Jmeter压测脚本
接上篇,一键转化将接口测试平台测试用例转化成Jmeter压测脚本思路,这里我首先在java 上面做了一个简单的实验,看看 转化的中间遇到的问题,这里呢,我只是给了一个简单的demo 版本, ...
- teprunner测试平台部署到Linux系统Docker
本文是一篇过渡,在进行用例管理模块开发之前,有必要把入门篇开发完成的代码部署到Linux系统Docker中,把部署流程走一遍,这个过程对后端设计有决定性影响. 本地运行 通过在Vue项目执行npm r ...
- 打造专属测试平台4-使用Docker部署Django项目
编写完项目代码后,为了稳定的运行,需要将其部署至服务器.这里我选择了Docker去部署Django后端代码. 首先来看看Runoob对Docker的介绍: Docker 是一个开源的应用容器引擎,基于 ...
- 微软官方网站线上兼容测试平台-Browser screenshots
前端开发时最不想做的就是在不同浏览器.平台和分辨率测试网页显示效果,通常这会浮现许多问题,尤其浏览器版本就可能让显示成效完全不同,也只好尽力维持让每一种设备都能正常浏览网页.修改到完全没有问题必须投入 ...
- Optimizely:在线网站A/B测试平台
Optimizely:在线网站A/B测试平台是一家提供 A/B 测试服务的公司.A/B 测试能够对比不同版本的设计,选取更吸引用户眼球的那一款,从而带来更为优化的个人体验.让网站所有者易于对不同版本的 ...
- Testin云测试平台初体验
这几天偶然接触到了一个叫做Testin的云测试平台,经过一番体验,感觉还是不错的,因为里面提供了大量的测试机型,可以针对Android手机的严重碎片化现象做出比较全面的测试,同时Testin的测试内容 ...
- SQL注入测试平台 SQLol -1. 简介与安装
最近下载了SQLol测试了一下,感觉挺好玩的,做一下记录. SQLol是一个可配置得SQL注入测试平台,它包含了一系列的挑战任务,让你在挑战中测试和学习SQL注入语句,SQLol还是比较有创意的项目. ...
- 一个基于集成jenkins的测试平台
(一)先看测试业务的情况: 有各种各样的任务包括代码构建.部署搭建.单元测试.功能自动化测试(包括许多模块的功能自动化测试,有十几个居多),性能测试.正确性验证:复杂一点的是这些任务在不同的测试阶段中 ...
- 支撑Pinterest日均1000+次试验的A/B测试平台揭秘
编者按:本文详细介绍了 Pinterest 内部A/B测试平台的搭建过程,对于无论是有技术能力和资源想要自建A/B测试系统的大公司,还是想在业务中引入第三方A/B测试方法和工具的中小公司都极具参考意义 ...
随机推荐
- 从linux命令行分享文件:bashupload.com和transfer.sh
背景 传输文件是一个常见的需求,简单的做法是通过即时通讯工具,邮件,网盘完成. 但当分享或接收的一端为远程服务器,只有命令行可以操作时,一个能支持在命令行完成分享和下载的工具,就会省下不少麻烦. 下面 ...
- Hapi+MySql项目实战路由初始化(二)
配置路由规则 将路由文件放在routes文件夹里,修改‘Server.js’文件,增加如下代码: 我们这里指明了require('./routes') routes文件夹,require可以文件但是不 ...
- VFP9.0的GDI+类的使用
GDI+你应该不会陌生吧,然而,在VFP里要使用这一技术,可不是一件容易的事,你得学习一大堆API函数.或许,一想到这,你已经望而却步了.不过,从现在起,这一技术不再是豪门旺族的专宠了,我们每一位Fo ...
- mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it"
mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it" 现 ...
- btrfs文件系统简单学习
1 btrfs文件系统 btrfs文件系统在生产环境应用还不多,因此,本文仅仅简单学习. 1.1 btrfs文件系统核心特性 1)多物理卷支持:btrfs可由多个底层物理卷组成(可以是单块物理磁盘,也 ...
- MySQL数据库的备份、还原、迁移
一.单库备份与还原 1.远程连接MySQL数据库 D:\mysql-5.7.14-winx64\bin>mysql -h192.168.2.201 -uroot -pcnbi2018 参数说明: ...
- Android中实现一个简单的逐帧动画(附代码下载)
场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...
- Linux学习Day5:Vim编辑器、配置网卡、配置Yum软件仓库
今天首先学习Vim编辑器的使用,通过它可以对Linux系统的文件进行编写和修改.在Linux系统中一切都是文件,所以熟练掌握Vim编辑器的使用十分重要.最后通过配置主机网卡的实验,来加深Vim编辑器中 ...
- hadoop完全分布式部署
1.我们先看看一台节点的hdfs的信息:(已经安装了hadoop的虚拟机:安装hadoophttps://www.cnblogs.com/lyx666/p/12335360.html) start-d ...
- Python——捕获异常
一.什么是异常 """异常:错误,bug处理异常:尝试执行某句可能出现异常的语句, 若出错则用正确的代码去替代. try: 可能发生错误的代码except: 如果出现异常 ...