Ho eliminato il "warning" segnalato da ModelSim con una semplice modifica:
- Code: Select all
case state is
-- ...
when sexec =>
-- Read data
case data(7 downto 6) is
-- ...
-- Store
when "01" =>
we <= '1';
addr <= data(5 downto 0);
state <= sstore;
-- ...
end case;
when sstore =>
-- write to memory, data is ready next clock
data <= reg;
state <= sfetch;
when others => null;
end case;
Ho semplicemente spostato:
- Code: Select all
data <= reg;
Nello stato sstore in quanto in sexec si accedeva già a data per leggere l'address
Ora che ci penso avevo già avuto dei dubbi a proposito
http://www.delucagiovanni.com/public/phpbb3/viewtopic.php?f=10&t=334 è passato un pò di tempo e me ne ero scordato
La modifica è stata semplice (e spero sia quella giusta) ma credetemi trovarla è stato faticoso, ho stampato le forme d'onda di ModelSim e ho analizzato tutto quanto a mano, ho fatto con carta e penna il grafo degli stati (ok lo fa anche Quartus ma l'ho fatto personalizzato) e vedendo il codice VHDL ho controllato cosa potesse essere andato storto.
Ad ogni modo ho riscritto il tutto con due processi distinti come consigliato, il risultato è sicuramente più gestibile e.. il codice degli stati non viene eseguito allo stato successivo
(è un pò difficile da spiegare a parole)
Mi sono messo poi avanti per evitare che la CPU impazzisca se raggiunge uno stato imprevisto:
- Code: Select all
when others =>
state <= sreset; -- Reset crazy CPU :)
Ecco il nuovo codice:
http://www.atomwave.com/FPGA/LCPU2.zip e la simulazione ModelSim:
Per evitare problemi ho impostato WE (Write Enable) a 'Z' (Alta impedenza) per evitare di leggere la memoria quando non necessario (un pò un disable), spero non sia una pratica scorretta.
Non sto seguendo nessun testo in particolare, vado a memoria dalle reminiscenze del corso di calcolatori elettronici che però non trattava VHDL ma solamente qualcosa di Assembly x86. Ho letto per conto mio qualcosa di VHDL ma sopratutto sulla sintassi.
Diciamo che ho ripreso l'idea di scrivere una CPU "educativa" per non scordare quel poco di sintassi che avevo imparato. L'idea era nata dopo aver analizzato il progetto MCPU
http://opencores.org/project,mcpu che però non avevo trovato molto immediato perché mancava la RAM e quindi non era possibile farlo girare e poi se non si scrive qualcosa da soli from scratch non si impara veramente.
Ciao e grazie a tutti