2017-04-13 30 views
0

avalon 메모리 맵핑 된 인터페이스를 통해 count_x 32 비트의 데이터를 HPS에 가져와야합니다. 1 차 및 2 차 케이스가 잘 작동했습니다. HPS에 데이터가 있습니다. 하지만 3 번째 경우 WHEN '2'=> avs_s0_readdata < = count_x (31 downto 0);으로 '2'이 (가) 선언되지 않았습니다. 무슨 뜻입니까? Vhdl은 Altera quartus 16.1에서 완료되었으며 HPS 시스템은 Qsys에서 수행되었습니다.HPS FPGA Avalon 메모리 매핑 된 인터페이스의 세 번째 경우에 쓰기 오류

architecture behavior of encorder is 
signal count : STD_LOGIC_VECTOR(31 DOWNTO 0); 
signal countx : STD_LOGIC_VECTOR(31 DOWNTO 0); 
signal count_y : STD_LOGIC_VECTOR(31 DOWNTO 0):= x"00000000"; 


begin 

    PROCESS(avs_s0_read) 
    BEGIN 
    IF avs_s0_read = '1' THEN 
    CASE(avs_s0_address) IS 


WHEN '2' => avs_s0_readdata <= count_x(31 downto 0); 

WHEN others => avs_s0_readdata <= x"00000000"; 
END CASE; 
ELSE 
avs_s0_readdata <= x"00000000"; 

END IF; 
END PROCESS;` 
+1

안녕하세요. 시간을내어주는 사람을 도울 수 있습니다. 코드가 불완전합니다. 'avs_s0_address'가 어떤 타입인지는 알지 못합니다 ('' '2 ''는'character'' 타입입니다 .'vs_s0_address'는 그 타입이 아닙니다). [MCVE] (http://stackoverflow.com/help/mcve)를 게시하십시오. –

+1

avs_s0_address에 대한 선언을 보지 않고 '2'는 유형의 열거 형 값이 아닌 것처럼 보입니다. [Minimal, Complete and Verifiable example] (https://stackoverflow.com/help/mcve)을 제공해주십시오. 귀하의 문제는 중복 될 수 없습니다 (또는 누군가가 구문 문제를 나타내지 않는 스 니펫 주위의 예를 고안 할 수도 있음). 유형이 std_logic (기본 유형 std_ulogic) 인 경우 열거 형 값은 문자 리터럴 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H' , '-'. if 조건이 오류를 생성하지 않았 음에 유의하십시오. – user1155120

+0

또 다른 도구는보다 자세한 오류 메시지를 줄 수 있습니다 -'encorder.vhdl : 34 : 6 : error : 문자 리터럴 '2'를 std_ulogic 유형과 일치시킬 수 없습니다. std_logic은 std_ulogic - ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H'및 '-')의 해결 된 하위 유형입니다. '2'는 case 문에서 유효한 선택이 아니며 std_logic 값을 나타내지 않습니다. – user1155120

답변

1

avs_s0_address는 유형이 STD_LOGIC입니다. 이 유형은 가능한 값으로 '2'를 포함하지 않으므로 선언되지 않았다고합니다. STD_LOGIC는 일반적으로 '0'하고 내가 아발론 (I 자일링스의 FPGA 작업) 작동하지 않기 때문에 '1'당신은 예를 here

에 대한 모든 옵션을 찾을 수와 함께, 하나의 비트 만이 논리 값을 설명하는 데 사용되는 , 정확히 어떻게 작동하는지 모르겠지만 주소 버스는 1 비트 길어 보인다. 이 입력의 유형은 아마도 std_logic_vector 여야하므로 둘 이상의 비트 주소 버스가 있습니다. 그런 다음 정수 유형의 신호를 추가 할 수 있습니다

signal avs_s0_address_int : integer; 

및 아키텍처 몸에

, 당신은 다음과 같은 라인을 추가 할 수 있습니다

avs_s0_address_int <= to_integer(unsigned(avs_s0_address)); 

는에 비교하기가 쉽습니다 정수 유형의 주소 값을 가지고 case 문.

+0

이 답변이 도움이 될 경우 동의라고 표시하십시오. – Staszek