【DC】逻辑综合实战

news2024/11/23 21:50:06

DC实战

  • 0. 学习目标
  • 1. Design
    • 1.1 Design Schematic
    • 1.2 Design Specification
  • 2. 配置文件和约束文件
    • 2.1 配置文件
      • (1) common_setup.tcl 文件
      • (2) dc_setup.tcl 文件
      • (3) .synopsys_dc.setup 文件
    • 2.3 启动工具查看单元库信息
      • (1) 查看目标库的时间单位
    • 2.3 设计约束文件
      • (1) 时钟约束
      • (2) 输入输出路径时序约束
      • (3) 组合逻辑约束
      • (4) 工作条件约束
      • (5) 语法检查
  • 3. 逻辑综合
    • 3.1 启动工具并检查信息
    • 3.2 综合
    • 3.3 脚本文件

官方 Lab_workshop 里面的实例(Lab 3 & Lab4)。

重点是时序约束文件的编写。

0. 学习目标

在这里插入图片描述

1. Design

1.1 Design Schematic

在这里插入图片描述

1.2 Design Specification

在这里插入图片描述

在这里插入图片描述

2. 配置文件和约束文件

官方给出 lab 的文件内容如下:
在这里插入图片描述
这里,可以自己先创建两个文件夹,如下所示:
在这里插入图片描述
① 和 ④ 主要存放的是综合前后的文件,比如读入设计文件之后,可以以 .ddc 格式保存在unmapped文件夹中。对于综合完成之后设计,可以以 .ddc 格式保存在 mapped 文件夹中。 .ddc 是DC工具内置的一种数据格式。

2.1 配置文件

lab中写好的两个文件:

(1) common_setup.tcl 文件

在这里插入图片描述

① .sdb 结尾的库文件是符号库。

(2) dc_setup.tcl 文件

在这里插入图片描述

(3) .synopsys_dc.setup 文件

该文件需要放在DC的启动目录下。

基于lab提供的文件,自己简单配置一下该文件的内容,具体如下:

在这里插入图片描述

2.3 启动工具查看单元库信息

使用如下命令启动工具:

$ dc_shell -topo | tee -i lab3.log

| tee -i lab3.log 会把工具运行过程输出在中,终端显示的全部内容保存到文件中

在这里插入图片描述

(1) 查看目标库的时间单位

一般情况下,在读入设计文件的时候,链接库和目标库才会被读入到DC的内存中。

① 这里,为了查看时间单位,就手动读入库文件,使用到的命令如下:

dc_shell -topo> read_db <target_library_FILE_NAEM> 

这里使用的是 LIBRARY FILE NAME

结果如下:
在这里插入图片描述

② 然后,使用lsit_libs可以查看读取到的库文件信息:

在这里插入图片描述
这里,一个是库名称,一个是库文件的名称。

③ 使用如下命令,报告库的信息:

redirect -file lib.rpt {report_lib <LIBRARY_NAME>}
  1. 这里使用的是 LIBRARY NAME
  2. redirect 是重定向的命令,-file 是将命令产生信息保存到文件中,lib.rpt 是要保存信息到文件,后面的{}中存放的是要执行的命令。

lib.rpt中的部分信息如下:

在这里插入图片描述
可以看出,时间单位是 1ns

线负载模型信息:
在这里插入图片描述
在这里插入图片描述
延时计算时候的一些信息:
在这里插入图片描述
除此之外,还有其他各种信息,这里就不再具体给出了。

2.3 设计约束文件

根据设计的Specification,编写综合时要用的约束文件。

(1) 时钟约束

在这里插入图片描述
① 时钟频率为 333.33 Mhz,对应的时钟周期就是 3ns

create_clcok -period 3.0 [get_ports clk]

② source_latency(时钟源到时钟定义位置的延迟) 的最大值为 700ps

set_clock_latency -source -max 0.7 [get_porst clk]

③ network_latency (时钟定义位置到触发器时钟输入端的延迟) 最大值为300ps

set_clock_latency -max 0.7 [get_porst clk]

④ clock skew = +/- 30ps,clock jitter = +/- 40ns,setup time slack = 50ns

在这里插入图片描述

时钟源沿着不同的路径到达寄存器的时钟端口,skew 和 jitter 就是说是时钟的真正的到达时间可能比预期早或者晚。

首先,skew为 ±30 ps,那么就可能是发射时钟滞后30ps,捕获时钟提前30ps,那么对于建立时间而言,时钟的不确定性就是60ns。(就是说,时钟周期减去60ns之后的,然后才进行时序约束,才能满足上述情况。)
然后, jitter 为 ±40ps。发射沿和捕获沿的时钟抖动是互相不影响的,这里没有加倍。对于建立时间而言,考虑的是最查的情况,及提前 40 ps。
最后,再加上 50 ps 的建立时间裕量。

最终得到的时钟不确定性约束为:

set_clock_uncertainty -setup 0.15 [get_clocks clk]

⑤ 时钟的转换时间为120ns

set_clock_transition 0.3 [get_clocks clk]

(2) 输入输出路径时序约束

在这里插入图片描述
在这里插入图片描述

① data1和data2外部延时的计算

这里直接给出了输入到寄存的组合路径的延时,但是DC是通过输入延时来对这一部分路径进行约束的,所以要自己计算外部输出延时。
在这里插入图片描述

set_input_delay -max 0.45 -clock clk [get_ports data*]

② sel端口的外部延时

数据到达的最晚绝对时间是 1.4ns,就是说这个延时包含了时钟的 latency (source 和 network两部分,所以是700ps+300ps = 1ns)。

而 输入端口约束命令用的是相对延时,所以最终的约束如下:

set_input_delay -max 0.4 -clock clk [get_ports sel]

③ out1约束
这里是直接给除了外部延时为:420ps + 80ps = 0.5ns

set_output_delay -max 0.5 -clock clk [get_ports out1]

④ out2约束
给出的是out2内部组合逻辑的最大延时为810ns,那么外部延时的计算方式如下:
外部延时 = 时钟周期 - 内部路径延时 - 时钟不确定性 = 3 - 0.81 -0.15 = 2.04ns

set_output_delay -max 2.04 -clock clk [get_ports out2]

⑤ out3约束
out3只需要满足外部的一个400ns的建立时间即可,所以其约束如下:

set_output_delay -max 0.4 -clock clk [get_ports out3]

(3) 组合逻辑约束

在这里插入图片描述

组合路径的约束也可以通过set_input_delay set_output_delay 来实现。

输入延时和输出延时的总和 = 3 - 2.45 - 0.15 = 0.4 ns
0.4 ns 分配个输入和输出就会有各种不同的组合,选取其中一种即可,后续可以分局综合的结果进行调整。

set_output_delay -max 0.3 -clock clk [get_ports Cin*]
set_output_delay -max 0.1 -clock clk [get_ports Cout]

(4) 工作条件约束

在这里插入图片描述

① 输入驱动强度

使用库里面的 bufbd1 来驱动除了 clk 和 Cin* 之外的所有输入端口:

set_driving_cell -lib_cell bufbd1 -library cb13fs120_tsmc_max \ 
				 [remove_from_collection [all_inputs] [get_ports "clk Cin*"]]

对于 Cin* 端口,指定了一个最大转换时间作为约束条件:

set_input_transition 0.12 [get_ports Cin*]

② 输出负载

set_load [expr 2 * {[load_of cb13fs120_tsmc_max/bufbd7/I]}] [get_ports out*]
set_load 0.025 [get_ports Cout*]

(5) 语法检查

最终得到的时序约束文件如下:

在这里插入图片描述
在这里插入图片描述

完成设计约束文件之后,可以进行语法检查,没有错误的情况下,显示如下:
在这里插入图片描述
如果出错,就会给出提示:
在这里插入图片描述

3. 逻辑综合

3.1 启动工具并检查信息

使用如下命令启动工具:

 dc_shell -topo | tee -i lab3.log

(输出在终端的内容都会被记录到文件中,退出后再次启动会清除文件中原来的内容,然后写入新的内容。使用 -a 选项是在原来文件内容后面追加新的内容。这个主要是 tee 命令的功能,和逻辑综合工具关系不大。)

检查设置的库文件和路径
在这里插入图片描述

3.2 综合

读入设计:
在这里插入图片描述

连接和查看设计:

在这里插入图片描述

后面就是读取约束文件,编译和保存一些输出文件等内容。

3.3 脚本文件

综合的过程可以写到一个脚本文件中如下:

在这里插入图片描述
这里需要说明的是,因为是在拓扑模式下启动的,涉及到物理信息的读取,编译命令只能使用 compile_ultra

lab中给出的另一个脚本示例,这里主要涉及的是及进行综合前的一些操纵。

在这里插入图片描述

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

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

相关文章

洗涤护理门店小程序搭建全攻略:数字化转型的起点

在现代社会中&#xff0c;人们越来越注重便捷和个性化的服务体验。而随着智能手机的普及&#xff0c;小程序成为了商家与用户之间沟通的重要桥梁。在这篇文章中&#xff0c;将介绍如何使用第三方小程序制作平台搭建一个个性化干洗店洗护小程序。 首先&#xff0c;我们需要注册并…

ORB-SLAM2报错集合(数据集测试系列1)

目录 错误1 错误2 错误3 错误4 错误5 错误6 错误7 错误8 TUM-RGBD测试 KITTI测试 EuRoC测试 写在前面~ ORB-SLAM2 github链接&#xff1a;GitHub - electech6/ORB_SLAM2_detailed_comments: Detailed comments for ORB-SLAM2 with trouble-shooting, key formula …

单个无人机三维路径规划问题及其建模

单个无人机三维路径规划问题及建模如下&#xff1a; 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120

Grafana Dashboard 备份方案

文章目录 Grafana Dashboard 备份方案引言工具简介支持的组件要求配置备份安装使用 pypi 安装grafana备份工具配置环境变量使用Grafana Backup Tool 进行备份恢复备份 Grafana Dashboard恢复 Grafana Dashboard结论Grafana Dashboard 备份方案 引言 每个使用 Grafana 的同学都…

vue离线缓存资源文件

本文章主要是解决大文件,实时请求资源浪费网络资源的问题 从而有效的将解决用户体验的问题 话不多说上才艺 ⬇️⬇️⬇️⬇️⬇️⬇️⬇️ 找到项目中的 index.html 文件,并在 html 标签中加入 manifest"manifest.appcache" 安装 appcache-manifest 包 npm ins…

深入浅出理解相机标定原理

重要说明&#xff1a;本文从网上资料整理而来&#xff0c;仅记录博主学习相关知识点的过程&#xff0c;侵删。 一、参考资料 微信公众号&#xff1a;计算机视觉life 专栏&#xff1a;#相机标定 Camera Calibration 张正友标定法-完整学习笔记-从原理到实战 二、相机标定相…

C语言刷题训练DAY.12

1.统计成绩 解题思路&#xff1a; 这里我们设置两个变量记录最大值和最小值&#xff0c;再用一个sum统计分数总和即可。 解题代码&#xff1a; #include<stdio.h> int main() {int n 0;scanf("%d", &n);double arr[100] { 0 };int i 0;//最高分double …

UVM Heartbeat机制

1. 前言 在硬件电路中&#xff0c;为了使系统在异常情况下能自动复位&#xff0c;一般都需要引入看门狗(Watchdog)。看门狗其实就是一个定时器电路。当看门狗启动后&#xff0c;计数器开始自动计数&#xff0c;经过一定时间&#xff0c;如果没有被清零&#xff0c;计数器溢出就…

谁为软件质量负责?

如果我们直接问自己以下问题——谁负责软件质量&#xff0c;我们首先想到的就是——当然是测试人员&#xff01;但这并不像看起来那么容易。 IT领域有几个特点&#xff0c;总是发生在软件测试的最后阶段&#xff0c;就在它发布之前。它们使我们不仅从软件的技术质量保证的角度…

学习JAVA打卡第四十一天

字符串与字符数组、字节数组 ⑴字符串与字符数组 String类的构造方法String&#xff08;char a[]&#xff09;和String&#xff08;char a[]&#xff09;,int offset,int length,分别用数组a中的全部字符和部分字符创建string对象。 String类也提供将string对象的字符序列存…

vray for Cinema 4D如何创建照片级真实室内效果?

在V-Ray for Cinema 4D中渲染 3D室内设计一开始可能会很困难&#xff0c;但您投入的努力总会得到回报。无论您的技术水平和创意眼光如何&#xff0c;在 V-Ray 中创建室内设计时都需要考虑很多事项。 在这篇博文中&#xff0c;我们将分享一些最佳实践&#xff0c;帮助您创建令人…

12-总结-从 0 开始搭建框架

项目结构: 一. 安装第三方库 # 下载源: https://pypi.tuna.tsinghua.edu.cn/simple/pip3 install flask2.3.2 pip3 install jinja23.1.2 pip install pymysql # 保持持久化pip install flask-script2.0.3 # 管理应用程序 pip install flask-sqlalchemy3.0.3 # 实现ORM映射…

高等数学之不定积分

由导函数推原函数就是不定积分 只是一个&#xff01; 记得常数C!!! 不定积分的几何含义

基于TechGrow实现Hexo引流微信公众号

首发博客地址 https://blog.zysicyj.top/ # 前言 Hexo 博客建议安装 hexo-readmore (opens new window) 插件&#xff0c;将 TechGrow (opens new window) 的免费微信公众号引流工具整合到博客中&#xff0c;用户扫码关注微信公众号后可以解锁全站文章&#xff0c;让微信公众号…

基于乌燕鸥算法优化的BP神经网络(预测应用) - 附代码

基于乌燕鸥算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于乌燕鸥算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.乌燕鸥优化BP神经网络2.1 BP神经网络参数设置2.2 乌燕鸥算法应用 4.测试结果&#xff1a;5.Matlab代…

数字的画笔:数据可视化的魅力与实用性

数据可视化是一种强大的工具&#xff0c;用于将复杂的数据和信息以图形化的方式呈现&#xff0c;以便人们更容易理解、分析和发现其中的模式和趋势。通过图表、图形和其他可视元素&#xff0c;数据可视化可以帮助我们将抽象的数字转化为有意义的视觉呈现&#xff0c;从而提升了…

QT6安装完成后,再安装低版本的MinGW或其他组件方式

首先进入点击安装的uinstall Qt 并不是真的卸载 通过下面几步 1&#xff0c;首先登录自己账户 2&#xff0c;然后进入欢迎中&#xff0c;点击“添加和移除组件” 3&#xff0c;然后检索自己需要的安装内容

MDTA模块(Restormer)

From a layer normalized tensor Y ∈ R H ^ W ^ C ^ \mathbf{Y} \in \mathbb{R}^{\hat{H} \times \hat{W} \times \hat{C}} Y∈RH^W^C^, our MDTA first generates query ( Q ) (\mathbf{Q}) (Q), key ( K ) (\mathbf{K}) (K) and value ( V ) (\mathbf{V}) (V) project…

前端基础踩坑记录

前言&#xff1a;在做vue项目时&#xff0c;有时代码没有报错&#xff0c;但运行时却各种问题&#xff0c;没有报错排查起来就很费劲&#xff0c;本人感悟&#xff1a;写前端&#xff0c;需要好的眼神&#xff01;&#xff01;&#xff01;谨以此博客记录下自己的踩坑点。 一、…

vue学习之hello world

依赖引入 <script src"https://unpkg.com/vue2.6.10/dist/vue.js"></script>Hello world 实现 <html><head><style></style></head><body><script src"https://unpkg.com/vue2.6.10/dist/vue.js">…