Come far emergere i segnali interni di un modulo inferiore a un modulo superiore in VHDL?


11

Come posso far emergere i segnali interni del mio codice sorgente VHDL sul mio banco di prova in modo da poterli visualizzare come forme d'onda? Uso Active HDL. Vorrei sapere se esiste un metodo indipendente dallo strumento per raggiungere il mio obiettivo. Qualsiasi aiuto è apprezzato.

Ricevo questo errore ora.inserisci qui la descrizione dell'immagine

Il mio codice sorgente è

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;

Il mio codice testbench è

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;

All'avvio della simulazione, il simulatore elaborerà tutti gli elementi. Successivamente cerca i collegamenti creati utilizzando nomi esterni. Mi sembra che il tuo percorso sia sbagliato. Ho modificato la mia risposta per fornire maggiori dettagli sulla costruzione di percorsi. Senza la conoscenza del tuo design non posso dire cosa c'è di sbagliato nel tuo percorso.
Thomas S.

Come ho detto nella mia risposta, devi usare l'etichetta e non il nome dell'entità. Il percorso corretto dovrebbe essere .tp_spi_dac.uut.ch1_byte_data_sent.
Thomas S.

I tuoi suggerimenti hanno risolto il mio problema @ Thomas. Molte grazie! Ho avuto un problema con la versione di VHDL, che ho risolto dopo aver visto il video come suggerito da David. So che scrivere note di ringraziamento non è raccomandato, ma grazie Thomas per aver corretto la mia modifica (ero davvero confuso con questa formattazione del markdown).
Suhasini,

Risposte:


11

Quello che stai cercando si chiama nomi esterni (o nomi gerarchici) in VHDL. Possono essere utilizzati per aggirare la visibilità di portata / gerarchia. La sintassi è come nell'esempio seguente.

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

Puoi anche accedere a costanti e variabili con nomi esterni. Devi cambiare il tipo nel tipo esterno però. È possibile utilizzare nomi esterni direttamente per l'accesso in lettura / scrittura. Tuttavia, è necessario utilizzare gli alias per migliorare la leggibilità.

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

Il nome esterno deve contenere il percorso dell'elemento a cui si desidera accedere. Il percorso può essere assoluto o relativo. I singoli elementi nel tuo percorso sono separati da punti. Nota che devi fornire le etichette dell'istanza / processo / entità / ... e non il nome. Il percorso assoluto inizia con un .seguito dal nome del tuo livello principale. Per i percorsi relativi è possibile utilizzare ^per spostarsi verso l'alto nella gerarchia. Quando si utilizzano costanti / segnali da alcuni pacchetti, è anche possibile utilizzare @per spostarsi in una libreria.

Un esempio per un percorso assoluto è

.tb_name.instance_label.sub_instance_label.signal_name

Per accedere allo stesso elemento dal testbench con nomi relativi è possibile utilizzare

instance_label.sub_instance_label.signal_name

Quando si desidera accedere al segnale / costante del testbench dalla sotto_istanza, è possibile utilizzare

^.^.constant_name

Per accedere ad altre costanti in un pacchetto di configurazione situato nella libreria di configurazione, è possibile utilizzare

@config.pkg_name.other_constant_name

È possibile utilizzare il browser di progettazione / libreria dei simulatori come David ha sottolineato per trovare il nome percorso corretto.

Questa funzione è stata aggiunta in VHDL-2008, quindi dovrebbe essere supportata da tutti gli strumenti che dispongono già del supporto VHDL-2008 (incluso ActiveHDL, credo). La maggior parte dei simulatori non utilizza VHDL-2008 per impostazione predefinita, ma fornisce un argomento della riga di comando o un'opzione di configurazione per abilitarlo.


Ho provato quello che mi hai suggerito. l'alias ch1_byte_data_sent è << signal .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (23 downto 0) >>: = x "000000"; Ottengo un errore "Identificatore o stringa previsto letterale" quando lo faccio. Qualche idea sul perché ottengo l'errore? (Ci scusiamo per eventuali errori con il post, la mia prima volta qui!)
Suhasini,

La mia risposta potrebbe non essere abbastanza chiara. Quando si utilizza aliasè necessario scrivere il compito in una nuova dichiarazione. Il vantaggio è che è possibile utilizzare il nome alias anziché il nome esterno lungo.
Thomas S.

1

Come posso far emergere i segnali interni del mio codice sorgente VHDL sul mio banco di prova in modo da poterli visualizzare come forme d'onda?

Un banco di prova implica la simulazione: un'entità senza porte non è generalmente ammissibile alla sintesi.

Anche se non ho mai usato Active-HDL, ho capito che ha un browser di progettazione che dovrebbe consentire di captare i segnali nella gerarchia per visualizzarli nella forma d'onda. Guarda il video Compilation and Simulation di Aldec (5:02, min: sec).

E adesso ho l'impressione che il video possa creare confusione, forse in questo caso particolare.

Alle 2:22 dalla fine il video mostra un file do (macro) che controlla la simulazione:

2:22 do file

Dove vediamo ogni segnale nel livello superiore del disegno è stato aggiunto al display della forma d'onda con il comando wave. Dovrebbe anche essere possibile specificare un segnale in qualsiasi punto della gerarchia di progettazione.

L'idea di base è che molti simulatori consentono di programmare i segnali (e alcuni consentono alle variabili) di essere raccolti per la visualizzazione della forma d'onda.

Questo breve video semplicemente non mostra segnali per i livelli della gerarchia sussidiaria. (Ce ne sono molti ripieni in una breve presentazione video).

Vorrei sapere se esiste un metodo indipendente dallo strumento per raggiungere il mio obiettivo.

Come notato sopra, il tuo obiettivo sembra essere quello di visualizzare i segnali interni come forme d'onda.

Ora per le cattive notizie: non esiste una standardizzazione per le funzioni o le interfacce del simulatore, i segnali di pianificazione per il dump della forma d'onda, ecc. Queste sono tutte definite dall'implementazione.

È praticamente garantito che è possibile eseguire il dump dei segnali ovunque in una gerarchia di progettazione verso un visualizzatore di forme d'onda o un file di dump di forme d'onda con qualsiasi implementazione che simula, il metodo per farlo è definito dall'implementazione.

La buona notizia è che tendono a copiare concetti l'uno dall'altro come file, che è possibile generare a livello di programmazione per la portabilità, utilizzando un database comune che descrive la verifica funzionale su più piattaforme di implementazione, superando le differenze di sintassi e semantica. Probabilmente ci sarebbero anche differenze nella sintassi dell'interfaccia della riga di comando per invocare gli strumenti a livello di codice.

L'idea della portabilità non abbraccia con grazia la GUI multipla.


0

Strumenti come xilinx ha l'opzione per visualizzare i segnali interni.

Un semplice metodo indipendente dall'utensile sta dichiarando linee di uscita separate e collegando i segnali interni a queste linee.


Non desidero interferire con le mie porte di input e output; quindi non è possibile dichiarare alcuna nuova linea di output. Ho dichiarato i segnali nel mio banco di prova ma non sono in grado di vedere alcun output sulla forma d'onda (mostra solo il mio valore inizializzato di zero senza implementare la funzionalità). c'è un altro modo per farlo?
Suhasini,

0

Se i segnali sono stati dichiarati nel banco di prova ma non si riesce a vedere alcun output, è possibile che si sia verificato un problema nell'istruzione di istanza in cui si crea un'istanza dell'entità da testare. Verifica se l'istanza è stata eseguita correttamente, utilizzando un'istruzione di istanza dell'entità o un'istanza del componente. Assicurati che i segnali nel tuo banco di prova siano collegati all'entità sottoposta a test. Se il problema persiste, pubblica il codice testbench in modo che possiamo aiutarti.


Ciò che Thomas ha detto, affronta esattamente il mio problema. Ho risolto l'errore che ho menzionato in precedenza, che era sorto a causa dell'impostazione predefinita di VHDL 1993 nell'Active-HDL fornito con il software di progettazione iCEcube2 di Lattice. Ora ho un errore fatale di elaborazione quando provo a inizializzare la simulazione. Sto cercando di scoprire perché ciò si verifica, spero che non si tratti di un problema di licenza limitato.
Suhasini,

Puoi mostrarci quel messaggio?
Rick
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.