문제

VHDL을 사용하여 각각 16 비트를 저장하는 일부 레지스터가 필요합니다. 그래서 VHDL은 배열 내장을 가지고 있음을 발견했으며 IY의 각 요소에 16 비트를 저장하는 데 사용하고 싶으므로 VHDL 이이 배열을 실제 레지스터에 맵핑하는지 알고 싶습니다.

도움이 되었습니까?

해결책

짧은 대답은 아니오입니다. 배열 유형은 레지스터에 매핑되지 않습니다.

긴 대답 :

VHDL의 배열 유형은 동일한 유형의 인덱스 된 요소 모음 일뿐입니다. 귀하의 경우, 아마도 등록 은행의 출력으로 배열을 사용할 것입니다.

따라서 각각 16 비트를 보유한 8 개의 레지스터 은행이 있다고 가정 해보십시오. 이 은행의 생산량은 16 비트 벡터의 배열 (크기 8)입니다. 이 레지스터 은행의 구성 요소 선언은 다음과 같습니다.

 component reg8x16
  port(
   clock: in std_logic;
   reset: in std_logic;
   enable: in std_logic;
   rout : out r_array(0 to 7)
   );
 end component; 

rout 레지스터 뱅크에서 등록 된 출력 배열입니다. 그래서 당신은 은행에서 레지스터 0의 출력을 인식 할 수 있습니다. rout(0), 이것은 유형입니다 std_logic_vector(15 downto 0).

또한 어딘가에 배열 유형을 선언하는 것을 잊지 마십시오 (일반적으로 패키지 파일). 그것은 다음과 같은 것처럼 보일 것입니다.

type r_array is array (integer range <>) of std_logic_vector(15 downto 0);

그만큼 (integer range <>) 명령문은 배열 인덱스 범위의 일종의 자리 표시 자입니다. 배열 유형이 사용될 때 (위의 구성 요소 선언과 같은) 나중에 채워집니다.

이것이 귀하의 질문에 답변하는지 확실하지 않습니다. reg8x16 구성 요소를 만드는 방법에 대한 세부 사항을 다루지 않을 것입니다. 기본적으로 출력이 유형 인 16 비트 레지스터 만 만듭니다. std_logic_vector(15 downto 0); (온라인 에서이 작업을 수행하는 방법을 찾을 수 있습니다 ... 매우 기본적인 VHDL입니다). 그런 다음 해당 레지스터 중 8 개를 인스턴스화하고 이름이 지정된 구성 요소에 넣습니다. reg8x16.

다른 팁

배열은 다른 변수 또는 신호와 같습니다. 동작을 설명하면 한 시계 진드기에서 다른 시계에서 다른 상태를 기억해야한다는 것을 의미하는 경우, 플립 플롭 (또는 조건이 올바른 경우 메모리 블록)이 신디사이저에 의해 추론됩니다.

유효한 범위가있는 배열은 생성 된 넷리스트에서 와이어에 매핑됩니다. 이것은 상당히 명백합니다. 하드웨어에는 게이트와 전선 만 포함되어 있습니다. A (3 Downto 0) (1 ~ 0)와 같은 것이 4x2 또는 8 비트 크기 와이어로 만듭니다. 이제이 1 차원 배열의 지수에 (3) (1)과 같은 개별 액세스를 매핑합니다. 따라서 (3) (1)은 기본적으로 A (7)입니다.

확인하다 이것 페이지, 또한 확인하십시오 등록하다 VHDL

기본적으로 필요한 길이를 가진 std_logic_vector의 배열입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top