Verilog 延迟反标注

news2024/10/6 4:11:05

 延迟反标注, SDF

延迟反标注是设计者根据单元库工艺、门级网表、版图中的电容电阻等信息,借助数字设计工具将延迟信息标注到门级网表中的过程。利用延迟反标注后的网表,就可以进行精确的时序仿真,使仿真更接近实际工作的数字电路。

延迟反标注过程

无论是进行 IC 设计还是 FPGA 开发,时序仿真都是必不可少的。

下面,说明延迟反标注在该流程中是怎么使用的,权当复习与巩固。

  • (1) 利用硬件描述语言完成 RTL 层级的描述,进行功能仿真。
  • (2) 对时钟、复位、输出端口等信号进行一定的时序约束,包括时钟频率、时序检查、延迟等信息的设置,并用于逻辑综合。
  • (3) 综合出的门级网表包含各种粗略估计的延迟信息。此时可以进行去除掉 hold、recovery、 removal、interconnect(互联线)等延迟信息,进行初步的时序仿真和静态时序分析 (STA),初步验证 setup 等时序是否满足时序要求。很多公司或个人也会将此步的仿真略过。
  • (4) 对门级网表进行布局布线,转换为版图级网表。根据元器件几何形状和制造工艺等信息可以提取版图电路中的电容和电阻信息,再根据此信息就可以计算出版图中的延迟值。
  • (5)将布局布线后版图中的延迟信息反标到版图级网表中,便可以精确的修改网表中的延迟值。此时再进行时序仿真和 STA,以验证时序是否满足。
  • (6) 如果所有验证均通过,则可以进行下载或实现、生产。如果时序有 violation,首先需要检查时序约束设置,比如延迟参数、时钟频率、信号关系等设置是否有问题,再重新布局布线验证是否能消除 violation。如果上述措施均不能消除 violation,则需要回到设计初始,优化 RTL 的描述。

此过程示意图如下,标黄部分表示数字设计流程中可以增加的操作说明。


SDF 文件

SDF (Standard Delay Format),标准延时格式文件,常用延迟反标注。该文件包含了仿真用到的所有 IOPATH,INTERCONNECT、TIMING CHECK 等延迟时间和时序约束的参数。下面就简单的介绍下 SDF 文件。

文件格式

SDF 文件用关键字 DELAYFILE 声明,并包含 DESIGN、DATE 等关键字信息。

延迟时间和时序约束参数均在 CELL 内说明。

SDF 文件就是由文件声明信息和很多个不同的 CELL 组成的,格式如下。

(DELAYFILE
(DESIGN "top")
(DATE "Love Sep 7 11:11:11 2017")
......
(TIMESCALE 1ns)
(CELL
  ......
)
(CELL
  ......
)
......
)

延迟类型

SDF 文件中的延迟类型包括 cell delay 和 wire delay。cell delay 指逻辑门单元器件内部的延迟,wire delay 是指器件之间通过 wire 互联的延迟

cell delay 描述如下,定义了 module "and_gate" 中输入端口(A/B)与输出端口(Z)的上升延迟和下降延迟,并指定了最小值和最大值。

(CELL
  (CELLTYPE "and_gate")  //module 名字
  (INSTANCE u_and)       //例化名字,如果多层次访问需要指定访问层次
  (DELAY
    (ABSOLUTE
    (IOPATH A Z (1.5::1.8) (1.3::1.7))  //上升延迟最小值1.5,最大值1.8
    (IOPATH B Z (1.5::1.8) (1.3::1.7))  //下降延迟最小值1.3,最大值1.7
    )
  )
)

wire delay 描述如下,定义了在 module "top" 中,从 u_and 输出端到 u_dt 输入端的上升延迟和下降延迟,并指定了最小值和最大值。

一般 RTL 级仿真或综合出的门级网表是可以忽略 wire delay的,因为后端还需要重新布局布线。布局布线后的网表就接近真实的电路,此时就需要考虑 wire delay。

(CELL
  (CELLTYPE "top") //module 名字
  (INSTANCE)       //如果是顶层设计模块,可忽略例化名字
  (DELAY
    (ABSOLUTE
    (INTERCONNECT u_and.Z u_dt.D (0.500::0.751) (0.400::0.551))
    //(INTERCONNECT u_and/Z u_dt/D (0.500::0.751) (0.400::0.551))
    //层次访问符号,有的编译器支持".",有的编译器支持"/",这里需要注意
    )
  )
)

条件延迟及时序检查

CELL 中还可以用关键字 COND 指定条件延迟。同时,也可以在 CELL 内做时序检查。一个 D 触发器的延迟说明及时序检查举例如下。

(CELL
  (CELLTYPE "d_gate")
  (INSTANCE u_dt)
  (DELAY
    (ABSOLUTE
    // D=1时 上升延迟为1.3-2.3, 下降延迟为1.5-2.2
    (COND D==1'b1 (IOPATH CP Q (1.3::2.3) (1.5::2.2)))
    // D=0时 上升延迟为1.2-2.1, 下降延迟为1.4-2.0
    //此处只是为了说明 COND 的用法,D=1时下降延迟参数不可能用到
    //                          D=0时上升延迟参数也不可能用到
    (COND D==1'b0 (IOPATH CP Q (1.2::2.1) (1.4::2.0)))

    )
  )
  (TIMINGCHECK
  (SETUP D (posedge CP) (0.8::1))
  //setup check, D-CP 时间小于0.8或1时,便打印 violation
  )
)

使用方法

Verilog 提供了系统函数 $sdf_annotate 去调用 SDF 文件完成延迟反标注的过程。使用格式如下:

$sdf_annotate ('sdf_file'[, module_instance] [,'sdf_configfile'][,'sdf_logfile'][,'mtm_spec'] [,'scale_factors'][,'scale_type']);

这里,sdf_file 必须指定,其余参数可选。

这里只对前几个常用的参数进行说明。

  • sdf_file: SDF 文件名字,包含路径信息
  • module_instance: 例化的设计模块名字,一般为 testbench 中所例化的数字设计模块名称,注意和 SDF 文件内容中的声明保持层次的一致
  • log_file: 编译时关于 SDF 的日志,方便查阅。
  • mtm_spec: 指定使用的延迟类型,选项包括 MAXIMUM、MINIMUM、TYPICAL,分别表示使用 SDF 文件中标注的最大值、最小值或典型值。当然上述 SDF 文件例子中没有给出典型值。

使用 specify 仿真

下面使用 specify 进行简单的时序仿真,以便与使用 SDF 文件进行时序仿真做对比。

一个用 specify 指定延迟的与门逻辑描述如下:

module and_gate(
   output  Z,
   input   A, B);

   assign Z = A & B ;

   specify
      specparam t_rise = 1.3:1.5:1.7 ;
      specparam t_fall = 1.1:1.3:1.6 ;
      (A, B  *> Z) = (t_rise, t_fall) ;
   endspecify

 endmodule

一个用 specify 指定延迟的 D 触发器描述如下:

实例

module d_gate(
            output      Q ,
            input       D, CP);

   reg                  Q_r ;
   always @(posedge CP)
     Q_r <= D ;
   assign       Q = Q_r ;

   specify
      if (D == 1'b1)
        (posedge CP => (Q +: D)) = (1.3:1.5:1.7, 1.1:1.4:1.9) ;
      if (D == 1'b0)
        (posedge CP => (Q +: D)) = (1.2:1.4:1.6, 1.0:1.3:1.8) ;
      $setup(D, posedge CP, 1);
   endspecify

endmodule

顶层模块描述如下,主要功能是将与逻辑的输出结果输入到 D 触发器进行缓存。

实例

module top(
   output  and_out,
   input   in1, in2, clk);

   wire    res_tmp ;
   and_gate u_and(res_tmp, in1, in2);
   d_gate   u_dt(and_out, res_tmp, clk);

endmodule

testbench 描述如下,仿真时设置 "+maxdelays",使用最大延迟值。

实例

`timescale 1ns/1ps
module test ;
   wire         and_out ;
   reg          in1, in2 ;
   reg          clk ;

   initial begin
      clk = 0 ;
      forever begin
          #(10/2) clk = ~clk ;
      end
   end

   initial begin
      in1 = 0 ; in2 = 0 ;
      # 32 ;
      in1 = 1 ; in2 = 1 ;
      # 13 ;
      in1 = 1 ; in2 = 0 ;
   end

   top   u_top(
               .and_out (and_out),
               .in1     (in1),
               .in2     (in2),
               .clk     (clk));

   initial begin
      forever begin
         #100;
         if ($time >= 1000)  $finish ;
      end
   end

endmodule // test

仿真时序如下所示,由图可知:

  • (1) 与门输入端 A/B 到输出端 Z 的上升延迟为 33.7-32=1.7ns;
  • (2) 与门输出端 Z 到触发器输入端 D 的互联延迟为 0;
  • (3) 触发器 D 端到 CP 端时间差为 35-33.7=1.3ns,大于 setup check 时设置的 1ns,因此时序满足要求,不存在 violation 。
  • (4) 触发器 CP 端到输出端 Q 的上升延迟为 36.7-35=1.7ns;

综上所述,仿真结果符合设计参数。

使用 SDF 仿真

        保持关于 SDF 文件的例子中涉及的参数不变,将多个 CELL 说明整合成完整的 SDF 文件,命名为"simple_test.sdf"。在 testbench 中加入以下语句,将 SDF 文件中的延迟信息反标注到设计的模块 top 中,重新进行时序上的仿真。

   initial begin
      $sdf_annotate("../rtl/simple_test.sdf", u_top, , "sdf.log", "MAXIMUM", ,);
   end

仿真时序及 log 打印信息如下,由图可知:

  • (1) 与门输入端 A/B 到输出端 Z 的上升延迟为 33.8-32=1.8ns;
  • (2) 与门输出端 Z 到触发器输入端 D 的互联延迟为 34.551-33.8= 0.751ns,不再为 0;
  • (3) 触发器 D 端到 CP 端时间差为 35-34.551=0.449ns,小于 setup check 时设置的 1ns,因此时序不满足要求,会打印存在 violation 的信息。
  • (4) 触发器 CP 端到输出端 Q 的上升延迟为 37.3-35=2.3ns;

综上所述,仿真结果符合设计参数,但是时序存在 violation。主要原因是因为与门输入端的数据和触发器时钟是异步不相关的。为解决此类异步问题,请参考下一章节《4 章:同步与异步》。

需要说明的是:

        与 specify 块语句相比,SDF 文件还可以指定模块间 wire delay。一般来说,使用 SDF 文件指定版图级的网表 timing 信息最接近实际数字电路,相比 rtl 或综合出的门级网表,此版本的 timing 是最差的。SDF 文件指定模块内路径延迟时,原模块的 specify 块必须保留,且 specify 块与 SDF 文件中指定的延迟的条件、类型等均需一致,延迟值可以不同。例如在 specify 块中无条件指定延迟:

(A => Z) = (1.3, 1.7) ;

在 SDF 文件中指定条件延迟:

(COND A==1'b1&&B==1'b1 (IOPATH A Z (1.5::1.8) (1.3::1.7)))

        则在编译阶段就会报告"IOPATH from A to Z is not found."的 SDF Warning。SDF 文件设置的延迟是无效的。此处 SDF 文件也应该使用无条件的方法指定路径延迟。本次只是为了介绍 SDF 文件及其用法而手动编写的 SDF 文件。实际上 SDF 文件都是由设计人员借助 IC 设计工具(例如 PrimeTime)生成的,上一条注意事项也无需太过担心,调试时注意就好。一般数字设计的门级网表数量巨大,人为写 SDF 文件也不切实际。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当MySQL想恋爱,java和navicate抢着做媒婆 ------ java连接MySQL数据库 navicat for MySQL 连接

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 **收录于专栏 数据库 ⭐当MySQL和java通过媒婆navicate谈上了恋爱⭐ 文章目录⭐当MySQL和java通过媒婆navicate谈上了恋爱…

Linux 多线程

目录 一.线程概念 1.什么是线程 2.页表 &#xff08;1&#xff09;页表结构 &#xff08;2&#xff09;好处 3.线程优点 4.线程缺点 5.线程异常 6.线程用途 7.进程和线程的 8.简单使用线程 二.线程控制 1.使用线程 2.线程栈和pthread_t 3.线程的局部存储 4.分离…

[附源码]计算机毕业设计springboot室内设计类网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

R语言中的划分聚类模型

划分聚类 是用于基于数据集的相似性将数据集分类为多个组的聚类方法。我们围绕聚类技术进行一些咨询&#xff0c;帮助客户解决独特的业务问题。 【视频】KMEANS均值聚类和层次聚类&#xff1a;R语言分析生活幸福质量系数可视化实例 KMEANS均值聚类和层次聚类&#xff1a;R语言分…

GUI自动化测试工具Sikulix的安装和使用

从程序内部控制对小白来说太难了&#xff0c;所以使用一下自动化测试的工具直接控制按钮达到我的目的 一个比较好的自动化测试工具是Sikulix&#xff0c;这里记录一下安装和基本的使用 下载和安装 官网&#xff1a;http://www.sikulix.com/ 下载对应系统的.jar需要使用java&…

第二证券|A股集体收涨,汽车产业链爆发!房地产延续强势

11月30日早盘&#xff0c;A股三大指数小幅上行。到午间收盘&#xff0c;沪指涨0.21%报3156.50点&#xff0c;深成指涨0.38%&#xff0c;创业板指涨0.20%&#xff1b;两市算计成交5692亿元。 盘面上看&#xff0c;轿车、燃气、地产、油气、煤炭等板块走强&#xff0c;酒店餐饮、…

实验室信息化建设的意义

实验室信息管理系统将实验室的仪器设备、实验人员、实验环境以及相关数据进行集成和管理&#xff0c;使整个实验室形成一个有机整体&#xff0c;规范了业务流程和管理体制&#xff0c;实现各部门之间资源共享协同作业&#xff0c;达到优化配置资源和提高工作效率&#xff0c;不…

欧洲肿瘤生物学博士后申请经历

国外博士后的申请者经常会遇到各种问题&#xff0c;从而感叹申请过程的不易。知识人网小编推荐这篇申请经历&#xff0c;或许会给其他申请者带来一定启示。 作者从今年1月开始申请&#xff0c;5月份获得offer。以下是原文&#xff1a; 背景介绍&#xff1a;国内双非一本生物工…

云开发静态网站H5跳转小程序(记录过程)以及云环境共享(同一主体)

需求&#xff1a;老板要求是在H5网页端&#xff0c;无论是在微信浏览器还是在微信外部浏览器都可以打开这个H5之后&#xff0c;然后跳转到小程序上。 查看了微信相关的文档&#xff0c;发现H5端跳转小程序是有两种方式&#xff1a; 一&#xff1a;微信内网页跳转小程序 官方文档…

【春秋云境】CVE-2022-24124复现

一直不明白updatexml到底要怎么注入 &fieldupdatexml(0,concat(0x7e,(version()),0x7e),0) 确实可以出来版本号 但是如果换成database()还是不行 最后还是靠了大佬 http://eci-2ze625l338u3rfrh3r36.cloudeci1.ichunqiu.com:8000/api/get-organizations?p123&page…

只要让我戴上面具 , 我就会马上逃跑 ! 等下眼镜卡住了

郑重声明 : 本文不包含任何广告 , 不构成任何购买建议 , 我也强烈不建议购买本文这款产品 , 所有图片来自我手机拍照 , 如有侵权 , 通知我 , 马上删除 写在前面 相信各位同学一定都经历过火灾安全知识培训吧 而且肯定有一部分人是那种充当表演对象的上手使用过灭火器的人 除了…

STM32实战总结:HAL之SDIO

在介绍SDIO接口之前先了解一下MMC、SD卡、SD标准等背景知识。 MMC(Multi Media Card)&#xff1a;即多媒体卡&#xff0c;它是一种非易失性存储器件&#xff0c;体积小巧&#xff0c;容量大&#xff0c;耗电量低&#xff0c;传输速度快&#xff0c;主要应用于消费类电子产品中&…

D. Social Network(并查集修改连通块数量)

Problem - D - Codeforces 威廉来到了一个专门讨论加密货币的会议。要想了解加密货币世界的最新消息&#xff0c;建立联系、认识新朋友、利用朋友的关系是必不可少的。 会议有N个参与者&#xff0c;他们最初都不熟悉对方。威廉可以把之前不熟悉的任何两个人a和b介绍给对方。 …

spi驱动数码管

spi是串行全双工同步通信&#xff0c;支持多从机模式&#xff0c;没有应答机制&#xff0c;可靠性方面存在劣势&#xff1b; 采用边沿采样&#xff0c;根据时钟极性和时钟相位&#xff0c;有四种数据传输方式&#xff08;由时钟变化(极性&#xff0c;相位)决定&#xff1b; 因…

Java Tomcat内存马——Listener内存马

目录 &#xff08;一&#xff09;前置知识 0x01 什么是Listener 0x02 Listener的简单案例 0x03 Listener流程分析 &#xff08;二&#xff09;注入分析 (三&#xff09;实现内存马 得到完整的内存马 (四&#xff09;漏洞复现 其他的payload: 总结 &#xff08;一&#…

Observability:从零开始创建 Java 微服务并监控它 (二)

这篇文章是继上一篇文章 “Observability&#xff1a;从零开始创建 Java 微服务并监控它 &#xff08;一&#xff09;” 的续篇。在上一篇文章中&#xff0c;我们讲述了如何创建一个 Java web 应用&#xff0c;并使用 Filebeat 来收集应用所生成的日志。在今天的文章中&#xf…

机器学习3判断机器算法的性能

文章目录一、判断机器算法的性能1基本使用1.目的2.使用pycharm函数封装3.sklearn中的train test split&#xff1a;4.完美调用&#xff1a;二、判断机器算法的性能2分类的准确度&#xff08;accuracy&#xff09;准确度初步计算&#xff1a;完善KNNpy程序如下&#xff1a;一、判…

[附源码]Python计算机毕业设计Django高校社团管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

GHost系统备份与还原

前期准备工作&#xff1a;U盘&#xff08;>8G&#xff09;,最好大一点&#xff0c;如果你U盘要放GHO或者ISO文件的话&#xff0c;可能就不够用了。 我这里使用的老白菜工具&#xff0c;然后制作一个启动U盘。附教程连接&#xff1a;http://laobaicai.bsllcmgs.cn/upqdzz.htm…

无线通信系统简述(学习笔记)

文章目录Evolution of Mobile Radio CommunicationsFirst GenerationSecond GenerationThird GenerationFourth GenerationFifth GenerationOther Wireless Communication SystemsWireless Local Area Networks (WLAN&#xff09;Satellite communication networkWireless Sens…