2017-10-10 1 views
-1

vhdl에서 제약되지 않은 벡터를 반환하는 가장 좋은 방법은 무엇입니까? 이 경우 vhdl에서 무제한 배열 반환

function func(selector : natural) return std_logic_vector is 
begin 
    case selector is 
     when 3 => return std_logic_vector("11"); 
     when 4 => return std_logic_vector("101"); 
     when others => return std_logic_vector("0"); 
    end case; 
end function; 

나는 형식 변환 피연산자가 될 수 없습니다 문자열 리터럴을 얻을, 그래서 그것은 작동하지 않습니다. 신호 선택자는 일반적이므로 합성 할 필요가 없습니다.

+4

숫자 리터럴 3과 4 뒤에 구문 오류가 있습니다. 명시 적으로 형식을 지정하는 정규 표현식을 사용한다는 의미입니까? 정규 표현식 :'std_logic_vector '("11")','std_logic_vector'("101")'및'std_logic_vector '("0")'. 표시되지 않은 오류 메시지는 문자열을 std_logic_vector로 변환 할 수 없다는 것을 알려줍니다. 요소 유형은 동일하지 않습니다 (문자 및 std_ulogic). 그 ':'는 "=>"이어야합니다. – user1155120

+0

: 대신에 <=는 실수였습니다.이 부분을 stackexchange에 대해 불필요한 코드없이 입력했습니다. 원래 코드에는 "<="도 있습니다. 그러나, 그것은 당신이 괄호 앞에 언급 한 '함께 작동합니다. 많이 감사합니다. 이 함수가이 함수에서 어떻게 호출되는지에 대한 힌트를 줄 수 있습니까? 답장에 이것을 복사하십시오. –

+0

그런 다음 질문을 수정하십시오 ... – JHBonarius

답변

1

당신은 이것을 할 수 없습니다. 함수의 반환 값은 호출 될 때 무언가와 연관되어야하며 무언가는 고정 너비 여야합니다. 즉, 일이 같은 말을해야합니다 :

s <= func(n); 

s는 고정 폭, 그래서 함수의 모든 반환 값은 동일한 폭을 갖도록해야합니다.

+0

내 함수 반환 값은 제한되지 않은 배열 유형을 가진 제네릭 맵에서 사용됩니다. 일반지도 (func (n))와 같습니다. 제네릭의 너비는 하위 계층 수준에서 평가됩니다. –

+1

@FranzForstmayr 어떤 경우에, 나는 당신이 무엇을 요구하고 있는지 이해하지 못합니다. 이것을'3 => return "11";이라고 말할 수 있습니다. –

+0

좋아, 나는 이것이 가능하다는 것을 몰랐다. 나는 너무 복잡하다고 생각했다. –