• 第十章 时序与延迟


    • 真实硬件中具有延迟,所以需要检查时序。
    • 检查时序的两种方式:时序检查、静态时序验证。
    • 时序检查:仿真过程中计算与该模块相关的延迟值。
    • 静态时序验证
      • 怎么用:先进行纯功能验证,再用静态时序验证工具单独验证时序。
      • 优点:快。能以时序仿真快几个数量级的速度验证时序。
    • 本章主要讨论如何定义延迟及时序检查。

    定义延迟

    延迟模型

    • 三种延迟模型:分布延迟、集总延迟、引脚到引脚(路径)的延迟

    分布延迟

    • 在每个独立元件的基础上定义的。
    • 延迟值赋给电路中独立的元件。
    • 两种方式建模
      • 一、将延迟值赋给独立的门;
      • 二、在单独的assign语句中指定延迟值;
    • 如下,门元件中分布延迟
      在这里插入图片描述
    • Verilog描述
      在这里插入图片描述
    • 分布延迟,每个元件都要指定延迟值。

    集总延迟

    • 在每个独立模块的基础上定义。
    • 集总,顾名思义,将所有累积的延迟汇总于输出门。
    • 如图
      在这里插入图片描述
    • Verilog描述
      在这里插入图片描述
    • 集总延迟建模与分布延迟建模,更加简便。

    路径延迟

    • 定义引脚到引脚的时序说明,分别把延迟赋给模块中每个输入到每个输出之间的所有路径。
    • 可以针对每条输入/输出路径分别指定延迟。
      在这里插入图片描述
    • 怎么用:可以从数据手册中直接获取标准组件的引脚到引脚的延迟;通过用spice之类的低层次仿真器进行电路描述的仿真,可以获得数字电路模块的引脚到引脚的延迟。

    路径延迟

    • 单独讨论下路径延迟,引脚与端口,可以替代使用。

    specify块

    • 模块路径延迟:模块的输入或输出引脚和目标输入或输出引脚之间的延迟。
    • 关键字:specify ... endspecify,关键字之间的语句组成specify块。
    • specify块包含以下操作语句:
      • 给穿过模块的所有路径指定引脚到引脚的时序延迟;
      • 在电路中设置时序检查;
      • 定义specparam常量;
    • 引脚到引脚的延迟
      在这里插入图片描述

    specify块内部

    并行连接

    • 每个路径延迟语句都有一个源域和目标域。
      在这里插入图片描述
    • 并行连接符号:=>
    • 如下图:a是源域,out是目标域。
      在这里插入图片描述
    • 注意点:
      • 源域的每一位与目标域中相应的位连接。
      • 如果源域和目标域是向量,必须有相同的位数,否则不匹配。
    • 并行连接说明了源域的每一位到目标域的每一位之间的延迟。

    全连接

    • 符号*>
      在这里插入图片描述
    • 如下例
      在这里插入图片描述
    • 注意点:
      • 源域的每一位与目标域中的每一位相连接(并行连接:是相应的位)。
      • 如果源和目标是向量,则它们不必位数相同。
      • 当位宽很大时,如果每一位延迟值一致,则全连接就很简便。

    在这里插入图片描述

    • 全连接描述源中的每一位和目标中的每一位之间的延迟。

    边沿敏感路径

    • 用于输入到输出延迟的时序建模,仅当源信号上出现特定边沿时才有用。
      // 在时钟信号clock的正跳变时刻,从时钟信号到输出信号用去上升延迟10,下降延迟8
      // 数据路径:in到out,输入信号in没有反相就送到out
      (posedge clock => (out +: in)) = (10 : 8);
      
      • 1
      • 2
      • 3

    specparam声明语句

    • 用于声明特殊的参数,一般情况下,不直接根据数值定义引脚到引脚的延迟,而是使用specparam定义specify参数,然后在specify块中使用这些参数。
    • 常用于给非仿真工具存储值,如延迟计算器、综合工具和布线评估器。
      在这里插入图片描述
    • 注:仅用于specify块内部。

    条件延迟路径

    • 又称状态依赖路径延迟(SDPD)
    • 有条件的给路径延迟赋值,用if条件语句。
      在这里插入图片描述

    上升、下降和关断延迟

    • 之前有讨论过,直接上例子
      在这里插入图片描述

    最大、最小和典型值

    • 之前讨论过逻辑门的最大、最小和典型值。它们也可以用于引脚到引脚的延迟。
    • min:typ:max的形式表示。
      在这里插入图片描述

    处理x状态转换

    • Verilog使用保守的方法计算x状态转换的延迟。
    • 其方法规定:
      • 从x到已知状态的转换应当消耗可能的最大时间。
      • 从已知状态到x的转换应当消耗可能的最小时间。
    • 如下:
      在这里插入图片描述
    • 上图所示的计算方法,若下表
      在这里插入图片描述

    时序检查

    • 三种通用的时序检查任务:$setup$hold$width
    • 所有的检查时序只能用在specify块内。

    setup和hold任务

    • $setup$hold用来检查设计中时序元件的建立和保持约束。
    • 在时序元件(如边沿触发器)中,建立时间是数据必须在有效时钟边沿之前达到的最小时间。保持时间是数据在有效边沿之后保持不变的最小时间。
      在这里插入图片描述
    • $setup任务用法
      在这里插入图片描述
    • 实例
      在这里插入图片描述
    • $hold任务
    • 实例
      在这里插入图片描述

    width检查

    • 检查脉冲宽度是否满足最小宽度要求
      在这里插入图片描述
    • 用法:
      在这里插入图片描述
    • 实例
      在这里插入图片描述
  • 相关阅读:
    react使用echarts图表
    Golang分布式应用之定时任务
    一步一步介绍如何将 OpenCV C++ 代码转换为 Python 模块
    Go 语句与表达式深度解析
    【Golang】并发
    基于Open3D的点云处理18-重建系统
    GD32F450的时钟笔记
    pandas中read_csv和to_csv、read_hdf和to_hdf、read_json和to_json函数及其他各类文件的读取与存储
    Linux学习-30-chgrp、chown等修改文件和目录的所有者和所属组命令
    商家入驻商城 多商户商城 宝塔安装搭建教程 说明 小程序、h5、pc端
  • 原文地址:https://blog.csdn.net/Cherish1ove/article/details/126083330