@deluca
voi avete implementato un SoftCore
from scratches, c'e' un mio amico che mi sta facendo una capa tanta per tutti i problemi in cui si e' infilato per una faccenda simile: ha scritto un SoC il cui Softcore e' un coso RISC con pipeline 5 stadi che … diciamo pure che NON funziona
ecco, come sai io detesto questo genere di progetti, e vedo le FPGA unicamente modi
glue logic e periferiche, mai come SoftCore proprio perche' non sai mai come validarle, se sono valdiate, o se riservano sgradite sorprese (oltre al fatto che non e' mai chiaro se possano o meno essere affidabili con interfacce di debug, modi jtag, nexus, BDM ecc ecc, insomma quando c'e', rodato, testato e funzionante, nelle controparti ASIC)
sicche' mi domando e chiedo:
al pratico cosa avete usato (chipscope, LAC, boh?) e come avete condotto la attivita' di validazione, di bug fixing ecc, in HDL, sopratutto, della pipeline ?
Per l'accrocchio che mi ha mostrato … ho scritto una semplicissima calcolatrice tutta sint32_t e alla prova del 9 gia' noto che ha un comportamento diverso e va fuori controllo se si cambiano i livelli di ottimizzazione
p.e. usando gcc
-O0 (nessuna ottimizzazione) vede il codice funzionare come ci si aspetta (ed i risultati sono pure giusti
)
-O1, -O2, -Os (ottimizzazioni varie) iniziano a manifestarsi comportamenti strani, del tutto non giustificabili secondo l'assembly sottostante, segno che c'e' qualche pasticcio nella pipeline, di cui sospetto hazard, e pasticci vari con i branch, e allora il punto diventa capire dove/che cosa/perche', anche perche', oltre alle CPU, potrebbero esserci delle collisioni sul cross bar matrix che collega la CPU con le periferiche e con la ram (quest'ultima e' BRAM, interna alla fpga)
Ecco, a voi e' successo durante lo sviluppo ? Se si, come ne siete venuti fuori, insomma cosa gli dico (a parte il butta via tutto, e prenditi una CPU ASIC, ma tanto, almeno su questa … non mi ascolta, ha la testa di marmo) ?