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


    https://www.cnblogs.com/yeungchie/

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

    • strmout (导出为 GDSII 格式)

      strmout -help
      复制代码
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      text
      Usage: Usage: strmout -library <Input Library> -strmFile <Output Stream File> [-strmVersion] <Stream Version Number> [-runDir] <Run Directory> [-topCell] <Toplevel Cells to Translate> [-view] <Toplevel Cell View Name> [-logFile] <Output Log File Name> [-summaryFile] <Output Summary File> [-techLib] <Technology Library> [-hierDepth] <Hierarchical Depth to Translate to> [-layerMap] <Quoted List of Layer Map Files> [-translateUnmappedLPP] <Allow undefined LPP to be translated by incrementally mapping LPP using layerMap file, SKILL hook poLayerMap, and automatic layer mapping> [-labelMap] <Input Label Map File> [-labelDepth] <Hierarchical Depth to Add Labels to> [-replaceBusBitChar] <Replace "<>" With "[]"> [-cellMap] <Input Cell Map File> [-fontMap] <Input Font Map File> [-propMap] <Input Property Map File> [-objectMap] <Quoted List of Object Mapping Files> [-viaMap] <Via Mapping File> [-viaCutArefThreshold] <Threshold Value For Creating AREF For Cut Geometries For Via> [-userSkillFile] <User Skill File> [-refLibList] <Name of The File Containing Refliblist > [-arrayInstToScalar] [-cellNamePrefix] <Cell Name Prefix> [-cellNameSuffix] <Cell Name Suffix> [-ignoreTopCellPrefixSuffix] <Ignores cellName Prefix and Suffix for topCell> [-case] <upper | lower | preserve > [-labelCase] <upper | lower | preserve > [-ignoreLines] [-noOutputTextDisplays] [-noOutputUnplacedInst] <Do not Output Unplaced Instances> [-convertDot] <node | polygon | ignore > [-convertPin] <geometry | text | geometryAndText | ignore > [-pinAttNum] <Stream Attribute Num (1-127) For Preserving Pins> [-pathToPolygon] <Convert Paths to Polygons> [-diagonalPathToPolygon] <Convert Paths with non-orthogonal segments to polygons> [-propValueOnly] <Output Property Values Only> [-rectToBox] [-respectGDSIINameLimit] [-gdsCellNameLength] <Truncate GDS Cell/STRUCT name length to specified value (>=10)> [-flattenPcells] [-flattenVias] [-outputViaShapesToViaPurp] <Output Shapes of Via to Via Purpose> [-doNotPreservePcellPins] [-snapToGrid] [-dbuPerUU] <DB Units per user units> [-reportPrecisionLoss] <Report Precision Loss Because of dbuPerUU Value> [-noObjectProp] [-ignorePcellEvalFail] [-mergePathSegsToPath] <Merging pathSegs into a single PATH> [-noConvertHalfWidthPath] <Do not Convert The Half Width Path to Boundary> [-checkPolygon] <Report Bad Polygons And Paths> [-backupGdsLogFiles] <Backup GDSII and LOG files, if they already exist> [-maxVertices] <Maximum Limit of Vertices (5-4000) Allowed in Stream File> [-strmTextNS] <NameSpace of The TEXT Records in The Stream File> [-templateFile] <Name of The File Containing Option Names And Values> [-cellListFile] <Name of the file containing cellList> [-outputDir] <output directory> [-noInfo] <Quoted List of Info Message Ids> [-noWarn] <Quoted List of Warning Message Ids> [-warnToErr] <Quoted List of warning Message Ids> [-infoToWarn] <Quoted List of Info Message Ids> [-donutNumSides] <Number of sides (4-131072) for the BOUNDARY of donut> [-ellipseNumSides] <Number of sides (4-131072) for the BOUNDAR of ellipse> [-wildCardInCellMap] <Wild Card in cell map file> [-ignoreMissingCells] <Ignores Missing cellViews During Translation and Continue Translation> [-ignoreMissingVias] <Ignores Missing standard/custom vias During Translation and Continue Translation> [-subMasterSeparator] <Separator to used for sub-master naming (default: "_CDNS_")> [-convertPcellPin] <geometry | text | geometryAndText | ignore (default: convertPin value)> [-guiHistory] <Use options of last successful translation from the XStream Out GUI> [-ignoreZeroWidthPathSeg] <Ignores zero width PathSeg during translation> [-ignoreObjectMapFromTech] <Ignores object map file from technology> [-ignoreCurrentTimestamp] <Ignores current timestamp> [-verbose] <Generate detailed information in the log and summary files>ose] <Generate detailed information in the log and summary files>
    • oasisout (导出为 OASIS 格式)

      oasisout -help
      复制代码
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      text
      Usage: oasisout -library <Input Library> -oasisFile <Output OASIS File> [-arrayInstToScalar] <Convert Arrays to Scalar Instances> [-backupOasisLogFiles] <Backup OASIS and LOG files, if they already exist> [-case] <upper | lower | preserve> [-cellMap] <Input cell map file> [-cellListFile] <Name of the file containing cellList> [-cellNamePrefix] <Cell name prefix> [-cellNameSuffix] <Cell name suffix> [-checkPolygon] <Report bad polygons and paths> [-circleToPolygon] <Convert Cricle/Ellipse object to Polygon> [-compress] <Enable CBLOCK compression> [-compressLevel] <Set the compression level for CBLOCK compression> [-convertDot] <polygon | circle | ignore> [-convertPcellPin] <geometry | text | geometryAndText | ignore (default: convertPin value)> [-convertPin] <geometry | text | geometryAndText | ignore> [-dbuPerUU] <DB Units per user units> [-diagonalPathToPolygon] <Convert Paths with non-orthogonal segments to Polygons> [-doNotPreservePcellPins] <Do not preserve the PCell Pins> [-donutNumSides] <Number of sides (4-131072) for the BOUNDARY of Donut> [-ellipseNumSides] <Number of sides (4-131072) for the BOUNDAR of Circle/Ellipse> [-flattenPcells] <Flatten the PCell Instances> [-flattenViaShapesToViaPurp] <Flatten Vias' Shapes to Via Purpose> [-flattenVias] <Flatten the Vias> [-GDSIICompatible] <Generate the OASIS file with GDSII specific limits> [-guiHistory] <Use options of last successful translation from the XOasis Out GUI> [-hierDepth] <Hierarchical depth to translate to> [-ignoreLines] <Ignore Line objects> [-ignoreMissingCells] <Ignore missing cellViews during translation and continue translation> [-ignoreMissingVias] <Ignore missing standard/custom vias during translation and continue translation> [-ignoreObjectMapFromTech] <Ignore object map file from technology> [-ignorePcellEvalFail] <Ignore the PCell evaluation failure> [-ignoreRoutes] <Ignore Route objects> [-ignoreZeroWidthPathSeg] <Ignore zero width PathSeg during translation> [-infoToWarn] <Quoted list of Info message Ids> [-labelMap] <Input label map file> [-labelDepth] <Hierarchical depth to add labels to> [-layerMap] <Quoted list of layer map files> [-logFile] <Output log file name> [-mergePathSegsToPath] <Merge pathSegs into a single PATH> [-noConvertHalfWidthPath] <Do not convert the half width Path to Boundary> [-noInfo] <Quoted list of info message Ids> [-noObjectProp] <Do not write the special object properties> [-noOutputTextDisplays] <Do not output Text Displays> [-noOutputUnplacedInst] <Do not output Unplaced Instances> [-noWarn] <Quoted list of warning message Ids> [-objectMap] <Quoted list of object mapping files> [-outputDir] <output directory> [-pathToPolygon] <Convert Path object to Polygon> [-preservePinAtt] <Preserve Pin connectivity information> [-preserveTextAtt] <Preserve Text attributes as properties> [-propMap] <Input property map file> [-refLibList] <Name of the file containing reference libraries list> [-replaceBusBitChar] <Replace "<>" with "[]"> [-runDir] <Run directory> [-snapToGrid] <Snap to grid> [-subMasterSeparator] <Separator to used for sub-master naming (default: "_CDNS_")> [-summaryFile] <Output summary file> [-techLib] <Technology library> [-templateFile] <Name of the file containing option names And values> [-textCase] <upper | lower | preserve> [-topCell] <Toplevel cells to translate> [-translateUnmappedLPP] <Allow undefined LPP to be translated by incrementally mapping LPP using layerMap file, SKILL hook poLayerMap, and automatic layer mapping> [-userSkillFile] <User skill file> [-verbose] <Generate detailed information in the log and summary files> [-viaMap] <Via mapping file> [-view] <Toplevel cell view name> [-warnToErr] <Quoted list of warning message Ids> [-wildCardInCellMap] <Wild card in cell map file>

    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

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

    点击查看完整代码
    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    bash
    #!/bin/bash #-------------------------- # Program : export_layout.sh # Language : Bash # Author : YEUNGCHIE # Version : 2022.04.05 #-------------------------- HelpInfo(){ cat <<EOF ------------------------------------------------- Export Layout ( GDSII or OASIS ) File ------------------------------------------------- Usage: export_layout -path cdslibDir -lib libName -cell cellName [ OPTIONS ] -path Path where the cds.lib file is located -lib Layout top cell libName -cell Layout top cell cellName -view Layout top cell viewName ( Default: layout ) -file Output file name ( Default: <cellName>.gds or <cellName>.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

    1. 导出版图 verify/ad01d0/layout 单元为 GDSII 文件。

      复制代码
      • 1
      bash
      export_layout -path ../project -lib verify -cell ad01d0
    2. 导出版图 verify/inv0d0/layout 单元为 OASIS 文件,指定输出文件名 inv.oasis,指定 log 文件为 inv.log

      复制代码
      • 1
      bash
      export_layout -path ../project -lib verify -cell inv0d0 -file inv.oasis -oasis -log inv.log

    相关拓展

  • 相关阅读:
    Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
    clone()方法使用时遇到的问题解决方法(JAVA)
    Spring Data Common 之 Repository
    Python 数据分析与挖掘(一)
    半个月时间把MySQL重新巩固了一遍,梳理了一篇几万字 “超硬核” 文章!
    深入理解Java消息中间件-每种解决方案的特点和适用场景
    自然语言处理(NLP)技术
    Spring Boot常见面试题
    Linux+qt:创建动态库so,以及如何使用(详细步骤)
    【华为机试真题 JAVA】分班问题-100
  • 原文地址:https://www.cnblogs.com/yeungchie/p/16101378.html