일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pygraphviz 설치 오류
- Pyverilog 튜토리얼
- CDC
- CUDA
- linux c++ 컴파일
- makefile
- linux c 컴파일
- gpgpu-sim
- 남산업힐
- systolic array
- 딥러닝 가속기
- Design DNN Accelerator
- 이진수 곱셈 알고리즘
- pyverilog 설치 오류
- DNN Accelerator
- Data HAzard
- Pyverilog 설치
- CLOCK GATING
- DNN 가속기
- Pyvrilog tutorial
- Pyverilog 실행
- linux makefile 작성
- 대구 반도체 설계기업 특화
- gcc 컴파일
- 데이터 해저드
- 클럭 게이팅
- AMBA
- Makefile compile
- pytest-pythonpath 설치 오류
- 컨벌루션 연산
- Today
- Total
오늘은 맑음
웹 기반 베릴로그 시뮬레이터 : HDLBits 본문
새로운 무료 베릴로그 시뮬레이터를 알게 되어 사용해보고 후기를 남겨봅니다.
이 웹 기반 베릴로그 시뮬레이터는 이카루스 베릴로그를 기반으로 동작합니다.
https://en.wikipedia.org/wiki/Icarus_Verilog
학생 때 가벼운 툴을 써보겠다며 이것 저것 알아보다가 이카루스 베릴로그도 알게 되었는데...
결국 귀찮음에 ISE design suite나 vivado를 사용했었죠
당시에는 데스크탑의 사양이 좋아서 가볍게 잘 사용 했었는데, 지금은 오래된 노트북(6년...) 하나 있다보니 vivado가 상당히 무겁습니다.
학생분들의 경우에 사양이 낮은 노트북을 사용하실 수도 있으실텐데, 이런 경우에 vivado는 상당히 무겁죠.
대안으로 modelsim이 있지만 라이센스 받고 설치하고 조금 귀찮긴 합니다.
그런 대안으로 웹 기반 HDLBits를 사용해보시면 참 좋을 것 같습니다.
위의 링크를 타고 가시면 사용해 보실 수 있습니다.
가볍다는 장점 외에 또 좋다고 생각한 점은 다양한 예제가 있습니다.
하나 하나 눌러보면 기본 verilog language부터 조합회로, 순차회로와 시뮬레이션 파형 읽는 예제와 테스트벤치를 작성하는 예제까지 많습니다.
쭉 따라가보면 재미(?)도 있고 공부하는 입장으로 책만 보기에 지루한데 좋은 예제가 될 것 같아요.
자 그럼 다음은 시뮬레이터를 사용해볼께요.
상단 툴바에서 Simulation을 선택해줍니다.
첫 시뮬레이션 화면을 보면 첫 번째 module로는 testbench top module이 선언되어 있고, 두 번째 모듈로 동작 모듈이 선언되어 있습니다.
한 창에서 동작 모듈 설계와 테스트벤치 모듈을 동시에 작업을 해야 하므로 간단한 테스트 용도로는 아주 좋을 것 같아요.
기본 동작은 verilog hdl을 기반으로 하기 때문에 문법과 사용법은 같습니다.
하지만 차이점이 있다면 `probe를 사용하네요.
저도 처음 사용해봐서 아래에 있는 설명서를 봤습니다.
`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씩 더해지는 간단한 모듈로 테스트를 진행했습니다.
테스트 벤치는 위와 같이 간단하게 reset, init, valid를 차례대로 입력해주었습니다.
그리고 꼭 테스트벤치에서 $finish를 넣어주어야 합니다.
$finish를 넣어주지 않으면 infinite loop를 넣은 것과 동일하게 인식되어 시뮬레이션이 나오지 않습니다.
Syntex error도 이렇게 잡아줍니다.
그럼 코드를 모두 넣었다면 시뮬레이션을 해볼까요?
Submit을 누르면 같은 창에서 컴파일 및 시뮬레이션이 시작되고, Submit(new window)를 누르면 새 창에서 시뮬레이션이 진행됩니다.
Submit을 누르면 아래와 같이 compile and simulate라고 리포트 메시지가 나오고, 아래에 시뮬레이션 파형이 나옵니다.
화면에는 제가 `probe를 이용해 추가한 신호들이 출력됩니다.
차례대로 테스트벤치가 동작합니다.
- negative reset이 high로 올라오고, init이 입력됩니다.
- init이 입력되면서 counter module에서 ready가 high가 되고, valid가 입력되면서 ready_valid가 high가 됩니다.
- ready_valid가 high가 high가 되면서 counter가 동작해서 1씩 증가된 값이 출력됩니다.
HDLBits의 사용을 마치면서...
여태까지 제가 사용했던 시뮬레이터 중에 가장 가벼운 시뮬레이터였습니다.
별도의 프로그램 설치 없이 사용할 수 있고, 라이센스의 부담이 없어서 좋았어요.
물론 다른 무거운 툴들에 비해 많은 기능이 있지는 않지만, 공부한다는 목적이라면 충분한 기능이라고 생각합니다.
포함된 예제들도 너무 좋고 어디서든지 사용할 수 있다는 장점으로 학생들 혹은 이제 공부를 막 시작하신 분들에게 정말로 도움이 많이 될 것 같다는 생각이 들었습니다.