본문 바로가기
Computer/디지털시스템

[Verilog] Hardware Description Language (HDL)

by 거부기씨 2024. 6. 6.
728x90
반응형

논리 함수는 하드웨어 기술 언어(hardware description language, HDL)로 기술할 수 있다. 대표적으로 SystemVerilog와 VHDL이 있다. 본 글에서는 Verilog를 이용해 기술한다.

 

1. Module

모듈(module)은 입력과 출력을 가진 하드웨어의 블록이다. 

 

모듈을 기술하는 형식은 일반적으로 behavioral model과 structural model의 두 가지 방식을 가진다.

  • Behavioral model: 어떤 기능을 하는 지를 명시
  • Structural model: 단순화된 조각들로 모듈을 구축

예시를 살펴보자. 다음은 behavioral 기술이다.

module sillyfunction (input logic a, b, c,
					output logic y)
	assign y = ~a & ~b & ~c |
    		a & ~b & ~c |
            a & ~b & c;
endmodule

 

다음은 structural 기술이다.

module half_adder(input x, input y, output s, output c);

	xor (s, x, y);
    and (c, x, y);
    
endmodule

 

2. Simulation and Synthesis

HDL의 가장 중요한 목적은 논리 시뮬레이션(simulation)과 합성(synthesis)이다.

1) Simulation

하드웨어 설계에서 설계자가 실수를 저질러 발생하는 오류를 버그(bug)라고 한다. 이 버그의 제거는 매우 중요하다. 하지만 시스템 완성 후에는 칩 핀으로 연결되는 신호들만 관찰할 수 있기 때문에, 칩 내부에서 어떤 일이 발생하는지 직접 확인할 수 있는 방법이 없다. 따라서 시뮬레이션을 통해 제품의 완성 전에 테스트를 실시한다.

 

다음은 위의 sillyfunction 모듈이 오류 없이 동작하는지 확인하기 위한 시뮬레이션을 이용한 파형을 보여준다.

simulation

 

2) Synthesis

논리 합성은 HDL 코드를 하드웨어로 표현되는 netlist로 변환시킨다. 또한 하드웨어에서 요구되는 사항을 줄여 최적의 상태로 실행하는 데 도움을 준다.

 

다음은 sillyfunction 모듈의 합성 결과이다.

synthesis

 

HDL은 프로그래밍 언어와 유사하지만, 이 코드는 하드웨어를 기술한다는 것을 유의해야 한다. 하지만 모든 명령어들이 하드웨어로 합성되는 것은 아니다. 따라서 이 합성 가능한 부분에 주목해야 하는데, 특별히 HDL 코드를 synthesizable module과 testbench로 구분한다.

  • synthesizable module: 하드웨어를 기술한다.
  • testbench: 모듈에 입력을 적용하기 위한 코드를 포함하면서, 출력의 결과를 검사한다. 시뮬레이션에만 적용되고 합성되지 않는다.

 

728x90
반응형