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

VHDL 변수 완벽 이해: 실전 예제와 신뢰성 있는 설계를 위한 규칙

VHDL에서 변수는 C 변수처럼 동작합니다: 할당 직후 값이 즉시 사용 가능하고 다음 할당까지 변경되지 않습니다. 이는 프로세스 내 임시 저장과 절차적 계산에 이상적입니다.

VHDL 변수 사용 핵심 규칙

마지막 포인트(즉시 할당)가 종종 혼란의 원인입니다. 아래 간결한 예제는 변수로 두 신호 연결해 case 문 구동하는 방법을 보여줍니다.

VAR_CASE : process (i_clk) variable v_Choices : std_logic_vector(1 downto 0); begin v_Choices := i_select_1 & i_select_2; -- 연결 case v_Choices is when "00" => o_data <= "0001"; when "01" => o_data <= "0010"; -- 간결성을 위해 추가 case 생략 end case; end process VAR_CASE;

이 스니펫에서 v_Choices는 연결 직후 case 문에 즉시 사용 가능해 변수의 즉각적 업데이트를 보여줍니다.

더 깊은 예로, 두 신호 카피로 카운터를 추적하는 다음 아키텍처를 고려하세요. 두 신호는 똑같아 보이지만, r_Var_Copy1만 리셋 전 5에 도달합니다. r_Var_Copy2는 같은 클록 사이클 내 카운터가 이미 리셋된 뒤에 할당되기 때문입니다.

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity variable_ex is port ( i_clk : in std_logic; o_done : out std_logic ); end variable_ex; architecture rtl of variable_ex is signal r_Done : std_logic := '0'; signal r_Var_Copy1 : natural range 0 to 5 := 0; signal r_Var_Copy2 : natural range 0 to 5 := 0; begin EX_VAR : process (i_clk) variable v_Count : natural range 0 to 5 := 0; begin if rising_edge(i_clk) then v_Count := v_Count + 1; r_Var_Copy1 <= v_Count; if v_Count = 5 then r_Done <= '1'; v_Count := 0; else r_Done <= '0'; end if; r_Var_Copy2 <= v_Count; end if; end process EX_VAR; o_done <= r_Done; end rtl;

이 동작을 시뮬레이션으로 관찰하려면 간단한 테스트벤치가 제공됩니다. 클록을 토글하며 o_done 출력을 모니터링합니다. ModelSim 사용 시 시뮬레이터의 변수 표시 옵션을 켜야 파형 창에 변수가 나타납니다.

library ieee; use ieee.std_logic_1164.all; entity variable_ex_tb is end variable_ex_tb; architecture behave of variable_ex_tb is component variable_ex port ( i_clk : in std_logic; o_done : out std_logic ); end component variable_ex; constant c_CLK_PERIOD : time := 10 ns; signal r_CLK : std_logic := '0'; signal w_DONE : std_logic; begin UUT : variable_ex port map ( i_clk => r_CLK, o_done => w_DONE ); r_CLK <= not r_CLK after c_CLK_PERIOD/2; end behave;
VHDL 변수 완벽 이해: 실전 예제와 신뢰성 있는 설계를 위한 규칙

이 예제는 변수와 신호의 뚜렷한 행동 차이를 보여줍니다: r_Var_Copy1은 5에 도달하지만 r_Var_Copy2는 절대 도달하지 못합니다. 변수가 신호 할당 전에 리셋되기 때문입니다.

VHDL

  1. VHDL 프로시저 예제: 표준 로직 벡터 증가시키기
  2. VHDL 레코드로 깔끔하고 재사용 가능한 FIFO 인터페이스 만들기
  3. AC 해석 설정: 커브, 포인트, 주파수 스윕 설정
  4. C# 변수와 기본 데이터 타입 완벽 가이드
  5. C++ 변수, 리터럴, 상수 마스터하기: 종합 가이드
  6. C 변수, 상수, 리터럴: 완전 가이드
  7. C 저장 클래스 이해: 범위, 생명주기, 성능
  8. C 문자열 완전 정복: 선언, 입출력, 라이브러리 함수
  9. Java 변수 타입 이해: 종합 가이드
  10. C 변수 완전 이해: 선언, 정의, 초기화, 저장 클래스, Lvalue/Rvalue