상세 컨텐츠

본문 제목

[Verilog(베릴로그)] 문법 #1 : Circuit의 Module 구현1️⃣

Programing/Verilog(베릴로그)

by Jindo1 2023. 10. 7. 16:02

본문

Module

- 하나의 하드웨어 블록(block)을 module로 정의할 수 있다.

- 모듈 내에서 input / output 을 정의

- 모듈의 동작(작동방식) 정의

 

Verilog에서 module의 형태는 다음과 같습니다.

머리부에서는 모듈을 선언하고, 해당 모듈의 이름과 I/O port를 작성하면 되겠습니다.

- 이때 모듈의 이름을 숫자로 하시면 오류가 발생하니 반드시 영문자로 하시길 바랍니다.

- I/O port의 순서는 무관합니다.

- ;(세미콜론) 반드시 작성해주세요.

 

선언부에서는 I/O port를 선언하고 reg, wire, parameter를 선언합니다. 

(reg, wire, parameter에 관한 설명은 추후에 작성하여 올리겠습니다)

 

몸체에서는 모듈의 동작을 정의합니다.

(이때 여러 가지 방법으로 동작을 정의할 수 있는데 다음과 같습니다)

- 하위 모듈 인스턴스 (다른 모듈을 호출)

- Gate Primitive

- Assign 문

- Always, Initial 문

- Function, task 호출

 

 

예시로 설명하면 이해가 될 것입니다.

ex1. 2개의 input 을 갖는 AND Gate

위와 같은 AND Gate를 모듈로 구현하려면, 다음과 같은 작업을 통해서 작성할 수 있습니다.

  1. 모듈의 I/O (Input / output) 정의
  2. 모듈의 동작 정의

코드를 통해 자세히 보겠습니다.

---Veriog Code--- 

module And_Gate(A, B, out);     // 모듈 선언 , 모듈 이름 : And_Gate, 모듈 Port_list : A, B, out

input A, B;     // input 선언. 비트선언 없을 경우 자동적으로 1-bit 인식

output out;     //output 선언. 비트선언 없을 경우 자동적으로 1-bit 인식 

wire A, B, out;  //wire 선언. (별도의 reg, wire, parameter 선언 없을 경우 자동적으로 wire로 인식. 따라서 없어도 무방)

 

//아래는 모듈의 동작 방식

 

case({A,B}) // 중괄호{}는 bit를 묶는데 사용. case문을 통해 작동 방식 설명

       2'b00 : out = 0;

       2'b01 : out = 0;

       2'b10 : out = 0;

       2'b11 : out = 1;

endcase

 

endmodule // 모듈 종료

 

 

관련글 더보기