학교에서 논리설계 실험에 쓴다고 modelsim이란 프로그램을 깔아오라고 했다. Verilog를 돌리기 위한 프로그램이던데, 맥 버전이 따로 없어서 맥북 유저인 필자는 돌릴수가 없었다.
다행히 내가 사용하고 있는 맥은 2020년형 인텔맥이었기 때문에 아직은 듀얼부팅으로 윈도우를 깔 수 있었다. 몇달만에 듀얼부팅으로 윈도우를 켜서 모델심을 깔아놓고 보니, 인터페이스도 너무 구리고 자동완성이나 자동 들여쓰기같은 기능이 하나도 없었다. 심지어 내 맥북이 윈도우를 온 몸으로 거부하는지, 윈도우만 켜면 팬이 미친듯이 돌아가면서 키보드가 엄청 뜨거워지는걸 느낄 수 있었다.
ModelSim 구동 사진. 90년대에서 날아온 것 같은 인터페이스와 가독성을 자랑한다.
그동안은 일주일에 한번 실험할때만 모델심을 쓰면 됐기 때문에 울며 겨자먹기로 듀얼부팅으로 돌리고 있었지만, 이제 프로젝트를 시작하게 돼서 지금처럼 돌리기는 너무 불편하다는 생각이 들었다. 찾아보니 Icarus Verilog라는 맥에서도 돌아가는 구현 버전이 있었다! 이걸 깔아서 개발환경을 구축해보기로 했다.
깔아야 할 패키지는 크게 3개다. VS Code와 gtkwave
, 그리고 icarus verilog
가 필요하다. VS Code는 설치 방법을 다룬 포스팅이 이미 많이 있으므로 생략하고, gtkwave
와 icarus verilog
만 깔아보겠다.
사실 homebrew만 설치되어 있다면 설치방법은 아주 간단하다.
brew install icarus-verilog brew install gtkwave
설치가 완료되면 터미널에 iverilog
와 gtkwave
를 각각 쳐보자.
iverilog
는 설치가 완료된걸 확인할 수 있다.
그런데 gtkwave
는 오류가 난다. 필자의 경우 처음에는 저 오류도 뜨지 않고, 개발자를 알 수 없는 앱이라 열 수 없다는 dialog만 나왔다. 당황하지 말고 시스템 환경설정 > 보안 및 개인 정보 보호
로 들어가서 이 프로그램을 신뢰한다고 체크해주면 된다.
구글링을 해보니 macOS의 보안 프로그램으로 인한 문제라면서
brew install gtkwave --no-quarantine
으로 설치하면 된다고 나왔다. 하지만 내 경우에는 먹히지 않았다. 이런 경우 조금 번거롭지만 gtkwave
대신 매번 open -a gtkwave
를 써주면 된다고 한다.
이제 VS Code에 verilog 확장을 설치해주자. 나와있는게 워낙 많으니 아무거나 설치해주면 될 것 같다. 다운로드 수가 제일 많은걸로 깔아줬다.
여기까지 하면 개발환경 세팅은 끝이다!
이제 베릴로그 파일이 있을 때 시뮬레이션으로 testbench의 파형을 관찰할 수 있도록 하는 방법을 설명하겠다.
돌리고자 하는 파일의 메인 모듈 마지막에
initial begin
$dumpfile("testbench.vcd") ;
$dumpvars(0, testbench);
end
를 추가해준다. 이때 testbench는 모듈의 이름이다. 자세히는 모르지만 이게 있어야 VCD(Value Change Dump) 파일이 생성된다고 한다.
iverilog
를 사용해서 컴파일을 하고 결과를 실행시켜야 한다. 실행시키고 싶은 파일이 testbench.v
라면, 터미널에서 다음과 같이 쳐주면 된다.
iverilog -o testbench testbench.v
그런데 많은 경우 소스코드가 하나의 파일로 되어있지 않고 여러 파일에 걸쳐 있는 모듈들을 불러와 사용해야 할 상황이 생길 것이다. 이런 경우에는 (예를 들어) modules
라는 폴더에 라이브러리 파일들을 전부 모아놓고
iverilog -y ./modules -o testbench testbench.v
와 같이 쳐주면 된다. iverilog
의 다른 옵션들은 이 사이트를 참고하자.
여기까지 되면
vvp testbench -vcd
를 실행한다. 그러면 testbench.vcd라는 이름의 파일이 생성되어 있을 것이다. 이 파일이 앞서 말한 VCD 파일이다. 이것까지 하면 시뮬레이션 결과가 다 나온 것이다. 이걸 GUI로 확인해주기만 하면 된다.
터미널에서
open -a gtkwave testbench.vcd
를 실행하면 GUI의 gtkwave 창이 뜰 것이다. 이제 파형을 확인하고 분석하면 된다.
GTKWave를 실행한 화면. 각 변수의 시간에 따른 파형을 확인할 수 있다.
이제 맥에서도 윈도우 듀얼부팅 없이 Verilog를 돌릴 수 있다! 코드가 복잡해지면 Icarus Verilog는 성능이 잘 안나온다는 말도 있지만 일단 내가 사용하는 수준에서는 괜찮은 것 같다. VS Code를 좀 더 잘 다룬다면 tasks.json 같은 파일을 건드려서 위의 과정들을 전부 자동화해서 단축키로 만드는 것도 가능할 것이다.
모델심과 문법체계는 동일한가요?