가끔 TOP 작업을 하다 보면 PnR block은 bus를 "[ ]"를 사용하고 schematic에서는 "< >"를 사용해서 verification 할 때 문제가 될 때가 있습니다. netlist에서 vi로 바꿔주는 경우도 있고 다들 각각의 방법으로 해결하실 텐데 앞서 배운 정규표현식을 통해 간단히 변경 가능합니다.
AAA <3:0>의 4개의 label을 그려놓았습니다.
operator를 설명하면서 같이 언급한 deGetCellView와 정규표현식 그리고 foreach 문을 이용해 AAA <3:0> -> AAA [3:0]으로 바꿔봅시다.
foreach(shape deGetCellView()->shapes
label = shape->theLabel
rexCompile("<")
label = rexReplace(label "[" 0)
rexCompile(">")
label = rexReplace(label "]" 0)
shape->theLabel = label
)
(db:0x11fe654b db:0x11fe654d db:0x11fe654e db:0x11fe654f)
설명을 하자면 foreach 문에서 deGetCellView를 통해 현재 cellView를 가져오고 그 cellView의 shapes에 들어있는 변수들을 각각 shape라고 하여 안쪽에 있는 명령들을 실행하는 것입니다. theLabel (label text 가 들어있는 값)을 label 이란 변수에 넣고 정규표현식을 통해 "<"는 "["로 ">"는 "]"로 변경하여 원래 있던 theLabel에 다시 입력하게 됩니다.
반대로 "AAA [3:0]"을 "AAA <3:0>"으로 바꾸기 위한 코드를 바꿔보죠.
foreach(shape deGetCellView()->shapes
label = shape->theLabel
rexCompile("\\[")
label = rexReplace(label "<" 0)
rexCompile("\\]")
label = rexReplace(label ">" 0)
shape->theLabel = label
)
앞의 코드와 다를 게 없지만 "["와 "]" 경우에 정규표현식에서 사용되기 때문에 문자 "["를 받기 위해선 "\\["와 같이 사용해야 합니다. 지금에야 버스로 꼴랑 label 4개지만 TOP level에서 수백 개의 label을 q 눌러서 바꾸는 건.. 하지 말아 주세요~ 일찍 퇴근해야지요.
너무 예제만 하는 것 같아서 배웠던 걸로 함수 한 줄 짜 봤습니다. 이미 필요한 곳을 찾아서 코드 짜실 분들도 있지만 잘 이해가 안 되시면 앞서 올렸던 글들 천천히 보시면 이해할 수 있을 겁니다. 이렇게 짜 놓으면 매번 치기 귀찮으니 Bindkey에 등록하실 분도 있고 procedure 만드시는 분들도 있겠지요! 다음에는 procedure에 관해서 다뤄보겠습니다.
'Programming 언어 > Skill' 카테고리의 다른 글
[SKILL 강좌] geGetSelSet() 함수와 foreach 문 (0) | 2017.02.05 |
---|---|
[SKILL 강좌] procedure (@rest @optional @key) (0) | 2017.02.02 |
[SKILL 강좌] 정규표현식 (rexCompile, rexMatchp, rexReplace..) (0) | 2017.02.01 |
[SKILL 강좌] list 함수들 (cons, append, car, cdr, nth, xCoord, yCoord...) (0) | 2017.01.31 |
[SKILL 강좌] operator (-> , ~>) (0) | 2017.01.30 |