Jak wyprowadzić wewnętrzne sygnały dolnego modułu do górnego modułu w VHDL?

11

Jak mogę wydobyć wewnętrzne sygnały mojego kodu źródłowego VHDL na mój testbench, aby móc je wyświetlać jako przebiegi? Używam Active HDL. Chciałbym wiedzieć, czy istnieje metoda niezależna od narzędzia do osiągnięcia mojego celu. Każda pomoc jest mile widziana.

Otrzymuję teraz ten błąd.wprowadź opis zdjęcia tutaj

Mój kod źródłowy to

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;

Mój kod testbench to

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;
Suhasini
źródło
Po rozpoczęciu symulacji symulator opracuje wszystkie elementy. Następnie szuka linków wykonanych przy użyciu zewnętrznych nazw. Wydaje mi się, że twoja ścieżka jest zła. Zredagowałem swoją odpowiedź, aby podać więcej szczegółów na temat budowy ścieżek. Bez wiedzy o twoim projekcie nie mogę powiedzieć, co jest nie tak z twoją ścieżką.
Thomas S.
Jak powiedziałem w mojej odpowiedzi, musisz używać etykiety, a nie nazwy podmiotu. Prawidłowa ścieżka powinna być .tp_spi_dac.uut.ch1_byte_data_sent.
Thomas S.
Twoje sugestie rozwiązały mój problem @ ThomasS. Wielkie dzięki! Miałem problem z wersją VHDL, którą rozwiązałem po obejrzeniu filmu zgodnie z sugestią Davida. Wiem, że pisanie notatek z podziękowaniami nie jest zalecane, ale dziękuję Thomasowi za poprawienie mojej edycji (naprawdę byłem mylony z tym formatowaniem przeceny).
Suhasini,

Odpowiedzi:

11

To, czego szukasz, nazywa się w VHDL nazwami zewnętrznymi (lub nazwami hierarchicznymi). Można ich użyć do obejścia widoczności zakresu / hierarchii. Składnia jest taka jak w przykładzie poniżej.

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

Możesz również uzyskać dostęp do stałych i zmiennych za pomocą nazw zewnętrznych. Musisz jednak zmienić typ w typie zewnętrznym. Możesz użyć zewnętrznych nazw bezpośrednio do odczytu / zapisu. Należy jednak używać aliasów, aby poprawić czytelność.

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

Nazwa zewnętrzna musi zawierać ścieżkę do elementu, do którego chcesz uzyskać dostęp. Ścieżka może być bezwzględna lub względna. Poszczególne elementy na twojej ścieżce są oddzielone kropkami. Pamiętaj, że musisz podać etykiety instancji / procesu / encji / ..., a nie nazwę. Ścieżka absolutna zaczyna się .od nazwy twojego najwyższego poziomu. W przypadku ścieżek względnych można użyć ^do przejścia w górę w hierarchii. Korzystając ze stałych / sygnałów z niektórych pakietów, możesz także użyć @do przejścia do biblioteki.

Przykładem ścieżki bezwzględnej jest

.tb_name.instance_label.sub_instance_label.signal_name

Aby uzyskać dostęp do tego samego elementu z poziomu środowiska testowego z nazwami względnymi, których możesz użyć

instance_label.sub_instance_label.signal_name

Jeśli chcesz uzyskać dostęp do sygnału / stałej testbench z instancji podrzędnej, możesz użyć

^.^.constant_name

Aby uzyskać dostęp do innej stałej w pakiecie konfiguracyjnym znajdującym się w bibliotece konfiguracji, możesz użyć

@config.pkg_name.other_constant_name

Możesz użyć projektu symulatora / przeglądarki biblioteki, jak wskazał David, aby znaleźć prawidłową nazwę ścieżki.

Ta funkcja została dodana w VHDL-2008, więc powinna być obsługiwana przez wszystkie narzędzia, które już obsługują VHDL-2008 (w tym, jak sądzę, ActiveHDL). Większość symulatorów domyślnie nie używa VHDL-2008, ale udostępnia argument wiersza poleceń lub opcję konfiguracji, aby go włączyć.

Thomas S.
źródło
Próbowałem tego, co zasugerowałeś. alias ch1_byte_data_sent is << signal .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (23 downto 0) >>: = x "000000"; Gdy to robię, pojawia się błąd „Oczekiwany identyfikator lub literał ciągu”. Wszelkie pomysły, dlaczego pojawia się błąd? (Przepraszam za błędy w poście, mój pierwszy raz tutaj!)
Suhasini,
Moja odpowiedź może nie być wystarczająco jasna. Podczas korzystania aliasmusisz napisać zadanie w nowej instrukcji. Zaletą jest to, że możesz użyć nazwy aliasu zamiast długiej nazwy zewnętrznej.
Thomas S.
1

Jak mogę wydobyć wewnętrzne sygnały mojego kodu źródłowego VHDL na mój testbench, aby móc je wyświetlać jako przebiegi?

Stanowisko testowe oznacza symulację - jednostka bez żadnych portów zasadniczo nie kwalifikuje się do syntezy.

Chociaż nigdy nie korzystałem z Active-HDL, rozumiem, że ma on zaprojektowaną przeglądarkę, która powinna pozwolić ci wybierać sygnały w hierarchii, aby wyświetlały się w twoim przebiegu Zobacz wideo na temat kompilacji i symulacji Aldec (5:02, min: s).

I mniej więcej teraz mam wrażenie, że wideo może powodować zamieszanie, być może w tym konkretnym przypadku.

O 2:22 od końca wideo pokazuje plik do (makro), który kontroluje symulację:

2:22 zrób plik

Tam, gdzie widzimy, każdy sygnał na najwyższym poziomie projektu został dodany do wyświetlania kształtu fali za pomocą polecenia fali. Powinno być również możliwe określenie sygnału w dowolnym miejscu w hierarchii projektu.

Podstawową ideą jest to, że wiele symulatorów pozwala zaplanować gromadzenie sygnałów (a niektóre zezwalają na zmienne) w celu wyświetlenia kształtu fali.

Ten krótki film po prostu nie pokazuje sygnałów dla poziomów hierarchii pomocniczej. (W krótkiej prezentacji wideo jest dużo rzeczy wypchanych).

Chciałbym wiedzieć, czy istnieje metoda niezależna od narzędzia do osiągnięcia mojego celu.

Jak wspomniano powyżej, Twoim celem wydaje się być postrzeganie sygnałów wewnętrznych jako przebiegów.

Teraz zła wiadomość - nie ma standaryzacji dla funkcji symulatora lub interfejsów, sygnałów planowania dla zrzutu fali itp. Wszystkie są zdefiniowane w implementacji.

Jest prawie pewne, że możesz zrzucić sygnały w dowolnym miejscu w hierarchii projektu do przeglądarki przebiegów lub pliku zrzutu fali z dowolną implementacją, która symuluje, metoda wykonania jest zdefiniowana.

Dobrą wiadomością jest to, że mają tendencję do kopiowania pojęć między sobą, takich jak pliki do, które można generować programowo w celu przenoszenia, przy użyciu wspólnej bazy danych opisującej weryfikację funkcjonalną na wielu platformach implementacyjnych, przezwyciężenie różnic w składni i semantyce. Prawdopodobnie wystąpiłyby również różnice w składni interfejsu wiersza poleceń do programowego wywoływania narzędzi.

Pomysł przenośności nie obejmuje z wdziękiem wielu GUI.

użytkownik8352
źródło
0

Narzędzia takie jak xilinx mają opcję przeglądania wewnętrznych sygnałów.

Prostą metodą niezależną od narzędzia jest zadeklarowanie oddzielnych linii wyjściowych i podłączenie wewnętrznych sygnałów do tych linii.

nidhin
źródło
Nie chcę mieszać się z moimi portami wejściowymi i wyjściowymi; więc nie można zadeklarować żadnych nowych wierszy wyjściowych. Zadeklarowałem sygnały w moim środowisku testowym, ale nie jestem w stanie zobaczyć żadnego wyniku na krzywej (pokazuje tylko moją zainicjowaną wartość zero bez implementacji funkcjonalności). Czy jest na to inny sposób?
Suhasini,
0

Jeśli zadeklarowałeś sygnały w środowisku testowym, ale nie widzisz żadnych danych wyjściowych, możesz mieć problem z instrukcją tworzenia instancji, w której tworzysz instancję, która ma być testowana. Sprawdź, czy utworzyłeś instancję poprawnie, używając instrukcji instancji encji lub instancji komponentu. Upewnij się, że sygnały w twoim środowisku testowym są podłączone do testowanego obiektu. Jeśli to nie rozwiąże problemu, opublikuj kod testbench, abyśmy mogli pomóc.

stóg
źródło
To, co powiedział Thomas, dokładnie rozwiązuje mój problem. Rozwiązałem błąd, o którym wspomniałem wcześniej, który pojawił się z powodu domyślnego ustawienia VHDL 1993 w Active-HDL dostarczonym z oprogramowaniem do projektowania iCEcube2 firmy Lattice. Teraz próbuję zainicjować symulację w obliczu krytycznego błędu opracowania. Próbuję ustalić, dlaczego tak się dzieje, mam nadzieję, że nie jest to problem z ograniczoną licencją.
Suhasini,
Czy możesz nam pokazać tę wiadomość?
rick