验证systemVerilog中激励的时序(clocking)

2023-10-18 00:59

本文主要是介绍验证systemVerilog中激励的时序(clocking),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 背景介绍

1.1 保留足够的setup time

下图中在10ns时,没有建立(setup)时间,很容引起不确定情况发生,因此需要将write信号前移,留出足够长的setup time。
在这里插入图片描述

1.2 保留足够的hold time

下图中,正确情况:

  • TB产生req信号,req信号拉高,DUT的grant信号拉高;
  • 当grant信号经过一个周期后,grant信号会被拉低,然后req信号也会拉低;
  • 若是hold time时间不够,req采到的grant为高电平(错误),那么req信号也无法拉低,出现错误。
    在这里插入图片描述

1.3 总结

驱动过晚或采样过早,都会引起竞争现象。在建立之前,稳定的驱动信号,可以避免竞争现象。

2 clocking 模块控制同步信号

clocking模块控制同步信号,要点:

  • clocking是关键字
  • systemVerilog中使用clocking模块控制同步信号
  • 在interface中定义clocking模块,将信号同步到某一个特定的时钟
  • clocking模块中所有信号都是同步驱动或采样,可以确保验证平台可以在正确的时间跟设计进行交互
  • clocking 模块主要使用在验证平台中,不能用作RTL设计
  • 一个interface中可以包含多个clocking模块

2.1 用interface和clocking进行仿真

  • 从DUV的输出到testbench的输入有1个延迟
    • 需要在testbench的输入端加一个“虚拟的同步器”
  • 从testbench的输出到DUV的输入没有延迟
    default input #1 step output #0;(默认值,不写的话就是这个值,放置在clocking block)
    在这里插入图片描述

2.2 定义input 和output skew,控制时序

  • input skew表示在时钟有效边沿采样信号的扭斜单位时间 output skew表示
  • 在时钟有效边沿驱动信号的扭斜单位时间
clocking dram @(clk)input #1ps address;input #5output #6 data;
endclocking

在这里插入图片描述

2.3 clocking block举例和引用clocking模块中信号

在这里插入图片描述自动将arbif.cb.request信号同步到clock上面。

2.4 将信号同步到时钟有效边沿

@arbif.cb; //等待接口arbif的时钟边沿
repeat (3) @arbif.cb; //经过3个arbif接口的时钟上升沿

2.5 同步到信号的任何一个边沿

@arbif.grant; //等待接口grant信号的任意一个边沿
@(posedge arbif.cb.grant); //等待grant信号的上升沿
@(negedge arbif.cb.grant); //等待grant信号的下降沿
wait (arbif.cb.grant==1) //等待grant信号为高电平,如果已经为高电平则没有延迟

2.5 等待n个时钟周期 ##n 阻塞语句

##2 arbif.cb.requeset <= 0;//经过2个时钟周期后赋值

等效:repeat(2) @arbif.cb;

2.6 引用clocking内的信号

驱动信号必须用非阻塞赋值,采样信号用阻塞赋值

arbif.cb.request <=1; //驱动输出信号
value = arbif.cb.grant; //采样出入信号

2.7 在下一个有效时钟边沿赋值

如果不使用时间的推进语句如#1或者##1,仿真时间不会更新,会导致仿真悬挂

forever beginif(request ==1)grant <= 1;end	

上面将会是死循环,直至内存写满,应该改成如下代码解决问题

forever begin
#1 psif(request ==1)grant <= 1;end	

这篇关于验证systemVerilog中激励的时序(clocking)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/229132

相关文章

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

React 笔记 父子组件传值 | 父组件调用子组件数据 | defaultProps | propsType合法性验证

1.通过props实现父组件像子组件传值 、方法、甚至整个父组件 传递整个父组件则   [变量名]={this} import Header from "./Header"render(){return(<Header msg={"我是props传递的数据"}/>)} import React,{Component} from "react";class Header extends

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,

【python因果推断库11】工具变量回归与使用 pymc 验证工具变量4

目录  Wald 估计与简单控制回归的比较 CausalPy 和 多变量模型 感兴趣的系数 复杂化工具变量公式  Wald 估计与简单控制回归的比较 但现在我们可以将这个估计与仅包含教育作为控制变量的简单回归进行比较。 naive_reg_model, idata_reg = make_reg_model(covariate_df.assign(education=df[