[ Shell ] 通过 Shell 脚本导出 GDSII/OASIS 文件

常见的集成电路版图数据库文件格式有 GDSII 和 OASIS,virtuoso 提供了下面两个工具,可以用来通过命令行导出版图数据。

  • strmout (导出为 GDSII 格式)strmout -help
Usage: Usage: strmout
    -library
    -strmFile
    [-strmVersion]
    [-runDir]
    [-topCell]
    [-view]
    [-logFile]
    [-summaryFile]
    [-techLib]
    [-hierDepth]
    [-layerMap]
    [-translateUnmappedLPP]
    [-labelMap]
    [-labelDepth]
    [-replaceBusBitChar]            " With "[]">
    [-cellMap]
    [-fontMap]
    [-propMap]
    [-objectMap]
    [-viaMap]
    [-viaCutArefThreshold]
    [-userSkillFile]
    [-refLibList]
    [-arrayInstToScalar]
    [-cellNamePrefix]
    [-cellNameSuffix]
    [-ignoreTopCellPrefixSuffix]
    [-case]
    [-labelCase]
    [-ignoreLines]
    [-noOutputTextDisplays]
    [-noOutputUnplacedInst]
    [-convertDot]
    [-convertPin]
    [-pinAttNum]
    [-pathToPolygon]
    [-diagonalPathToPolygon]
    [-propValueOnly]
    [-rectToBox]
    [-respectGDSIINameLimit]
    [-gdsCellNameLength]            =10)>
    [-flattenPcells]
    [-flattenVias]
    [-outputViaShapesToViaPurp]
    [-doNotPreservePcellPins]
    [-snapToGrid]
    [-dbuPerUU]
    [-reportPrecisionLoss]
    [-noObjectProp]
    [-ignorePcellEvalFail]
    [-mergePathSegsToPath]
    [-noConvertHalfWidthPath]
    [-checkPolygon]
    [-backupGdsLogFiles]
    [-maxVertices]
    [-strmTextNS]
    [-templateFile]
    [-cellListFile]
    [-outputDir]
    [-noInfo]
    [-noWarn]
    [-warnToErr]
    [-infoToWarn]
    [-donutNumSides]
    [-ellipseNumSides]
    [-wildCardInCellMap]
    [-ignoreMissingCells]
    [-ignoreMissingVias]
    [-subMasterSeparator]
    [-convertPcellPin]
    [-guiHistory]
    [-ignoreZeroWidthPathSeg]
    [-ignoreObjectMapFromTech]
    [-ignoreCurrentTimestamp]
    [-verbose]                      ose]
  • oasisout (导出为 OASIS 格式)oasisout -help
Usage: oasisout
    -library
    -oasisFile
    [-arrayInstToScalar]
    [-backupOasisLogFiles]
    [-case]
    [-cellMap]
    [-cellListFile]
    [-cellNamePrefix]
    [-cellNameSuffix]
    [-checkPolygon]
    [-circleToPolygon]
    [-compress]
    [-compressLevel]
    [-convertDot]
    [-convertPcellPin]
    [-convertPin]
    [-dbuPerUU]
    [-diagonalPathToPolygon]
    [-doNotPreservePcellPins]
    [-donutNumSides]
    [-ellipseNumSides]
    [-flattenPcells]
    [-flattenViaShapesToViaPurp]
    [-flattenVias]
    [-GDSIICompatible]
    [-guiHistory]
    [-hierDepth]
    [-ignoreLines]
    [-ignoreMissingCells]
    [-ignoreMissingVias]
    [-ignoreObjectMapFromTech]
    [-ignorePcellEvalFail]
    [-ignoreRoutes]
    [-ignoreZeroWidthPathSeg]
    [-infoToWarn]
    [-labelMap]
    [-labelDepth]
    [-layerMap]
    [-logFile]
    [-mergePathSegsToPath]
    [-noConvertHalfWidthPath]
    [-noInfo]
    [-noObjectProp]
    [-noOutputTextDisplays]
    [-noOutputUnplacedInst]
    [-noWarn]
    [-objectMap]
    [-outputDir]
    [-pathToPolygon]
    [-preservePinAtt]
    [-preserveTextAtt]
    [-propMap]
    [-refLibList]
    [-replaceBusBitChar]            " with "[]">
    [-runDir]
    [-snapToGrid]
    [-subMasterSeparator]
    [-summaryFile]
    [-techLib]
    [-templateFile]
    [-textCase]
    [-topCell]
    [-translateUnmappedLPP]
    [-userSkillFile]
    [-verbose]
    [-viaMap]
    [-view]
    [-warnToErr]
    [-wildCardInCellMap]

OASIS 的文件体积声称可以比 GDSII 小 10~50 倍,实际在我的使用中这个数字可以到 20+(以项目情况而定),当项目数据较大的情况下,文件小了确实可以加快运行速度、节省时间(估计是硬盘读写环节拖累了整体运行时间)。
oasisoutstrmout 几个常用的参数都是相同的,下面讲下如何使用。

另外,命令的运行路径必须在 virtuoso 启动路径(能在当前路径下找得到 cds.lib 文件)。

参数解释

首先有几个必要的运行条件和参数。

  • -library 这个参数用来指定导出的单元库 (library) 名。
  • -strmFile 当使用 strmout 时,这个参数用来指定导出的 GDSII 文件名称。
  • -oasisFile 当使用 oasisout 时,这个参数用来指定导出的 OASIS 文件名称。

其次还有几个是可选的参数,但是建议也指定一下。

  • -topCell 指定导出单元的顶层 Cell 名称,指定了顶层 Cell 就不会导出该顶层没有调用的单元,否则会导出当前库下的所有 Cell 。
  • -view 指定导出单元的顶层 View 名称,默认为 layout
  • -runDir 指定运行路径。

    注意这里的 运行路径 不同于前面提到的命令的运行路径。
    当定义了 -runDir-strmFile-oasisFile-logFile-summaryFile 等参数如果定义的是相对路径,则会以 -runDir 为参考。

  • -logFile 生成 log 文件,默认生成文件名为 strmOut.logoasisOut.log
  • -summaryFile 生成 summary 文件,默认不生成。
  • -layerMap 指定 layermap 文件,默认情况是调用 attach tech 中的 layermap,当对层次转换有特殊要求时可以通过这个参数来指定自定义的 layermap 。

编写脚本 export_layout

下面写个脚本优化一下这个运行方式。

点击查看完整代码

#!/bin/bash
#--------------------------
Program  : export_layout.sh
Language : Bash
Author   : YEUNGCHIE
Version  : 2022.04.05
#--------------------------
HelpInfo(){
    cat <.gds or .oasis )
    -log        Log file                    ( Default: export_layout.log )
    -sum        Summary file
    -layermap   Specified the layermap file
    -oasis      Specified the file format is OASIS, and GDSII if not specified
    -h, -help   Display this help

Examples:   export_layout\\
                -path       \$project/work/
                -lib        Xeon
                -cell       X999
                -oasis

Output:     OASIS file - X999.oasis
EOF
}

viewName='layout'
logFile='export_layout.log'

命令行参数分析
while [[ -n $1 ]]; do
    if [[ -n $opt ]]; then
        case $opt in
            lib_opt)    libName=$1  ;;
            cell_opt)   cellName=$1 ;;
            view_opt)   viewName=$1 ;;
            file_opt)   file=$1     ;;
            path_opt)   path=$1     ;;
            log_opt)    logFile=$1  ;;
            map_opt)
                mapCmd="-layerMap $1"
            ;;
            sum_opt)
                sumCmd="-summaryFile $1"
            ;;
        esac
        unset opt
    else
        case $1 in
            -lib)       opt='lib_opt'   ;;
            -cell)      opt='cell_opt'  ;;
            -view)      opt='view_opt'  ;;
            -file)      opt='file_opt'  ;;
            -path)      opt='path_opt'  ;;
            -log)       opt='log_opt'   ;;
            -sum)       opt='sum_opt'   ;;
            -layermap)  opt='map_opt'   ;;
            -oasis)     OASIS=1         ;;
            -h|-help)
                HelpDoc >&2
                exit 1
            ;;
            *)
                echo "Invalid option - '$1'" >&2
                echo "Try -h or -help for more infomation." >&2
                exit 1
            ;;
        esac
    fi
    shift
done

记录当前路径
runDir=$(pwd -P)

参数检查
if [[ ! ( $path && $libName && $cellName ) ]]; then
    # 缺少必要参数时,打印 help 并退出
    HelpInfo >&2
    exit 1
elif [[ -d $path ]]; then
    cd $path
else
    # 找不到目标路径文件,打印报错
    echo "No such directory - $path" >&2
    echo "Try -h or -help for more infomation." >&2
    exit 1
fi

## 不同的文件格式
if [[ $OASIS ]]; then
    if [[ ! $file ]]; then file="${cellName}.oasis" ; fi
    command="oasisout -oasisFile $file"
else
    if [[ ! $file ]]; then file="${cellName}.gds" ; fi
    command="strmout -strmFile $file"
fi

command="$command -runDir $runDir -library $libName -topCell $cellName -view $viewName -logFile $logFile $sumCmd $mapCmd"

运行
exec $command

优化后的脚本有三个必要的参数需要指定

  • -path
    指定 cds.lib 文件所在的文件夹路径
  • -lib
    指定导出单元的顶层 Library 名称
  • -cell
    指定导出单元的顶层 Cell 名称

通过 -path 参数来定义 virtuoso 启动路径,实现在任意路径下可运行,生成的文件都在当前路径下。

例:cdslib 文件所在路径为 ../project

相关拓展

Original: https://www.cnblogs.com/yeungchie/p/16101378.html
Author: YEUNGCHIE
Title: [ Shell ] 通过 Shell 脚本导出 GDSII/OASIS 文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619463/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • fortio

    Fortio (Φορτίο) 最初是 Istio 的负载测试工具,后来(2018 年)毕业成为自己的项目。fortio这个名字来自希腊语φορτίο,意思是负荷/负担。https…

    Python 2023年6月6日
    073
  • python while循环详解

    1.while循环的基础语法 i = 0 while i < 100: print("小美,我喜欢你") i += 1 while的条件需得到布尔类型,T…

    Python 2023年8月1日
    073
  • SpringBoot 06: springboot中使用redis

    配置SpringBoot 创建SpringBoot项目时勾选Redis起步依赖 org.springframework.boot spring-boot-starter-data-…

    Python 2023年10月15日
    039
  • 快速替换dll命名空间

    时15年9月18日,闲来无事,更一博。 背景 三天前,Y公司为避免法律诉讼,需要将代码(包括dll)中有关老东家的命名空间全部改掉。现在我就将快速替换命名空间的方法一步步告诉大家,…

    Python 2023年6月12日
    071
  • python中unstack_python – AssertionError:当unstack()数据帧时,blk ref_locs中的间隙

    我试图在Pandas数据帧中取消堆栈()数据,但我不断收到此错误,我不知道为什么.到目前为止,我的代码是我的数据样本.我尝试修复它的方法是删除所有的行,其中voteId不是数字,这…

    Python 2023年8月20日
    061
  • 【21天python打卡】第16天 python经典案例(2)

    大家好,今天是21天python打卡第16天,今天我们继续分享python的经典案例。我们将了解到,什么是eval函数,什么是函数封装,以及while循环语句。我们在编程中学习,在…

    Python 2023年8月29日
    055
  • matplotlib可视化系列之【颜色】

    颜色和排版一样,看似简单,其实非常复杂,往大了说,涉及到艺术和品味,不像数学公式,物理定理那样,是非分明。 但是,对 matplotlib 中的颜色有些基本的了解,可以让绘出的图形…

    Python 2023年11月2日
    049
  • 【Python】获取变量占用的内存大小

    前言 记录一下,查看python运行当前范围内的变量、方法和定义的类型 会占用多少memory 准备工作 借助内置模块 sys的 getsizeof即可。 看到该函数的介绍,返回字…

    Python 2023年8月2日
    078
  • 比 JSON.stringify 快两倍的fast-json-stringify

    前言 相信大家对 JSON.stringify并不陌生,通常在很多场景下都会用到这个API,最常见的就是HTTP请求中的数据传输, 因为HTTP 协议是一个文本协议,传输的格式都是…

    Python 2023年10月13日
    056
  • 毕业五年,从月薪3000到年薪百万,我掌握了哪些核心技能?(建议收藏)

    大家好,我是冰河~~ 很多读者私信问我,自己时间不短了,随着工作年限的不断增长,感觉自己的技术水平与自己的工作年限严重不符。想跳槽出去换个新环境吧,又感觉自己的能力达不到心仪公司的…

    Python 2023年9月16日
    030
  • Python处理Excel表格——了解Groupby与merge的用法

    作为数据分析师日常工作中会遇到各种各样的数据处理需求, 因为数据量巨大的原因无法手动处理表格,正好会应用Python工具,今天就借此机会来展示Pandas中Groupby与Merg…

    Python 2023年8月16日
    062
  • Python-Flask实战遇到的问题

    request.form获取的数据类型是ImmutableMultiDict类型的 request.form输出的数据类型是ImmutableMultiDict,只需在后边使用to…

    Python 2023年8月12日
    042
  • Django在Windows环境下安装

    1、下载Django(前提,本机已安装Python) Django下载地址: Download Django | Django (djangoproject.com)https:/…

    Python 2023年8月4日
    069
  • python时间序列图_python中用matlibplot画时间序列图的案例

    python中用matlibplot画时间序列图的案例 发布时间:2020-11-10 09:26:59 来源:亿速云 阅读:93 作者:小新 这篇文章给大家分享的是有关pytho…

    Python 2023年8月8日
    064
  • pandas的基本函数

    实验目的熟练掌握pandas基本函数使用方法 实验原理 列转行方法stack函数:pandas.DataFrame.stack(self, level=-1, dropna=Tru…

    Python 2023年8月7日
    045
  • Python词频统计

    作为我的python入门的一个小实验之一,我早在六月份的时候就进行了md笔记的编写,没有发布在博客上,这次,它将作为我在博客的第一篇。 我们知道,生活中的一些文本是嘈杂的,它可能含…

    Python 2023年8月2日
    055
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球