Sto cercando di capire o ricercare le migliori pratiche del design ASIC in verilog. Sto lavorando su un blocco di medie dimensioni con ~ 20 sottomoduli (ogni ~ 1000 righe di codice). È un lavoro scrupoloso creare manualmente un'istanza di tutti i sottomoduli e fare una connessione di porta per creare RTL di livello superiore.Esiste un modo consigliato per automatizzare la connessione della porta del modulo?
Voglio scrivere uno script per automatizzare questo. Finché possiamo definire l'input/output di tutti i sub-moduli e il modo in cui ciascun sottomodulo è connesso l'uno con l'altro, non dovrebbe essere molto difficile generare automaticamente il livello più alto. Comunque non ho abbastanza esperienza nell'automazione del design. Mi stavo chiedendo se qualcuno può darmi qualche suggerimento su come iniziare.
- Esiste uno strumento open source per ottenere ciò che sto cercando di fare? Non ho trovato nulla finora.
- Esiste un modo standard per generare codice sintetizzabile di questo tipo?
Apprezzerò molto ogni tipo di input o consiglio.
Si potrebbe usare '*' connessioni delle porte implicite se il modulo di brevetto ha le stesse variabili come nomi delle porte di modulo.. Ma usalo con attenzione. – rahulcodesinverilog
È possibile creare script perl e immettere file di moduli e generare un file superiore in cui è possibile eseguire alcune logiche di punture e istanziare sottomoduli nel file principale. Prova con il modulo piccolo e quindi espanderlo con i tuoi requisiti. Non puoi chiedere una sceneggiatura diretta ma puoi, ma è possibile. –
Non è una soluzione automatica, ma ecco cosa faccio spesso. Incolla nella definizione del sottomodulo (es. 'Modulo # (...) (logica di input ..., logica di output ...);' e quindi aggiungi il nome dell'istanza ed elimina tutte le direzioni e i tipi di porta. Ora usa la registrazione della macro funzione sul tuo editor per fare questo: 'CUT. PASTE (PASTE)'. Quindi fare doppio clic su ciascun nome di porta per evidenziarlo e quindi eseguire la macro. Ciò cambia 'some_name' in' .some_name (some_name) '. Se la porta e il nome della connessione è lo stesso, quindi il lavoro è fatto, altrimenti è più facile fare un doppio clic, copiare e incollare un po 'di più, non mi piace '. *'. –