Processor Architect.... egoist
프로세서, SoC, ASIC 설계에 대한 재미난 이야기들. 그리고, 쉼표...
BLOG main image
Notice
babyworm은?
CATEGORY
전체 (307)
SoC 설계 관련 (126)
마이크로 프로세서 이야기 (24)
유용한 설계도구 (7)
검증이야기 (15)
관련 새소식 (38)
초보자 코너 (17)
북마크 (2)
코덱 (0)
개인적인 (137)
책이야기 (19)
만화/애니메이션 (3)
영화/드라마이야기 (4)
음악이야기 (13)
Boards
질문 게시판
ASIC plannet
Recent Entries
열심히 살아야겠다.
잡담 몇 가지..
애증의 관계? 아래아 한글... (1)
창조를 위해서 필수적으로... (2)
VP8 and WebM (2)
새로 blog들을 모아봤어요..
일단 끝.. 이라고 할 수도... (2)
Cygwin1.7에서 Eclipse CD...
AMBA 4.0 공개 (1)
그러게 진작에 잘하지 (3)
Recent Comments
저도 한컴사의 워드는 1.5때...
06/21 - likesam
당연하지~!
06/12 - babyworm
저도 얼마전에 한국에 있는...
06/07 - 홍용재
Homesick을 겪을때는 지났잖...
05/25 - babyworm
읽어보려다가 초반부터 비명...
05/24 - 홍용재
한RSS에 추가 add to Bloglines
add to google


Add to Technorati Favorites



TAGS
마이크로 프로세서 synopsys verification verilog HDL SystemVerilog EISC 개인적인 PLI ARM AMD GPU Mentor LaTex EDA Synthesis Cadence assertion 프로세서 FPGA 검증
Recent Trackbacks
WebM 조금 이르지 않을까?
내 맘대로 보는 세상
tkhwang의 생각
tkhwang's me2DAY
똑똑한 32비트 마이콤? Cantus
Dr.Lee's Blog..
죠커의 생각
jokka's me2DAY
불필요하게 어려운 말을 쓰는...
한날은 생각한다
Calendar
«   2010/07   »
일 월 화 수 목 금 토
        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
2010/07
2010/06
2010/05
2010/04
2010/03
2010/02
2010/01
2009/12
2009/11
2009/10
2009/09
2009/08
Link Site
Dreamer GUNDAM의 블로그
EDA board
Luuvish's agit
Planet KTUG
[B]babyworm의 개인적인 블로그
[B]PAPA JOHN'S
[JW]iDea Holic
[JW]JS™
[JW]Jung-Hyeon's weB@LOG
[JW]Kino's blog
[JW]애니와 만화의 세계!
[JW]첫사랑 첼로
[JW]최신컴터 놀이~
[W] eetimes
[W] KERIS 학술 정보 서비스
[W] Microprocessor Report
[W] verification guild
[W]ASIC&FPGA cafe
[W]filedic
[W]WWW CA Page
[W]아람92
332369 Visitors up to today!
Today 17 hit, Yesterday 177 hit

English Ver. (by Google)
Creative Commons License
이 블로그의 모든 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'verilog HDL'에 해당되는 글 13건
DVCon의 결과.. (5) | 2009/02/16
PLI와 Simulator의 연결(I) | 2007/06/11
Perl을 이용해서 검증할때 유용한 팁 | 2007/06/04
PSL을 포함한 새로운 VHDL 표준.. Verilog를 넘을수 있을까? (2) | 2006/11/16
Verilog 관련 검색에 대한 친절한(?) 답변과 리퍼러 로그.. | 2006/11/10
Verilog newsgroup에서의 몇가지 이야기 | 2006/11/04
GeSHi를 사용하는 CodeHighlighter를 위한 verilog문법 정의 파일 (2) | 2006/10/28
TLM으로 설계가 이동할 것인가? (4) | 2006/10/23
[verilog] wire와 reg (5) | 2006/09/14
verilog HDL, System Verilog, system C, e, vera.. PLI (4) | 2006/06/01
verilog PLI 배우기(2); VPI handle | 2006/05/29
Verilog PLI 배우기 (1) | 2006/05/18
Michael D. Ciletti 의 Verilog HDL 시리즈 (1) | 2006/05/07
DVCon의 결과..
[babyworm, 2009/02/16 08:06, SoC 설계 관련/관련 새소식]
질문 게시판의 내용이지만, 답변은 여기에 ^^;

http://theasicguy.com/2009/01/27/dvcon- ··· -mean%2F 에 DVCon Survey 결과가 있었습니다. DVCon은 가끔 언급했지만, verification 부분에서 가장 큰 행사 중의 하나이지요. ESNUG에서도 곧 여러가지 설문 결과나 행사 기간동안 가장 많이 팔린 책들에 대한 언급이 있을 텐데요.. 올 한해 책 지름의 기반이 되겠지요.

여하튼, 설문의 결과는 예상대로.. 라고 말씀드릴 수 있습니다.

Design Language로는 Verilog HDL 이 대세
검증에 있어서는 SystemVerilog가 대세

요약하면 이렇게 되는 거죠..

사실 SystemVerilog가 다음 Verilog HDL에 통합될 예정이기 SystemVerilog가 Verilog HDL로 통합 되었기 때문에 전체적으로 VerilogHDL이 휩쓸고 있다고 볼 수 있습니다.

설계 언어로서 Verilog HDL이 각광 받는 건 사용하기 편해서이기도 하고, 많은 검증된 툴이 존재한다는 점 때문이기도 합니다.

SystemVerilog가 검증 언어로서 각광 받는 이유는 verilog로 부터 물려받은 design 부분의 feature이외에 검증을 위한 assertion, coverage, interface에 대한 지원이 이루어져 있기 때문입니다.

특히 high level modeling에 있어서는 C를 따라갈 수 없겠지만, assertion에 있어서는 완전히 PSL을 밀어내버린 거죠.

이렇게 verilog HDL family가 전체 설계/검증 flow를 장악한 이유는 자명합니다. 한가지로 통합하여 사용할 수 있는 언어가 있으면 다른 언어를 배우고자 하는 사람이 적어지는 건 당연하죠.. 게다가 기존에 알고 있던 문법에 몇 가지 불편했던 부분이 추가되고 , 새로운 개념은 완전히 새롭게 문법이 들어오는 형태로 개선되고 있으니 기존 사용자를 잘 흡수한 것이죠.

매년 나온 Survey Result를 생각하면 나중에 좀더 다양한 아이템에 대한 Survey 결과가 나올 것이라고 봅니다만, 설계나 검증에 종사하시고자 하시는 많은 분들께 verilog HDL을 권할 수 있겟습니다.

(추가)
근데, 더 흥미로운 설문은 (아직 샘플의 수가 너무 적어서 뭐라 말씀드리기 힘듭니다만..), 어떤 Verification methodology를 사용할 예정이냐.. (http://www.doodle.com/participation.htm ··· 3h8y9r62 )는 설문이네요.

제 개인적으로 VMM은 좀 툴에 대해서 까다로워서 원래 좀 그랬고, Teal/Truss는 PC에서 돌리기 힘들어서 확산은 힘들것 같았고..(게다가 PLI/DPI 기반이라는 건 컴파일 할때 험난한 여정을 의미하죠..뭐 system verilog SystemC1도 마찬가지지요.. 이런 C/C++ 기반의 방법들은 gcc 버전에 민감하게 만들어지면 고생길이 열립니다..특히 C++과의 연결은.. )..
여하튼 생각보다 OVM이 지지를 많이 받고 있군요.. 시뮬레이션에 많이 사용되는 cadence와 mentor의 연합이니 그럴 수 있겠다는 생각이 (반면에 약간 툴 버젼을 가리는 것은 아깝습니다. - 물론 지원되는 system verilog 문법 때문에 어쩔 수 없겠습니다만..)


p.s.
2월 들어 첫 딸 돌잔치 준비를 열심히 하느라 집에서 블로그에 들어올 시간이 없었습니다. ^^;
돌 사진 찍은 거 보정하는 것과 성장 동영상 만드는 것을 미뤄두고 있다가 2월 내내 꼬박 퇴근 후 시간을 투자해야 했으니까요.
이제 좀 여유로워졌으니 다시 글이 올라갈 것이라고 생각 해 봅니다. (천성이 양치기 소년이라.. 믿을 수 있을지는..)
  1. 어짜다 SystemVerilog라고 쓴건지 모르겠네요 ^^; [Back]
babyworm
2009/02/16 08:06 2009/02/16 08:06
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
DVCON, SystemVerilog, verilog HDL

Trackback0 : Comment5
Trackback Address :: http://babyworm.net/tatter/trackback/271
홍용재 | 2009/02/17 06:43 | PERMALINK | EDIT/DEL | REPLY
감사합니다. 사실 블로그에 글을 써주셨으면 좋겠다고 속으로 생각하고 있었는데, 정말로 올려주셨네요. ^^
system verilog는 석사과정 중에 아주 잠깐 공부를 했었는데, 아무래도 회사에서는 다룰 일이 없을 듯하고, 따로 해봐야겠습니다. ^^;

참, 따님 돌 정말로 축하드립니다.
babyworm | 2009/02/18 13:21 | PERMALINK | EDIT/DEL
당연히 떡밥을 주면 물어야지.. 안그래도, 요즘엔 주제가 빈곤한데 말야 ㅋㅋ.. 일하는 내용 중 대부분은 나름 대외비라 일부 함구해야 하고, 그렇다고 맨날 개인사만 쓸수도 없는 것이고 :)
SystemVerilog는 뭐 설계쪽하면 가끔 다둘일이 있을 수도 있고, (unique같은 유용한 keyword 때문에..) 검증쪽 하게되면 무지하게 쓰지 않을까 싶네 :)
홍용재 | 2009/02/24 05:18 | PERMALINK | EDIT/DEL | REPLY
오늘 흥미로운 기사를 하나 봤습니다. Cadence가 OVM을 SystemC 와 e 로도 확장한다고 하네요.
http://www.design-reuse.com/news/20160/ ··· -ip.html
babyworm | 2009/02/24 09:44 | PERMALINK | EDIT/DEL
HVL이 어떤것이 되던 함수는 별 차이없지요. SystemC나 e를 HVL을 사용하던 사용자를 끌어안기 위해서겠지요. SystemC, e 모두 Cadence입장에서는 원래 지원하던 것이니 당연한 것이기도 하겠고 ^^;
홍용재 | 2009/02/24 15:56 | PERMALINK | EDIT/DEL | REPLY
아하...그렇군요. 전 library를 전부 새로 만드는 것인 줄 알았습니다. 하하하 ^^; 더구나 Cadence에서도 e를 포기하는 것 아닌가 생각했었거든요. ^^
[로그인][오픈아이디란?]
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도 어느 정도 정비를 마치고, 빠른 미래에  좀 더 공격적인 마케팅을 시작할 예정입니다. ^^; 많이 기대를 해 주세요.. 특히 학생분들께 좋은 기회가 많이 돌아가도록 노력 중입니다.
babyworm
2007/06/11 23:45 2007/06/11 23:45
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
EISC, PLI, Simulator, verification, verilog HDL

Trackback0 : Comment0
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 언어가 사랑받는 것이겠죠.

babyworm
2007/06/04 23:46 2007/06/04 23:46
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
perl, verification, verilog HDL

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

Secret
PSL을 포함한 새로운 VHDL 표준.. Verilog를 넘을수 있을까?
[babyworm, 2006/11/16 20:38, SoC 설계 관련/관련 새소식]
EEtimes를 보니 VHDL 2006 표준이 Accellera에서 승인되어서 IEEE standard 승인을 기다리게 되었다고 합니다.

VHDL은 제 블로그에서도 몇번 다루었듯이, 초반의 열광적인 지지와는 반대로 설계 언어로서는 Verilog에 비하여 점유율을 높이지 못하고 있었지요. (Gartner Dataquest의 EDA 분석책임자인 Gary Smith 씨에 의하면 오늘날 하이엔드 디자인에서 VHDL 사용이 줄고있다고 합니다. [데이터 출처: EETimes])

Verilog의 경우 system verilog에서 assertion과 같은 검증 기능과 더불어 몇몇 검증에 관련된 좋은 기능들이 추가 되었으며, verilog 2005 표준에서 system verilog(IEEE-1800)와 기존의 verilog 표준(IEEE-1364 2001)을 합쳐서 IEEE-1364 2005로 개정한 것이지요.

지금 verification guild와 같은 곳을 가보면 verification의 많은 부분이 system verilog 위주로 진행되는 분위기가 감지됩니다. (comp.lang.verilog에서도 그렇구요..)

이러한 verilog의 강공에 대적하기 위해서, VHDL은 assertion language의 표준인 PSL(예전에 sugar로 불리웠던)을 VHDL 표준에 과감히 포함시켜 버렸습니다. !

또 다른 주목할 만한 부분은 IP 보호 기능입니다. 사실 이 기능의 경우 verilog에서는 cadence verilog-XL 시절 부터 있었던 기능이지만, tool dependent하기 때문에 약간 문제이기는 했습니다.(verilog simulation에 있어서 verilog-XL이나, NC-verilog와 같은 툴이 거의 표준처럼 사용되고 있는 상황이니 큰 문제는 없겠습니다만..(ESNUG참조))

과연 점점 사용자 계층이 엷어져가는 VHDL이 이번 표준으로 얼마나 사용자를 되 찾아올지 의문입니다.
왜냐하면, Verilog에서는 기본적으로 강력한 구조적 설계 기능에 검증 기능을 더하는 방향으로 확장되고 있는 반면, VHDL은 기본적으로 behavioral design/verification에 (verilog에 비해)적합한 형태였기 때문이지요.
즉, 설계 부분의 편의성에 있어서는 그리 향상된 것이 없어보인다는 것이 좀 아쉽네요..
babyworm
2006/11/16 20:38 2006/11/16 20:38
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Accellera, SystemVerilog, verification, verilog HDL, VHDL

Trackback0 : Comment2
Trackback Address :: http://babyworm.net/tatter/trackback/104
gnil | 2006/11/17 09:04 | PERMALINK | EDIT/DEL | REPLY
학창시절 VHDL 다뤄본 적이 있다고 나선 입사동기 형은
현재 맡고 있는 업무가 VHDL-to-Verilog code converting 작업;;
게다가 VHDL은 Verilog보다 EDA 툴 선택의 폭이 좁아서 설계자동화팀에서도 싫어해요~
babyworm | 2006/11/17 21:19 | PERMALINK | EDIT/DEL
그분 개인적으로는 좀 지겨운 일이시겠네요.. :)
예전에 썼던 기억으로는 VHDL쪽도 참 괜찮은데, 설계할때 사람을 귀찮게 하는 측면이 많고 괜찮은 툴이 별로 없다는(지금은 거의 해결되었지만)것이 문제지요.
요즘 검증쪽 보고 있는데 확실히 검증쪽은 VHDL이 좋은거 같네요..
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
Verilog 관련 검색에 대한 친절한(?) 답변과 리퍼러 로그..
[babyworm, 2006/11/10 17:26, SoC 설계 관련/초보자 코너]

요즘에 리퍼러 로그를 보니, 검색을 통하여 들어오시는 분들이 상당하시군요..
(덕분에 gzip 플러그인을 통해 전송량을 절반으로 줄여놨었지만, 다시 트래픽이 차오르고 있습니다. ㅠㅠ; 물론, 많은 분들이 찾아주시는 건 좋은 일이지요.. 이 분야에 관심 있는 분들이 많다는 것이니까요..)

이 포스팅은 리퍼러 로그에 남은 검색어를 통하여 살펴본, 제 블로그에 방문하시는 분들이 관심을 가지는 것에 대한 친절(?)한 답변들입니다. ^^;

verilog 관련
가장 많은 검색어는 verilog/VHDL 입니다. 요즘에 이걸로 수업받으시는 분들이 많고, 요즘이 term project 철이라서 검색 순위가 급증하고 있는 것이 아닌가 생각합니다.

* Verilog와 VHDL중에 어떤것이 더 좋은가..
둘 다 좋은 언어입니다. verilog가 "설계"라는 목적에 좀더 부합하고, VHDL이 "검증"에 더 편리한 기능을 제공합니다. 개인적으로 생각하기에 verilog가 설계만 따진다면 더 편하다고 생각합니다.

* VHDL -> verilog변환, verilog ->VHDL 변환
가끔 뉴스 그룹에서 이거 변환 프로그램 찾으시는 분들도 봤는데, vhdl2v 같은 전용 변환 프로그램이 있기는 합니다만, 시도해보시면 상당한 스트레스를 받을 것이라 생각합니다.  ESNUG에 나온 내용을 붙이자면, 잘 안된다! 입니다.

ESNUG내용보기

http://www.deepchip.com/items/0386-11.html
Hello John,

I'm scrambling my head over this...

I am using VHDL-2-Verilog translator by ASC.  I could not translate my
functions from VHDL to Verilog -- they are simply skipped!

My VHDL source code has a package which has some function declarations
(eg. calculate_lrc(data)) and definitions in it.  The problem is when I try
to convert the package or code from VHDL to Verilog, the functions are
skipped.  So the verilog file just has constants and no "function", as if
there was no function declaration in the original file.

I tried using -Function_Map option but it would only allow me to keep the
original function call but the parameters are skipped.  Also no function
conversions.

So does ASC's vhdl2v not support function and procedure conversions from
VHDL to Verilog?

  - Rakesh Mehta
     Nortel Networks

대안으로는 verilog나 vhdl이나 동일한 중간 포맷으로 해석해서 사용하는 툴을 쓰는 건데..
제가 사용해본 것은 Summit design의 visual HDL로 변환하는 것이었는데, 역시 structural 설계는 잘되는데 약간 behavioral하게 설계된건 잘 안되었습니다.

만일 동작만 보면되고, 안의 내용은 필요없다! 라고 생각하신다면, synopsys에서 합성한 후에 원하는 format으로 netlist를 출력해서 시뮬레이션에 사용하는 것이 제일 속편합니다. 물론, simulation용 라이브러리를 물어야 하지만 말입니다.
(뭐, 요즘엔 ncsim이나 modelsim이나 모두 VHDL/Verilog를 single kernel에서 시뮬레이트해서 이런 필요는 없겠지만.. 라이센스 문제가 아닌 이상엔 말이죠..)

* verilog에서의 #
위의 문법은 원하는 만큼 지연을 발생시키는 것입니다. 합성시에는 무시됩니다.

* verilog에서의 <=과 = 의 차이
blocking assignment와 non-blocking assignment를 혼동하시는 분들이 생각보다 많은데요..(저도 verilog 처음에 잘 몰랐습니다.) blocking assignment는 "시간이 흐르지 않는 상태(흐르지 않게 block하면서)에서 값이 저장된다"이구요.. non-blocking assignment는 "시간이 흐르면서 값이 저장된다" 입니다.
즉, 아래와 같은 연속된 assign의 경우 위의 blocking을 사용하였을때 d는 a의 값을 가지게 됩니다. 값의 할당 자체에 시간이 소모되지 않도록 하나의 할당이 끝날때까지 시간을 멈추기 때문입니다...
그런데, 밑의 nonblocking 예에서는 "값을 할당하자"라는 것은 현 시점에서, 값이 갱신되는 것은 delta delay이후에 이루어지게 됩니다. 왜냐하면, 값이 할당되든 안되든 값을 할당하겠다는 3개의 문장을 모두 보고나서 delta delay이후에 값이 갱신되기 때문이죠.


이해 되시려나요?

* verilog PLI 관련
예전에 계속쓰려다 잠시 중단되었는데, PLI 관련 내용은 요즘에 제 작업 관계로 앞으로 1~2개월동안 자주 올라올 확률이 높습니다. 테스트 벤치 생성 유닛과 scoreboard를 C로 만들고 이걸 verilog PLI로 연결할 예정이거든요..
기대하셔도 좋을듯..


다른 검색을 통한 리퍼러 로그..
Design Compiler와 VCS, Modelsim에 대한 검색이 많았습니다.
사실, 툴에 대해서는 소개나, 새소식만 하고 있어서 별다른 내용이 없었는데 말이죠.. ^^;
참.. 시뮬레이션 하는 방법은 quick reference guide를 살펴보시면 쉽게 하실 수 있습니다. ^^;

프로세서에 대한 검색으로 들어오신 분들도 많았습니다. intel, AMD, ARM, calmRISC, M-Core, EISC(감사합니다.)
블로그에 좀더 프로세서에 관련된 좋은 내용을 적을까 싶기도 한데.. 이쪽 분야 하시는 분이 워낙 적어서 누가 관심이 있을까.. 라는 씨니컬한 마음이 될때도 있습니다. ^^;

아.. 특이한것이 virtual UART를 검색해서 들어오신 분이 계시던데..
제가 이 블로그에서 PLI + TCL/TK를 조합한 virtual UART라는 걸 만든적이 있다고 말씀을 드린적이 있는데, 검색해서 들어오신분은 아마 회사분이 아니실까 생각합니다. 회사분이시라면 인트라넷에 올라간 virtual UART 관련 메뉴얼을 참조하세요.. 소스코드와 작성법이 다 있으니까요..^^;

찾아주신 분들 모두 감사드립니다.

babyworm
2006/11/10 17:26 2006/11/10 17:26
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
AMD, ARM, EISC, PLI, processor, TCL/TK, verilog HDL, 리퍼러 로그, 프로세서

Trackback0 : Comment0
Trackback Address :: http://babyworm.net/tatter/trackback/97
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
Verilog newsgroup에서의 몇가지 이야기
[babyworm, 2006/11/04 21:59, SoC 설계 관련/초보자 코너]

verilog news group에는 여러가지 verilog 관련 이야기가 나오는데.. 몇가지만 옮겨 봅니다.

1. Implicit Zero Padding?
verilog의 bit 확장에 대한 부분인데요.. 간략히 써보면 다음과 같은 질문입니다.

verilog가 큰 수에 작은수를 대입할때 '0'으로 채우는 것으로 알고 있어.

위의 예에서도 상위 4비트는 '0'이 되어야 겠지? 하위 4비트는 당연히 a의 반전이겠지만 말야.. 근데, 적어도 modelsim에서는 상위 4비트가 항상 1이 된다! 내가 잘못 이해한거야? 아님 모델심 문제야?

여기에 대해서 여러가지 대답들이 있는데.. 대답을 보기전에 우선 몇가지 정리해 보시지요..^^;
기본적으로 큰 값에 대한 assign시에 RHS의 값이 LHS값보다 작은 경우 그 값은 확장되면서 상위값은 '0'으로 채워집니다. 왜냐하면 verilog에서 기본적으로 다루어지는 수치형은 'unsigned'이기 때문이죠.
verilog 2001에서는 signed라는 예약어가 들어가서 signed 수로 인식되기도 합니다만, 위의 예에서는 관련이 없겠지요?

질문자는 assign 동작이 ~(inversion)보다 늦게 일어나므로, inversion 이후에 assign이 일어나야 하며, assign과정에서 확장 동작이 일어나야 하는데, 왜 동작은 inversion이전에 크기 확장이 일어난것 같이 동작하느냐는 것이 가장 중요한 질문의 요지입니다.

그런데, 위의 예에서는 왜 '1'로 채워지는 것일까요? 이것은 verilog에서 연산을 처리하는 rule과 관계가 있습니다.
이 문제에 대하여 지존급의 대답을 해준 케이던스의 sharp님의 글을 보면 아주 명확히 설명하고 있습니다.

Verilog first determines the width of an expression based on the largest operand in it, including the LHS of any assignment.  Then it extends all operands (actually, all context-determined operands) to the width of their expression before performing any operations.  All extensions are done as early as possible, in an attempt to avoid overflows in intermediate results.

가장 중요한 verilog 연산에서의 크기 확장 법칙이 위의 법칙입니다. 즉, 연산 이전에 LHS를 포함한 모든 연산 요소를 살펴보아서 가장 큰 값에 맞추어 값을 확장하는 것입니다. 이는 "C"언어에서의 type casting rule과 완전히 다르기 때문에 많은 분들이 헷깔리게 되는 것이지요.

sharp님이 추가적으로 설명한 부분은 사실 저도 정확히는 모르고 있던 부분인데.. (경험으로는 알고 있었습니다만, 명확한 이론은 없었습니다.) 연산에 따른 확장에 대해서 알려주고 있습니다.

When the result of an operation will have a fixed width regardless of the width of its operand, there is no reason for the operand to care about the width of the context.  This is true of the reduction operators.  The result will always be 1 bit, no matter what the operand width is.  There is no point in extending the operand.  Instead, the 1-bit result will be extended to the width of the expression as soon as it is produced.  The operand of a reduction operator is
self-determined.
On the other hand, all the bits of a bitwise NOT will be available to the expression containing it, and may be assigned or used in another bitwise operation.  So the operand of a bitwise NOT is context-determined.

But one has a self-determined operand and the other has a context-determined operand.  The Verilog LRM fully specifies this for all the operands of all the operators.  They generally follow a logical scheme that makes sense.  And again, in most cases they are designed to give reasonable results, so that most users don't have to worry about them.



상당히 어려운 이야기인 것으로 보입니다만, 실은 같은 width를 보장해야 하는 연산과 그렇지 않은 연산이 있고, 이에 따라 확장을 하는 부분이 있다.. 라고 요약하시면 되겠습니다. 위의 룰은 처음 설명 드린 룰의 보충내용이므로 그리 중요하지는 않습니다.

이러한 문제는 "고민을 시작하면" 엄청나게 신경쓰이는 문제이므로, 일반적인 coding style을 따져서 문제가 될만한 부분을 초기에 잡아나가는 것이 현명하겠습니다.
즉, 1) verilog coding시에서 width 지정을 정확히 하고, 확장이 필요한 경우 명시적으로 concat operation을 쓰자. 2)일반적으로 width를 지정하지 않은 상수는 verilog에서 32bit으로 처리되므로, 이로 인해 원하지 않는 동작을 피하고 싶으시다면, 항상 상수를 지정할때 width를 지정하는 하자.
이런 일반 룰만 지키신다면 머리 아플일이 없겠지요..^^;

좋은 Coding Style의 존재 이유가 "불명확한 코드로 나중에 머리 아프지 말고 코딩 부터 잘하자.."이런 것이니까요..^^;


추가적으로..
comp.lang.verilog에 인터뷰에서 asynchonous설계시 주의할점에 대해서 물어봤는데.. 대답을 못했다는 내용도 있네요.^^; 얼마전에 이야기한 metastable에 대한 이야기를 묻는 것이지요.. 정말 많이 물어보는 질문이기는 한가보군요..

babyworm
2006/11/04 21:59 2006/11/04 21:59
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Coding Guideline, verilog HDL, zero padding

Trackback0 : Comment0
Trackback Address :: http://babyworm.net/tatter/trackback/93
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
GeSHi를 사용하는 CodeHighlighter를 위한 verilog문법 정의 파일
[babyworm, 2006/10/28 21:27, SoC 설계 관련]

테터보드나 WordPress에서 GeSHi라는 문법 강조기를 이용하여 code highlighting 모듈이 많이 만들어지고 있습니다. 제가 사용하고 있는 Lang-to-HTML도 그렇구요..

아쉬운 점은 제가 블로그상에 자주 포스팅하는 내용이 verilog HDL이라는 하드웨어 설계/기술 언어를 사용해서 설명되는 경우가 많은데.. GeSHi에는 verilog HDL code에 대한 하이라이팅 기능이 없다는 것이었습니다.
그래서, 그냥 GeSHi상에서 적용할 수 있는 verilog 문법 파일을 하나 만들어봤습니다.

GeSHi의 문법파일 지정 방식이 직관적이어서 처음 생각했던것 보다 빠르게 만들수 있었습니다. ^^;

적용은 간단합니다.
아래 파일의 압축을 해제하셔서,  플러그인의 geshi디렉토리에 올리시고, Language이름은 Verilog로 지정하시면 됩니다. 예를들어 Lang-to-html의 경우 code type=Verilog 으로 쓰시면 됩니다.

verilog.rar

개인적으로 쓰려고 만든것이라 버그가 있을수도 있으니 혹 발견하시면 제보해 주세요..



babyworm
2006/10/28 21:27 2006/10/28 21:27
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
GeSHi, Syntax Highlighting, verilog HDL

Trackback0 : Comment2
Trackback Address :: http://babyworm.net/tatter/trackback/85
gnil | 2006/10/30 11:36 | PERMALINK | EDIT/DEL | REPLY
제 wordpress에 시도해 보았던 code highlighting plugin은 vimcolor 였습니다.
(http://dev.wp-plugins.org/wiki/vimcolor)
그다지 널리 퍼지지 않았은데다가
또한 설치할려면 Text::VimColor이라는 perl 모듈 설치도 해야 하는 수고러움도 있지만
어쨌든 cafe24에 무리없이 동작하더라구요...

대충 원리는 VIM에서 HTML 저장하는 기능이 text로 변환되는 것 같은데요...
왠지 시스템에 부하가 많이 갈것도 같고 하지만...
VHDL/Verilog/SPICE/SKILL 까지 지원되는 plugin은 이것 밖에 못 본 것 같아요...
babyworm | 2006/10/30 13:19 | PERMALINK | EDIT/DEL
아.. 그거 moniwiki에도 있는 모듈이군요..^^;
moniwiki관계로 지금 설정은 되어 있을 것인데.. tatter로 coverting하는 것도 그렇고 GeSHi로 우선 만족해야 할 듯 하네요..
알려주셔서 감사합니다.
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
TLM으로 설계가 이동할 것인가?
[babyworm, 2006/10/23 11:04, SoC 설계 관련/검증이야기]
Transaction Level Modeling(이후 TLM)이라는 것이 한 2-3년전부터 SoC설계 분야에서 논문/책/툴을 쏟아내고 있습니다. 그만큼 이제 시장 상황이 익어간다는 것이겠지요.

하지만 설계라는 분야에서 RTL에서 TLM 수준으로 추상화 수준이 이동할 것이라고 믿었던 사람들도 이제는 거의 TLM 수준에서 설계가 이루어질 것이라 믿고 있지 않습니다. 그 이유는 무엇일까요?

예전에 schematic capture수준에서 HDL을 기반으로 하는 RTL수준으로 설계가 옮겨 갈수 있었던 가장 큰 이유는 logic synthesis 기술의 혁신적인 발전에 있습니다.
(저가 처음 digital logic 설계를 배우던 시절이 이 개념이 한창 바뀌던 시절이었던것 같습니다. 학부 3학년때는 schematic capture툴로 설계를 했는데, 학부 4학년때는 VHDL을 시작했거든요.. 개인적으로는 schematic capture툴로 설계를 시작한 것이 설계의 기본기를 많이 배울수 있었던 기회였기에 아주 행운이었다고 생각합니다. )
초기에 logic synthesis는 사실 (전문가가 한) schematic 설계보다는 못하지만, 그 생산성에 있어서 비교할 수 없이 훌륭했고, 어느정도 시간이 흐른 이후에는 설계의 질 또한 훌륭한 수준이 되면서 대부분의 설계가 RTL에서 이루어지게 되었습니다. (물론, 아직도 schematic capture를 이용하여 설계하시는 분들이 계십니다. 몇년전에 일본에서 온 할아버지 엔지니어였던 야노상.. HDL도 잘 모르고, STA도 몰라서 같이 일하는데 아주 괴롭고, 걱정스러웠습니다만.. 동작 잘하는 칩을 만드는 엔지니어였습니다. ^^; 일면 부럽기도 하고요..그 나이까지 엔지니어를 한다는 것이요..)

TLM 수준에서 설계가 이행되지 못하고 있는 큰 이유는 구현(implementation)을 위하여, 손으로 재설계를 해야 하기 때문입니다. 즉, TLM으로 만들고 난 이후에 이를 RTL로 이전시킬 만한 (괜찮은) CAD 툴이 아직 없다는 것이 문제입니다.

뭐, 여러가지 시도가 있기는 합니다만.. 99년에 제가 한창 CAD 알고리즘을 공부할때 behavioral synthesis라는 논문들을 보고.. 이거 돈 되겠다.. 라고 생각했었는데..^^; 사실 이 분야에서 제대로 된 CAD툴이 아직도 못나오고 있는 실정입니다. (비슷한 것으로 자연어 통역기.. 70년대부터 계속 연구되었지만.. 아직까지 못나오고 있습니다... 인공 지능 분야에서 나오지 못할것으로 예상되는 프로젝트 중의 하나로 나와있더군요..^^; 아직 연구는 많이 하지만요..)
여하튼.. TLM 수준에서 RTL로 가는 건 앞에 말한 예보다는 쉬운 것이니 향후 몇년 내에 나올것이라 예상됩니다만.. 아직은 아닌 것이지요..

그럼.. TLM 수준의 설계는 이대로 사망하는 건가요?


TLM은 검증을 싣고..

TLM이 새로운 개념이 아니라는 것은 verification engineer쪽에서는 기본입니다.
왜냐.. 예전부터 검증계에서는 TLM이 좋은 방법이었거든요..
SystemC는 이제 설계 언어라기 보다 검증언어입니다. 물론, architectural simulation하려고 할때 timed model을 예전 C++만을 이용할때 보다 아주 편하게 해주기는 합니다만, 이것이 설계는 아니지 않습니까...

이런 모습을 반영하듯, 초기 systemC는 synopsys에서 synthesizable subset을 지정하고 했습니다만.. 설계 언어로는 대부분 아무도 사용하지 않습니다. (정말 불편하죠..)

이제 SystemC에 추가되고 있는 기능은 대부분 검증 관련입니다. HVL(Hardware verification language)로의 확장에 역점을 두는 것이지요..

SystemVerilog도 마찬가지 입니다. verilog 2001에서 확장되어 발표된 SystemVerilog는 System설계 언어라기 보다 현재로서는 Verilog+HVL이라 할 수 있습니다. (많이 약합니다만..)

TLM기반의 SystemC, systemVerilog의 확장 라이브러리들

SystemC에서는 Cadence의 TestBuilder(이제는 CVE), 그리고, 이를 기반으로 한 SCV가 있습니다.
또한, 최근 멘토에서 AVM(Advanced Verfication Method)라는 검증 methodology(실은 라이브러리)가 나왔습니다. (http://www.mentor.com/products/fv/_3b71 ··· load.cfm). 아마도 Cadence가 donation한 SCV(SCV good to go. Sir! ^^;)에 대한 대항마로 생각되는 부분이 많은데요.. 둘다 무료이고, 공개된 library이니까 설계하는 저희들이야 고맙죠.
국내에서는 CoSOC이라는 서울대 사업단에서 SCV기반의 검증 라이브러리가 나왔는데..  저는 사실 교육을 받고 왔지만 아직도 목적성을 잘 모르겠더군요.. 아무래도 업체가 아니고, 학교 연구소에서 국책 과제로 수행하는 것이다보니 완성도가 아직은 부족한 것 같습니다. (흠..이름을 잊어서 홈페이지에 가봤는데 없는 걸 보니 그냥 접었나보군요)

두 라이브러리 모두 역점을 두고 있는 부분이 assertion, functional coverage, constrant random vector generation입니다. 사실 검증에 있어서 coverage directed constrant random testing이 대세니까요..

요즘에 검증쪽 일을 할라고 슬슬 작업중인데.. 음.. 삽질을 많이 할듯 해서 걱정입니다.
babyworm
2006/10/23 11:04 2006/10/23 11:04
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
assertion, AVM, HVL, SCV, synopsys, SystemC, SystemVerilog, verilog HDL, 검증

Trackback0 : Comment4
Trackback Address :: http://babyworm.net/tatter/trackback/76
gnil | 2006/10/23 13:23 | PERMALINK | EDIT/DEL | REPLY
메모리 공정은 cell cap. 위주라 peri tr. 성능이 잘 안 나오는 것 같아요...
그리고 기능도 복잡한 것은 아니니
메모리 설계는 schematic capture를 어느정도 계속 하지 않을까... 생각됩니당
Static CMOS logic & edge-triggered FF 조합은 overhead가 크다고 보고 있거든요...

그래도 나중엔 차근차근 RTL design flow를 따르는 것도 생길 것 같지만요... (reuse 압박 때문)
그럼 TLM은 너무 머나먼 얘기? ^^;
babyworm | 2006/10/29 21:36 | PERMALINK | EDIT/DEL
게이트의 서킷 수준까지 고려하셔야 하니. 당연하겠지요..^^;
파파존스 | 2006/10/24 01:36 | PERMALINK | EDIT/DEL | REPLY
TLM..
저 박사 논문 쓰면서도 일부 블록은 이 TLM으로 설계해서 검증했더랬죠..
그런데.. 생각만큼 툴이 빨리빨리 못받쳐주네요..
이젠 저에게서도 기억 저편으로 멀어져 갔구요...
Synthesis tool이 똑똑해지면서 RTL이 대접 받은 것 처럼
이 TLM도 EDA의 도움이 절실하죠.. ^^
67hoyah | 2007/02/28 14:57 | PERMALINK | EDIT/DEL | REPLY
퍼갑니다.
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
[verilog] wire와 reg
[babyworm, 2006/09/14 00:17, SoC 설계 관련]

예전에는 verilog동호회니 asic동호회니 나름대로 활발히 활동했었는데, 점점 숙제도와주기 동호회가 되가서 잘 안가게 되었습니다.

정말 오랫만에 오늘 verilog동호회에 갔는데, 위의 질문이 있더군요. 저 질문은 제가 대답한 것만 한 3번 정도이고.. 자세히 정리해서 쓴적도 한번 있을 정도로 verilog를 배우시는 분들에게 있어서 이해가 어려운 부분이듯 합니다. (이제와서야 이렇게 이야기하지만, 되집어 생각해보면 저도 처음 배울때 위의 것의 차이를 잘 몰랐던것 같구요.)

사실 verilog라는 언어자체보다는 설계가 우선인 것이고, verilog는 도구에 불과하지만, 도구를 잘 아는 것도 많은 도움이 되는 것이 사실입니다. 또한, verilog의 timing 정의라던지 신호의 driving에 대해서 어느정도 명확히 이해하면 PLI programming으로 좀 정교한 모델을 만들때 크게 도움이 됩니다.
저 역시도 프로세서 모델의 PLI모델을 만들면서 많은 부분을 좀더 정확히 알게 되었으니까요..

여하튼. 오늘 이야기 할 부분은 바로 wire와 reg, 정확히 이야기하자면 net과 reg라고 부르는 것이 더 맞을 듯 합니다.

우선, verilog를 정의하고 있는 IEEE 1364-2001 표준을 보면 net에 대해서(특히 wire에 대해서)는 다음과 같이 기술하고 있습니다.

The wire and tri nets connect elements. The net types wire and tri shall be identical in their syntax and functions; two names are provided so that the name of a net can indicate the purpose of the net in that model. A wire net can be used for nets that are driven by a single gate or continuous assignment. The tri net type can be used where multiple drivers drive a net.
위에서는 wire와 tri를 기술하고 있는데, 우리의 주된 관심은 wire이므로 이쪽만 살펴보죠.. (사실 tri는 tri-state wire를 기술하고 있는 것으로 속성상 wire와 같습니다. 단, multiple-driver가 허용된다는 것만 다르죠. 혹시 driver가 신호를 보내주는 요소, 즉 게이트 출력, tr의 출력 같은 넘이라는 건 다 아시죠?)
wire는 기본적으로 "연결"을 위한 요소입니다. 그리고, 이것은 단일 게이트 혹은 continuous assignment의 출력을 연결하기 위한 목적으로 사용됩니다.
continous assignment로 대표적인 것이 assign문이므로 다음과 같이 여러분이 일상적으로 쓰는 구문이 가능한 것입니다.


이 문장이 다음과 같은 문장이라는 건 아시죠?


보통 이런식의 문장에서 wire가 가능한 것입니다. wire는 개념적으로 "선을 연결한다"라고 생각하십시요.
출력포트에 어떤 표현식의 출력을 연결할때 사용되는 것 처럼요..

이제 reg에 대해 알아봅시다. 역시 표준 문서의 정의를 먼저 보겠습니다.

Assignments to a reg are made by procedural assignments (see 6.2 and 9.2). Since the reg holds a value between assignments, it can be used to model hardware registers. Edge-sensitive (i.e., flip-flops) and level sensitive (i.e., RS and transparent latches) storage elements can be modeled. A reg needs not represent a hardware storage element since it can also be used to represent combinatorial logic.
위의 정의에 따르면, reg는 procedural assignment(절차적 assignment는 소위 always begin.. end, initial begin.. end사이에 사용되는 모든 표현식으로 생각하십시요..)에 의하여 assign되는 요소입니다. 또한, assign사이에 값을 저장할 수 있습니다. 이런 속성을 이용해서 flip-flop이나 latch를 만들수 있다고 되어 있습니다. 많은 초보자분들이 헷깔리시는 부분이 바로 이 속성때문일 것입니다. 보통 플립플롭 즉, 순차 회로를 만들때 reg문을 많이 사용하다보니, 많은 분들이 reg문을 사용하면 register(즉 플립플롭)이 생성될 것이라는 생각을 가지고 있습니다.
하지만, 표준의 마지막 문장에서 이건 절대 아니라고 명시하고 있으며, 실제로도 그렇습니다.
그래서, 'reg는 register가 나오는 것이다'라고 생각하시는 많은 분들이 'reg이면 register가 나와야 하는건데.. 왜 안나오지? 그럼 wire랑 뭐가 다른거야?' 라는 궁금증을 가지십니다.

이제부터 차근 차근 설명 드리지요..

procedural assignment를 수행하는 과정(begin에서부터 end까지)에서 이 값은 임시로 보관 될 수 있습니다.
비유를 하자면 reg문은 그릇같은 것이라 할수 있습니다. 입력이 들어오면 그걸 가지고 생성된 임시값을 일단 그릇에 담습니다. 그리고, 어떤 경우에던지간에  입력에 의하여 결과의 변화를 end문을 만나기 전까지 기술할 수 있다면, 그건 더 이상 그릇에 담을 필요가 없이 최종결과로 보고 쏟아버리면 됩니다.
이런 경우는 reg문장이 더이상 그릇의 형태를 지닐 필요가 없겠습니다.
따라서, storage element로 구현되지 않습니다. 과거를 기억할 필요가 없으니까요..


이 예에서는 모든 가능한 경우에 대해서 출력이 정의되어 있지요? 그래서, 이 예의 문장은 조합회로로 구현됩니다.

하지만, 입력에 따라서 그 결과의 변화를 나타낼 수 없는 경우가 생긴다면, 이전에 내가 가지고 있던..즉, 예전에 그릇안에 있던 값이 유지되어야 할 조건이 되는 것이므로, reg는 그릇의 형태를 가지고 예전에 결과를 담을 수 있어야 합니다. 
이 경우에, reg는 storage element로 구현됩니다. 과거를 알아야 하니까요..


위의 예에서 위의 경우에서 if문이나 else if에 만족 하지 않으면, 예전 값을 그대로 가져 가겠다는 거죠? 그래서, 과거의 값을 기억할 필요성이 생겼습니다. 그래서 저장장치인 래치로 구현됩니다.


이 코드는 언듯 입력에 대한 모든 경우가 표시된 것 같습니다만.. always문에서 clk의 상승엣지 혹은 rst_x의 하강엣지까지 "기다려"라고 선언했기 때문에 입력에 따른 변화값이 "기억되어야 합니다". 그래서 기억할 필요성으로 인하여 저장장치(플립플롭)로 구현됩니다.

요약하자면,
1) reg가 과거값을 알아야 할 경우가 생긴다면(입력에 의한 출력이 모두 기술되지 않거나, 특정 입력을 기다려야 하는 경우), reg는 storage element로 구현된다.
2) reg가 과거값을 알아야 할 경우가 없다면, 일반적인 combinational logic으로 구현된다.

이해가 가시런지요?

두번째 요약!

1) wire는 net 형식이다. net 형식은 연결을 위한 요소이다. wire는 continous assignment(assign)에 의하여 assign될 수 있다.
2) reg는 그 자체로 reg 형식이다. reg는 procedural assignment(always begin.. end)에 의하여 assign 될 수 있다. reg는 잠깐동안 값을 보관할 수도 있다. (보관이 필요없으면 combinational logic으로, 보관이 필요하면 storage element를 포함하는 logic으로 구현된다)

이렇습니다.
초보분들께 도움이 되셨으면 좋겠습니다.


p.s.
ASIC으로 밥먹고 사는 저도 verilog에 대해 속속들이 다알고 쓰는것은 아닙니다. 권장할 만한 사항도 아니구요(필요한 정도만 속속들이 알아야죠..).. 어짜피 verilog 자체로 ART를 하는 것도 아니고, 최종적으로 회로가 나와야 하는데, 일정 수준 이상의 문법은 CAD툴에서 안전하지 못하거든요..

그래서, verlog HDL에서는 coding style이라는 guide line이 있습니다.
말하자면, 이런 경우에는 이렇게 쓰면 좋다. 이런 문장은 왠만하면 쓰지 말아라.. 뭐 이런 지침 같은 것입니다. 가장 유명한 책이 바로 아래의 RMM이라는 책인데, 이쪽 계통을 지망하시는 분께는 아마도 "필독서"가 아닐까 생각합니다. 개인적으로 공부삼아 번역도 좀 해본적이 있고.. (실제로는 귀찮아서 번역은 하다 말았고, 정독한번 잘했다~ 정도로 생각하고 있습니다.)
사용자 삽입 이미지


하다보니, 겸사 겸사 책 소개도 되었군요.. 나중에 기회되면 RMM에 대해서는 좀더 자세히 소개해 드릴 기회가 있겠지요.
babyworm
2006/09/14 00:17 2006/09/14 00:17
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
reg, verilog HDL, wire

Trackback0 : Comment5
Trackback Address :: http://babyworm.net/tatter/trackback/43
holyan | 2007/04/22 14:18 | PERMALINK | EDIT/DEL | REPLY
좋은내용 정말 잘 읽고 갑니다(__)
babyworm | 2007/04/29 00:10 | PERMALINK | EDIT/DEL
네.. 감사합니다.
ryun | 2007/04/26 17:24 | PERMALINK | EDIT/DEL | REPLY
정말 쉽게 이해가 되네요.

감사합니다~ ^^
babyworm | 2007/04/29 00:10 | PERMALINK | EDIT/DEL
도움이 되셨나니 저도 기쁩니다. :)
jwook1004 | 2008/11/13 22:13 | PERMALINK | EDIT/DEL | REPLY
좋은 책 소개 감사합니다.
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
verilog HDL, System Verilog, system C, e, vera.. PLI
[babyworm, 2006/06/01 22:28, SoC 설계 관련]
대충 ASIC 엔지니어들이 사용하는 언어들이죠..

아니! VHDL을 빼 먹었잖아~! 하고  말 하시는 분도 있겠지만, 개인적으로 석사 3학기때 이후로 VHDL은 안쓰고 있는지라, 잘 몰라서 그렇다.. 라고 생각하셔도 좋겠습니다.
또한, 개인적으로는 VHDL이 verilog에 비하여 많은 부분에서 상당히 밀리고 있으며, 그것이 요즘 경향이라고 생각하고 있는 점도 없지않아 있습니다.

VHDL 사용자 분들은 VHDL의 유연함과 OOP적인 요소를 장점으로 꼽으시는데, 예 맞습니다. ^^;
근데, VHDL의 유연함과 OOP적인 장점은 검증이나 description에서는 편하지만, 설계 자체에 있어서는 그리 편하지 않지요..
verilog HDL의 장점은 말 그대로, 간단히 설계할 수 있다는 점 아니겠습니까.

96년도 정도에는 VHDL이 세상을 곧 지배할 것 같았지만, 사실 95년도에 verilog가 IEEE표준이 되고, 열약했던 시뮬레이션 툴들이 (네, verilog-XL이 있습니다만, 다른 대안이 없었지요..) 정비되면서, 실무쪽에서는 거의 verilog HDL로 정리된것 같습니다.

학교쪽에서야 아직 VHDL을 많이 사용합니다만.. ^^; 학교 이야기겠구요..

오늘 주절히 주절히 ASIC에서 사용되는 언어들을 제목으로 단 것은 바로, verilog의 약점인 검증 부분을 채우기 위한 노력들입니다.
verilog HDL은 verilog 2001이라는 새로운 표준에서 검증을 위한 다양한 기능과 좀더 편한 설계를 위하여 보강하고 있으며 (이 부분에 대해서는 예전 posting인 verilog HDL 2001을 보세요~), 좀더 강력한 기능으로 system verilog를 정의하였습니다.

system verilog는 강력한 assetion과 더불어 데이터 구조의 지원등으로 설계쪽 보다는 검증의 편의성을 노린 흔적이 역력합니다.
이는 최근에 역시 IEEE표준으로 지정된 검증계의 기린아 'e' 언어를 노리고 있는 것이 거의 확실한듯 합니다.
아직은 e과 약간 다른 전장을 놓고 다투고 있습니다만, 거의 다가갔죠.. 전운이 감도는 시장입니다.
물론, e가 cadence를 위주로 지원되고 있다면, system verilog는 좀더 많은 EDA업계의 지원을 받고 있으니까 약간 더 유리하지 않을까 하는 생각입니다.

단, 그동안 e 언어가 가지고 있던 그 화려한 경력과 know-how가 가득담긴 코드들이 있으니, 최종 일전이 어떻게 될지는 모르겠습니다.

vera의 경우 synsopsys가 밀어주는 검증언어인데, 상대적으로 VCS가 약하니까 덩달아 사그러드는 느낌입니다. 몇년전 부터 vera spec을 open하고 openvera를 퍼트리려고 노력중인데, 아직 멀었습니다.
e 언어가 공개되기 전에 하지.. 아쉽...

한때 차세대로 불리우던 systemC가 있군요..
뭐, 아직도 차세대 system C라고 해야 할까요?
설계 언어로서는 좀 그런것 같구요.. (synthesiable subset만으로 설계하느니 verilog로 하는게 100만배 쉽습니다. ^^; 역시 각각에 분야에 맞는 것이 있는 것이죠) 최근에는 cadence에서 낼롬 기증한 SCV(예전의 testbuilder인데, 일부를 기증해서 표준화 했습니다.)를 필두로, 검증을 위한 환경으로는 폭넓게 받아들여지고 있는 듯 합니다.

아무래도, coverification의 관점에서도 C기반의 interface가 지원되는 것이 편하니까요..

system C와 verilog간의 co-simulation에 약간 그림 이쁘게 보여주고, 좀 쉽게 해주는 것에 여러 회사가 도전중입니다. CoWare도 있구요..
뭐, 전반적으로 회사들의 평은 거의 "악평일색"입니다.  놀라운 이야기입니다.
그림 나오고 다 좋은데, 잘 안돌죠.. 아직은 1~2년 정도 지나서 좀더 진화해야 할 듯 합니다.

차라리, PLI에 TCL/TK를 연결하는 것이 이쁘고 좋습니다. ^^; 무료인데다 자유롭죠..
PLI도 재미있고, TCL/TK도 재미있고..
아주 즐겁지 않습니까?

얼마전에 회사에서 재미삼아 virtual UART라는 시뮬레이션때 사용가능한 터미날 프로그램을 PLI와 TCL/TK로 만들었는데, 개인적으로 즐거운 작업이었습니다. ^^;

나중에 이 블로그로 공개될 기회가 있겠죠..
babyworm
2006/06/01 22:28 2006/06/01 22:28
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
PLI, verilog HDL

Trackback0 : Comment4
Trackback Address :: http://babyworm.net/tatter/trackback/15
김은찬 | 2006/08/24 11:53 | PERMALINK | EDIT/DEL | REPLY
아직도 학교에서 왜 VHDL을 가르치는지 모르겠네요. VHDL, Verilog HDL을 사용해 본 바로는 verilog HDL이 이해하기가 훨씬 쉽고 더 빨리 배울 수 있는데, -_-;; VHDL은 학술 연구 부분으로 사장되어버리려나 봅니다..
babyworm | 2006/08/24 13:18 | PERMALINK | EDIT/DEL
아마도 많은 교수님들께서 HDL을 새로 배우실 시절에 IDEC도 없었고, 학교에서 구매해서 쓸만했던 합리적인 가격의 시뮬레이션툴리 VHDL만 지원했기 때문이라고 생각합니다. (당시의 modelsim은 거의 VHDL전용이었습니다. verilog 시뮬레이션에 오류가 많았죠.)

저도 학부와 석사 초기에는 있을때 Verilog simulator의 가격때문에 VHDL 시뮬레이터만 썼었거든요.. 물론, 나중에 IDEC에 가입하면서, verilog simulator로 변했습니다만..

이제 바뀔때가 된 것도 같은데.. 아직은 쉽지 않네요.
gnil | 2006/09/04 10:29 | PERMALINK | EDIT/DEL
VHDL은... 아직 사용하고 있는 곳(특히 유럽)이 있기 때문에
정말 간혹가다가 밖에서 쓸모있을 때가 있습니다...
예를 들면 고객이 DRAM model로 VHDL을 요청할 때 해주면 좋죠...
또한 Verilog에 비해 VHDL을 잘 쓰는 사람이 드뭅니다.

하지만 처음에 Verilog랑 VHDL이랑 뭐 배워야 하는지
선택한다면 당근 Verilog이라고 생각합니다 ^^;
babyworm | 2006/09/04 18:23 | PERMALINK | EDIT/DEL
유럽쪽은 아무래도 VHDL이 강세죠..
사실 전자쪽에서 VHDL-유럽; Verilog-북미식의 표준화 대결 구도는 좋은점도 나쁜점도 있는 것 같습니다.

HDL에 한정지어 이야기 하자면 저처럼 IP만드는 사람은 두가지 다 신경써야 되니까 싫지만 말입니다. ^^;


[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
verilog PLI 배우기(2); VPI handle
[babyworm, 2006/05/29 23:36, SoC 설계 관련]

지난번에 이야기하고, 너무 많은 시간이 지났군요..
acc_, tf_ 와 다르게 VPI는 handle이라는 데이터 구조체를 이용하여 verilog simulator의 데이터 구조체에 접근합니다.

acc_, tf_ 의 경우에도 handle(정확히는 handle이라 부를만한 것)이 없는 건 아니지만, verilog simulator의 실제적인 데이터 object에 직접 접근한다는 개념이 강했습니다. 따라서, 필요한 object의 형태, 크기등의 여러가지 정보를 하나 하나 챙겨봐야 했지요.
하지만, VPI는 handle이라 불리는 복합적인 데이터 구조체를 이용하고, 이를 기반으로 편하게 verilog simulator의 데이터에 접근할 수 있습니다.

verilog VPI의 handle은 다음과 같이 선언하면 됩니다. (이를 위해서 vpi_user.h 가 include되어야 하는 건 당연하겠죠?)


handle은 verilog simulator와 PLI루틴과의 관계를 정립할때 여러가지 형태를 가질 수 있도록 되어 있는데,  기본적으로 1-to-1 관계, 1-to-many관계, many-to-one의 관계로 나뉠수 있습니다.

각각은 말 그대로 verilog simulator의 객체를 PLI함수에서 볼때 어떻게 볼지에 대한 내용입니다. 이건 예제를 하나씩 보면서 배우면 되겠지요.

우선, verilog simulator에 접근해서 handle을 얻어와야 합니다.
이러한 동작은 vpi_handle(), vpi_iterate(), vpi_scan()과 같은 함수를 통하여 이루어집니다.
이 중에 vpi_handle()은 one-to-one관계를 만들어냅니다.

위의 함수는 형태와 대상 핸들명을 정하고 이에 맞는 핸들을 얻어오는 것입니다.
이때 형태를 vpiModule로 하면 verilog simulator의 모듈을 얻을 수 있겠고, callback 함수의 핸들을 얻으려면 vpiSysTfCall를 형태로 지정하면 되겠습니다.

vpiSysTfCall 의 경우 우리가 정의할 시스템 콜에 대하여 적용가능합니다.
즉, 우리가 시스템 콜을 정의하고, 이것을 verilog simulator에서 사용하는 경우에 이 형태가 vpiSysTfCall이 되는 것이겠죠. 따라서, 만일 우리가 verilog simulator에서 호출된 PLI함수에 어떤 전달 인자가 나왔는지 확인하려면 기본적으로 vpiSysTfCall이라는 형태의 handle을 받아야 합니다.

받아들인 핸들로부터 전달 인자(이것도 역시 핸들입니다.)를 추출하는 건 vpi_iterate() 함수를 사용합니다.
vpi_iterator는 여러개의 핸들을 몽창~ 추출하는 함수죠.(사실 핸들들을 몽창 이라기 보다, 여러 객체가 존재하는 하나의 핸들이라고 하는 것이 더 맞다고 생각합니다만...)

iterator는 C++, 특히 STL을 사용하시는 분들은 잘 아시겠지만, 반복자라 이야기하는 것은 여러 연속된 데이터를 순회하면서 데이터를 끄집어내는 형태의 데이터 구조를 뜻합니다. (뭐 예를 들어, linked list도 iterator요, array도 iterator죠.. 즉, 하나의 포인터로 순회하면서 여러개의 데이터에 접근 가능한 모든 데이터 형태를 일반화한 말..이라고 하면 좀 쉬울라나요? 더 어려울 라나요?)

자 간단하게 이 부분 까지의 코드를 만들어 볼까요?


이런식이죠.. 이제 다음에는 조금 더~ VPI의 모델에 대해서 알아보죠~

babyworm
2006/05/29 23:36 2006/05/29 23:36
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
PLI, verilog HDL

Trackback0 : Comment0
Trackback Address :: http://babyworm.net/tatter/trackback/13
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
Verilog PLI 배우기 (1)
[babyworm, 2006/05/18 22:30, SoC 설계 관련]

Verilog 사용자가 별로 없는지라(이 이야기에 발끈~하는 엔지니어 분들도 계시겠지만, 사실 C언어 사용자 보다는 적은거 맞잖습니까.., 우리나라 사람들중에 공학도 중에, 전자공학도 중에, verilog HDL을 쓰는 분을 따지면 별로 안되죠..^^) 국내에는 verilog PLI에 대하여 다루고 있는 페이지도 별로 없다.

개인적으로도 verilog PLI 관련 내용은 외국의 웹 페이지나, sutherland의 책을 참조하고 있는데, 국내의 많은 분들도 PLI를 적극적으로 이용하고 있음에 의심에 여지가 없건만 다들 숨기기만 하시니, 참조할 곳이 참 적기만 하다.

책이야기와 더불어 verilog PLI 이야기를 특히 VPI 이야기를 한번 해보려 한다.
뭐, 나도 PLI중의 tf_나 acc_는 좀 써봤지만, VPI는 얼마전에 처음 다루어 보았다.

그래서 공부 겸사 겸사.. 시간 될때 마다 정리해서 올려보려고한다.

우선 이번에는 PLI에 대한 대략적인 틀에 대해서~
(뭐 머리속에 있는 걸 쓰는 것이니 틀린것이 있을지도..)

PLI는 Programming Language Interface, 즉 verilog 에서 C/C++과 같은 언어와의 연동을 위하여 제공하는 일종의 API이다. 예전에 정의된 tf_, acc_(소위 PLI1.0)는 각각의 상황에 맞는 수많은 함수가 존재해서, 적절한 함수만 찾으면 쓰기는 쉽다는 장점이 있었다. (babyworm도 예전에 이걸 가지고 simulator와 verilog와 연동시킨 적이 있다..)

하지만, 함수가 너무 많아서 reference가 없으면 도저히 쓰기 어렵고, 명확히 정의되지 않았다는 단점이 있다(특히 verilog simulator와의 interfacing부분에 있어서 표준화 되어 있지 않다).

VPI는 다시 정의된 PLI함수로서 소위 PLI2.0으로 불린다. 예전에는 시뮬레이터 지원이 잘 안된다는 단점이 있었다지만, 요즘 시뮬레이터에서는 대부분 지원하고, 상당히 일관된 인터페이스를 지니고 있는 장점을 가지고 있다.

개인적으로는 acc_, tf_ 를 알면 verilog simulator가 어떻게 object들을 처리하는지 정말 잘~ 알게되는 장점(?)이 있는 반면, VPI는 그런 거 알 필요 없이 함수의 설정만 알아도 대부분 처리할 수 있다는 장점이 있다.
사용자 입장에서 어떤것이 편한 것인지는 말할 필요가 없다.

PLI는 기본적으로
1. 그 함수를  verilog simulator에 등록하는 부분을 지니고,
2. 해당 PLI 함수의 초기화, 호출, 크기 검사를 수행하는 callback 함수를 지니고 있다. (PLI1.0에는 misctf라는 재미나고 babyworm이 잘 사용하는 callback이 하나 더 있었다)

PLI를 verilog simlator와 연동하는 가장 쉬운 방법은 dynamic library로써 PLI함수를 컴파일하고, 이를 verilog simulator호출 시점에서 시뮬레이터에 알리는 것이다.

간단한 예를 들자면,



이런식이다. 위에서 loadvpi라는 옵션을 사용헀는데, 이는 VPI 형태의 PLI함수를 포함한 동적 라이브러리를 시뮬레이션 시에 포함하되, aaa_bootfunc 이라는 것이 등록함수(다른 말로 bootstrap이라고 한다)로 사용할 것임을 알려주는 것이다.

다음번에는 실제적으로 VPI의 전반적인 얼계에 대해서 살펴봅시다.

babyworm
2006/05/18 22:30 2006/05/18 22:30
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
PLI, SoC, verilog HDL

Trackback0 : Comment0
Trackback Address :: http://babyworm.net/tatter/trackback/11
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
Michael D. Ciletti 의 Verilog HDL 시리즈
[babyworm, 2006/05/07 23:30, 책이야기]
오늘 소개드릴 책은 Ciletti의 verilog HDL 책들입니다.
실제로 제가 읽은 책은 Modeling, Synthesis, and Rapid Prototyping with the VERILOG (TM) HDL 과 Advanced Digital Design With the Verilog Hdl 의 두권입니다만, 최신간으로 Starter's Guide to Verilog 2001 라는 책이 추가 되었더군요..

Ciletti의 책은 기본적으로 "참고서"적인 책입니다.
특히 "Modeling Synthesis... "라는 책은 거의 verilog HDL의 모든 기능에 충실한 책입니다. 다른말로, 처음 HDL을 다루는 분들께 적합다고, 내용도 많고.. 하다는 것이죠..
약간 다룰줄 아는 분은 그냥 문법이 헷깔리는 부분의 있을때 보기 좋습니다.
저같은 경우도 작업하다가 부록의 system task들을 간혹 참조하고 있습니다.

하지만, Advanced Digital Design with the Verilog HDL 책은 말 그대로 HDL에 대한 책이라기 보다는 설계에 대한.. 말은 Advanced인데, 실제적인 내용은 기본적인 디지탈 로직을 꾸미는 방법에 대하여 설명하고 있습니다. 대부분 ASIC하시는 분들은 거의 알만한 내용이므로, 크게 도움은 되지 않습니다.

하지만, 기초서들이 항상 그렇듯이 간혹 재미삼아 읽어보면 잊고 있던 기본기를 알려주는 즐거움도 있습니다. 아쉽게도, 다른 기초서들이 가지고 있는 다양한 언어로 같은 상황을 표현해주는 즐거움은 적죠.. 그냥 "참고서"니까요..

verilog 2001책은 "제가 읽지 않았음을 다시 알려드리고", review의 내용만으로 보기에는 좀 그런책있거 같네요..
여하튼 Ciletti 아저씨의 책은 "참고서"로는 괜찮아요..
단, 즐거움이 있는 책은 아닙니다.

이상 끝!
babyworm
2006/05/07 23:30 2006/05/07 23:30
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
verilog HDL

Trackback0 : Comment1
Trackback Address :: http://babyworm.net/tatter/trackback/8
황동혁 | 2008/03/14 10:25 | PERMALINK | EDIT/DEL | REPLY
저도 ciletti의 책을 약 3년전에 구입해서 가끔 보고 있는데
도움이 많이 되고 있습니다.
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
*1
Location : Tag : GuestBook : Admin
babyworm’s Blog is powered by Tattertools.com / Designed by Hisday / Modified by Daisy