Hardware/FPGA

[Verilog] #3-1 Structural Modeling (Gate level Modeling)

개발자 H 2020. 12. 9. 02:28

Structural Modeling

Verilog로 코드를 구현하는 방법 중에서 가장 먼저 소개할 방법은 Structural Modeling이다. 

이 방법은 논리 게이트를 사용하여 모델을 구현하는 가장 낮은 레벨(Low level)의 코딩방식이다. 

디지털 논리회로 과목에서 배우는 논리회로를 이용하여 실제로 회로도를 그리듯이 프로그래밍 한다.

코드가 매우 직관적이며 다른 방법에 경우 합성(synthesis)이과 구현(Implementaion) 과정에서 

불필요한 회로가 포함되는 최적화 문제가 발생할 수 있지만, 지금 소개하는 방법은 코드가 결과에 그대로 반영된다.

 

따라서 본인의 능력이 되고 시간이 많다면 Structural Modeling으로 회로를 최적화하여 구현하는 것도 방법이다.

 

Structural Modeling에는 Gate-level Modeling과 Switch-level Modeling이 있는데,

이번 글에서는 게이트 레벨 모델링에 대해서만 설명하고 스위치 레벨 모델링에 대해서는 

다른 글을 통해서 혹은 추후에 글 밑에 추가하도록 하겠다.

 

Gate Primitives

Verilog에서 지원하는 12개의 Logic Gate Primitives를 이용하여 코드를 구현한다. 

Primitives는 기본적으로 Verilog에서 미리 정의되어있는 논리게이트 모듈을 의미한다.

 

AND / OR 게이트

출력: 1개 / 입력: 多개 

관련 모듈: and / or / xor / nana / nor / xnor

and | or | nand | xor | nor | xnor [instance name] (output, input1, ….., inputn);

논리연산에 가장 기초가 되는 게이트이다.

 

Buf / Not 게이트

출력: 1개 / 입력: 1 or 多개

관련 모듈: buf / not / bufif / notif / bufif1 / notf1

  • not | buf [instance name] (output 1, output2, ….., output n, input);
  • bufif1 | bufif0 | notif1 | notif0 [instance name] (output, input, control);

if가 붙은 모듈의 경우 제어신호(control signal)에 따라서 출력을 제어하게 된다.

if0은 control signal이 0일 때 동작하고 (Active low) if1은 control signal이 1일 때 동작한다. (Active High)

 

아래 진리표에서 Z는 High Impedance로 High도 Low도 아닌 Floating한 값을 의미한다.

X는 알려지지 않은 혹은 초기화되지 않은 값을 의미한다. 

 

 

Code Implementation

사용한 모듈의 이름은 적고 인스턴트 이름을 짓고 인자를 받으면 된다.

모든 게이트들은 출력을 맨 앞의 인자로 받도록 구성되어 있고 게이트에 따라서 입력의 수가 다르다.

 

ex) and and1(out, input1, input2);

 

Array Instantiation

사용하고자 하는 모듈이 1bit만 처리할 경우 모듈을 배열로 인스턴트화 할 수 있다.

아래의 예시 코드를 참조하자

 

1-bit Full Adder