interface中setup_time和hold_time
interface中的setup_time和hold_time
input:约束input信号提前T时间采样,然后在时钟沿更新到input信号上。
output:约束output信号,在时钟沿T时间后驱动数据到output信号上。
这个两个时间和setup和hold没有关系,不知道为啥取这个名字。
clocking drv_cb @(posedge clk);
default input #setup_time output #hold_time;
output data;
endclocking:drv_cb clocking mon_cb @(posedge clk);
default input #setup_time output #hold_time;
input data;
endclocking:mon_cb
在DUT中这样与interface连接
initial begin
force TH.data_in = drv_cb.data;
end assign mon_cb.data = TH.data_out;
setup_time:用于monitor,提前时钟沿(posedge clk)setup_time时间采集DUT的信号数据,并在时钟沿将数据赋给interface的data上。
hold_time:用于driver,driver在时钟沿(posedge clk)采集interface中data的数据,并延时hold_time时间force到DUT的信号上。

在interface里面定义时钟块clocking block 可以控制同步信号相对于时钟的时序,时钟块中的任何信号都可以同步的驱动或采样,保证了测试平台在正确的时间点与信号交互。一个接口中可以有多个时钟块,每个时钟块中都只有一个时钟表达式,所以每一个时钟块对应各自的时钟域。

何为建立时间(Setup Time)和保持时间(Hold Time)?以D触发器为例,在作为接收端时;由于工艺、寄生参数、触发器结构等原因决定,被采样数据必需有一个稳定区间,保证数据可以正确的被触发器采样。通常我们把这个要求的稳定区间称为 Setup-Hold window。我们把 Setup-Hold window 和时钟沿对应起来,把Setup-Hold window 分解为两部分,建立时间(Setup Time)和保持时间(Hold Time)。
在触发器的时钟沿到来前,输入数据必须保持在一个稳定状态的最小时间;称为建立时间(setup time)。
在触发器的时钟沿到达后,输入数据需要继续保持在原状态的最小时间,称为保持时间(hold time)。
那么我们在验证环境中为了更加贴近实际的电路情况,也在时钟块里面定义了SETOU_TIME和HOLD_TIME。
这里的HOLD_TIME指的是driver将clocking block里面的输出信号驱动到总线上时会延时HOLD_TIME时间。
SETOU_TIME指的是monitor会在时钟沿前SETOU_TIME时间从总线上采集信号输入到clocking block里面。
如果用例通过,一般在Verdi上是看不到SETOU_TIME的效果的,为了能弄清楚SETUP_TIME和HOLD_TIME的意思,我将SETOU_TIME和HOLD_TIME的时间分别设为5ns和6ns,时间已经超出了时钟周期的一半,所以monitor采样的时候会报错。通过查看Verdi中的波形可以验证这一点。


从图中能够很容易看出,1和2之间的时间差是6ns,也就是说driver将信号驱动到总线上,其实是延迟了HOLD_TIME时间。但是SETOU_TIME不容易看出来,monitor需要在时钟沿的前SETOU_TIME时间,也就是提前5ns的时候采集总线上的数据,也就是在3时钟沿的时候提前5ns采集总线上的数据,这时,由于HOLD_TIME的时间为6ns,时钟周期为10ns,所以在3时钟沿,monitor中data采到的数据是72a6,data_valid采到的是0。只有在4时钟沿时data_valid 才为1,数据才有效,这就造成了有一拍的数据漏采,所以用例failed。将SETOU_TIME和HOLD_TIME的时间改成低于时钟周期的一半时,用例pass。
interface中setup_time和hold_time的更多相关文章
- 关于 "java中常量定义在interface中好还是定义在class中好" 的一些思考
原文链接 http://blog.csdn.net/voo00oov/article/details/50433672 java中interface中定义变量都是"public static ...
- java中常量定义在interface中好还是定义在class中
Java中interface中定义变量都是"public static final" 类型的, 也就是常量, 因此很多人在interface定义常用的常量,除此之外单独定义一个cl ...
- 【Java关键字-Interface】为什么Interface中的变量只能是 public static final
三个关键字在接口中的存在原因:public:接口可以被其他接口继承,也可以被类实现,类与接口.接口与接口可能会形成多层级关系,采用public可以满足变量的访问范围: static:如果变量不是sta ...
- java8新特性:interface中的static方法和default方法
java8中接口有两个新特性,一个是静态方法,一个是默认方法. static方法 java8中为接口新增了一项功能:定义一个或者多个静态方法. 定义用法和普通的static方法一样: public i ...
- Java8新特性interface中的static方法和default方法
static方法 java8中为接口新增了一项功能:定义一个或者更多个静态方法.用法和普通的static方法一样. 代码示例 public interface InterfaceA { /** * 静 ...
- interface中定义default方法和static方法
interface的default方法和static方法 接口中可以定义static方法,可通过接口名称.方法名()调用,实现类不能继承static方法: 接口中可以定义default方法,defau ...
- JAVA中的常量定义在class中还是interface中比较合理?
本文地址:http://blog.csdn.net/sushengmiyan 本文作者:苏生米沿 java中使用的常量可以集中定义在一个文件中. 有两种解决方案: 1.在Constants.java中 ...
- C# Interface中的属性
只能写get,和set,到具体类实现的时候才确定get的是哪个字段的值,set的是哪个字段的值.
- 转:Java中abstract和interface的区别
转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...
随机推荐
- Jmeter中用例禁用
1.在线程组下创建2个http请求(blogs和baidu),并且在Thread Group 添加[View Results Tree]和[View Results in Table] 2.选择[ba ...
- 403 Invalid CORS request 跨域问题 invalid+cors+request什么意思
5.跨域问题 跨域:浏览器对于javascript的同源策略的限制 . 以下情况都属于跨域: 跨域原因说明 示例 域名不同 www.jd.com 与 www.taobao.com 域名相同,端口不同 ...
- 信息收集&Fuzz
本文译自https://0xjoyghosh.medium.com/information-gathering-scanning-for-sensitive-information-reloaded- ...
- GeoServer介绍
GeoServer本质上是一个地图服务器,它是遵循OpenGIS Web 服务器规范的J2EE实现,通过它可以方便的将地图数据发布为地图服务,实现地理空间数据在用户之间的共享.另外,它也提供了相应的接 ...
- 【VictoriaMetrics】vm-select源码阅读
调用层次表格 源文件 行号 函数 说明 app/vmselect/main.go 63 main 入口 92行调用 requestHandler app/vmselect/main.go 132 -r ...
- node.js在Linux下执行shell命令、.sh脚本
首先,引入子进程模块 var process = require('child_process'); 执行shell命令 调用该模块暴露出来的方法exec process.exec('shutdown ...
- vue学习9-更新视图
<!DOCTYPE html> <html lang='en'> <head> <meta charset='UTF-8'> <meta ht ...
- gin框架中HTTP请求和参数的解析
1. 方法一: 通用的处理方法---Handle package main import ( "fmt" "github.com/gin-gonic/gin" ...
- kubernetes之部署traefik-ingress分为http和https
1 理解Ingress 简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上.Ingress相当于nginx.apache等负载均衡方 ...
- 一些求和式的估算 & 杜教筛时间复杂度证明
本文内容概要: \(A=\sum\limits_{i=1}^n\dfrac1{\sqrt i}=1+\dfrac1{\sqrt2}+\cdots+\dfrac1{\sqrt n}\) \(O(\sqr ...