VHDL(.vhd)과 EDIF(.edif) 파일이란 무엇인가요?

VHDL(.vhd)과 EDIF(.edif) 파일이란 무엇인가요?
Photo by Logan Voss / Unsplash

VHDL과 EDIF는 Verilog만큼 자주 접하지는 않지만, 특정 분야와 legacy design에서 여전히 사용되는 중요한 format입니다. VHDL은 항공/군사 분야에서 선호되며, EDIF는 tool 간 netlist 교환에 사용됩니다.

VHDL(.vhd)의 기본 구조

VHDL은 Ada 언어에서 파생된 강타입(strongly typed) HDL입니다. Entity(인터페이스)와 Architecture(구현)로 구성됩니다.

-- simple_adder.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity simple_adder is
    port (
        a    : in  std_logic_vector(7 downto 0);
        b    : in  std_logic_vector(7 downto 0);
        cin  : in  std_logic;
        sum  : out std_logic_vector(7 downto 0);
        cout : out std_logic
    );
end entity simple_adder;

architecture rtl of simple_adder is
    signal result : unsigned(8 downto 0);
begin
    result <= resize(unsigned(a), 9) 
            + resize(unsigned(b), 9) 
            + ("" & cin);
    sum  <= std_logic_vector(result(7 downto 0));
    cout <= result(8);
end architecture rtl;

Verilog와 같은 8-bit adder이지만, 문법이 다릅니다. VHDL의 특징은 다음과 같습니다. Library와 use 선언으로 패키지를 명시적으로 import합니다. Entity가 port를 선언하고, architecture가 동작을 기술합니다. 타입이 엄격하여 std_logic_vector와 unsigned 간 변환을 명시해야 합니다. 이 엄격함이 설계 오류를 조기에 발견하는 데 도움이 됩니다.

VHDL의 Sequential Logic 기술

architecture rtl of counter is
    signal count_reg : unsigned(7 downto 0);
begin
    process(clk, rst_n)
    begin
        if rst_n = '0' then
            count_reg <= (others => '0');
        elsif rising_edge(clk) then
            if en = '1' then
                count_reg <= count_reg + 1;
            end if;
        end if;
    end process;
    
    count <= std_logic_vector(count_reg);
end architecture rtl;

VHDL의 process는 Verilog의 always에 해당합니다. Sensitivity list에 clk과 rst_n을 포함하며, rising_edge()로 clock edge를 감지합니다.

EDIF(.edif)의 구조

EDIF(Electronic Design Interchange Format)는 EDA tool 간 netlist를 교환하기 위한 표준 format입니다. LISP 스타일의 괄호 기반 문법을 사용합니다.

(edif simple_design
  (edifVersion 2 0 0)
  (edifLevel 0)
  (keywordMap (keywordLevel 0))
  
  (library tech_lib
    (edifLevel 0)
    (technology (numberDefinition))
    
    (cell INV_X1
      (cellType GENERIC)
      (view netlist
        (viewType NETLIST)
        (interface
          (port A (direction INPUT))
          (port Y (direction OUTPUT))
        )
      )
    )
  )
  
  (design top
    (cellRef top (libraryRef work))
  )
)

EDIF는 사람이 직접 작성하는 경우는 드물고, tool이 자동 생성합니다. FPGA synthesis tool의 출력이나, 서로 다른 vendor tool 간 netlist 전달에 사용됩니다. 현재는 Verilog netlist가 주로 사용되어 EDIF의 사용 빈도가 줄었지만, 일부 legacy flow에서는 여전히 필요합니다.

Verilog vs VHDL 비교

문법 면에서 Verilog는 C 스타일로 간결하고, VHDL은 Ada 스타일로 장황하지만 명시적입니다. 타입 시스템에서 Verilog는 약타입이고, VHDL은 강타입입니다. 사용 지역에서 Verilog는 대부분 분야에서, VHDL은 군수에서 주로 사용됩니다. Synthesis 결과는 동일한 품질을 기대할 수 있으며, 모든 주요 EDA tool이 두 언어를 모두 지원합니다.

정리

VHDL은 강타입 HDL로 설계 오류를 조기에 잡아주며, 항공/군수 분야에서 선호됩니다. EDIF는 tool 간 netlist 교환 format으로, 현재는 Verilog netlist에 대부분 대체되었지만 legacy flow에서 여전히 사용됩니다.

Enjoyed this article?

Get deep-dive semiconductor analysis and career insights delivered weekly. Free forever — no paywall, no upsell. Funded by sponsorships with a strict editorial firewall (Editorial Standards).

Work with me

Consulting · Collaboration · Support

Paid 1:1 technical consulting, speaker invitations, collaboration proposals, or just want to say thanks — all welcome.

View options →
VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
Support