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 ...
随机推荐
- js数组清空的两种方式
编辑器加载中...方式1,length赋值为0 这种方式很有意思, 其它语言如Java,其数组的length是只读的,不能被赋值.如 int[] ary = {1,2,3,4}; ary.length ...
- python实现掘金定时签到抽奖
python实现掘金定时签到抽奖 一. 概述 这里记录一下使用 python 实现掘金定时签到抽奖.首先需要登录掘金,进入签到页面,按 F12 打开浏览器的调试面板,选择 Network,选择 XHR ...
- Redis可视化内存分析工具--RDR:查看Redis中key的占用情况
RDR(redis datareveal)是一个解析redis rdbfile的工具.与redis-rdb-tools 相比,RDR 是由 golang 实现的,速度要快得多(5GB rdbfile ...
- 《剑指offer》面试题55 - I. 二叉树的深度
问题描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 例如: 给定二叉树 [3,9,20,null,null,15 ...
- JSP页面打印输出,两种方法。out、《%=
使用out.println()输出: <%@ page contentType="text/html;charset=UTF-8"%> <html> < ...
- DispatcherServlet的init源代码
springmvc执行过程源代码分析 1,tomcat启动,创建容器的过程 通过load-on-start标签指定的1,创建DispatcherServlet对象, DispatcherServlet ...
- 003Linux查看文件内容的5个命令姿势
01 开篇 Linux 中查看文件内容常用的有如下 5 个命令: cat: more: less: tail: head. 02依次看看这些命令的使用姿势 cat 一次性将所有内容输出到屏幕上,方便查 ...
- Nginx全面介绍 什么是Nginx?
目录 一:Nginx全面讲解 1.简介: 2.nginx的用武之地 3.关于代理(解析含义作用) 二:正向代理 三:反向代理 四:项目应用场景 五:正向代理与反向代理区别 1.正向代理 2.反向代理 ...
- NextCloud + python API
NextCloud库地址:https://github.com/matejak/nextcloud-API 安装库依赖: 安装库: 建议在虚拟环境下使用 使用示例: # -*- coding: utf ...
- 1. idea spark scala 语言支持设置
Spark 版本为 3.0.0,默认采用的 Scala 编译版本为 2.12 1. 创建名为spark-project 的项目 2. 将src 删除,把spark-project 当成一个父项目, ...