Category Archives: verification

Related on SoC & IP verification method.

DVCON US 2020 virtual conference

DVCON US 2020 virtual로 개최된지 1년정도되어 대부분의 video가 open되었습니다.
Schedule에서 각 presentation을 볼 수 있으니, 궁금하신 분들은 확인해보시면 되겠습니다

https://2020.dvcon-virtual.org/
https://2020.dvcon-virtual.org/schedule/full?date=2020-03-02

DVCON에서 검증 관련해서 신박한 아이디어를 얻을 수도 있으니, UVM을 굳이 사용하지 않으시더라도(요즘 UVM이 워낙 주류로 DVCON에서 다뤄지다보니, 가끔 UVM을 안쓰면 DVCON에서 볼게 없다고 하시는 분들이 있어서..) 얻으실 것이 있을 것으로 봅니다.

곁가지로.. Synopsys 툴을 사용하신다면.. Synopsys Verification Day 2020 행사도 올라와 있습니다. 다만, 이쪽은 무게중심이 formal / static 쪽인 것 같습니다. (음.. formal과 Static이 어떻게 다른지도 명확하지는 않네요. 예전에는 static verification이라고 했다가 한번은 모두 formal이라고 – 혹은 그쪽으로 넘어갈것이다.- 한 것 같은데.. 이젠 CDC/RDC와 같은 structural checking은 static으로 부르기로(보통 spyglass쪽) 한게 아닌가 싶네요.(뇌피셜입니다.)

여하튼 COVID-19 이후로 많은 세미나/conference들이 online으로 진행되면서 다양하게 접하게 됩니다. 기회가 늘어난다는 점에서는 좋다고 생각됩니다만, 실제 virtual conference에 시차 관계로 live로 들어가는 경우가 별로 없다보니 바로 물어보거나, 커피마시면서 아는 사람들끼리 내용에 대해서 같이 이야기하는 것을 할 수 없었는 것이나 전반적으로 집중도가 떨어진다는 점은 나쁘기도 합니다.

저희 회사도 재택을 진행하고 있는데(완전 재택은 아니지만..), 빨리 이 시국이 지나갔으면 합니다.

Parallelized Logic Simulation

얼마전부터 parallel simulation이 큰 이슈가 되었습니다. 몇몇 기사에서는 3세대 simulation 기법이라고 이야기하더군요.

Verilog-XL 처럼 interpreter 형태를 1세대로, 2 세대를 finesim, VCS, NCVerilog 처럼 compiled 형태를 2세대로, 그리고, 다수의 processor를 동시에 쓰는 형태를 3세대로 이야기하는 거죠.

그간 simulation에서 multicore를 사용하는 건 별로 없었죠.  정확히는 wave dump나 assertion/coverage check 같은 걸 병렬로 하는 건 있었지만, simulation core 자체를 multicore로 하는게 별로 없었던 거죠.

제 기억에 남는 건 DAC13의 must see list에 있었던 rocketsim이 처음이었던 것 같습니다. GPU를 사용해서 VCS와 같이 사용했을때 gate level simualtion을 대략 23배 빠르게 해준다는 이야기때문이었죠.

그러다가 조금 조용해졌었는데, Best EDA Tool 2016 #3에 뽑혔을때 조금 더 많은 이야기를 접할 수 있었고, 작년 DVCON2017에서는 Cadence의 Xcelium(Rocketsim을 인수한 다음 이름을 바꾼 거죠.)과 Synopsys의 VCS FGP(위 link의 Cheetah VCS가 이름을 바꾼 겁니다.)가 본격적으로 마케팅하는 것을 볼 수 있었습니다. 이전에 DVCON2017에 대해서 적은 글에도 간략하게 적었습니다만, 두 툴간에 신경전(서로 은근히 까는?)도 있었고요.

Xcelium의 경우 GPU기반에서 출발해서 Multi-core 형태로 발전한 상태였고, 배경에는 simulation의 경우 단순한 연산보다 복잡한 연산이 많아서 GPU보다 processor core를 병렬적으로 사용하는게 좋더라.. 는 담당 엔지니어의 설명이 있었습니다.

사실 VCS FGP에 대해서는 비교적 잘 모르던 상태에서 들었는데, VCS 사용자의 경우 “무료”로 사용할 수 있을 것이고 곧 사용할 수 있을 것이다. 라는 부분이 흥미를 끌었죠. 내부적으로 VCS만 사용하고 있어서 말입니다.

다만, 두 툴 모두 RTL sim 보다는 Gate level sim에서 성능 향상이 크며, RTL sim의 경우는 설계에 따라 큰 차이가 있다… 를 깔고 들어갔고, Xcelium의 경우 3~4배까지는 된다고 이야기했던 반면, 당시 VCS FGP는 설계에 따라 2배 정도는 된다는 이야기를 해서 아주 큰 기대는 하지 않고 있었습니다. 보통 이렇게 이야기하면 생각보다 훨씬 안좋은 경우가 많으니까요.

결론적으로 말하자면, Parallel Simulation 쓰라는 이야기를 하고 싶습니다. 설계에 따라 다를테니 뭐가 좋다고 이야기하기 쉽지 않겠지만, core를 3~4개 정도를 사용하는 수준은 분명히 좋아집니다.

제가 테스트해본 설계에서는 main processor 이외에 3개 정도 core를 더 쓰면 대략 2배 정도 빨라지는 결과를 얻었는데, 4개 정도를 넘어가면 core를 더 사용한다고 더 좋아지지는 않았습니다. 아마도 설계에서 얻을 수 있는 병렬성이 이 정도겠죠.

곁다리로, 요즘에 새로운 프로세서들을 사용할 기회가 있어서 같이 테스트 했는데요. 요건 뭐에 걸릴일은 없을테니..

제가 기존에 쓰던 I7-3770K에서의 simulation  time을 100%라고 했을때, 상대 수행 시간입니다. (아래는 parallel simulation이 아닙니다.) 보시면, 적어도 VCS에 있어서는 intel의 8세대 CPU들이 훨씬 빠릅니다. 같은 세대인 Ryzen Threadripper 1950x와 비교해보면 말이죠. (물론, Threadripper의 경우 multicore에 힘을 실은 프로세서죠.). 사실 parallel로 비교해도 16 core짜리 threadripper보다 6core짜리 i7-8700K가 더빠릅니다. 🙂

rel. perf.
i7-3770K 100%
Ryzen 1950X 85%
i5-8400 68%
i7-8700K 52%

Zen+ Archtiecture는 이미 설계가 끝나서 출시 예정이고, Zen2 architecture 기반의 CPU들이 올해 나온다니, 그때는 single thread performance가 얼마나 비교가 될지 궁금하긴 하네요. (사실 meltdown bug 때문에 intel cpu performance가 떨어지긴 하겠습니다만,  그래도 위의 격차를 채우긴 쉽지 않을 것입니다. ) 잡설입니다만, 제 생각에 TLB에 PCIDs를 적용하고 있는 최신 processor들의 경우 약간의 트릭으로 이 버그를 피해나갈 수 있지 않을까 싶은 생각이 드는데요..  프로그램 컴파일을 다시 요구할 수 있는 embedded라면 compiler workaround로 피할 수 있을 것 같은데(예전에 요런 짓을 많이 해봐서..), PC/workstation용으로는 이게 불가능하니 대신 뭔가 해야겠죠? 안그래도 CES에서 비슷한 이야기가 나온 걸로 봐서는 뭐가 있겠죠.

원래 내용으로 돌아와서, simulation이 목적이라면 아직은 intel CPU를 사용하시라는 점. 할 수 있으면 parallel simulation을 사용하시라는 것. 이 두 가지만 기억하시면 되겠습니다. 🙂

Getting Started with UVM

오랜만에 책 소개입니다.

https://www.amazon.com/Getting-Started-UVM-Beginners-Guide/dp/0615819974

지난 연휴때 읽어볼 요량으로 샀는데, 이곳 저곳 다니다가 이번 연휴 때 읽게 되었습니다. 특이하게 스타벅스에서 읽었네요. (음.. 제 생활 패턴으로 봤을 때 안 특이한건가.. 싶기도 하네요..)

이 책은 사진을 보시면 아시겠지만 엄청나게 얇습니다. 솔직하게 이야기하면, 받고나서 좀 아까웠습니다. (뭐 두꺼운게 좋은 책이란 말은 아닙니다만, 이렇게까지 얇으면 본전 생각이 살짝… 어흠 어흠)

얇은 만큼 미덕이 있습니다. 바로 금방 읽을 수 있다는 점이죠. (딸래미와 같이 스타벅스 2번 갔다오니 다 읽었더라… 정도로..)
다른 미덕은 아주 간단한 예제 하나로 UVM에서 사용되는 주요 구성요소를 한번 후루룩 보여준다는 점, 그리고 깊이 들어가지는 않지만 코드를 전반적으로 문단별로 설명해서 어떤 동작을 하는지 설명해 주는 점 역시 장점으로 생각하고 있습니다.

따라서, SystemVerilog는 대충 알지만, 내일부터 UVM을 써야 하는데 어디서부터 해야 할지 모르겠다는 생각이 든다면, 이 책이 시작점 정도는 될 수 있습니다.

단점은 중요한 개념들 중에 몇 가지가 좀 많이 빠져 있습니다. 사실 두께로 봤을 때 당연히 많은 내용이 생략될 수 밖에 없으며, 이런 것들은 나중에 reference manual을 보면 될 것으로 생각합니다. 다만, port/export 관계 같은 건 제대로 설명하는게 좋지 않았을까 싶습니다.

사실 책을 읽으면서 이것 저것에 대한 배경 지식이 없어도 내가 이걸 쉽게 이해할 수 있었을까… 라는 생각도 듭니다. 아마도 Verilab의 교육 프로그램의 교재로 사용되면서 강사가 중간 중간 개념을 설명해주는 경우라면 문제가 없을 것이지만, 아닌 경우에는 약간 혼란스러울 수 있었을 것 같습니다.

하지만, 대충 article 하나 정도의 두께(뒷 부분은 소스코드로 장수를 채운거라.. 실제 내용은 대충 70 page 남짓)로 대략적인 개념을 훓은 건 잘했다고 봅니다.

권장대상: SystemVerilog는 알지만 UVM은 처음이고, “내일”부터 뭔가 해 볼 예정인 사람.

비권장 대상: 논리적으로 이야기가 명확히 통해야하고, 중간 중간 설명이 생략된 상태에서 그냥 따라하라고 하면 화딱지가 나는 사람.

참고로, verilab에 가면 이 책에서 사용된 예제의 source를 받을 수 있네요. 참고하시면 될 것 같습니다.