GDSII -> DXF 파일 변환 시 Arcs(원호/곡선)의 확인 및 변환

 

GDSII 파일 데이터에는 아크(arch)라는 엔티티가 존재하지 않습니다. 대개의 IC 관련 부문에서는 그리 중요한 사항이 아니지만 IC 패키지나 RF/microwave 회로와 같은 영역에서는 심각한 문제가 될 수 있어서 아크란 개념이 없기 때문에 자연스러운 곡선을 정의할 때 어쩔 수 없이 많은 숫자의 세그먼트(segment)로 대신하게 됩니다. 그 예로서 AutoCAD의 DXF 파일 형식에서는 circle/arcs를 지원하고 있지만 문제는 대부분의 데이터 변환 프로그램에서는 GDSII에서 DXF로 변환 할 때 다시 아크를 복원시킬 수 방법을 제공해주지 못합니다.

 
circularize.gif

GDSII에서 DXF로 변환 할 때 변환 프로그램이 "arc"를 식별하여 DXF 데이터에도 art로 변환해 줄 수 있다면 가장 유용한 결과가 됩니다. 결과적으로 DXF에서의 레이아웃 자체가 아주 매끄럽고 설계 데이터 될 뿐 아니라 파일 크기가 크게 줄어 들게 됩니다.


Circularize 옵션
ASM 3500 (2013 년 9 월 기준)은 이제 GDSII에서 DXF로 변환 할 때 Circularize라는 옵션 기능이 포함되어 공급됩니다. 사용자는 이 옵션 사용 시 항상 chord error 파라미터의 값을 0이 아닌 값을 함께 설정해 주어야 합니다.


동작 원리
Circularize 옵션을 선택하게 되면 바운드리(bounary) 상에 연속된 3 개의 점을 선택하고 그 중심과 반지름을 찾습니다. 그런 다음 현재 바운드리에서 연속적인 점을 반복적으로 추가하여 하나의 중심과 반지름이 설정된 chord error 값 공차 내에서 동일한 점과 모서리 세트로 귀속되는지 확인합니다. 기준을 충족하지 못하는 각 측면의 포인트가 발견 될 때까지 컬렉션에 포인트를 계속 추가합니다. 이러한 좌표는 아크의 양쪽 끝단 점을 정의해 줍니다.


이 옵션은 사용자가 너비를 갖는 경로를 유지하도록 선택했는지 (lwidening) 또는 너비를 갖는 경로를 윤곽선(outlines)으로 변환되도록 선택했는지에 관계없이 원활하게 동작합니다.


아크가 완전한 360 ° 바운드리를 형성하게 되면 이때는 자동으로 폴리라인 대신 써클로 변환됩니다.

 

 

예제 한가지와 두가지 결과물을 아래의 링크에서 다운로드 가능합니다.

gds_output.gif
Description

많은 아크가 포함된 GDSII 샘플파일(MMIC)

​표준 DXF

Circularized DXF Output

(Chord error = 0.35 um)

예제 파일
파일 크기

366 KB

1012 KB

319 KB

Configuration 창의 설정

 

윈도 환경에서 Gds2dxf 를 실행여 설정 메뉴에서  아래의 이미지 상의 설정 예와 같이 Circularize 옵션을 제어할 수 있습니다. Chord Error 값은 GDSII의 단위 값입니다.

configuration.jpg

Linux / Solaris 설정

Linux/Solaris 환경에서 Gds2dxf를 실행하는 경우에는 configuraton파일인 GDS.CFG에서 Circularize 옵션을 제어해야 합니다. 별도의 GUI 형식을 제공하지 않습니다. 

 

CIRCULARIZE

YES

 

CHORD_ERROR

0.1

Scale Multiplier 및 Grid 설정 (단위가 서로 다를 경우)

 

DXF 파일의 단위는 인치(INCH)인데 변환할 GDSII

파일은 UM인 경우 아주 큰 값의 Grid 값(1,000,000)이 필요하며 Scale Multiplier는 25,400이 되어야 합니다. 그렇지 않다면 변환 결과가 정확하지 않을 수 있습니다.

inch_um.JPG
 

DXF 파일의 단위는 MM이고 GDSII의 단위는 UM이라면 Grid의 값은 100,000, Scale Multiplier의 값은 1,000으로 설정 합니다.

mm_um.JPG

Line과 Arc들을 연결하여 Closed 바운드리 생성하기

GDSII의 기본적인 지오메트리 단위는 바운드리(boundary) 입니다. 바운드리 구조는 최소 3면, 대략 최대 8196면으로 이루어진 닫혀진 형태의 폴리곤입니다. 최대 값은 기록이 가능한 한계 값에 따르며 원본 GDSII의 규격은 단지 바운드리 당 200개의 vertice만을 허용합니다.  이 한계 값은 최근의 레이아웃 설계 툴에서는 오래동안

고려되지 않아 왔습니다. 

AutoCAD 설계자와 그 외 기구 캐드 설계자들은 자유롭게 라인과 아크를 그리고 있습니다. 이것들은 독립적인

지오메트리로서 양쪽 끝단이 서로 만나고 있는 것 처럼 보이더라도 실상 안 쪽 또는 바깥쪽으로라도 닫혀진

영역이 되도록 서로 "그룹"화가 되어야 하지만 그렇지가 않습니다. 그러므로 주어진 레이어 상의 모든 라인과

아크를 모아 서로의 끝단을 연결해 주어 GDSII에서 바운드리로 결과를 만들어 주는 기능은 아주 유용하다고

할 수 있습니다. 

 
line_arc_linker.gif

반호(Radius) 연결하기

많은 설계자들은 "스냅(snapping)" 기능과 같은 방법을 사용하여 라인과 아크의 끝단이 서로 맞닿아 있는지 확인하지 않습니다. 종종 양쪽 끝단 사이에 아주 작은 갭(경우에 따라서는 거의 보이지 않을 정도의 갭)이 존재하는 

경우가 있습니다. 그래서 링커(linker)에 반호검색(a search radius) 설정을 선택해 주면 연결이 불완전한 라인과 호의 끝단을 연결시켜 줍니다.

line_not_connected.gif

에러 리포트 (Error Reporting)

연결 알고리즘은 말 그대로 기능으로 동작합니다.  많은 캐드 파일들은 제대로 설계가 이루어지지 않아 사용자의 의도를 이해하기 어려우며 모든 라인과 아크로 부터 바운드리 형성이 불가능하게 됩니다. 이런 경우 GDSII 결과물은 2개의 레이어로 분리가 되는데 - 한개 레이어에는 모든 가능한 경우의 바운드리가 포함되며 다른 하나는 그 외 바운드리 형성이 불가능한 남겨진 라인들과 아크들이 모두 포함이 됩니다. 

이른바 Examining the so called "error layer"의 확인을 통해 설계자에게 라인 아래 라인 또는 분실된 라인과 같은 문제들이 성공적인 바운드리 변환을 어떤 위치에서 방해하고 있는지 확인할 수 있는 좋은 단서를 제공합니다. 이러한 문제들은 스크린 상에서 육안으로 확인이 불가합니다.

Video

Linking 기능이 어떻게 적용되는지 보여주는 비디오 입니다. 라인과 아크로 이루어진 리드프레임을 닫혀진 바운드리로 변환된 GDSII 파일을 생성합니다.

Movie_asm3500_linking_lines_arcs.JPG
deembed_drop_shadow.gif

De-embedding 옵션
 
Polygon De-Embedding 폴리곤들로 이루어진 레이어를 선택하여 어떤 폴리곤 안에 어떤 폴리곤이 포함되는지의 관계를 확인하여 거버 파일로 출도하는 기능입니다. 각 바운드리 관계로 인한 상호 극성의 변화를 분류하여 거버로 출도합니다. 

nested_polygon.png

이런 방식으로 좀더 쉽게 이해할 수 있습니다: 다른 폴리곤에 의해 둘러 쌓이지 않은 상태의 임의 폴리곤이 있다면 이 폴리곤은 0 레벨로 설정이 됩니다. 다른 한개의 폴리곤(parent)으로 완전히 둘러 쌓여 있다면 이 폴리곤의 레벨은 1이 되며 이 parent 폴리곤이 또 다른 폴리곤에 둘러 싸여 있다면 이때는 레벨 2와 같은 식으로 진행이 됩니다. 

polygon_levels.png

Fig 2: 하나의 폴리곤 안에 폴리곤은 어느 정도의 깊이인지 알려주는 레벨이 부여 됩니다.

0, 2, 4, 6, 8,...과 같이 짝수 번호를 같는 모든 폴리곤들은 "dark" (어두움) 또는 "filled" (채음)로 표현되고 1, 3, 5, 7 등의 홀수 번호인 경우는 "clear" (투명) 또는 "empty" (비움)이 됩니다. 
 

또한 어떠한 폴리곤도 자신에 걸쳐 지나거나 다른 폴리곤에 닿아있지 않아야 할 필요가 있으며 parent에 의해 완전히 둘러 쌓여 있어야 합니다. 임의의 폴리곤이 서로 닿거나 겹쳐 있지 않으면 우선 임베딩 레벨을 계산하기 전에 유니온 작업을 수행합니다.

unionize.png

Fig.3: 디임베딩 레벨을 결정하기 전에 먼저 폴리곤 간의 접촉 또는 겹침을 고려하여야 합니다.

마스킹 사업자들에게는 이미 익숙한 문제점으로 되어 있습니다. IC 레이아웃 설계 툴들은 AutoCAD, Solidworks 또는 ProEngineer와 같은 기구설계 툴에서만 가능한 nested 폴리곤을 생성하거나 설계 하지 못합니다. 드물게 아주 복잡한 IC 패키지 설계 툴이나 MEMs 또는 RF/Microwave 회로 툴에는 가능한 경우도 있을 수 있습니다. 

De-Embedding Function

ASM 500의 de-embedding 기능은 이러한 도면을 자동으로 분류합니다. 명확한 3가지 단계가 있습니다.

스텝 1 - Union

분류 전에 프로그램은 맨 먼저 서로 닿아 있거나 겹쳐진 모든 폴리곤들을 결합(union)합니다. 폴리곤 겹침(overlap) 때문에 발생될 수 있는 문제를 방지하려면 분류 전에 이러한 선결 작업이 필요합니다. 

fig4.png

Figure 4: 분류 전에 겹쳐저 있거나 닿아있는 폴리곤들을 서로 결합시켜야 합니다.

스텝 2 - Sorting (분류)

de-embeddding 루틴에는 각각의 폴리곤 레벨 값을 부여하는 작업이 있습니다. Parent 폴리곤으로 둘러 싸여 있다면 0, 또 다른 parent가 있다면 1, 또 다른 parent가 있다면 2 와 같이 진행이 됩니다. 폴리곤 수가 큰 경우에는 대단히 복잡한 작업체 해당합니다. 

fig5.png

Fig 5: 폴리곤은 임베딩 레벨로 분류가 됩니다.

스텝 3 - Boolean

GDSII 데이터에는 단지 "dark" 폴리곤만 존재하기 때문에 boolean 작업을 해야 합니다. 레벨 1에 해당하는 모든 폴리곤은 레벨 0에서 부터 차감합니다. 레벨 3 폴리곤은 레벨 2로부터 차감하며 이런 방식으로 계속 진행됩니다. boolean을 통해 re-entrant 폴리곤(with cutlines)이나 슬라이스를 만들어 냅니다. Slice 옵션은 re-entrant기능이 안되는 일부 CAD 툴에 가용합니다.

fig6.png

Fig 6: Boolean 작업이 끝나면 그 결과로 만들어진 마스킹은 dark 폴리곤들로만 구성이 됩니다.  2가지 옵션이 가능합니다 - cut-lines or sliced.