from palette import colorful_colors

[verilog] 논리회로설계의 시작, verilog 설치와 문법 기초 본문

EE 학부과목/verilog

[verilog] 논리회로설계의 시작, verilog 설치와 문법 기초

colorful-palette 2023. 3. 13. 11:39

(이 카테고리는 경북대학교 ㅅㄷㄱ교수님의 논리회로설계 수업을 참고해 만들었습니다)
편집기: notepad ++ 사용, verilog: 이카루스
 

verilog란? 

전자공학부 2학년 이상 학생이라면 논리회로 수업시간에서 and, or, not 등등 게이트로 MUX등을 구현해보고 조합 논리회로, 순차 논리회로 등 여러 디지털 회로 내용을 배웠을 것이다.
전자공학 관점에서 시스템을 바라볼때, 제일 물리학에 가까운 단에서 우리와 가까운 단으로 바라본다면
트랜지스터 단계 - 논리회로 - 마이크로프로세서(칩) - 보드 단계(칩들의 결합) - 시스템 단계(c 등 프로그래밍)
로 볼 수 있다.
 
verilog는 이러한 논리회로 단에서의 하드웨어 디자인 설계 (CAD) 툴이라고 볼 수 있다.
논리회로 단계는 RTL(register transfer level)이라고 하며, verilog는 RTL Design이라고 한다.
(단 진짜로 회로를 설계하는게 아니라, 회로를 시물레이션하는 툴이다!)
현장에서도 chip 설계를 위한 시뮬레이션 툴로 verilog를 사용한다 .
다른 논리회로설계 언어인 VHDL과 다르게(방산용으로 쓰인다) 문법이 c언어와 비슷하여 사용자가 쉽게 디자인, 즉 논리회로를 설계 할 수 있는 장점이 있다.
 

verilog 설치

https://bleyer.org/icarus/

Icarus Verilog for Windows

bleyer.org

들어가서 제일 최신 버전 다운로드
 

시뮬레이션의 구성 요소

1. Dut: 실제 하드웨어에서 사용되는, 우리가 구성해야 할 게이트 (예시: inv.v 에서 만든 인버터 모듈)
2. Tester: Dut를 거쳐 나온 Output이 맞는지 테스트해주는 파일 (ㅅㄷㄱ교수님의 수업에선 무시한다)
3. Test bench: Dut, Tester가 작동될 환경에 대해 코드를 짜주는 것
 
뒤에도 후술하겠지만, Dut파일에서 만든 모듈들(예시: 인버터 모듈, NAND 모듈)을 Test bench(c에서의 main함수라 생각하면 편하다)에서 가져와 실행하는 형태이다.
 
참고로 모든 베릴로그 파일의 확장자명은 .v다.
자세한 설명은 아래의 예제 코드와 함께 설명하겠다. 
 

인버터 모듈 만들고 테스트하기

inv.v 파일

module inv(a,z);
  input a;		// 모듈의 input 변수 설정
  output z;		// 모듈의 output 변수 설정

  assign z = ~a;	// 인버터를 구현하기 위해 assign구문 사용
endmodule

 
inv_tb.v 파일

`timescale 1ns/1ns	//verilog에서 사용하는 시간 단위/ verilog에서 표시하는 시간 단위
module inverter_tb();
  reg a;		// 테스트 벤치에서 input 역할 선언
  wire z;		// 테스트 벤치에서 output 역할 선언
  
  inv u1(a,z);	//inv.v에서 만든 모듈 호출
  
  initial begin
    	a = 0;			// 변수 초기값 지정
	#100 $finish;		// 100ns가 지나면 끝난다
  end
  
  always begin
    #1 a = ~a;		// 클럭 구현 -> 0과 1 변환을 1ns마다 바꾸도록 해준다.
  end
  
  initial begin
    	$dumpfile("output.vcd");	//.vcd 파일을 만들기 위한 구문
	$dumpvars(0);
  end
endmodule

inv.v 파일에서 선언한 모듈을 inv_tb.v파일에 불러오고 실행한다.
(물론 모듈 선언도 한꺼번에 inv_tb.v 파일에 선언해도 된다. 하지만 모듈 만드는 파일/ 테스트 벤치 파일은 나중에 모듈이 복잡해질때를 가정해 분리해두는게 좋은 습관이다)
 
 

베릴로그 파일 만들고 실행하기

run.bat 파일 만들기: 실행의 편의를 위해 배치파일을 만들어보자. 배치파일은 실행됐을때 윈도우 DOS (흔히 생각하는 cmd창)에서 순차적으로 코드를 실행하는 파일이다.
(메모장으로 작성한 후 저장할때 .bat파일로 작성하면 된다)

del output.vvp				
iverilog -o output.vvp *.v
vvp output.vvp
gtkwave output.vcd

첫 번째 줄: 미리 생성되어있는 .vvp 파일 제거
두 번째 줄: 모든 .v파일을 이용해 output.vvp파일 생성
세 번째 줄: vcd파일 생성
네 번째 줄: output.vcd 실행
 
해당 배치파일은 *.v파일과 같은 폴더에 넣어주자!

요런식으로

그리고 배치파일을 더블클릭해 실행해주면 테스트벤치가 실행된다.

원했던대로 인버터 모듈이 제대로 작동하는 것을 볼 수 있다.
 
 

verilog 문법 기초

  • 테스트 벤치는 C언어에서의 main함수로 보면 편하다 (여러 module들을 불러와 테스트벤치에서 테스트한다) 따라서 테스트벤치 모듈만 input, output이 없다 (테스트 벤치 안에서 변수들을 설정하고 모듈을 불러와 가지고 논다)
  • module은 C언어에서의 함수로 보면 편하다. (input과 output이 있는) 
  • 테스트 벤치 안의 always문은 c의 while문에 해당한다. 테스트 벤치 모듈에서만 쓸 수 있다.
  • 테스트 벤치 안의 initial문은 테스트 벤치의 변수를 초기화하는 문이다.
  • 연산자들은 C의 연산자와 똑같다.
  • 보통 모듈에서 input은 reg, output은 wire로 선언한다
  • 모듈의 always@(*)문 안에서 사용하는 output은 reg로도 추가로 선언해줘야 한다. ex) output reg myout;