본문 바로가기

language68

[vcs] vcs, verdi, systemverilog tutorial 강의 www.youtube.com/channel/UCie9pbYjNDqWhmpNz_l3b3Q KK SystemVerilog KK와 함께하는 System Verilog www.youtube.com sysnopsys에서 좋은 강의자료를 올려논 것 같아 공유합니다. 2021. 4. 10.
[verilog] casex, casez 차이 보통 digital logic을 design 하다보면 if, case문을 사용할 때가 있습니다. if문이나 case문의 경우 들어오는 data의 정보가 명확하게 RTL code로 표현이 되기 때문에 사용하는데 있어서는 그다지 문제가 되지 않습니다. 그러나 don't care, 'z' 같은 신호들을 처리해야 한다고 할 때는 어떻게 처리하는지 알아보도록 하겠습니다. 우선 먼저 casex, casez 같은 것으로 코드를 작성하면 합성이 되는가에 대한 질문이 있을 수 있는데 대답은 'yes'입니다. (저도 구글링하다가 알았습니다.) 1. casex 'X', 'Z'를 모두 don't care 처리 2'b1x = 2'b10, 2'b11, 2'b1x, 2'b1z 3'b1xz = 3'b100, 3'b101, 3'b11.. 2021. 4. 10.
[vcs] 명령어 및 option 정리 synopsys사의 VCS와 verdi는 digital logic을 검증하는데 사용하는 compiler, simulation, debug tool 입니다. 주로 명령어 창에서 옵션들을 다양하게 붙여서 사용하는데 주로 사용하는 옵션들만 몇개 정리해보겠습니다 1. VCS kdb는 compile시 생성되는 logic의 design file 이며, fsdb는 simulation 파형이 저장되는 파일입니다. -kdb KDB file 생성 -sverilog systemverilog 사용 -full64 64bit simulation -reportstats performance/memory 사용량이 report로 출력 -timescale=1ns/1ps compile시 사용할 timescale -l 파일명 log fil.. 2021. 4. 9.
[vcs] $dumpvars option VCS를 이용하여 FSDB를 dumping 받을 때 사용하는 system task인 $dumpvars의 option을 항상 매뉴얼보고 확인하기 힘들어 여기에 정리합니다. option description "+IO_Only" Only IO port signals will be dumped. "+Reg_Only"Only reg type signals will be dumped. "+mda"Dump all memory and MDA signals in all scopes specified in $fsdbDumpvars or the entire design if no scope is specified. This option is covered by the "+all" option and is effective .. 2021. 3. 12.
[systemverilog] random 함수들 verilog 안에는 random변수를 지원하는 system task들이 있습니다. $random, $urandom, $srandom, $urandom_range, randomize(), std::randomize() $random%숫자 (-숫자+1, 숫자-1) 범위안의 32bit signed int 생성 $urandom%숫자 [0, 숫자) 범위안의 32bit unsigned int 생성 $srandom(seed) seed setting(숫자생성은 x) $urandom_gen(min, max) [min, max)범위안의 32bit unsigned int 생성 randomize() 클래스 내부 변수를 random하게 생성 std::randomize() 일반 변수를 random 하게 생성 (문서들 뒤져보면 .. 2021. 2. 27.
[systemverilog] assert, property systemverilog에서는 검증을 위해 프로그래밍적 요소가 많이 추가 되었는데, 대표적인것이 assert와 property 입니다. assert는 우리가 프로그래밍 할 때 사용하는 assert와 동일 합니다. assert(data_1 == data_2) // data_1과 data_2가 같지 않다면 에러를 발생시킨다 위의 코드를 실제로 돌리면 어떻게 나오는지 코드를 아래와 같이 작성했습니다. initial begin assert(data == data_t) else $fatal("Stop"); fork data_gen(data); data_gen_t(data_t); join end always #(`Clock_period/2) clk = !clk; task automatic data_gen_t(ref.. 2021. 2. 21.