2013-03-23 4 views
1

형식 불일치 오류가 발생하지만 모든 값의 형식이 std_logic과 동일합니다. 오류 (10,381) : VHDL 형식 불일치 제네릭Vhdl 형식 불일치 오류

IPX - - - 입력 포트 벡터

tempx, tempz 신호

ipx : in std_logic_vector(Nx-1 downto 0);
.......
signal tempx : std_logic_vector(Ny-1 downto 0) := ipx(Nx-1 downto Nx-Ny); (Signal initialisation)
signal tempz : std_logic_vector(Ny-1 downto 0);
............
tempx <= (Ny-1 downto 1 => tempz(Ny-2 downto 0), 0 => ipx(a-1));

오류 여기서 코드

Nx를, NY에게 인 ArrayDivider.vhd (53)에서 오류가 발생했습니다 : 인덱스 된 이름이 "std_ulogic"과 일치하지 않는 값을 반환합니다. 대상 표현의 형식 (마지막 코드 줄 tempx 오류)

하지만 ipx와 tempz는 모두 std_logic 벡터이므로 여기서 형식이 일치하지 않습니다 ???? 나에게

나는 또한 CONCATENATE 연산자 &를 사용하여 시도 몇 가지 솔루션을 제공하지만 나에게 'tempx [0]의 여러 일정 드라이버를 해결할 수없는'최상위 계층 구조와 관련된 또 다른 오류를 제공하십시오 !!!! !! !!

답변

3

오류 메시지가 문제가 정확히 무엇을 알려줍니다 :

error : Error (10381): VHDL Type Mismatch error at ArrayDivider.vhd(53): indexed name returns a value whose type does not match "std_ulogic", the type of the target expression

그리고 사실을 tempz(Ny-2 downto 0)는 std_ulogic하지만 벡터가 아닙니다.

명명 된 연관은 벡터의 조각을 식별하지 않고 개별 요소를 식별한다는 점에서 문제가 있습니다. 한 벡터 조각을 다른 벡터 조각에 할당하는 데 사용할 수는 없습니다.

대신, 연결 연산자 &,

tempx <= tempz(Ny-2 downto 0) & ipx(a-1); 

귀하의 게시물을 연결 다른 오류를 생산하고 있음을 의미를 사용한다; 이 질문에 자유롭게 추가하십시오.

편집 :

>Error (10028): Can't resolve multiple constant drivers for net 
>"tempx[0]" at ArrayDivider.vhd(44) (on the line of initialing >tempx) 

가 다시이 무엇이 잘못되었는지를 알려줍니다. 이 오류는 두 버전 모두에서 거의 확실하게 나타 났지만 원래 오류는 숨 깁니다. tempx (0)에 대한 두 드라이버를 찾고 잘못된 드라이버를 제거하십시오. 진행중인 작업을 명확히하기 위해 코드의 내용을 게시하지 않았습니다. Modelsim을 사용하는 경우 "드라이버"명령은 신호의 모든 드라이버를 식별합니다. 당신이 입력 신호에 tempx를 초기화 한 후 나중에 다른 신호를 구동해야하는 경우

, 당신은 두 신호 사이에서 선택해야합니다 - 예를 들면 :

tempx <= ipx(Nx-1 downto Nx-Ny) when <some condition> 
     else tempz(Ny-2 downto 0) & ipx(a-1); 

는 대부분의 경우,이 오류를 수정하는 작업도 제거합니다 "계층"오류; 기본적으로 "뭔가 잘못되어 컴파일이 완료 될 수 없습니다."

+0

내 오류를 해결하기 위해 지원과 관심을 가져 주셔서 감사합니다 ... :) 나는 또한 연결을 시도했습니다 ......... 하지만 그게 2 오류를 준다 .......... > 오류 (10028) : ArrayDivider.vhd (44)의 net> "tempx [0]"에 대한 복수 상수 드라이버를 해결할 수 없음 (초기화> tempx 줄에서) > 오류 : 최상위 사용자 계층 구조 –

1

다음은 명명 된 연결 대 위치 결합의 개념을 아주 잘 설명해주는 페이지입니다. 이 예제는 bit_vector 유형을 사용하는 두 연관 메소드의 사용을 보여줍니다.당신이 발견 한 것처럼

http://www.ics.uci.edu/~jmoorkan/vhdlref/aggregat.html

는 VHDL은 당신이 STD_LOGIC 벡터에 연결 이름을 수행합니다 bit_vector을 반환합니다. 결과를 std_logic_vector에 할당하려고하면 형식 불일치가 발생합니다.

하나의 옵션은 TO_BITVECTOR 및 TO_STDLOGICVECTOR를 사용하여 bit_vector와 std_logic_vector 사이를 변환하는 것입니다. 이들은 ieee.std_logic_1164 라이브러리에 정의되며, 구문은 여기에 설명한 기능입니다 :

http://www.seas.upenn.edu/~ese171/vhdl/PackageSTD_1164.html

이 불필요한 농구를 통해 점프 같은 느낌 하,하지만 작동합니다. 행운을 빕니다!