오늘은 맑음

웹 기반 베릴로그 시뮬레이터 : HDLBits 본문

Tools/HDLBits

웹 기반 베릴로그 시뮬레이터 : HDLBits

자전거 타는 구구 2022. 3. 26. 21:22
반응형

 새로운 무료 베릴로그 시뮬레이터를 알게 되어 사용해보고 후기를 남겨봅니다.

 이 웹 기반 베릴로그 시뮬레이터는 이카루스 베릴로그를 기반으로 동작합니다.

 

https://en.wikipedia.org/wiki/Icarus_Verilog

 

Icarus Verilog - Wikipedia

Icarus Verilog is an implementation of the Verilog hardware description language. It supports the 1995, 2001 and 2005 versions of the standard, portions of SystemVerilog, and some extensions. Icarus Verilog is available for Linux, FreeBSD, OpenSolaris, AIX

en.wikipedia.org

 

 학생 때 가벼운 툴을 써보겠다며 이것 저것 알아보다가 이카루스 베릴로그도 알게 되었는데...

 결국 귀찮음에 ISE design suite나 vivado를 사용했었죠

 

 당시에는 데스크탑의 사양이 좋아서 가볍게 잘 사용 했었는데, 지금은 오래된 노트북(6년...) 하나 있다보니 vivado가 상당히 무겁습니다.

 

 학생분들의 경우에 사양이 낮은 노트북을 사용하실 수도 있으실텐데, 이런 경우에 vivado는 상당히 무겁죠.

 대안으로 modelsim이 있지만 라이센스 받고 설치하고 조금 귀찮긴 합니다.

 

 그런 대안으로 웹 기반 HDLBits를 사용해보시면 참 좋을 것 같습니다.

HDLBits (01xz.net)

 

HDLBits

HDLBits — Verilog Practice HDLBits is a collection of small circuit design exercises for practicing digital hardware design using Verilog Hardware Description Language (HDL). Earlier problems follow a tutorial style, while later problems will increasingl

hdlbits.01xz.net

 위의 링크를 타고 가시면 사용해 보실 수 있습니다.

 

 가볍다는 장점 외에 또 좋다고 생각한 점은 다양한 예제가 있습니다.

각 링크를 타고 가면 verilog language부터 testbench 작성까지 많은 예제를 풀어볼 수 있다

 하나 하나 눌러보면 기본 verilog language부터 조합회로, 순차회로와 시뮬레이션 파형 읽는 예제와 테스트벤치를 작성하는 예제까지 많습니다.

 쭉 따라가보면 재미(?)도 있고 공부하는 입장으로 책만 보기에 지루한데 좋은 예제가 될 것 같아요.

 

자 그럼 다음은 시뮬레이터를 사용해볼께요.

상단 툴바

상단 툴바에서 Simulation을 선택해줍니다.

 

첫 시뮬레이션 화면

 첫 시뮬레이션 화면을 보면 첫 번째 module로는 testbench top module이 선언되어 있고, 두 번째 모듈로 동작 모듈이 선언되어 있습니다. 

 한 창에서 동작 모듈 설계와 테스트벤치 모듈을 동시에 작업을 해야 하므로 간단한 테스트 용도로는 아주 좋을 것 같아요.

 기본 동작은 verilog hdl을 기반으로 하기 때문에 문법과 사용법은 같습니다.

 하지만 차이점이 있다면 `probe를 사용하네요.

 저도 처음 사용해봐서 아래에 있는 설명서를 봤습니다.

Timing Diagram 사용법

`probe : 타이밍 다이어그램에 표시할 신호를 추가해줍니다.

`probe_start : 타이밍 다이어그램을 시작합니다. 즉, start가 된 시점부터 다이어그램이 덤프됩니다.

`probe_stop : 타이밍 다이어그램을 멈춥니다. stop이 선언되면 덤프를 멈춥니다.

 

 이 것만 알고 계시면 다른 시뮬레이터와 동일하게 사용할 수 있겠네요.

그러면 이제 사용을 해봐야겠죠?

 

HDLBits 사용


간단한 counter를 짜봤어요.

 

카운터 예제

 Clock, negative reset, init과 valid가 입력되고, ready와 cnt가 출력됩니다.

 reset과 init으로 인해 초기 register값들이 세팅되고 ready와 valid 신호가 모두 high일 때 handshake신호에 의해서  r_cnt 레지스터에 1씩 더해지는 간단한 모듈로 테스트를 진행했습니다.

testbench

  테스트 벤치는 위와 같이 간단하게 reset, init, valid를 차례대로 입력해주었습니다.

  그리고 꼭 테스트벤치에서 $finish를 넣어주어야 합니다.

  $finish를 넣어주지 않으면 infinite loop를 넣은 것과 동일하게 인식되어 시뮬레이션이 나오지 않습니다.

파형을 보고 싶다면 $finish를 넣어주자

 Syntex error도 이렇게 잡아줍니다.

syntex error check

 

그럼 코드를 모두 넣었다면 시뮬레이션을 해볼까요?

submit!

 Submit을 누르면 같은 창에서 컴파일 및 시뮬레이션이 시작되고, Submit(new window)를 누르면 새 창에서 시뮬레이션이 진행됩니다.

 

 Submit을 누르면 아래와 같이 compile and simulate라고 리포트 메시지가 나오고, 아래에 시뮬레이션 파형이 나옵니다.

 화면에는 제가 `probe를 이용해 추가한 신호들이 출력됩니다.

 

 차례대로 테스트벤치가 동작합니다.

  1. negative reset이 high로 올라오고, init이 입력됩니다. 
  2. init이 입력되면서 counter module에서 ready가 high가 되고, valid가 입력되면서 ready_valid가 high가 됩니다.
  3. ready_valid가 high가 high가 되면서 counter가 동작해서 1씩 증가된 값이 출력됩니다.

 

HDLBits의 사용을 마치면서...

 여태까지 제가 사용했던 시뮬레이터 중에 가장 가벼운 시뮬레이터였습니다.

 별도의 프로그램 설치 없이 사용할 수 있고, 라이센스의 부담이 없어서 좋았어요.

 물론 다른 무거운 툴들에 비해 많은 기능이 있지는 않지만, 공부한다는 목적이라면 충분한 기능이라고 생각합니다.

 포함된 예제들도 너무 좋고 어디서든지 사용할 수 있다는 장점으로 학생들 혹은 이제 공부를 막 시작하신 분들에게 정말로 도움이 많이 될 것 같다는 생각이 들었습니다.

 

 

 

반응형
Comments