Tag Archives: Verification

Mentor의 Verification Academy

OVM과 AVM을 밀고 있는 mentor에서 verification academy를 열었습니다. [여기]

현재는 아래의 세개 모듈로 구성되어 있으며, Flash 기반으로 구성되어 있어서 왠만한 웹브라우저에서는 모두 접근 가능하다는 장점이 있습니다. 단, 현재는 회사 메일로만 가입을 받고 있다고 적혀 있는데, 학생들도 가능할지는 모르겠습니다.

Evolving Capabilities Module (전반적인 overview)

Assertion-Based Verification Module (ABV에 대한 설명)

(CDC) Clock-Domain Crossing Verification Module (CDC 부분의 검증 방법)

상당히 넓은 내용을 알려주고 있는데요.. mentor에서하는 강좌이다보니 Questa나 0-in 과 같은 툴을 사용한다는 점이 특징적이겠습니다.

홈페이지에서 등록 신청하시면 하루 정도 이내에 registration 관련 메일을 보내줍니다.
메일을 받은 후에 login 계정을 activation 시키면 되는 거죠. 검증 특히 ABV에 관심 있으신 분들께는 좋은 강좌일 것같습니다.

Project Veripage etc…

1.
Veripage 라는 곳에서 느닷 없이 뉴스레터를 보내왔는데(그동안 왔을 텐데, 스팸 처리 되었을 가능성이 더 높지만..), 거기에 아래와 같은 문제가 있습니다.

다음에서 Z의 값은 어떻게 될까요?

bit c, e, o, r, t;
bit [2:0] v, w;
bit [5:0] x, y;
bit [6:0] z;

v = {<<{c,e,r}};
w = {<<{r,o,c}};
x = {>>{v,w}};
y = {<<3{x}};
z = {>>{y,t}};


SystemVerilog를 써 보신 분들은 보신 적이 있으실 streaming concatenation 연산입니다.
간단히 설명드리면, 병합 연산을 수행하되 << 는 병합 순서에 있어서 right-to-left로, >>는 left-to-right로 병합하라는 연산이지요.
<<N{}은 N단위로 블록을 잡으라는 의미이구요.
그다지 쓸일은 없습니다만, 가끔 복잡한 assign문을 적어야 할 때 편합니다.
저는 합성해야 할 코드는 호환성 문제를 고려해서 verilog95-가끔 2001 문법도 씁니다만-를 사용하고, 이런 귀찮은 assign은 vi의 매크로를 사용합니다만, 검증만 목적으로 하는 모델링에는 편하겠죠.

여하튼, 그래서 답이 어떻게 될까요? ㅎㅎ


2.
Veripage를 오랫만에 가보니 검증 관련 책 추천이 새롭게 많이 되어 있더군요. http://www.project-veripage.com/books.php 참고해보세요.

3.
구독하고 있는 blog중에 art.oriented 님의 블로그에 올라온 글입니다. (지난번에 alt.oriented 라고 잘못 적는  우를 범했습니다. 다시 한번 죄송합니다. newgroup인줄 알았는지 ^^;)

typedef struct tagWHATTHE {
  int    data1;
  int    data2;
  char   data[1];
} WHATTHE;

여기서 char data[1]의 의미는 무엇일까요?
정답은 위의 글을 참조하시고..

저도 simulator를 만들때 위와 비슷한 동작이 필요한 경우가 종종(이라고 쓰고 ‘많이’라고 읽는) 있는데, 유용한 테크닉이군요.

참고로 EISC 상에서 disassemble 해보니 다음과 같이 접근합니다.  (변수명은 tt, typedef는 test로 했고, malloc은 걍 100 했습니다.) 어떻게 나올지 짐작하는데 대충 도움이 될 것 같아서 올립니다.

test* tt = (test*)malloc(sizeof(test)+100);
c0000046:       70 a8           ldi     0x70    %R8
c0000048:       4d df           jal     c00000e4 <_malloc>
c000004a:       98 e4           lea     ( %R8     ) %R9

c000004c <.LM3>:
  tt->data1 = sizeof(test) + 100;
c000004c:       70 a8           ldi     0x70    %R8
c000004e:       09 18           st      %R8     , ( %R9  + 0x0 )

c0000050 <.LM4>:
  tt->data2 = 1;
c0000050:       01 a8           ldi     0x1     %R8
c0000052:       19 18           st      %R8     , ( %R9  + 0x4 )

c0000054 <.LM5>:
  for (i = 0; i < 100; i++) {
c0000054:       00 a0           ldi     0x0     %R0
c0000056:       89 e4           lea     ( %R9     ) %R8
c0000058:       c8 c8           addq    0x8,    %R8

c000005a <.L5>:
    tt->data[i] = i;
c000005a:       08 30           stb     %R0     , ( %R8  + 0x0 )


ldi은 load immediate, jal 은 call과 동일하고, st는 store, lea는 레지스터간의 move, addq는 add immediate입니다.  (stb는 store byte이구요)
본문에 나왔듯이 캐시 효율로 봐도 이넘이 더 좋을 듯..


쓰고나서 덧글) 테터에서 코드 하일라이트 기능이 엉켰는지 짜증 지대로.. ㅠㅠ;

Low Power VMM 공개

가끔 올리는 짧은 소식 몇 가지.

1.

Synopsys에서 Low Power Verification Methodology Manual을 공개하였습니다
Solvnet ID가 있으시다면 누구라도 여기(http://www.vmmcentral.org/vmmlp)에서 다운 받으실 수 있습니다.

저는 다운만 받고 아직 훓어보지도 못해서 no comment입니다. ^^;

 

2.

Mentor가 OVM을 기반으로 VMM code를 지원하겠다고 발표했습니다. (실질적으로는 VMM의 function을 OVM 함수를 이용하여 구현한 것이겠습니다)
VMM을 기반으로 작업했던 사람을 OVM으로 끌고 오겠다는 셈이겠지요. (http://www.mentor.com/products/fv/methodologies/_3b715c/cb_rf.cfm 에서 Verification Cookbook을 다운받으실 수 있습니다.)

아래 posting에 댓글 달아주신 홍용재님의 글처럼, OVM은 e, SystemC로 지원할 계획을 가지고 있습니다. 대부분의 interface 함수를 공유하게 될 것이니, 기존의 작업은 그대로 둘 수 있고, e, SystemC를 HVL로 이용하여 모델링 하시던 분들을 역시 적극적으로 끌어들이겠다는 전략으로 해석됩니다.

 

3.

드디어 simulation 가능한 툴이 생겨서 OVM을 좀 보고 있습니다. SystemVerilog의 Class를 참 잘 이용한 것 같습니다. 제가 평소에 하는 프로그래밍이라는 것이 대부분 모델링이라 보통 프로그래밍을 할 때 속도 문제로 OOP는 잘 사용하지 않는데(특히 virtual function의 경우 상당히 느려집니다), 걍 편하게 살자는 마음과 Verification에 한정하니 머리가 편해지는군요. OOP라는 것이 처음에 class design(실제적으로는 상속의 남발 ^^;) 잘못하면 낭패를 보는 경우가 많은데, 대부분의 코드가 공유될 때 편하긴 편하지요.

 

4.

ABV를 여쭈어 보시는 분들이 많은데 SystemVerilog에서 출발해야 할 부분이라고 생각되어서, 취미 삼아 Verilog사용자를 위한 SystemVerilog Guide를 지난달부터 작성하고 있는데, 회사 일과 크게 관련이 없는지라 주말에 집에서 하는 작업으로 한정하고 생각하다 보니 진도가 아주 느립니다. 어느 정도 정리되면 올리겠습니다. (대부분 doulos.com의 Tutorial 자료를 참고하고 있고, 내용에서 빠지는 부분을 채우고, 제 생각에 별로 필요 없는 부분 – 그런게 있나요.. ^^; -은 제외하고 작성하고 있습니다.

  —

쓰고 보니 요즘 문서작업으로 바쁜데.. 그 와중에 또 글을 쓰는 건 뭐지… 라는 생각이 드는 군요. (시험 전달에 이상하게 몰아두었던 만화나 드라마나 심지어 논문이 재미있어지는 것과 비슷한 현상일지도..)