Tante risposte che non le ho lette tutte, essendo qualcuno che siede su entrambi i lati del recinto, hardware e software ...
Quindi, sebbene in ogni modo si tratta di un linguaggio di programmazione che viene compilato in altri linguaggi di livello idealmente inferiore (C in asm o codice macchina, JAVA in bytecode o altro linguaggio o assembly o codice macchina, ecc.). Ci sono molti più passaggi e gli obiettivi sono molto più vari di isa che sono tanto comuni quanto diversi: add, mov, jne, push, pop, ecc.
Il codice macchina per fpgas o asics non è solo transistor discreti, ma una libreria di cose. Per gli asics per una particolare fonderia e processo ci sono una o più librerie di celle disponibili e avranno porte semplici e eo ma anche cose più grandi e complicate, perché costruire un latch di componenti discreti quando gli autori della libreria possono creare alcune dimensioni comuni quelli e imballarli in modo efficiente (immobiliare). Così come con qualsiasi compilatore o autore di alto livello, scorri l'elenco delle opzioni e ne scegli alcune. compreso un lungo elenco di sram di varie larghezze e profondità. Per un FPGA si tratta di LUT o moduli generici fissi che possono agire come vari moduli che sono più complicati di un semplice and, or, xor gate.
Al mondo FPGA piace tenere le cose vicino al petto, inoltre cercano di essere molto più convenienti degli strumenti asic, decine di migliaia di dollari all'anno anziché milioni. E come qualsiasi altro ambiente integrato, a volte hai vari fornitori che sono stati acquistati o concessi in licenza e gli strumenti incollati insieme (spesso non molto belli).
Quindi tutti i passaggi menzionati da altre persone sono avvenuti. che è più del software e i formati di file sono molto proprietari e non ci si aspetta che siano documentati o supportati, ogni versione potrebbe cambiare. Ancora una volta queste persone sembrano essere competitive e riservate (se dovessero aprirsi potremmo avere strumenti significativamente migliori e potrebbero vendere più prodotti IMO, ma potrebbero ridurre i soldi del supporto che è forse ciò di cui vivono con i loro strumenti scadenti) .
Quando la gente dice netlist, il verilog è compilato in una netlist, quelli che ho visto sono anche in verilog o vhdl come questi linguaggi lo coprono. alla fine dovrai quindi prendere di mira lo specifico qualunque, fpga, cpld, asic, ecc. Essendo un obiettivo già cablato / fisso, alla fine ti ritroverai con un elenco di fusibili o interruttori se lo desideri, prendi un lut generico e collega questo ingresso a quello e quell'input a quello aprendo e chiudendo le connessioni nell'enorme rete di cose. Che finisce per essere una sorta di semplice elenco di on e off. E penso che potrebbe esserci uno standard jedec su questo, ma spesso chiamato bitstream e almeno usiamo un lettore bitstream per caricare.
I CPLD in generale si programmano queste informazioni nella parte stessa sia che si tratti di un flash a bordo che poi apre / chiude le cose all'accensione e / o la memoria non volatile all'interno si accende con gli elementi cablati.
Gli FPGA in genere hanno un flash esterno e all'accensione le informazioni per collegare le cose vengono caricate da questo, quindi il resto della parte viene visualizzato utilizzando quella configurazione. Quelli che so su di te possono anche caricare queste informazioni nella parte ed effettuare tutte le connessioni, ma queste informazioni vengono perse quando la parte viene spenta. quindi, a seconda del design, potresti avere qualche altra soluzione e non utilizzare il flash. Il formato flash è probabilmente prioprietario, non ho guardato personalmente, quando entri attraverso l'interfaccia di programmazione che passa attraverso l'fpga alla flash in modo che possa andare così com'è o potrebbe essere convertito nel suo percorso in qualcos'altro.
Con il software specialmente questa volta e in questo posto siamo abituati per lo più ad aprire cose, strumenti gratuiti piuttosto buoni che molte persone usano. Il che significa anche che i formati di file sono documentati e in qualche modo comuni, alcuni avevano una cronologia prima di questa volta .com e .exes e altri per altri sistemi operativi del giorno. Ma ancora una volta il mondo del software è più comune che diverso, idealmente stai mirando al codice macchina o al bytecode. Con la logica si passa da un livello alto a un livello inferiore, ma a un certo punto si utilizza lo stesso linguaggio. Quindi potresti prendere di mira un simulatore che ha la sua libreria di moduli o fpga n con la sua libreria o fpga m con la sua libreria e così via. E quelle persone sono molto protettive nei confronti delle informazioni.
Clifford e il progetto IceStorm IMO sono la strada giusta, è finora l'unica volta che ho costruito qualcosa per un fpga che è semplice, funziona, senza avvisi o errori che spesso piacciono alla gente del software.Ho passato innumerevoli notti cercando di ottenere la cosa più semplice da costruire per un fpga da tutti i principali fornitori senza avvertimenti ... e mi arrendevo sempre.Dal verilog alla parte programmata ci sono almeno tre progetti separati, il che implica che ci sono file intermedi che entrambe le parti devono supportare in modo che i formati di file siano lì.ma ci si aspetterebbe che sia specifico del progetto e non necessariamente come un file elf ampiamente utilizzato per più di un caso d'uso.
Comprendi che il mondo dei chip, inclusi gli fpgas, è follemente costoso, quindi è guidato dal denaro, il che spesso significa vendere strumenti e, soprattutto, contratti di supporto annuali.Il che significa sorgente chiusa, informazioni chiuse, formati di file non documentati pubblicamente.