레코드의 std_logic_vector 표현을 반환하는 VHDL 함수가 있고 그 std_logic_vector의 길이를 원합니다. 함수에 직접 길이 속성을 사용할 수 있습니다. 왜 ModelSim에서 경고 메시지가 나타 납니까? 나는 미묘한 문제들을 초청하고 있는가? 경고 텍스트를 검색하는 것이 도움이된다는 것을 이해하지 못했습니다.VHDL - 함수에서 길이 속성을 직접 사용하면 경고가 발생하는 이유는 무엇입니까?
my_function_returns_slv(my_record)'length;
** 경고 : ../src/my.vhd(line#) (VCOM-1515 사전 규정 된 속성 "길이"의) 접두사이다 함수 호출 "my_function_returns_slv"
필자는 레코드 요소의 std_logic_vector 표현을 연결하여 출력을 어셈블하는 함수를 작성했습니다. 레코드의 길이는 컴파일 타임에 고정되어 있지만 길이를 하드 코딩하고 싶지는 않습니다. 함수 출력을 사용하기위한 신호를 생성하려면 길이가 필요합니다. 그래서 출력을 유지하기 위해 제한되지 않은 신호를 선언 할 수 없기 때문에 '함수의 출력 길이'를 호출 할 수 없습니다 (예 : 함수 출력을 보유하는 신호의 길이를 호출). std_logic_vector의 길이를 계산하는 비슷한 함수를 작성할 수는 있지만 중요한 코드를 추가 할 것입니다. 특히 레코드 수가 많습니다. ModelSim 경고를 받아들이고 계속해야합니까? 내 레코드의 비트 너비를 모으기 위해 함수를 작성하는 추가 코드를 처리해야합니까? 더 좋은 해결책이 있습니까?
도움 기록 팩/압축 풀기 서브 프로그램은 내가 사용하고 있어요 :
http://www.eda-twiki.org/twiki/pub/P1076/RecordReflectionToSlv/standard_functions.vhd
감사합니다!
'my_function_returns_slv (my_record)'길이가 유효한지 여부는 '길이 속성 접두사 요구 사항을 Ada 83 LRM의 -1987 LRM으로 옮겨 놓는 오타 (typo)에서 비롯됩니다. [Issue Report 1005 (-1993)] (http://web.archive.org/web/20120217010956/http://www.eda.org/isac/IRs-VHDL-93/IR1005.txt) - 오타 결코 고정되어 있지 않다는 것을 의미하는 근거는 의미 일치가 아니어야하고 "배열 객체에 적합 함"은 어디에도 정의되어 있지 않으며 "배열 유형에 대해서는"정의되어 있지 않습니다. – user1155120
감사합니다. @ user1155120! 저는 LRM과 표준 과정에 대해 알기 시작했습니다. 이 역사적인 정보는 나에게 매우 흥미 롭습니다. –
고맙습니다 @ 모르 텐! 함수를 사용하여 'length'호출을 캡슐화하면 내 환경에서도 경고가 제거됩니다. 나는 신호를 할당 할 필요가 있다고 생각했다. 얼마나 창조적 인 솔루션인가! 나는 또한 나의 합성 도구 (Quartus)가 경고와 함께 my_func() 길이를 표시하지 않는다고 후손을 위해보고 할 것이라고 생각했다. –