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

VHDL std_logic_vector 마스터하기: 시그널 벡터 생성하기

std_logic_vector 타입은 VHDL에서 시그널 버스를 정의하는 표준입니다. std_logic이 단일 와이어 상태를 모델링한다면, std_logic_vector는 이를 와이어 배열로 확장해 멀티비트 버스 표현을 가능케 합니다.

단일 비트 std_logic과 달리 std_logic_vector는 복합 타입—std_logic 요소의 인덱스된 컬렉션입니다. 임의 개수 비트를 담을 수 있어 멀티비트 데이터를 교환하는 컴포넌트 연결에 이상적입니다.

이 블로그 글은 Basic VHDL Tutorials 시리즈의 일부입니다.

std_logic_vector 시그널 선언 문법:
signal <name> : std_logic_vector(<lsb> to <msb>) := <initial_value>;
또는
signal <name> : std_logic_vector(<msb> downto <lsb>) := <initial_value>;
여기서 <name>은 사용자 선택 식별자, <initial_value>는 선택 사항. <lsb>와 <msb>는 각각 최하위/최상위 비트 인덱스.

to 또는 downto 키워드는 범위 방향(엔디안)을 지정합니다. 둘 다 작동하지만 대부분 설계자는 명확성을 위해 downto를 선호합니다. 비트 벡터 선언 시 일관되게 downto 사용을 권장합니다.

바이트 크기 벡터 VHDL 코드:

signal MySlv : std_logic_vector(7 downto 0);

1비트 벡터 VHDL 코드:

signal MySlv : std_logic_vector(0 downto 0);

빈 범위(0비트) VHDL 코드:

signal MySlv : std_logic_vector(-1 downto 0);

실습

이 비디오 튜토리얼에서 std_logic_vector 시그널 선언과 초기값 주기, For-Loop로 벡터 비트 순회하며 시프트 레지스터 만드는 법을 배웁니다:

이 튜토리얼에서 만든 최종 코드:

 library ieee; use ieee.std_logic_1164.all; entity T11_StdLogicVectorTb is end entity; architecture sim of T11_StdLogicVectorTb is signal Slv1 : std_logic_vector(7 downto 0); signal Slv2 : std_logic_vector(7 downto 0) := (others => '0'); signal Slv3 : std_logic_vector(7 downto 0) := (others => '1'); signal Slv4 : std_logic_vector(7 downto 0) := x"AA"; signal Slv5 : std_logic_vector(0 to 7) := "10101010"; signal Slv6 : std_logic_vector(7 downto 0) := "00000001"; begin -- Shift register process is begin wait for 10 ns; for i in Slv6'left downto Slv6'right + 1 loop Slv6(i) <= Slv6(i-1); end loop; Slv6(Slv6'right) <= Slv6(Slv6'left); end process; end architecture; 

ModelSim 파형 창에서 run 후 타임라인 확대:VHDL std_logic_vector 마스터하기: 시그널 벡터 생성하기

분석

이 실습에서 여섯 개의 std_logic_vector 버스를 선언했는데, 각각 8비트(1바이트) 길이입니다.

Slv1은 초기값 없이 선언됐습니다. 버스 파형 스크린샷에 XX로 나오는 건 16진수 디스플레이가 미정의 값을 표현 못 하기 때문. 자세히 보면 개별 비트는 실제 U입니다.

Slv2는 애그리게이트 할당 (others => '0')로 모든 비트를 0으로 설정. 이 간결한 문법은 벡터 폭에 관계없이 모든 요소가 지정된 값을 받게 합니다.

Slv3도 같은 애그리게이트 기법으로 모든 비트를 1로 초기화, 파형에 FF(8개 1의 16진수)로 표시.

Slv4는 16진수 이니셜라이저 AA 시연. 16진수 한 자리가 4비트라 두 자리가 8비트 벡터 커버.

Slv5는 같은 값을 이진(10101010)로 표현. Slv4와 Slv5 모두 파형에서 AA로 렌더링.

Slv6은 최하위 비트만 1로 설정된 상태로 시작. 프로세스가 10ns마다 1을 벡터를 순환시키는 좌측 시프트 레지스터 구현.

프로세스는 left와 right 속성을 활용해 코드를 제네릭하게 유지; 벡터 크기 변경 시 코드 수정 불필요.

추가 속성도 있지만 입문 튜토리얼 범위 밖입니다.

VHDL std_logic_vector 마스터하기: 시그널 벡터 생성하기

핵심 정리

Basic VHDL Quiz – part 2 풀기 »
또는
다음 튜토리얼로 이동 »

VHDL

  1. VHDL 타입 변환 종합 가이드: Numeric_Std와 Std_Logic_Arith 패키지
  2. VHDL Signed vs Unsigned 타입 마스터하기: 실전 인사이트
  3. VHDL 문자열 리스트 구현: 모범 사례와 예제
  4. Tcl 기반 VHDL 코드락 모듈 테스트벤치 만들기
  5. VHDL 테스트벤치 시뮬레이션 우아하게 종료하기
  6. VHDL PWM 컨트롤러 구현: 설계, 시뮬레이션, FPGA 데모
  7. VHDL 난수 생성: 균일 분포부터 OSVVM까지
  8. 블록 RAM에서 견고한 VHDL 링 버퍼 FIFO 설계하기
  9. VHDL 자가 검증 테스트벤치 구축 실전 가이드
  10. VHDL에서 보호 타입과 액세스 포인터로 동적 링크드 리스트 구현하기