산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> VHDL

VHDL 포트 맵 인스턴스화 마스터하기: 실전 가이드

VHDL에서 모듈은 엔티티(entity)를 통해 외부 세계와 소통하는 자기 완결적 단위입니다. 인스턴스화의 포트 맵(port map) 절은 엔티티의 형식 포트를 주변 설계의 시그널에 연결합니다.

모듈, 엔티티, 테스트벤치

FPGA나 ASIC 개발 시 설계 로직은 명확히 정의된 입력/출력 포트를 가진 모듈에 들어갑니다. 포트가 없는 모듈은 테스트벤치입니다—시험 대상 장치(DUT)에 자극을 주는 시뮬레이션 래퍼로, 물리 칩에는 절대 나타나지 않습니다.

앞선 글들에서는 모든 VHDL을 단일 파일에 썼는데, 빠른 실험엔 편하지만 프로덕션 설계엔 부적합합니다. DUT와 테스트벤치 분리는 가독성, 재사용성, 시뮬레이션 계층 구조 명확성을 높입니다.

일반적인 명명 규칙

많은 팀이 간단한 규칙을 따릅니다: 설계 파일은 MyModule.vhd, 테스트벤치는 MyModuleTb.vhd. DUT 아키텍처는 주로 rtl(레지스터 전송 레벨), 테스트벤치 아키텍처는 sim이라 부릅니다. 이 규칙으로 파일이 합성용인지 시뮬레이션용인지 즉시 알 수 있습니다.

VHDL 포트 맵 인스턴스화 마스터하기: 실전 가이드

포트 맵 인스턴스화 VHDL 문법

모듈 인터페이스를 entity 키워드로 정의:

 entity <entity_name> is port( <entity_signal_name> : in|out|inout <signal_type>; ... ); end entity; 

다른 VHDL 파일에서 명시적 포트 맵으로 모듈 인스턴스화:

 <label> : entity <library_name>.<entity_name>(<architecture_name>) port map( <entity_signal_name> => <local_signal_name>, ... ); 

<label>은 시뮬레이터 계층에 나타나고, <library_name>은 기본값 work, 모든 형식 포트는 로컬 시그널에 바인딩되어야 합니다.

실전 예제: 4-to-1 MUX

아래는 부호 없는 8비트 시그널로 4-to-1 멀티플렉서를 구현한 완전한 테스트벤치와 DUT 쌍입니다.

테스트벤치 코드

 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_PortMapTb is end entity; architecture sim of T15_PortMapTb is signal Sig1 : unsigned(7 downto 0) := x"AA"; signal Sig2 : unsigned(7 downto 0) := x"BB"; signal Sig3 : unsigned(7 downto 0) := x"CC"; signal Sig4 : unsigned(7 downto 0) := x"DD"; signal Sel : unsigned(1 downto 0) := (others => '0'); signal Output : unsigned(7 downto 0); begin -- Instantiate the MUX with architecture rtl i_Mux1 : entity work.T15_Mux(rtl) port map( Sel => Sel, Sig1 => Sig1, Sig2 => Sig2, Sig3 => Sig3, Sig4 => Sig4, Output => Output); -- Stimulus process process is begin wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= "UU"; wait; end process; end architecture; 

모듈 코드

 library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_Mux is port( -- Inputs Sig1 : in unsigned(7 downto 0); Sig2 : in unsigned(7 downto 0); Sig3 : in unsigned(7 downto 0); Sig4 : in unsigned(7 downto 0); Sel : in unsigned(1 downto 0); -- Output Output : out unsigned(7 downto 0) ); end entity; architecture rtl of T15_Mux is begin process(Sel, Sig1, Sig2, Sig3, Sig4) is begin case Sel is when "00" => Output <= Sig1; when "01" => Output <= Sig2; when "10" => Output <= Sig3; when "11" => Output <= Sig4; when others => Output <= (others => 'X'); end case; end process; end architecture; 

파형 분석

ModelSim에서 테스트벤치 실행 시 MUX의 예상 동작과 일치하는 파형이 나옵니다. 아래 파형 스냅샷은 Sel 시그널 변화에 따라 DUT가 네 입력 시그널 사이를 올바르게 전환함을 확인시켜 줍니다.

VHDL 포트 맵 인스턴스화 마스터하기: 실전 가이드

핵심 정리

다음 튜토리얼로 넘어가 더 깊은 VHDL 설계 패턴을 배우세요.

VHDL

  1. 몰리브덴이 현대 산업을 형성하는 방식: 용도, 이점, 공급 역학
  2. VHDL 문자열 리스트 구현: 모범 사례와 예제
  3. Tcl 기반 VHDL 코드락 모듈 테스트벤치 만들기
  4. VHDL 테스트벤치 시뮬레이션 우아하게 종료하기
  5. VHDL PWM 컨트롤러 구현: 설계, 시뮬레이션, FPGA 데모
  6. VHDL 난수 생성: 균일 분포부터 OSVVM까지
  7. 프로세스 내 프로시저로 VHDL FSM 설계 깔끔하게 만들기
  8. VHDL 비순수 함수 활용: FSM 가독성과 유지보수성 높이기
  9. VHDL 함수 마스터하기: 효율적 설계를 위한 실전 가이드
  10. 커터 그라인더(Cutter Grinder) 마스터하기: 실전 기술 가이드