Vediamo se c'ho capito qualcosa...
Metterò in blu quello che ho capito io e tu, Ele, se vuoi mi correggerai (non essere troppo cattivo a sottolineare gli sbagli, però, altrimenti di deprimo
)
Tieni presente che potrei scrivere un bel po' di castronerie, dato che il verilog l'ho appena accennato qualche mese fa. Sto solo cercando di capire, in base alla logica del programma, i vari comandi che hai inserito, ripromettendomi di studiarmeli. Tutto quello che scriverò di giusto sarà dato da intuizione oppure, molto più facilmente al cosiddetto "effetto fondoschiena" (detto volgarmente c..o)
reg [1:0] q;
Crea un registro di 2 bit (si capisce dal fatto 1:0 che sono i 2 bit più bassi e assegna a loro il nome qalways @ (posedge clk or negedge reset)
La direttiva "always" dice che quando avvengono le condizioni che ci sono subito dopo, quindi "posedge clk or negedge reset" esegue le istruzioni che seguono. "posedge clk" indica il fronte di salita del clock e negedge reset è invece l'evento relativo al fronte di discesa del reset. Mi chiedo solo perchè si parli di fronte di discesa e non di segnale attivo basso, quindi livello invece di fronte. if (~reset) begin
Se il reset è 0esegue le istruzioni che seguono. ("begin" e "end" sono equivalenti a { } del C) q <= 2'b00;
inserisce 00 nel registro q, quindi lo azzera. Mi giunge un po' strana la sintassi <= 2'b00 ; sembrerebbe che <= indichi una freccia che trasferisce quello che c'è a destra in quello che c'è a sinistra. 2'b00 immagino che sia la notazione binaria dove 2 è il numero di bit e b00 il numero binario da utilizzare end else begin
Se reset non è 0 q <= q + 2'b01;
inserisce nel registro q il valore di q incrementato del valore binario 01 end // else: !if~reset
always @(q) .......
ogni volta che avviene qualcosa su q
gestisce i case nello stesso modo del C, con una sintassi leggermente diversamodule semaforo_tb ();
.....
.....
Qui non mi sbilancio a cercare di capire senza studiarmi nulla, altrimenti finirei peraggravare la mia condizione CITAZIONE
Sono contento che a qualcuno interessi, e' praticamente il mio lavoro questo
(a dire la verita' no, troppo semplice
)
Beato te che sai qual'è il tuo lavoro!! Il mio dovrebbe essere studiare il problema, inventare un modo per risolverlo, progettare l'hardware e scrivere il relativo firmware e l'eventuale software sul PC, ma ormai lo faccio nei ritagli di tempo (e visto che ora sono impegnato col forum non ho più neppure quelli
).
Il mio lavoro principalmente è:
1) Fare l'help desk per clienti che dopo anni che lavorano con una certa apparecchiatura non hanno ancora capito che un led verde lampeggiante serve ad indicare ch fra 15 minuti l'impianto partirà. (Non mi limito solo a questo, ma mi dedico anche ad altre attività molto simili).
2) Disegnare di pezzi meccanici e delle macchine col CAD 3D
3) Fungere da lubrificante quando qualcuno dei miei colleghi fatica ad andare avanti co un certo lavoro
4) Amministrazione (non tantissima, ma c'è anche quella) e burocrazia "italian-style" (solo chi lavoro in certi ambienti e con certe mansioni può capire cosa significhi)
5) Altre ed eventuali tranne le cose inerenti l'elettronica, perchè non sia mai detto che riesca a fare quello che mi piace di più (e che forse mi riecse meglio).
CITAZIONE
Questa e' il modulo sintetizzato da yosys. E' abbastanza difficile da capire
Fino ai 4 blocchi di comparazione $33_CMP0 & c. la cosa l'ho capita, poi mi sono perso (e considerando l'orario farò sicuramente molta fatica a ritrovarmi
).
$35 è il registro q a 2 bit.
$31_CMP0 è il blocco che fornisce l'uscita quando Q è = 11
$32_CMP0 è il blocco che fornisce l'uscita quando Q è = 10
$33_CMP0 è il blocco che fornisce l'uscita quando Q è = 01
$34_CMP0 è il blocco che fornisce l'uscita quando Q è = 00 e che è diverso dagli altri in quanto è un OR (o un NOR), perchè deve controllare la condizione che Q sia 00 o diverso da 00.
Il blocco S3 è un sommatore che aggiunge al valore di Q la constante 01, incrementando di 1 il contatore. Il valore di uscita dal sommatore viene riportato sull'ingresso D del "Bi"-flip-flop Q.
Prof.Ele, che voto mi da? 2------? Beh, pensavo peggio!!