1、逻辑综合的概述

synthesis = translation + logic optimization + gate mapping .

DC工作流程主要分为这三步

Translation : 翻译,主要把描述RTL级的HDL语言,在约束下转换成DC内部的统一用门级描述的电路(Generic Boolean Gates)(DC自己的库表现),以GTECH或者没有映射的ddc形式展现。

Logic optimization :逻辑优化, 就是把统一用门级描述的电路进行优化,就是把路径调整一下,门给改一下等等。

Gate mapping :门级映射,把优化了的统一门级描述,DC用别的厂商的工艺库把电路给映射出来,得到一个.ddc文件。这个.ddc文件可以包含许多丰富的信息,比如映射的门电路信息与网表、.v格式的网表、延时信息(sdf)、工作约束(sdc)等信息。(.ddc不能用文本编辑器打开)。.ddc这个包含的网表文件是实际意义的网表文件,而.v这个形式的网表问价是用来做后仿真的文件。

延时信息的得出:线负载模型、拓扑结构模型(现在)。

2、DC的启动方式

启动DC的方式有三种:

·GUI:DC的图形化界面格式。用图形化界面跑一下DC。(大规模设计不可能用这种方式)。

启动方式是:$design_vision

我们可以通过 man design_vision或者design_vision  -help来查看DC的启动选项:

例如,可以使用$ design_vision  -topographical_mode启动design compiler,意思是:-topographical是启动DC的拓扑模式,-topo是简写。关于什么是拓扑模式,为什么要启动拓扑模式,后面会有相关的叙述。

此外,还有下面的启动方式:

·dc_shell: DC以命令行的格式启动:$dc_shell

我们可以通过 man dc_shell或者dc_shell  -help来查看DC的启动选项,不过我们可以发现,这些选项是一致的,是告诉我们如何启动DC,启动DC的时候可以加载哪些选项。

·Batch mode:批处理模式,也就是,前面那两种方式只是把DC启动起来,还没有真正地工作(即编译工程),前面两个方式需要通过source命令把脚本写进去以后,DC读取才真正工作。而这种批处理模式是,在启动的同时,告诉DC执行哪些脚本,例如:

$dc_shell -topo -f run.tcl | tee -i run.log

意思是:使用拓扑模式启动DC,启动的同时执行run.tcl脚本文件,并且把启动过程中显示在终端的信息记录到run.log中。|  tee  -i就是写进信息的管道命令,讲dc_shell -topo -f run.tcl 执行后显示的信息(输出结果),流入到run.log文件中。这样子是为了在DC启动失败的时候,通过查看启动信息,进而排除错误。

本教程这三种方式在后面都有流程介绍,本教程以命令行和批处理为主,其中dc_shell主要用来介绍DC的相关命令,此外命令行和批处理模式是现在设计的主要操作方式。

3、DC-Tcl语言的基本结构

下面介绍常见的tcl语言语法,这些语法在进行编写tcl脚本的时候比较常见。

Tcl的语法比较简单,依葫芦画瓢就可以知道写的是什么了。

我们在dc_shell的环境下,介绍tcl的一些简单语法(即启动DC,在dc_shell里面运行tcl文件):

  

通过编写example.tcl中的内容,来记录一下tcl的语法:

  ·设置变量

example.tcl的内容为:

意思是:设置name这个变量,这个变量的值为ICer;

设置num这个变量,这个值为 0;

echo是打印的意思,$表示引用,分别是打印name中的值,打印num中的值.

我们可以检查一下是否有语法错误,使用dcprocheck命令:

运行一下,打印出了name和num这两个变量的值:

  ·if-else语句:

与C语言、Verilog语言不一样,这里的条件是用大括号{}来进行包括的,然后要执行的内容也是通过{}来表示的。特别注意,{}的使用都有空格间隔开

检查没有错误,进行执行:

  ·switch 结构

puts也是显示/打印的命令,执行后的结果如下:

还可以添加默认的选项:

执行后,显示:

  ·while循环

执行的结果如下:

  ·for循环

运行的结果如下所示:

for循环的格式跟C语言一样,也有三个选项,初始条件,停止循环条件,变量递增选项。

Continue跟C语言一样,不执行本次循环。

  ·数组(列表)与数组(列表)的遍历

  首先,39行那里创建了一个名字为names的数组(列表),数组(列表)的内容有5项。

Foreach则是逐个遍历,查看数组的内容。首先把names这个列表的内容一次放进num_list这个变量里面,然后一次查看

附注:foreach_incollection对物集(collection)遍历。关于物集这个概念在后面会有说到,这里先提及一下,有一个初步印象。

执行结果如下:

  ·子程序的定义和调用:

调用要在dc_shell中调用:

  ·最后是文件的处理:文件的读写

写:

执行的结果如下所示:

Data.txt里面就有hello tcl

读:

注意gets的用法,执行后的结果如下:

Tcl的基本语法结构差不多就是这样了,Tcl的使用需要结合Tcl自带的一些命令,比如说自己的函数、错误处理、正则表达式等,此外还要结合DC的命令,总之就是具体问题具体分析。

Tcl与Design Compiler (二)——DC综合与Tcl语法结构概述的更多相关文章

  1. Tcl与Design Compiler (八)——DC的逻辑综合与优化

    本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 对进行时序路径.工作环 ...

  2. Tcl与Design Compiler (一)——前言

    已经学习DC的使用有一段时间了,在学习期间,参考了一些书,写了一些总结.我也不把总结藏着掖着了,记录在博客园里面,一方面是记录自己的学习记录,另一方面是分享给大家,希望大家能够得到帮助.参考的书籍有很 ...

  3. Tcl与Design Compiler (十二)——综合后处理

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 概述 前面也讲了一些综合后的需要进行的一些工作,这 ...

  4. Tcl与Design Compiler (五)——综合库(时序库)和DC的设计对象

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 前面一直说到综合库/工艺库这些东西,现在就来讲讲讲 ...

  5. Tcl与Design Compiler (十一)——其他的时序约束选项(二)

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 前面介绍的设计都不算很复杂,都是使用时钟的默认行为 ...

  6. Tcl与Design Compiler (七)——环境、设计规则和面积约束

    本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 本文的主要内容是讲解( ...

  7. Tcl与Design Compiler (十三)——Design Compliler中常用到的命令(示例)总结

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 本文将描述在Design Compliler中常用 ...

  8. DC综合与Tcl语法结构概述

    转载:https://www.cnblogs.com/IClearner/p/6617207.html 1.逻辑综合的概述 synthesis = translation + logic optimi ...

  9. Tcl与Design Compiler (六)——基本的时序路径约束

    本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 时序约束可以很复杂,这 ...

随机推荐

  1. asp.net 验证码技术

    网站验证码是一种很常用的技术.下面我介绍下技术上是如何实现的. 验证码是一张图片.我们需要在前台代码中写一段<img>,src指向一张页面(ValidateImage.aspx). < ...

  2. hashMap_使用

    转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: Map map = new HashM ...

  3. angular2使用官网npm install下载依赖失败的处理方法

    上一两个月在学习angular2,在下载依赖阶段看官网是直接自动下载的,[npm install] 就能把依赖全部弄下来.不过作为新手的我,是倒腾来倒腾去都倒不出来,因为老是报同一个错.官网也还有手动 ...

  4. maven 配置安装

    1.下载maven http://maven.apache.org/   2.windows安装maven 解压包后配置环境变量 PATH:%M2_HOME%\bin M2_HOME:D:\soft\ ...

  5. asp.net core mvc剖析:启动流程

    asp.net core mvc是微软开源的跨平台的mvc框架,首先它跟原有的MVC相比,最大的不同就是跨平台,然后又增加了一些非常实用的新功能,比如taghelper,viewcomponent,D ...

  6. centos 7安装es 及异常处理

    首先,我们从官网下载zip包:(官网:https://www.elastic.co/downloads/elasticsearch)   直接使用浏览器下载可能会很慢,我一般会copy下载链接,然后w ...

  7. MySQL索引创建、删除、查看

    主键索引   PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引.这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引. ALTER TABLE ...

  8. 【Java深入研究】2、JVM类加载机制

    一.先看看编写出的代码的执行过程: 二.研究类加载机制的意义 从上图可以看出,类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类 ...

  9. ZooKeeper的不同类型的Znodes

    在ZooKeeper中有3个不同类型的znodes:persistent, ephemeral, sequential Persistent Znodes(默认)在ZooKeeper中,这是默认的zn ...

  10. 表单界面的兼容PC手机端解决方案

    就当写一篇随笔吧~上星期还在做加盟模块(兼容微信端),这星期已经加班做快递扫码模块(react+node),所以我感觉只有弹药备足了才能稍微轻松些应对各种需求.实话说在同个部门的大佬面前差距确实大,如 ...