문제
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)입니다.