Scusa, mi ero dimenticato il file della periferica.
Ciao Paolo,
ho implementato nel protocollo un bit di ENABLE ( slv_reg6(2) ) asserito dal processore quando ha finito di inviare tutti i blocchi. Mettendo questo ENABLE in AND con Hready otterremmo un segnale che è proprio quello che vuoi tu.
Ricapitolando:
0) Esegui il reset
1) Scrivi zero su ENABLE (in realtà è già zero dopo il reset)
2) Esegui l'Hreset
3) Carichi i blocchi dati come prima
4) Dopo l'ultimo blocco fai il polling sul bit "polling" (slv_reg5(0))
5) Quando "polling" è uno scrivi uno su ENABLE (quindi Hready può transire a uno)
6) Fai il polling su Hready
7) Quando Hready è uno leggi gli H e riporti ENABLE a zero (qundi Hready torna a zero)
Questa soluzione potrebbe risolvere tutti i problemi? Che ne dici?
In allegato ho messo il file modificato e il nuovo test_bench. Fammi Sapere!
Ciao!
Lorenzo
Da: Paolo Palana <
" target="_blank">
> Oggetto: Re: [EMBEDDED] domanda su comportamento slv_reg5
A: "Lorenzo Iafolla" <
" target="_blank">
> Cc:
" target="_blank">
Data: Venerdì 20 maggio 2011, 14:22
2011/5/20 Lorenzo Iafolla <
" rel="nofollow" target="_blank">MailScanner ha rilevato un possibile tentativo di frode proveniente da "it.mc1100.mail.yahoo.com" MailScanner ha rilevato un possibile tentativo di frode proveniente da "it.mc1100.mail.yahoo.com"
>
Ciao Paolo,
da quanto capisco il comportamento di Hready (slv_reg5(1)) non ti piace...
possiamo modificare il codice in modo che sia più semplice scrivere il driver. Cos'è che non ti piace? |
Ciao Lorenzo, in realta' non e' che non mi piace il comportamente di Hready, e' solo che il fatto che vada ad uno (il che equivarrebbe a dire "risultato pronto" giusto?) dopo il reset potrebbe (e dico potrebbe) causare delle letture spurie dal driver che sarebbero difficilmente gestibili.
il fatto che dopo il reset Hready vada ad uno o il tempo che rimane asserito dopo la sua asserzione? In particolare, durante le normali operazioni, dopo aver elaborato il primo blocco, quando preferiresti che torni a zero Hready?
|
Questa frase mi fa sorgere un dubbio. Hready diventa uno alla fine dell'elaborazione di ogni blocco, oppure diventa 1 quando ha finito di elaborare tutti i dati che gli sono stato inviati? Cerco di spiegarmi meglio. Supponiamo di avere 2 blocchi di dati da elaborare. Leggendo la descrizione, decisamente precisa ed esaustiva, del comportamento del VHDL sembrerebbe che la procedura per comunicare i dati alla periferica e per leggere il risultato sia la seguente:
1. carico il primo blocco in RAM 2. scrivo 1 su EOB 3. faccio polling sul slave_reg5(0) per sapere quando la periferica puo' accettare un nuovo blocco 4. scrivo 0 su EOB 5. carico il secondo blocco in RAM
6. scrivo 1 su EOB 7. faccio polling sul slave_reg5(0) per sapere quando la periferica puo' accettare un nuovo blocco 8. scrivo 0 su EOB 9. faccio Polling su Hready e quando Hready=1 allora leggo i registri risultato
Adesso la domanda e': C'e' il rischio
di trovare Hready ad 1 al passo 9 prima che sia stata terminata l'elaborazione del secondo blocco?
Se posso esprimere una mia opinione, mi aspetto che un bit che segnali la disponibilita' di risultati rimanga ad 1 fino a quando non viene effettuata la lettura e poi sia il software a segnalare alla periferica l'avvenuta lettura e tale segnalazione dovrebbe riportare a 0 il bit. Questo principalmente perche' non si ha la certezza di quando un pezzo di codice va in esecuzione, quindi avere un bit che rimane alto per un certo periodo di tempo e poi da solo torna a zero espone al rischio che il sistema operativo non si accorga mai che il risultato e' pronto.
Buona giornata a tutti
Paolo
A presto,
Da: Paolo Palana <
" rel="nofollow" target="_blank">MailScanner ha rilevato un possibile tentativo di frode proveniente da "it.mc1100.mail.yahoo.com" MailScanner ha rilevato un possibile tentativo di frode proveniente da "it.mc1100.mail.yahoo.com"
>
Oggetto: [EMBEDDED] domanda su comportamento slv_reg5 A:
" rel="nofollow" target="_blank">
Data: Venerdì 20 maggio 2011, 10:44
Salve a tutti, innanzi tutto volevo avvisare che ieri sera ho fatto il porting del codice VHDL di sha1_core per la scheda che ho a disposizione. In realta' e' stata una cosa semplice. E' stato sufficiente sostituire la dual port ram usata nella CustomFifo. Pensavo comunque, se siete d'accordo, di rendere disponibile sia il codice modificato di sha1_core che l'interfaccia avalon che spero di sviluppare nel fine settimana.
A questo punto, pero', devo farvi un paio di domande sul comportamento del registro slv_reg5, in particolare sul bit 1. Allora! Simulando il dispositivo mi sono accorto che appena dato il comando di reset slv_reg5(1) va a 1. Dopo aver dato il comando di reset scrivo 1 e poi 0 su slv_reg6(1) e poi asserisco il bit EOB. Il bit slv_reg5(1) rimane ad 1 fino a 22 cicli di clock dopo aver asserito il bit EOB. Il bit di polling, nel frattempo, passa ad 1 19 cicli di clock dopo aver asserito il bit EOB (questo suppongo
significhi che la periferica e' pronta per ricevere un nuovo blocco di dati) e rimane asserito, insieme a reset slv_reg5(1), per due cicli di clock. Successivamente slv_reg5(1) passa a 0, mentre il bit di polling rimane a 1 fino a quando non scrivo 0 sul bit EOB. Quando sui quattro registri di output appare il risultato dello sha1 il bit slv_reg5(1) diventa 1 (e questo suppongo significhi che e' possibile leggere i dati dalla periferica).
Il bit slv_reg5(1) non dovrebbe diventare uno solo ed esclusivamente in corrispondenza dell'output vero e proprio dei dati? Potreste anche fornirmi, se possibile, delle coppie (input, output) che avete usato durante le vostre simulazioni?
Grazie mille Paolo -- Paolo Palana, PhD Student <
" rel="nofollow" target="_blank">
>
Dept. of Computer Science,
Systems, and Industrial Engineering University of Rome "Tor Vergata", Via del Politecnico, 1 - 00133 Rome office: D1 - 21 phone : +39 06 7259 7714
| -- Paolo Palana, PhD Student <
" rel="nofollow" target="_blank">
>
Dept. of Computer Science, Systems, and Industrial Engineering University of Rome "Tor Vergata", Via del Politecnico, 1 - 00133 Rome office: D1 - 21 phone : +39 06 7259 7714
|
2011/5/20 Lorenzo Iafolla <
" rel="nofollow" target="_blank">MailScanner ha rilevato un possibile tentativo di frode proveniente da "it.mc1100.mail.yahoo.com" MailScanner ha rilevato un possibile tentativo di frode proveniente da "it.mc1100.mail.yahoo.com"
>
Ciao Paolo,
da quanto capisco il comportamento di Hready (slv_reg5(1)) non ti piace...
possiamo modificare il codice in modo che sia più semplice scrivere il driver. Cos'è che non ti piace? |
Ciao Lorenzo, in realta' non e' che non mi piace il comportamente di Hready, e' solo che il fatto che vada ad uno (il che equivarrebbe a dire "risultato pronto" giusto?) dopo il reset potrebbe (e dico potrebbe) causare delle letture spurie dal driver che sarebbero difficilmente gestibili.
il fatto che dopo il reset Hready vada ad uno o il tempo che rimane asserito dopo la sua asserzione? In particolare, durante le normali operazioni, dopo aver elaborato il primo blocco, quando preferiresti che torni a zero Hready?
|
Questa frase mi fa sorgere un dubbio. Hready diventa uno alla fine dell'elaborazione di ogni blocco, oppure diventa 1 quando ha finito di elaborare tutti i dati che gli sono stato inviati? Cerco di spiegarmi meglio. Supponiamo di avere 2 blocchi di dati da elaborare. Leggendo la descrizione, decisamente precisa ed esaustiva, del comportamento del VHDL sembrerebbe che la procedura per comunicare i dati alla periferica e per leggere il risultato sia la seguente:
1. carico il primo blocco in RAM 2. scrivo 1 su EOB 3. faccio polling sul slave_reg5(0) per sapere quando la periferica puo' accettare un nuovo blocco 4. scrivo 0 su EOB 5. carico il secondo blocco in RAM
6. scrivo 1 su EOB 7. faccio polling sul slave_reg5(0) per sapere quando la periferica puo' accettare un nuovo blocco 8. scrivo 0 su EOB 9. faccio Polling su Hready e quando Hready=1 allora leggo i registri risultato
Adesso la domanda e': C'e' il rischio
di trovare Hready ad 1 al passo 9 prima che sia stata terminata l'elaborazione del secondo blocco?
Se posso esprimere una mia opinione, mi aspetto che un bit che segnali la disponibilita' di risultati rimanga ad 1 fino a quando non viene effettuata la lettura e poi sia il software a segnalare alla periferica l'avvenuta lettura e tale segnalazione dovrebbe riportare a 0 il bit. Questo principalmente perche' non si ha la certezza di quando un pezzo di codice va in esecuzione, quindi avere un bit che rimane alto per un certo periodo di tempo e poi da solo torna a zero espone al rischio che il sistema operativo non si accorga mai che il risultato e' pronto.
Buona giornata a tutti
Paolo
A presto,
Da: Paolo Palana <
" rel="nofollow" target="_blank">MailScanner ha rilevato un possibile tentativo di frode proveniente da "it.mc1100.mail.yahoo.com" MailScanner ha rilevato un possibile tentativo di frode proveniente da "it.mc1100.mail.yahoo.com"
>
Oggetto: [EMBEDDED] domanda su comportamento slv_reg5 A:
" rel="nofollow" target="_blank">
Data: Venerdì 20 maggio 2011, 10:44
Salve a tutti, innanzi tutto volevo avvisare che ieri sera ho fatto il porting del codice VHDL di sha1_core per la scheda che ho a disposizione. In realta' e' stata una cosa semplice. E' stato sufficiente sostituire la dual port ram usata nella CustomFifo. Pensavo comunque, se siete d'accordo, di rendere disponibile sia il codice modificato di sha1_core che l'interfaccia avalon che spero di sviluppare nel fine settimana.
A questo punto, pero', devo farvi un paio di domande sul comportamento del registro slv_reg5, in particolare sul bit 1. Allora! Simulando il dispositivo mi sono accorto che appena dato il comando di reset slv_reg5(1) va a 1. Dopo aver dato il comando di reset scrivo 1 e poi 0 su slv_reg6(1) e poi asserisco il bit EOB. Il bit slv_reg5(1) rimane ad 1 fino a 22 cicli di clock dopo aver asserito il bit EOB. Il bit di polling, nel frattempo, passa ad 1 19 cicli di clock dopo aver asserito il bit EOB (questo suppongo
significhi che la periferica e' pronta per ricevere un nuovo blocco di dati) e rimane asserito, insieme a reset slv_reg5(1), per due cicli di clock. Successivamente slv_reg5(1) passa a 0, mentre il bit di polling rimane a 1 fino a quando non scrivo 0 sul bit EOB. Quando sui quattro registri di output appare il risultato dello sha1 il bit slv_reg5(1) diventa 1 (e questo suppongo significhi che e' possibile leggere i dati dalla periferica).
Il bit slv_reg5(1) non dovrebbe diventare uno solo ed esclusivamente in corrispondenza dell'output vero e proprio dei dati? Potreste anche fornirmi, se possibile, delle coppie (input, output) che avete usato durante le vostre simulazioni?
Grazie mille Paolo -- Paolo Palana, PhD Student <
" rel="nofollow" target="_blank">
>
Dept. of Computer Science,
Systems, and Industrial Engineering University of Rome "Tor Vergata", Via del Politecnico, 1 - 00133 Rome office: D1 - 21 phone : +39 06 7259 7714
| -- Paolo Palana, PhD Student <
" rel="nofollow" target="_blank">
>
Dept. of Computer Science, Systems, and Industrial Engineering University of Rome "Tor Vergata", Via del Politecnico, 1 - 00133 Rome office: D1 - 21 phone : +39 06 7259 7714
|