본문 바로가기
[Nexys4 DDR]

[Nexys4 DDR 프로젝트] Gate-Level Modeling

by choice1219 2019. 1. 15.

안녕하세요. VeriLog입니다. 


오늘은 HDL (Hardware Design Language)의 방법 중 하나인, Gate-Level Modeling에 대해서 이야기 하고자 합니다. 


Digital Logic에 대해서 배워보신 분들은 (AND / OR / NOR / XOR / NAND) Gate 등에 대해서 들어보셨을겁니다.


Gate-Level Modeling은 위와 같은 Gate들을 이용해서 Hardware를 디자인 하는 방법입니다. 즉, Primitive 게이트들의 연결을 통해서 모듈의 기능을 기술하는 방법입니다. 


Vivado는 Primitive Gate들을 사용자가 정의하지 않더라도 사용할 수 있도록 제공해줍니다. 


and / or / nand / nor / xor / nor / buf / not 등을 사용할 수 있습니다. 


사용하는 방법은 아래와 같습니다. 


and gate에 대한 이미지 검색결과


위와 같은 'and' 게이트를 만든다고 할 때, 아래와 같이 표현합니다.


-----------------------

wire out;


and g1 (out, A, B);

-----------------------


여기서 g1은 게이트의 이름을 정의하는 부분입니다. 생략을 해도 상관 없습니다.


참 쉽죠?



그렇다면 조금 복잡한 시스템을 예제로 해보도록 해보겠습니다. 


mux에 대한 이미지 검색결과


2x1 mux입니다. select 값인 A에 의해서, output 값이 I0 또는 I1으로 나오는 시스템입니다.


위의 시스템은 아래처럼 표현할 수 있습니다. 


-----------------------

wire s0, s1, Q;


nand g1 (s0, A, I0);

nand g2 (s1, A!, I1);

nand g3 (Q, s0, s1); 


-----------------------


그림에는 nand 게이트가 4개인데, 코드상에는 왜 3개가 되었는지는, 조금 생각해보시면 바로 아실 겁니다!


Gate-Level Modeling의 장점은 직관적으로 디자인 할 수 있고, Synthesis 과정에서, 우리가 원하는대로 Hardware Logic을 생성할 수 있다는 점입니다. 하지만, 시스템이 조금만 복잡해져도, 시스템을 Gate-Level에서 기술하기 어렵다는 단점을 가지고 있습니다. 



마지막 예시로, 1-bit Full Adder를 만들어 보겠습니다.


1-bit Full Adder 는 1 bit 짜리 input 2개가 들어갔을 때, 1bit 결과 Sum과 Carry -out이 출력되는 시스템입니다. 


1bit full adder에 대한 이미지 검색결과


이 예제에 대한 해답은 첨부파일로 올려놓겠습니다. 


직접 디자인을 해보시고 답과 맞춰보시기 바랍니다.



다음 포스팅에는 두번째 HDL 방법인 Dataflow Modeling에 대해서 다루겠습니다. 


full_adder.v