VHDL에서 하위 모듈의 내부 신호를 상단 모듈로 가져 오는 방법은 무엇입니까?


11

VHDL 소스 코드의 내부 신호를 테스트 벤치로 가져 와서 파형으로 볼 수있는 방법은 무엇입니까? Active HDL을 사용합니다. 내 목표를 달성하는 도구 독립적 인 방법이 있는지 알고 싶습니다. 도움을 주시면 감사하겠습니다.

지금이 오류가 발생합니다.여기에 이미지 설명을 입력하십시오

내 소스 코드는

entity SPI_DAC is
    Port ( 
    -- inputs and oututs
    )
end SPI_DAC;

architecture Behavioral of SPI_DAC is 
    --These are my internal signals 
    signal ch1_byte_data_sent       : STD_LOGIC_VECTOR(23 downto 0)     := x"000000"; 
    signal ch1_byte_cmd_sent        : STD_LOGIC_VECTOR(23 downto 0)     := x"000000";
    --and a few other signals
begin 
    --functionality 
end Behavioral;

내 테스트 벤치 코드는

entity tb_spi_dac is
end tb_spi_dac;

architecture behavioral of tb_spi_dac is
    component spi_dac
    port(
    --declaration, inputs and outputs
    );
    end component;
begin
    uut: spi_dac port map(
    --map ports
    );
    --stimulus process
end;

시뮬레이션을 시작하면 시뮬레이터가 모든 요소를 ​​정교하게합니다. 그런 다음 외부 이름을 사용하여 만든 링크를 찾습니다. 당신의 길이 잘못 된 것 같습니다. 경로 구성에 대한 세부 정보를 제공하기 위해 답변을 편집했습니다. 디자인에 대한 지식이 없으면 경로에 어떤 문제가 있는지 말할 수 없습니다.
Thomas S.

내가 대답했듯이 엔티티 이름이 아닌 레이블을 사용해야합니다. 올바른 경로는입니다 .tp_spi_dac.uut.ch1_byte_data_sent.
Thomas S.

귀하의 제안은 @ThomasS에서 내 문제를 해결했습니다. 고마워요! David가 제안한 비디오를 본 후 해결 한 VHDL 버전에 문제가있었습니다. 고맙다는 메모를 작성하는 것은 권장하지 않지만 편집 내용을 수정 한 Thomas에게 감사드립니다 (정말이 마크 다운 형식과 혼동되었습니다).
Suhasini

답변:


11

찾고있는 것을 VHDL에서 외부 이름 (또는 계층 적 이름)이라고합니다. 범위 / 계층 구조 가시성을 우회하는 데 사용할 수 있습니다. 구문은 아래 예와 같습니다.

<<signal path_name : std_logic_vector(7 downto 0)>>

외부 이름으로 상수 및 변수에 액세스 할 수도 있습니다. 그래도 외부 유형에서 유형을 변경해야합니다. 읽기 / 쓰기 액세스를 위해 외부 이름을 직접 사용할 수 있습니다. 그러나 가독성을 높이려면 별명을 사용해야합니다.

alias signal_name is 
    <<signal path_name : std_logic_vector(7 downto 0)>>;

외부 이름에는 액세스하려는 요소의 경로가 포함되어야합니다. 경로는 절대적이거나 상대적 일 수 있습니다. 패스의 개별 요소는 점으로 구분됩니다. 이름이 아닌 인스턴스 / 프로세스 / 엔티티 / ...의 레이블을 제공해야합니다. 절대 경로 .는 최상위 이름으로 시작 합니다. 상대 경로의 ^경우 계층 구조에서 위로 이동할 수 있습니다 . 일부 패키지에서 상수 / 신호를 사용할 @때 라이브러리로 이동하는 데 사용할 수도 있습니다 .

절대 경로의 예는 다음과 같습니다.

.tb_name.instance_label.sub_instance_label.signal_name

상대 이름으로 testbench에서 동일한 요소에 액세스하려면 다음을 사용할 수 있습니다.

instance_label.sub_instance_label.signal_name

sub_instance에서 일부 테스트 벤치 신호 / 상수에 액세스하려는 경우 사용할 수 있습니다

^.^.constant_name

구성 라이브러리에있는 구성 패키지의 다른 상수에 액세스하려면 다음을 사용할 수 있습니다

@config.pkg_name.other_constant_name

David가 지적한 것처럼 시뮬레이터 디자인 / 라이브러리 브라우저를 사용하여 올바른 경로 이름을 찾을 수 있습니다.

이 기능은 VHDL-2008에 추가되었으므로 이미 VHDL-2008 지원 기능이있는 모든 도구 (ActiveHDL 포함)에서 지원해야합니다. 대부분의 시뮬레이터는 기본적으로 VHDL-2008을 사용하지 않지만이를 활성화하기 위해 명령 줄 인수 또는 구성 옵션을 제공합니다.


나는 당신이 제안한 것을 시도했습니다. 별명 ch1_byte_data_sent는 << 신호 .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent : STD_LOGIC_VECTOR (23에서 0으로) >> : = x "000000"; 이렇게하면 "식별자 또는 문자열 리터럴 예상"오류가 발생합니다. 오류가 발생하는 이유는 무엇입니까? (게시물에 대한 실수로 죄송합니다. 여기 처음입니다!)
Suhasini

내 대답이 명확하지 않을 수 있습니다. 사용할 때는 alias과제를 새 문장으로 작성해야합니다. 긴 외부 이름 대신 별명을 사용할 수 있다는 장점이 있습니다.
Thomas S.

1

VHDL 소스 코드의 내부 신호를 테스트 벤치로 가져 와서 파형으로 볼 수있는 방법은 무엇입니까?

테스트 벤치는 시뮬레이션을 의미합니다. 포트가없는 엔티티는 일반적으로 합성 대상이 아닙니다.

Active-HDL을 사용한 적이 없지만 계층 구조에서 신호를 선택하여 파형에 표시 할 수있는 디자인 브라우저가 있다는 것을 알고 있습니다. Aldec의 컴파일 및 시뮬레이션 비디오 (5:02, 최소 : 초)를 참조하십시오.

그리고 지금은 아마도이 특별한 경우에 비디오가 혼란을 일으킬 수 있다는 인상을 얻었습니다.

마지막 2:22에서 비디오는 시뮬레이션을 제어하는 ​​do 파일 (매크로)을 보여줍니다.

2:22 할 파일

디자인 최상위 레벨의 모든 신호가 웨이브 명령으로 파형 디스플레이에 추가 된 것을 볼 수 있습니다. 디자인 계층의 어느 곳에서나 신호를 지정할 수도 있습니다.

기본 아이디어는 많은 시뮬레이터가 파형 표시를 위해 신호 (및 일부 변수를 수집)를 예약 할 수 있도록하는 것입니다.

이 짧은 비디오는 단순히 보조 계층 구조 수준에 대한 신호를 보여주지 않습니다. (짧은 비디오 프레젠테이션에는 많은 것들이 있습니다).

내 목표를 달성하는 도구 독립적 인 방법이 있는지 알고 싶습니다.

위에서 언급했듯이 목표는 내부 신호를 파형으로 보는 것 같습니다.

나쁜 소식은 시뮬레이터 기능 또는 인터페이스에 대한 표준화, 파형 덤프에 대한 신호 스케줄링 등이 없다는 것입니다. 이러한 구현은 모두 정의되어 있습니다.

설계 계층의 어느 곳에서나 시뮬레이션하는 구현을 통해 파형 뷰어 또는 파형 덤프 파일로 신호를 덤프 할 수 있다는 것이 거의 보장됩니다. 구현 방법은 구현 정의입니다.

좋은 소식은 do 파일과 같이 서로 개념을 복사하는 경향이 있다는 것 입니다. 여러 구현 플랫폼에서 기능 검증을 설명하고 구문과 의미의 차이점을 극복 하는 공통 데이터베이스 를 사용하여 이식성을 위해 프로그래밍 방식으로 생성 할 수 있습니다. 도구를 프로그래밍 방식으로 호출하기위한 명령 줄 인터페이스 구문에도 차이가있을 수 있습니다.

이식성의 개념은 여러 GUI를 우아하게 수용하지 않습니다.


0

xilinx와 같은 도구에는 내부 신호를 볼 수있는 옵션이 있습니다.

간단한 툴 독립적 방법은 별도의 출력 라인을 선언하고 내부 신호를이 라인에 연결하는 것입니다.


입력 및 출력 포트에 방해가되지 않습니다. 따라서 새로운 출력 라인을 선언 할 수 없습니다. 테스트 벤치에서 신호를 선언했지만 파형에서 출력을 볼 수 없습니다 (기능을 구현하지 않고 초기화 된 0 값만 표시). 다른 방법이 있습니까?
Suhasini

0

테스트 벤치에서 신호를 선언했지만 출력을 볼 수없는 경우 테스트 할 엔터티를 인스턴스화하는 인스턴스화 문에 문제가있을 수 있습니다. 엔티티 인스턴스화 명령문 또는 컴포넌트 인스턴스화를 사용하여 올바르게 인스턴스화했는지 확인하십시오. 테스트 벤치의 신호가 테스트중인 엔티티에 연결되어 있는지 확인하십시오. 그래도 문제가 해결되지 않으면 테스트 벤치 코드를 게시하여 도움을 받으십시오.


토마스가 말한 것은 내 문제를 정확하게 해결합니다. Lattice의 iCEcube2 디자인 소프트웨어와 함께 제공되는 Active-HDL에서 기본값이 VHDL 1993으로 설정되어 있기 때문에 앞서 언급 한 오류를 해결했습니다. 이제 시뮬레이션을 초기화하려고하면 치명적인 정교 오류가 발생합니다. 왜 이런 일이 발생하는지 찾으려고 노력하고 있는데, 이것이 제한된 라이센스 문제가 아니길 바랍니다.
Suhasini

우리에게 그 메시지를 보여줄 수 있습니까?
rick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.