2012-03-28 8 views
9

Le configurazioni VHDL possono essere utilizzate per associare componenti a entità con un nome diverso e persino con porte completamente diverse. [see this article for more info]Le configurazioni VHDL avanzate sono mai state utilizzate nella vita reale?

configuration c2 of testbench is 
    for str 
     for dut_inst : dut 
      use entity work.unrelated(rtl) 
       port map(
        port1 => a, 
        port2 => b, 
        port3 => c, 
        port4 => "unused" 
       ); 
     end for; 
    end for; 
    end configuration c2; 

Qualcuno di voi ha mai visto accadere in un progetto progetto commerciale? Qual era lo scopo di abbandonare un'entità apparentemente non correlata? Perché non hanno semplicemente modificato il codice di istanziazione?

Posso inventare situazioni ipotetiche, ma sono interessato a un caso di utilizzo nella vita reale.

+0

Grazie per avermi fatto questa domanda - Sono anche molto interessato. Nella mia esperienza, non l'ho mai visto usato da solo e ho lavorato su basi di codice di grandi dimensioni per più schede/sistemi FPGA. – Josh

+1

Lo stesso per me. Il VHDL sembra avere un paio di elementi linguistici che lo fanno sembrare molto vecchio e specificato per una base utente diversa e più piccola rispetto agli attuali ingegneri FPGA. Elenchi di sensibilità, configurazioni, etichette obbligatorie, mancanza dell'equivalente di un preprocessore C, insistendo sul fatto che l'ultimo elemento in una lista non deve avere un coma finale, o distinguere tra std_logic e bool quando mai lo sviluppatore assumerà '1' = vero e nome il segnale di conseguenza. I concetti di base vanno bene, ma qualcuno ha bisogno di ridisegnare la lingua da zero. – maxy

+0

@maxy: alcuni di questi sono d'accordo, e altri no. Le liste di sensibilità sono una reliquia di quando i compilatori/sim non erano così capaci, quindi te lo darò. Trailing virgola, sì okay, ma non sto perdendo il sonno su di esso. Le configurazioni sono potenti e utili (sebbene l'esempio sopra non sia necessario). Non voglio un preprocessore. Hai visto le cose orribili che le persone fanno con esso? I generici ti prendono il 90%, ma applicano la struttura. std_logic vs bool è un artefatto di avere un linguaggio rigidamente tipizzato e la rigida tipizzazione è una buona cosa per RTL IMHO. Etichette ... perché non etichettate qualcosa? :-) –

risposta

3

No, non l'ho mai visto in natura.

Suppongo che la maggior parte delle persone (me compreso) non sappia nemmeno che tali cose sono possibili con le configurazioni.

4

Mai viste le associazioni delle porte cambiano, ma ho visto che si usava legare in diverse versioni di componenti con la stessa mappa di porte. Alcuni esempi che ho visto:

  • Associazione in versioni vuote durante la creazione di simulazioni a livello di sistema di grandi dimensioni. Parte del design è sostituita da versioni che non fanno nulla per mantenere basso l'ingombro della memoria durante il test di altre parti del progetto.
  • Simile, ma quando si verifica l'infrastruttura del bus di un progetto, si legano in unità semplici che rispondono in modo "selvaggio" e "selvaggio".
  • Diverse versioni di un particolare blocco che presentano compromessi di design diversi. per esempio. Una versione grande e veloce, una piccola ma lenta. Può quindi essere sostituito a seconda di cosa è necessario quando il sistema si riunisce o per una particolare applicazione.

Nessuno di questi ha bisogno delle funzionalità di cui si sta parlando. L'unica cosa che posso pensare che l'utilizzo di un componente diverso potrebbe essere utile è se hai qualcosa come più fornitori di librerie di RAM e hai bisogno di scambiarli regolarmente. Anche in questo caso è improbabile che tu possa eseguire una mappatura delle porte one-for-one. C'è sempre un pin di spegnimento che ha bisogno di essere invertito o qualcosa del genere.

+0

Aggiungerei (1) lo scambio di modelli comportamentali per i modelli RTL mentre un grande progetto avanza e (2) utilizzando la configurazione per selezionare diverse versioni di una simulazione. Questo è del tutto normale nei grandi progetti. Aggiungo anche che devi solo parlare con un Verilogger per scoprire quanto sia doloroso avere un solo nome quando quel nome esiste come componenti diversi in diverse librerie. Le configurazioni sono, IMO, fondamentali per VHDL. – EML

1

Ho usato questo tipo di configurazione alcune volte. Cerco di evitarlo, ma a volte è utile per i test di whitebox.

Supponiamo di avere un'entità molto grande + architettura FooMachine, e desidero scrivere una serie di test dell'unità whitebox riferiti ai segnali all'interno di FooMachine. Idealmente, FooMachine sarebbe suddiviso in più componenti e scriverò test black-box su questi, ma ho ereditato alcune architetture davvero massicce in cui non potevo, da un punto di vista economico, giustificare il tempo necessario al refactoring quando erano necessari solo piccoli cambiamenti.Quello che farò è definire un componente in FooMachine

component Dummy is 
end component Dummy; 

e un'istanza

dummy_g : Dummy; 

Poi, in una prova di unità di segnale x in FooMachine, scriverò un'entità + un'architettura

entity TestDummy is 
    port (
     x : in std_logic 
    ); 
end entity; 

architecture Arch of TestDummy is 
    ... 
end Arch; 

ed una configurazione

configuration conf of ... is 
... 
    for all : FooMachine 
     ... 
     for all : Dummy 
      use entity work.TestDummy(Arch) 
       port map (x => x); 
     end for; 
    end for; 
... 
end configuration; 

E quindi posso scrivere le mie affermazioni in TestDummy.

Ancora, questo non è il modo in cui preferisco scrivere i miei test di unità, ma ci sono stati momenti in cui questa era la soluzione migliore per uno sfortunato problema.

+0

ottima risposta, non molte persone capiscono le implicazioni e l'utilità di questo – CJC

Problemi correlati