전공 이야기/Digital System Design

#2 Verilog

[감자] 2023. 12. 24. 21:11

FPGA를 활용하여 설계를 하기 위한 툴 중 하나로 Vivado가 있다.

Vivado는 Xilinx에서 개발한 FPGA 설계 도구로 Xilinx 사의 FPGA로 사용할 수 있다.

또한 Vivado를 통하여 HDL 제작, 시뮬레이션, 합성 등 설계의 과정을 전부 진행할 수 있다.

 

Vivado에서 사용가능한 언어는 Verilog와 VHDL 등이 있으며 하드웨어 설계에 깊이 사용되는 언어들이다.

그중에서 Verilog 문법을 살펴보고자 한다.

 

 

 

Verilog는 회로 모듈 단위로 코딩을 한다.

디지털 회로는 모듈의 집합으로 이루어져 있으며 모듈들의 계층적 구조로 이루어져있다.

 

하나의 모듈은

module 모듈명 (input, output port 들);

input ~;

output ~;

 

assign ~ = ~;

 

endmodule

의 형태 구조를 띈다.

 

 

예제로 덧셈기(Adder)를 들어보자

 

module을 선언하고 모듈명을 적은 후,

input과 output port를 괄호 안에 적는다.

이후  assign 문을 이용하여 해당 모듈이 하는 일을 적고

endmodule을 통하여 하나의 모듈을 마무리하였다.

 

여기서 주의할 점이 있다면

Verilog는 대소문자가 서로 다르므로 타이핑에 유의해야 한다.

 

 

Verilog에는 변수를 선언할 때 사용하는 신호로 2가지가 있다.

첫번째는 wire type으로 연결, 전달 곧 interconnection이 목적이다.

두번째는 reg type으로 레지스터에 값을 저장하는데 사용한다.

 

wire type으로 사용할 때에는 assign문 등을 사용하는 Dataflow Modeling을 사용하는 것이 일반적이며

reg type의 변수가 사용되는 경우 always문 등을 사용하는 Behavioral Modeling이 사용된다.

이외에 Gate level modeling이라는 것도 있는데 이는 작은 회로 하나하나 선언해가며 사용하는 것으로

적절한 modeling을 선택해가며 사용하는것이 중요하다.

 

 

위 사진은 Vivado의 사이드바로 모듈을 완성하고 FPGA에 programmable device하기 위해서는

Run Synthesis, Run Implementation, Generate Bitstream 후

Open target을 통하여 하드웨어 매니저를 열고 Programmable Device를 하면 된다.

 

 

이외 verilog의 주의해야할 문법으로는

 

blocking과 non-blocking의 차이

동기식 클락 신호와 비동기식 클락 신호의 차이

설계시 Latch 생성 방지를 위한 default 혹은 모든 값 설정

Constraints file 설정 및 I/O 연결

Simulation을 하기 위한 문법 등이 있으며

 

이외에는 C와 비슷한 문법으로 진행한다.