Processor Architect.... egoist
프로세서, SoC, ASIC 설계에 대한 재미난 이야기들. 그리고, 쉼표...
BLOG main image
Notice
babyworm은?
CATEGORY
전체 (232)
SoC 설계 관련 (101)
마이크로 프로세서 이야기 (21)
유용한 설계도구 (7)
검증이야기 (14)
관련 새소식 (26)
초보자 코너 (11)
개인적인 (95)
책이야기 (13)
만화/애니메이션 (3)
영화/드라마이야기 (4)
음악이야기 (11)
Boards
질문 게시판
칩쟁이들 모임(올블카페)
TAGS
마이크로 프로세서 synopsys verilog HDL SystemVerilog verification 개인적인 EISC PLI AMD ARM Mentor 프로세서 GPU Cadence Synthesis FPGA 세미나 assertion Intel EDA
Recent Entries
중소기업 SoC의 딜레마 (1)
늙어가고 있는지도 모르겠... (2)
지금 머리속에는...
대충 살아가는 느낌이다.
나참..
via nano와 Intel atom간...
근황과 MPFJ2008
Core-A launching 행사 (8)
수원시대.. (2)
Microprocessor Forum Jap...
Recent Comments
현재 국내 대부분의 업체가...
10/10 - knight
네.. 코딩 할때는 즐거운 느...
10/04 - babyworm
Coding이 제일 재미있지요. ^...
10/02 - donny
VMWare의 경우 host OS 상에...
09/22 - babyworm
Vmware 에서 하드웨어로 가상...
09/21 - 라이천령
Recent Trackbacks
Verilog Coding Style for Sy...
Stay Tuned...
CEO's Leadership Seminar
Stay Tuned...
사악한 쌍둥이 full_case와 p...
Stay Tuned...
칩쟁이들의 모임등록
Stay Tuned...
드디어 리만 가설을 다읽었습...
blueecho의 생각바구니
Calendar
«   2008/10   »
일 월 화 수 목 금 토
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Archive
2008/10
2008/09
2008/08
2008/07
2008/06
2008/05
2008/04
2008/03
2008/02
2008/01
2007/12
2007/11
Link Site
[B]babyworm의 개인적인 블로그
[B]PAPA JOHN'S
[Javaworld] 볕태들의 집합소
[JW] 얌탱옹 블로그
[JW] 킴송 사진첩
[JW]*ㅡ아바미아 스토리-*
[JW]:+: Welcome To (( sccid...
[JW]iDea Holic
[JW]JS™
[JW]Jung-Hyeon's weB@LOG
[JW]Kino's blog
[JW]zzbe의 tattertools
[JW]볕태 앙뷁
[JW]애니와 만화의 세계!
[JW]자유로운 늑대의 울음으로~~
[JW]첫사랑 첼로
[JW]최신컴터 놀이~
[KTUG]글과 음악
[KTUG]도은이네 집
[KTUG]문학적프로그래밍
[KTUG]시냅스
[W] eetimes
[W] KERIS 학술 정보 서비스
[W] Microprocessor Report
[W] verification guild
[W]ASIC&FPGA cafe
[W]filedic
[W]WWW CA Page
[W]개인적인 게시판
[W]아람92
내 금전출납부
185497 Visitors up to today!
Today 27 hit, Yesterday 134 hit

English Ver. (by Google)
Creative Commons License
이 블로그의 모든 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
한RSS에 추가 add to Bloglines
add to google


Add to Technorati Favorites



Candle
'verification'에 해당되는 글 10건
집중이 안되는 여름 (2) | 2007/06/19
PLI와 Simulator의 연결(I) | 2007/06/11
Perl을 이용해서 검증할때 유용한 팁 | 2007/06/04
Level of abstraction (6) | 2007/03/27
일단 정리되었습니다. (2) | 2007/03/19
Designer, Verification Engineer를 위한 책들.. (2) | 2006/12/28
포스팅이 적어진 이유 (4) | 2006/12/10
검증의 대세는 system verilog? (2) | 2006/11/28
PSL을 포함한 새로운 VHDL 표준.. Verilog를 넘을수 있을까? (2) | 2006/11/16
verification 시작.. (4) | 2006/11/11
집중이 안되는 여름
[babyworm, 2007/06/19 21:22, SoC 설계 관련/검증이야기]

연일 30도를 넘나드는 더위가 계속되고 있습니다.

이럴때 항상 문제가 되는 것이 집중력이 떨어진다는 건데요.. 저도 마찬가지 입니다.
(실은 개인적으로 좋은 일이 생겨서 그럴지도 모르겠습니다만 ^^;)

오늘만해도 gcc-MinGW에서 mti vpi 연결시키는 거 때문에 잠깐 modelsim userguide를 보다가, 딴짓을 하기 시작해서 대략한 5시간동안 딴짓을 했습니다.

뭐 딴짓이라고 해도 모레쯤이나 하려던 processor market forecasting자료 정리였는데, 어짜다보니 하고 있더군요. 이건 뭐, 원래 하려던 일은 까맣게 잊고 나중에 하려던 일을 한참하다가 "아.. 내가 오늘 하려던 일은 이게 아닌데.. " 뭐 이런 시나리오라고나 할까요.

VPI 이야기가 나와서 그러는데요.. (또또.. 옆길로 빠집니다요) 회사 툴이 System Verilog-verification feature를 지원해주지 않아서, C/PLI나 만들어야 겠다는 이야기를 했었죠? 요즘 teal library를 분석하고 있는 중인데, 이거야 원.. 보면서 몇 번을 감탄한 것인지 모르겠습니다.

사실 뭐 PLI 연결하는 것이야 별 차이있겠습니까? 뭐 thread를 사용하는 것도 그렇다치구요.. 근데, PLI 연결 부분을 teal_synch.cpp라는 몰아두고, 이걸 class로 덮어씌우고 연산자 오버로딩을 해버리니 예술적인 경지에 이르르더군요. 사용하는 사람 입장에서는 이 부분이 verilog랑 붙기 때문에 어쩌구 저쩌구 생각할 필요가 거의 없도록 만들어졌더군요.

아쉽게도 저는 유연성 보다는 빠른 동작을 즐기기 때문에 teal을 그대로 이용하지는 않겠지만, (처음에는) 재미삼아 분석해 본 라이브러리인데 아주 많은 걸 배웠습니다. 천재성이 담긴 코드에요.. 저에겐 '이 정도쯤은 해야 verification engineer가 되는 건가.. 에효..' 라는 상념에 빠지게 하더군요..

C++에 익숙하시고, PLI를 공부중인 분들은 상당히 도움을 받으실 수 있을 것 같습니다. 혹시라도 관심있으신분은 http://www.trusster.com/ 에서 다운 받아보실 수 있습니다. 이거 관련된 책도 있는데, 아직은 저도 본 상태가 아니라 뭐라 말씀드리기는 어렵습니다. (TRUSS도 아직 사용해보지 못했습니만, Teal만으로도 괜찮습니다 ^^;)

아.. 그러고보니 관련 기사도 있었군요.. EETimes Korea의 기사입니다.

---
위의 부분까지는 MS Writer에서 썼는데, 평소처럼 publish하려니 좀 허전하네요.. ^^;

혹시라도 PC환경에서 cygwin/modelsim하에서 사용하시는 분들을 위하여 몇 가지만

1) Makefile.Windows를 만듭니다. 이 파일은 Makefile.linux를 복사하시는 것이 편합니다.
2) 아래와 같이 고칩니다. (필요에 따라 더 고치셔도 됩니다.)

ARCH_LIB_OPT = -L/cygdrive/c/Modeltech_6.0/win32 -lmtipli
ARCH_SHARED_SUFFIX = dll
SYS_ARCH_CC = g++
              

3) Makefile을 수정합니다.

SIMULATOR_HOME = /cygdrive/c/Modeltech_6.0
ARCH    = Windows
SIM     = mti_2_0


대략적인 힌트만 드렸습니다만, 이 정도면 필요한 부분을 추가적으로 수정하셔서 verification_top()함수를 작성하신 다음에 linking하시는데 문제 없을듯 합니다.

네이버에 북마크 다음에 북마크 마가린 바르기 HanRSS에 북마크하기 이올린에 북마크하기 News2.0에 투고하기 del.icio.us에 북마크하기 Digg에 번역해 투고하기 dzone에 번역해 투고하기 붐바
babyworm
2007/06/19 21:22 2007/06/19 21:22
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
PLI, Teal, TRUSS, verification, VPI, 여름

Trackback0 : Comment2
누적조회 972 : 오늘조회 1
Trackback Address :: http://babyworm.net/tatter/trackback/179
gnil | 2007/06/25 20:24 | PERMALINK | EDIT/DEL | REPLY
최근 이 글을 비롯하여 몇몇 PLI 관련 글들에 자극받아
회사 웍으로 시도해 보았는데요...

Hello World 하나 보는데 4시간 걸렸어요 ㅋㅋ;;
Solaris 8+GCC 3.X 환경인데요... Makefile 그대로 이용하면 잘 안되더라구요...

gcc -c -fPIC -I[include directory] vpi_user.c -o vpi_user.o
...
ld -G -o libvpi.so vpi_user.o ...
verilog +loadvpi=.../libvpi.so:hello_register hello_test.v

전 blog 없어서 여기다 기록 남깁니다~ 실례 ㅋ
babyworm | 2007/06/25 20:53 | PERMALINK | EDIT/DEL
verilog XL과 같은 cadence Tool에서는 PLI wizard라는 강력한 툴이 지원됩니다.
그걸 쓰시면 적절한 Makefile이 순식간에 뿅~하고 튀어나오지요 :)
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
PLI와 Simulator의 연결(I)
[babyworm, 2007/06/11 23:45, SoC 설계 관련/검증이야기]

Automated Functional Verification 방법에는 여러 가지가 있지만, testvector 발생 유닛(보통 Directed Random방식을 사용하지요?)과 golden model을 이용한 checker model을 만들어서 DUV(Design Under Verification)의 결과와 비교하는 것이 가장 편한 방법 중에 하나임은 부정할 수 없습니다. (여담입니다만, 국내에서는 많은 경우 golden model없이 설계하는 경우가 많아서 검증을 위하여 작성한 golden model이 실제로 RTL보다도 정확성이 떨어지는 경우가 있다는 것이 문제가 종종 발생합니다. 여기서는 golden모델의 확보에 대한 이야기는 나중으로 미루죠.)보통 golden model은 C model을 이용하게 되는데, C 모델을 Verilog와 동시에 simulation하는 것은 그리 녹녹한 일이 아닙니다.

저는 프로세서를 대부분 다루기 때문에 C모델이라 함이 대부분 ISS simulator가 됩니다. 이후에 Simulator와 C모델은 그냥 섞어 쓸 가능성이 높은데, 보시는 분께서 편하신 대로 생각하시면 되겠습니다.

우선 Simulator를 만들 때 그 목적을 정확히 할 필요가 있습니다. 초기에 Simulator의 목적은 executable spec.의 의미가 가장 중요한 의미였을 것입니다. 그래서, 대부분 function level의 정확성을 가지지요. 프로세서의 경우 보통 이야기하는 ISS(Instruction Set Simulator)정도의 수준일 것입니다.

이때 고려하는 사항은 동작의 정확성, 빠른 동작 속도, 유연한 변경 가능성(design space exploration을 해야 하니까요)과 같은 것을 고려하게 됩니다.

그런데, 아시다시피 Verilog와 Simulation을 한다던지, Verilog Model대신 사용하려고 할 경우에는 ISS level뿐만 아니라, BFM 수준, 간혹은 Pin-level accuracy를 필요하게 됩니다. 통신이나 영상쪽의 모델은 뭐 Functional model이나 BFM이나 큰 어려움이 없습니다. Latency가 거의 정의되어 있기 때문이지요.

프로세서의 경우 약간 복잡해지는데, hazard의 발생, instruction issue rate의 변화, exception의 발생을 고려해야 하는데, 이 경우 bus function이 발생하는 Instruction Fetch와 Data Access stage의 동작을 모사하기 위해서는 대부분의 pipeline을 표현해내야 합니다. 예전에 pipeline 수준의 accuracy를 가지는 simulator를 만들고, pin-level interface를 붙여서 나름대로 쓸만한 PLI model을 만든 적이 있지요. 단지 문제는 pipeline수준의 accuracy를 가지다 보니, 너무 너무 느려져 버린거지요.

쉽게 쉽게 만들려면 functional model로 simulator를 만들고, Verilog Model(DUV)상에 하나의 명령이 retire되는 순간에 register들의 값을 비교하는 방법도 가능합니다. 하지만, 해당 model이 불필요한 hazard 발생은 없는지, Instruction Fetching에 불필요한 사항이 추가되지는 않았는지 확인 할 수는 없습니다. (당연하죠.. reference model이 functional model이니 timing spec.을 만족시켰는지는 알수 없는것이지요)

흠.. 많이 옆으로 샜는데요..

C Model과 Verilog와 붙이는 방법이 Verilog-PLI (Programming Language Interface)를 이용하는 겁니다. Simulator는 clock단위로 동작하므로, 느낌상 아래와 같이 동작시키면 될 것 같습니다. 이런 경우에 verilog에서 C function을 호출할 때 가장 많이 사용되는 건 calltf()를 이용하는 방법입니다.


always @(posedge clk or negedge rst_x) begin

  $run_sim_calltf(xxxx);

end

즉, run_sim()을 calltf()의 callback function으로 등록하는 겁니다. 그리고, 매 클럭 calltf()를 불러주는 것이지요.

근데, simualtor의 이전 상태를 계속적으로 보존해야 하는 경우에는 매 클럭 새롭게 호출되는 calltf()를 이용할 때 문제가 있을 수 있습니다. (사실 그리 어려운 일은 아닙니다만, 예를 들기 위하여 ^^ ) 그래서, 내용을 보존하고 싶을 때는 misctf()를 사용하는 것도 괜찮습니다. misctf()는 원래 verilog simulation의 이런 저런 정리 작업을 하는데 사용하는 목적으로 만드는 건데요. 아래와 같이도 사용할 수 있습니다.


initial begin

  $run_sim_misctf(data, reason, paramvc);

end

뭐 이런 느낌입니다. misctf()의 경우 시뮬레이터의 초기 시에 simulator에 연결된 이후에 simulator의 종료 시까지 계속 머무르면서 파라미터의 값이 변경 될 때 마다 제어권을 가집니다. 이 파라미터의 변화시마다 클럭이 변화되었는지 확인하고, 클럭이 변화하였을 때 값을 호출하면 되겠습니다.


아래는 한 4년 전에 만든 PLI 모델중의 misctf부분인데요.. 실제 구현은 없으니 공개해도 별 문제 없을 것입니다. ^^; 대략 이런 느낌으로 만드시면 됩니다. :)
다음 번에는 좀 더 재미난 PLI 함수를 다루어보죠.. (아.. VPI는 초반에 좀 다루지 않네요. ^^; Blog의 예제를 위해서라도 예전에 acc_와 tf_를 이용해서 만든 PLI 모델을 업그레이드해야겠군요. )


int misctf_proc(int data, int reason,int paramvc) {
 
 static int  reset_called = FALSE;
 int   POInt;
 
 
 
 switch (reason) {
  case reason_paramvc : { // 파라미터의 값 변화로 인한 호출의 경우
   if (tf_getp(PIN_RST_X) == 0) { // reset state
    // 아래의 형태는 초기 조건에서의 리셋 호출을 위하여 사용된다.
    if (reset_called == FALSE || paramvc == PIN_RST_X) {
     io_printf("$AE32KB_RUN : CORE RESET CONDITION\n");
     // 실제적인 reset을 수행한다.
     
     reset_called = TRUE;
     
     POInt = 0;
     
     if (tf_getp(PIN_OSIEN) == 1) {
      POInt = POInt | OSIEN;
      if (tf_getp(PIN_OSIROM) == 1) {
       POInt = POInt | OSIROM;
      }
     }
     ResetCore(POInt);
    }
   }
   else if ( paramvc == PIN_CLK ) {  
    if (is_posedge(PIN_CLK,paramvc) == TRUE) {
     // 변경된 모든 입력 값을 받아서 반영한다. 
     apply_input();
     io_printf("%s : CLOCK POSEDGE\n", tf_strgettime());
     
     EndClock();
     // end_clock함수
     
     StartClock();
     // start clock 함수
     
     // 변경된 데이터를 기반으로 핀과 레지스터를 변경시킨다.
    }
   }
   break;
  }
//  case
  default :
  break;
 }
 
 // apply outputs
 apply_output();
    return 0;
}


이제 EISC processor도 어느 정도 정비를 마치고, 빠른 미래에  좀 더 공격적인 마케팅을 시작할 예정입니다. ^^; 많이 기대를 해 주세요.. 특히 학생분들께 좋은 기회가 많이 돌아가도록 노력 중입니다.
네이버에 북마크 다음에 북마크 마가린 바르기 HanRSS에 북마크하기 이올린에 북마크하기 News2.0에 투고하기 del.icio.us에 북마크하기 Digg에 번역해 투고하기 dzone에 번역해 투고하기 붐바
babyworm
2007/06/11 23:45 2007/06/11 23:45
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
EISC, PLI, Simulator, verification, verilog HDL

Trackback0 : Comment0
누적조회 969 : 오늘조회 1
Trackback Address :: http://babyworm.net/tatter/trackback/177
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
Perl을 이용해서 검증할때 유용한 팁
[babyworm, 2007/06/04 23:46, SoC 설계 관련/검증이야기]

뭐랄까요.. 요즘 이런 저런 일로 바쁘다보니, 사람이 좀 얇팍하게 글을 쓰게되네요. :)
(퇴고 없이 그냥 온라인에서 쓰는 글이라 앞뒤가 없을지도 모르겠습니다.)

오늘은 여러분들께서 perl을 이용해서 Verilog HDL을 위한 testbench를 작성할 때 간단히 명령어 해석기를 만들어 사용하는 방법을 알려드리죠.

이 방법은 제가 JTAG을 위한 protocol을 만들다가 생각해낸 방법인데요.. 아주 유용하게 쓰고 있습니다.
얼마전 AXI FileReader와 같은 간단한 명령어 해석기가 필요할 때도 쉽게 적용할 수 있구요.

예를들어, JTAG을 위한 몇몇 명령을 만들고, 이 명령을 이용해서 HDL model을 위한 신호 입력으로 변환시키는 과정을 생각해 봅시다.

1. 필요한 함수를 정합니다.
대충 다음과 같은 함수를 쓸 수 있겠지요?

rtnval = get_id();
do_intest(serin);
do_extest(serin);


2.
해당 함수를 perl에서 subroutine으로 만들어갑니다.
뭐, subroutine을 만드는 방법은 쉽죠?

3.
이 부분이 제일 중요한데요..

xxx.pl <filename.input>

이런식으로 처리하려면, 중간에 다음과 같은 루틴을 넣어줍니다.

do "$ARGV[0]";

위의 한 행은 해당 파일($ARGV[0])에 지정된 "perl" 명령어들을 읽어와서 해석하는 부분입니다.
즉, 여러분께서 "filename.input" 이라는 입력 파일에 앞에서 작성한 subroutine을 "명령어 사용하듯" 적어두면, 이것이 perl script에서 읽혀서, "명령어를 해석하듯" 동작하게 됩니다.
이렇게 함으로써, 파싱하는 부분을 생략하고도, 그럴듯하게 명령어 해석기처럼 하나의 perl 스크립트를 만드는 것이 가능합니다.


이제 이러한 perl script에서 어떻게 HDL 테스트 벡터를 만들어내는지 생각해 봅시다.
간단히 생각할 수 있는 것은 두 가지 인데요.
첫번째는 ROM file형태로 만들어버리고, verification을 위한 testbench에서는 $readememh()를 써서 읽은 다음에 한 클럭에 하나의 신호 그룹을 뿌리는 방법이구요..
두번째는 각 subroutine에 printf FOUT 과 같은 file output을 사용해서, 간단한 verilog testvector를 만들어내고, 이를 verification을 위한 testbench에서 `include "xxx" 명령을 이용해서 읽어들이는 방법입니다.

둘 다 간단하죠?

한 마디로, perl을 이용하면 C로는 어렵게 해야 할 일이 아주 아주 편해지는 일이 많습니다. 그래서 verification engineer들에게 perl과 같은 scripting 언어가 사랑받는 것이겠죠.

네이버에 북마크 다음에 북마크 마가린 바르기 HanRSS에 북마크하기 이올린에 북마크하기 News2.0에 투고하기 del.icio.us에 북마크하기 Digg에 번역해 투고하기 dzone에 번역해 투고하기 붐바
babyworm
2007/06/04 23:46 2007/06/04 23:46
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
perl, verification, verilog HDL

Trackback0 : Comment0
누적조회 1168 : 오늘조회 0
Trackback Address :: http://babyworm.net/tatter/trackback/175
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
Level of abstraction
[babyworm, 2007/03/27 20:56, SoC 설계 관련/검증이야기]

"추상화 수준", "추상화 단계"라 불리는 용어이지요. 아마도 C++를 다루실 때 많이 접하셨을 것이라 생각합니다. ^^; 추상화 수준이라는 것은 말 그대로 추상화의 정도입니다. 추상화의 반대가 구체화라는 것은 아실 것이고, 추상화는 생각에, 구체화는 사물에 가깝다는 것도 아실 것이라 생각합니다.

모든 작품(?)이 다들 그렇지만, 머리 속의 관념이(ASIC에서는 알고리즘) 표현 도구를 통하여 구체화되는 과정을 거쳐서 하나의 작품이 됩니다. 이때 머리속의 관념은 추상화 단계에서 점차 구체화되는데요.. 칩쟁이들이 잘 하는 말로 algorithm level, architecture level, register transfer level, gate level, physical implement level 뭐 이 정도 표현할 수 있겠습니다.

ASIC에 있어서 보통 RTL이라고 하는 register transfer level에서부터 physical impelmentation level(즉, GDSII라는 완성된 그림이 나오는 단계)까지는 EDA툴이라 부르는 CAD툴에 거의 전적으로 의존하게 됩니다. (아날로그 하시는 분들이 빼고요.. 그 분들은 직접 그림을 그리시는 artist잖아요~ ^^;)

즉, 설계라는 분야란 기계적으로 말하자면 algorithm을 RTL로 변환하는 과정을 의미합니다. "기계적"이란 용어를 사용한 건 말이 그렇다는 것을 알려드리고 싶어서입니다. ^^;
실무에서 보면, algorithm을 전공하신 분과 computer architecture/ASIC을 전공하신 분이 실무에서 어느 정도 일하다가 동일한 작업을 수행하기 위하여 RTL을 만들때 보면 전혀 다른 RTL을 만들어낼때가 있는데, 가장 큰 이유는 어느 추상화 수준에 초점을 맞추었느냐에 차이가 있고, 두 번째는 ASIC 전공자들은 알고리즘 자체를 볼때 하드웨어 구현을 고려하여 하드웨어에 최적화된 알고리즘을 생각하는 반면, 많은 알고리즘 전공자 분들께서는 software적인 최적화 알고리즘을 많이 생각해 내십니다. (에고.. 그냥 이야기하다가 너무 벗어났네요..여하튼.. 저는 각 전공분야에서 보는 관점이 다르다..라는 이야길 하고 싶었는데.. 쩝. ^^;)

검증에서는 약간 더 많은 추상화 단계를 지닙니다. 사실 검증이라기 보다는 modeling이라는 표현이 맞겠습니다. 이건 model의 정확성과 수행 시간간의 상관관계 때문에 아주 정확하지 않아도 되는 부분은 추상적으로 표현해서 속도를 빠르게 할 수 있기 때문이지요.

예를 들어, gate 수준으로 구현된 netlist simulation보다 RTL simulation이 훨씬 빠른 것이 당연하고, RTL simulation보다 대략적인 functional model을 이용하는 것이 더 빠르니까요.

이 functional model은 약간 더 세분하면

  • Transaction level model; 사실 각 모듈 간의 동작만을 정의하는 것이지요. 내부 동작 자체를 구현할 수도 안할 수도 있는데, 일반적으로 '추상화 수준이 높다'고 이야기 할때는 내부 동작은 구현하지 않고 모듈의 transaction만을 나타낼 때입니다.
  • Untimed functional model; transaction level도 untimed와 timed로 나뉘는데 시간에 대한 정보 포함 여부에 따라 나눕니다. 그냥 읽고/쓰고.. 이런식으로 하면 untimed이고, 가장 추상화 수준이 높다고 봅니다.
  • Timed functional model; timed는 transaction의 time정보가 있으므로, 약간은 더 구체화 된 수준입니다.

대략 이런식으로 나눕니다. 물론, 이것 이외에도 behavior level을 나누는 형태로

  • bus functional model(BFM) - bus functional model은 사실 transaction level model과 별 차이 없다고 생각되는데 많은 경우 pin accuracy가 있느냐를 가지고 나눕니다. 말 그대로 모듈의 출력/버스 수준에서의 동작만을 기술한 것입니다. 알고리즘이 들어간 블럭의 경우 이런거 만들기 쉽습니다. 
  • bus cycle accurate model - timed functional model과 유사하죠.
  • cycle accurate model - 시스템 클럭 수준에서의 동작을 맞추어 주는 수준입니다.

둘 사이에 많은 유사점이 있는데, 큰 사항은 transaction을 추상화 할 것이냐 차이겠습니다.

사실 pipelined processor와 같은 control 위주의 모델에서는 transaction model이 크게 편하지 않습니다. 어짜피 명령어 fetching 이후에 몇번째 사이클에서 data bus에 어떤 종류의 transaction이 발생할지를 알아내기 위해서는 어느 정도 구체화를 해야하니까요. 하지만, 통신 모델이라던지 연산 모델에서는 이게 상당히 쉽습니다. latency정도만 알면 연산하고 latency이후에 결과를 내놓는 형태로 구현되니까요. 그래서 알고리즘, 통신 쪽에서 transaction model이 각광받고 있고, ASIC에서 이쪽 분야가 차지하는 비중을 생각할때 이 모델들이 중요시 되는 것이겠지요. ^^;

추가적으로 검증에서는 어떤 수를 써서라도 추상화 레벨을 높여주는 것이 필요합니다. 왜냐하면, 더 정확한 검증이란 더 많은 검증 벡터를 기존 벡터가 cover하지 못한 부분에 generation해 주어야 하고, 많은 검증 벡터를 주어진 시간안에 수행하여 coverage를 높이기 위해서는 모델이 더 빨라져야 하며, 이를 가장 보장해주는 방법이 추상화 수준을 높이는 것이기 때문입니다.  ^^;


p.s. system verilog의 verification feature(class나 dynamic array, queue같은..)가 지원되는 "저가" simualtor 좋은 거 없나요? ㅎㅎ

네이버에 북마크 다음에 북마크 마가린 바르기 HanRSS에 북마크하기 이올린에 북마크하기 News2.0에 투고하기 del.icio.us에 북마크하기 Digg에 번역해 투고하기 dzone에 번역해 투고하기 붐바
babyworm
2007/03/27 20:56 2007/03/27 20:56
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
abstraction, SystemVerilog, verification, 추상화 수준

Trackback0 : Comment6
누적조회 887 : 오늘조회 0
Trackback Address :: http://babyworm.net/tatter/trackback/151
longkey | 2007/03/28 09:28 | PERMALINK | EDIT/DEL | REPLY
밑에 저가의 Simulator 문의를 하셔서 답변 드립니다.
Aldec의 Riviera라는 툴이 있습니다.
NC-sim의 약 10분의 1가격이라고 하고, 속도는 1.5~2배 정도 느리지만 Accuracy는 아주 우수하다고 합니다.
개인이 구매는 불가능하고, 회사나 학교에서 구매를 하 실수 있습니다.
더 궁금하신점 있으시면, sang@ktdesign.co.kr로 연락 주십시요.
babyworm | 2007/03/28 18:13 | PERMALINK | EDIT/DEL
감사합니다.
Aldec의 툴이 NC-sim에 비해서는 많이 저렴하군요. :)
아.. 고민입니다. ^^; 회사에서는 NCsim만 사용해서, 설득이 쉽지는 않을듯 합니다. (아쉬운 점은 verification feature를 구입하지 않아서 system verilog의 design 이외의 기능이 안된다는 것이.. ㅠㅠ;)
longkey | 2007/04/04 09:09 | PERMALINK | EDIT/DEL | REPLY
답변이 좀 늦었습니다. 메일만 기다려가지고...여기에 답글을 남기시리라는 생각을 어제 밤에야 했거든요..
물론 NCsim만을 사용하고 계시고, 성능이 좋다는 것도 잘 알고 있습니다.
현재 ALDEC은 삼성에서 Evaluation 중인데, NCsim보다는 느리지만 Model-sim 과는 속도 차이가 거의 없다고 알고 있습니다. Performance는 NCsim과 비교해서 별 차이가 없다고 나왔구요...
삼성에서 Evaluation을 하는 것은 시뮬레이터는 구매를 해야하는데, NCsim은 너무 고가라 라이센스를 많이 구매하지 못하니, Aldec의 툴로 시뮬레이션을 돌리고 NCsim으로 Sign-off 하는 식으로 하려고 이번에 들어간 것으로 알고있습니다. 저도 아직 이쪽 계통에서 근무한지 얼마 되지 않아서 잘은 모르지만, 시뮬레이터 라이센스는 항상 모자르다고 엔지니어 분들이나 세일즈 하는 분들이 말씀하시더라구요..
만약에 관심 있으시다면 sang@ktdesign.co.kr로 메일 주십시요...제가 아직 가지는 못하겠지만, 윗분들에게 말씀드려서 툴 소개와 기회가 되면 Evaluation이라도 한번 해보셔도 좋으실것 같아서요..
그럼 오늘 하루도 수고하십시요...
babyworm | 2007/04/04 23:34 | PERMALINK | EDIT/DEL
헛. 메일을 기다리셨다니 죄송합니다. evaluation을 하려고 결정되었을때 메일을 드리려고 했지요 :)
회사가 별로 크지 않다보니 CAD tool을 evaluation해주는 팀이 따로 있지는 않아서, Tool evaluation 기간도 대충 스케쥴을 맞추어야 하거든요. 그리고, 도입했을때의 장/단점도 따져봐야 하구요. 저렴한 가격에 SystemVerilog의 verification feature가 된다니 확실히 끌리기는 하는군요. 아주 빨리는 좀 어려울 것 같고, 나중에 기회되면 연락드리도록 하겠습니다. :)
p.s.
예전에 Debussy는 evaluation한 적이 있는데, 아주 인상적이었습니다. simvision이 나오지 않았다면, 그때 뭔가 바뀌었을지도 모르겠네요.
longkey | 2007/04/09 10:47 | PERMALINK | EDIT/DEL | REPLY
나중에 기회 되시면 꼭한번 연락 주십시요.. 전에 노바스의 Debussy는 예전 모델이고 현제 Verdi라는 제품이 있습니다. 혹시 들어보셨는지 모르겠네요... Simvision과는 제가 엔지니어도 아니고 이쪽에 경력이 많은것도 아니여서 정확히 말씀을 드리지는 못하지만 기회되시면 Verdi라는 것도 소개할 기회를 주시면 감사하겠습니다.
Verdi는 현재 삼성에서 Standardzation이 된 상태이기도 합니다. 구매를 안하시더라도, 한번 써보시고 괜찮다고 생각되시면 다른곳도 소개시켜주시면 좋으니깐요..^^ 그럼 이번 한주도 수고하십시요..
babyworm | 2007/04/10 00:23 | PERMALINK | EDIT/DEL
네 ^^; longkey님도 좋은 한주 되세요~
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
일단 정리되었습니다.
[babyworm, 2007/03/19 23:41, 개인적인]

Tapeout 직전에 발생한 여러가지 문제들이 좋은 방향으로 해결되었습니다.
칩쟁이들한테 칩이란 항상 엔지니어의 피와 땀을 요구한다더니만, 별거 아닌 칩이라고 피와 땀까지는 아니더라도 잠과 자유시간을 요구하더군요.

결과적으로 책임감을 가지고 매단계에서 좀더 꼼꼼하게 챙기지 못한 저에게 일차적인 책임이 있다는 것이 사실이겠지요. 같이 일하는 친구들이 처음하는 일이라 이런 저런 사항을 놓칠 수 있다는 걸 충분히 인지했어야 했는데, 저의 나태함으로 Tapeout 직전에서야 비로서 이것 저것 챙겨보고, 그로 인하여 문제를 인지하는 시점이 늦어버렸다는 것이 비극의 시작이었던 것입니다.

그런거 잘 챙겨보라고 회사에서 직급을 높이는 것일텐데, 아직 역할 모델에 적응하지 못한 탓이겠지요.

이번에 정말 많은것을 배웠습니다.
설계에 있어서도 그렇고, 여러가지 관련 사항으로도 그렇고..
처절하게 배운점은 나태해지는 순간 문제가 생긴다는 점입니다.

거의 한 달동안 자유 시간없이 열심히 따라와준 팀원들에게 감사합니다.

이제 불 끄는 역할이 끝났으니, 다시 검증쪽으로 집중하겠습니다. ^^;
글도 좀 더 많아지리라 생각합니다.

네이버에 북마크 다음에 북마크 마가린 바르기 HanRSS에 북마크하기 이올린에 북마크하기 News2.0에 투고하기 del.icio.us에 북마크하기 Digg에 번역해 투고하기 dzone에 번역해 투고하기 붐바
babyworm
2007/03/19 23:41 2007/03/19 23:41