xiangzi23456的个人空间 https://blog.eetop.cn/xiangzi [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

利用C语言程序编辑GDSII文件

已有 5080 次阅读| 2009-8-28 22:02 |个人分类:其它

 

 

 

作者:nfmao    文章来源:本站原创    点击数:

本文虽说是介绍用C语言程序来编辑GDSII文件,其实用什么程序语言来写都是可以,只不过选择C语言,有利用大家交流和应用,而且无论你使用的是windows,还是其他操作系统都可以运行该程序。 

从这篇文章中,本人并不希望读者仅看到程序的本身,最终目的是希望大家能够初步了解到GDSII file的格式。 

首先,将如图所示的版图,通过工具输出名字m2t.DB GDSII格式的database。 

 
在unix系统用使用 

%od -x m2t.DB 

查看文件的十六进制格式,显示如下: 

0000000 0006 0002 0005 001c 0102 0068 0002 001b
0000020 000b 0015 001b 0068 0002 001b 000b 0026
0000040 0030 0010 0206 464c 4154 3034 4f46 2e44
0000060 4200 0014 0305 3e41 8937 4bc6 a7ef 3944
0000100 b82f a09b 5a51 001c 0502 0046 0001 0001
0000120 0008 0000 0000 0068 0002 0017 000f 001c
0000140 0008 0008 0606 6d32 7400 0004 0800 0006
0000160 0d02 0006 0006 0e02 0000 002c 1003 ffff
0000200 fdf8 ffff fdf8 0000 0208 ffff fdf8 0000
0000220 0208 0000 0208 ffff fdf8 0000 0208 ffff
0000240 fdf8 ffff fdf8 0004 1100 0004 0700 0004
0000260 0400 0000 0000 0000 0000 0000 0000 0000
0000300 0000 0000 0000 0000 0000 0000 0000 0000 

显示第一段表明字符的位置,可以忽略,其他将依次向大家解释。 

0006 0002 0005 

其中0006表示这段所用的字节数为6(0006h)个字节,0002表示一个代码HEADER,常见的如: 

0102:BGNLIB,0206:LIBNAME,0900:PATH,0D02:LAYER等共69种,0002中00是HEADER记录类型,02则表示 

这个记录的类型,此类型称为datatype共有6种: 

0:no data present; 

1:bit array; 

2:two-byte signed integer; 

3:four-byte signed integer; 

4:four-byte real; 

5:eight-byte real; 

6:ascii string 

最后两个字节0005表示文件格式的版本5(0005h) 

001c 0102 0068 0002 001b 000b 0015 001b 0068 0002 001b 000b 0026 0030 

001c表示本段字节数28(001c),0102为BGNLIB,datatype为02。0068-0030表示database最终访问 

时间,格式为年、月、日。注意年份要加上1900,如0068h=104,104+1900=2004以此计算时间为 

2004.2.27 11:21 27秒到2004.2.27 11:38 48秒。 

0010 0206 464c 4154 3034 4f46 2e44 4200 

本段字节数16(0010h),0206表示LIBNAME,datatype为06字符型。46h ASCII码为F,以此类推库的名称为 

FLAT04OF.DB 

0014 0305 3e41 8937 4bc6 a7ef 3944 b82f a09b 5a51 

本段字节数20(0014h),0305表示UNITS,datatype为5为八字节实数,3e41-5a51表示1E-3即.001 

001c 0502 0046 0001 0001 0008 0000 0000 0068 0002 0017 000f 001c 0008 

这段表示库的时间为1970.1.1 8:00 0--2004.2.23 15:28 8 

0008 0606 6d32 7400 

这段字节数8,0606为STRNAME,datatype为06字符型,表示structure name为m2t 

0004 0800 

本字段4字节,0800为BOUNDARY 

0006 0d02 0006 

本字段6字节,0d02为LAYER,layer number为6 

0006 0e02 0000 

本字段6字节,0e02为DATATYPE,datatype为0,即是drawing 

002c 1003 ffff fdf8 ffff fdf8 0000 0208 ffff fdf8 0000 

0208 0000 0208 ffff fdf8 0000 0208 ffff fdf8 ffff fdf8 

本字段44(2ch)字节,1003为XY即是坐标值。图形坐标值见上图 

ffff 表示为负数,0000 表示为正数; 

0208h=0520, 520/units=0.520 

fdf8 求补码即反码+1-->1111 1101 1111 1000取反-->0000 0010 0000 0111 + 1 

-->0000 0010 0000 1000 = 520 

0004 1100 

本字段4字节,1100为ENDEL 

0004 0700 

本字段4字节,0700为ENDSTR 

0004 0400 

本字段4字节,0400为ENDLIB 

  

在了解了GDSII 格式以后,用C 语言写就简单多了,因为只要利用文件操作函数 

就可以搞定了。 

下面是个范例,写入HEADER部份到gdsii 文件中 

#include <stdion.h> 

FILE *fp; 

WrHEADER()
{char strCode[6];
strCode[0]=0; strCode[1]=6;
strCode[2]=0; strCode[3]=2;
strCode[4]=0; strCode[5]=5; 

Wr2GDS(strCode,6);


Wr2GDS(wp,n)
int n;
char *wp;
{
fwrite(wp,1,n,fp);


main()
{fp=fopen("test.gds","wb");
WrHEADER();
fclose(fp);


写入到test.c,然后编译出来运行 

%cc -o test.exe test.c 

%test.exe 

这样就将HEARDER部分0006 0002 0005写入到test.gds文件中 

其他部分依此类推,就可以用c语言创造或编辑GDSII格式的文件了。 

当然在细节部分,还需要进行适当改正,以保证程序应付更多的情况。 
 
 
如有疑问,请与nfmao联系 
 
[参考文献] 
《stream format》--cadance openbook


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 3

    评论
  • 310

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-5 22:02 , Processed in 0.024433 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部