VHDL 프로시저 예제: 표준 로직 벡터 증가시키기
VHDL 프로시저란?
프로시저는 VHDL에서 서브프로그램 패밀리에 속합니다. 재사용 가능한 로직을 캡슐화해 코드 중복을 줄이고 유지보수성을 높입니다. 한 번 정의하면 여러 프로세스나 아키텍처에서 호출해 일관된 동작을 보장합니다.
예제: std_logic_vector 1 증가시키기
다음 예제는 8비트 std_logic_vector를 받아 1을 더하고 결과를 반환하는 프로시저를 보여줍니다. 프로시저에는 테스트벤치 내 타이밍 제어를 설명하기 위한 1ns 대기도 포함돼 있습니다.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity example_procedure_simple is
end example_procedure_simple;
architecture behave of ex_procedure_simple is
signal r_TEST : std_logic_vector(7 downto 0) := X"42";
-- 목적: std_logic_vector를 1 증가
procedure p_INCREMENT_SLV (
signal r_IN : in std_logic_vector(7 downto 0);
signal r_OUT : out std_logic_vector(7 downto 0)
) is
begin
r_OUT <= std_logic_vector(unsigned(r_IN) + 1);
wait for 1 ns; -- 여기서 wait은 OK.
end p_INCREMENT_SLV;
begin
process is
begin
wait for 10 ns;
p_INCREMENT_SLV(r_TEST, r_TEST);
wait for 10 ns;
p_INCREMENT_SLV(r_TEST, r_TEST);
wait for 10 ns;
p_INCREMENT_SLV(r_TEST, r_TEST);
wait;
end process;
end behave;
왜 Wait 문을 포함하는가?
호출 프로세스에 민감도 리스트가 없으면 프로시저 내부 wait 문은 합법적입니다. 이 기능은 테스트벤치에서 메인 프로세스를 어지럽히지 않고 결정적 지연을 도입해야 할 때 특히 유용합니다.
핵심 요약
- 프로시저는 IN과 OUT 신호를 모두 가질 수 있음.
- std_logic_vector 산술 연산 같은 공통 연산에 이상적.
- 프로시저 내 wait 사용으로 테스트벤치 로직을 깔끔하게 유지.