fbpx
Skip to main content

[LA] Linux avanzato 2008

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
17 Anni 8 Mesi fa #66741 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic [LA] Linux avanzato 2008

LA06/07 SCRITTO 31/3/2007
1 - Disegnare il circuito di un contatore modulo 8 basato su flip flop RS.

ciao! potrei chiederti come hai fatto questo esercizio?
Il modo + semplice, con FF di tipo T, è di metterne 8 in serie, far entrare su tutti T=1 ed usare il clock esterno solo per il primo FF, mentre gli altri ricevono come clock l'uscita negata(Q') del precedente. Dovendo usare flip flop RS, ed essendo ogni ff riconducibile ad una rete combinatoria in cui è presente quest'ultimo tipo di FF, si sarebbe potuto partire dalla configurazione che ho scritto sopra per il FF T e sostituire a ciascuno di questi la sua realizzazione mediante FF RS (che prevede in pratica l'aggiunta di 2 porte AND per ogni FF)?
grazie per l'aiuto ciao!


Fai l'automa e lo sintetizzi....come facevamo a reti logiche..

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
17 Anni 8 Mesi fa #66980 da Massimiliano Bontempi
Di seguito il listato per una semplice funzione stampa la cui printf prende la stringa di formattazione da una variabile globale.

Normalmente una stringa si caricherebbe con $.LC2 (e modificando il listato funziona).

Qualcuno sa cosa succede quando viene eseguito "movl Sstring, %edx"?
In Edx che cosa ci finisce? un puntatore ?!?!?
.globl Sstring
	.section	.rodata
	.align 4
.LC2:
	.string	"i = %03d , addr = %p ,\t valore = %d,\t valore = %p\n"
	.data
	.align 4
	.type	Sstring, @object
	.size	Sstring, 4
Sstring:
	.long	.LC2
	.text
.globl stampa
	.type	stampa, @function
stampa:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$24, %esp
	movl	Sstring, %edx
	movl	8(%ebp), %eax
	movl	%eax, 12(%esp)
	movl	$9, 8(%esp)
	movl	$7, 4(%esp)
	movl	%edx, (%esp)
	call	printf
	leave
	ret
	.size	stampa, .-stampa
[/code]

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
17 Anni 8 Mesi fa #67001 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic [LA] Linux avanzato 2008
si per l'esercizio di reti logiche bisogna fare tutto il lavoretto di sintesi per benino, E' l'UNICO metodo che davvero è consigliato, perchè tutto sommato è anche un po meccanico e si applica sempre. Non si dovrebbe disegnare a mano di getto a intuito.
per contare modulo 8 servivano 3 flip-flop rs.
io l'ho fatto in una maniera che non consiglio a nessuno, nel senso che l'ho inventato di sana pianta senza fare alcun lavoro; ho usato dei Multiplexer e dei Demultiplexer che lui NON VUOLE; mi mise C, alzato poi a B per quella domanda perchè comunque mi dovette riconoscere che sembrava funzionare.
Insomma fatevi un po di esercizi fatti bene

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
17 Anni 8 Mesi fa #67012 da Massimiliano Bontempi
Ho seguito il consiglio della sintesi... fatto un mezzo pastrocchio, mi sono arreso ed ho trovato questa traccia
ospitiweb.indire.it/puglia/pug03 ... mod8ud.htm
un po' complicata ma con qualche aggiustamento si riporta all'uso dei 3 FF-RS

Poi però sono stato illuminato: il problema potrebbe essere visto in modo ricorsivo siccome ogni flip flop deve scattare 0-1 in base a quello che fa il precedente (il primo è autonomo)....

Se immaginiamo di contare i clic di un pulsante, il primo FF deve contate cambiare stato ad ogni clic, il secondo ogni volta che il primo ridiventa 0, il terzo ogni volta che il secondo ridiventa 0.

Ve la faccio corta....
FF 1) S1 = clic AND !Q1 , R1 = clic AND Q1
quando clic è basso i due and disabilitano tutto, quando clic è alto
o è set o un reset
FF 2) S2 = !Q1 AND !Q2 , R2 = !Q1 AND Q2
idem come sopra Q1 sostiuisce il clic ma negato perché deve
diventare alto quando FF1 è basso
FF 3 e tutti gli altri che si vogliono mettere sono delle copie esatte

L'uscita è Q3+Q2+Q1
L'unico problema è che, ad inizio sequenza, il valore non è 000 ma 010.
Ci vuole qualcosa per dire "il FF prima di me è diventato 1 almeno una volta". Io lo fare con un FF di supporto con R scollegato e S = Q1 per cui

FF i) Si = !Q(i-1) AND !Q(i) AND Qsupp(i),
Ri = !Q(i-1) AND Q(i) AND Qsupp(i)

Non l'ho testato, l'ho appena abbozzato su carta... che ne dite???

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
17 Anni 8 Mesi fa #67017 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic [LA] Linux avanzato 2008
ciao! io dopo la sparata iniziale di sostituire i FF T con gli SR lo feci seguendo queste slides (del politecnico di milano, altro che angelaccio! :) )

corsi.dei.polimi.it/RetiLogicheA ... tatori.pdf

e mi venne che
Ri=Q0*Q1*..*Qi-1
Si=(Qi XOR Qi-1)*Qi-2*...*Q0

lo avevo fatto un po' di fretta in caso ci riprovo dopo aver finito di ristudiare sistemi operativi! :)

PS: Il tuo esercizio assembler non l'ho mica capito... tra parentesi leggendo la dispensa non ho capito nemmeno il significato di quasi tutte le etichette tipo .section .rodata . text ecc

ciao e buona (quasi) pasqua! :)

Ho seguito il consiglio della sintesi... fatto un mezzo pastrocchio, mi sono arreso ed ho trovato questa traccia
ospitiweb.indire.it/puglia/pug03 ... mod8ud.htm
un po' complicata ma con qualche aggiustamento si riporta all'uso dei 3 FF-RS

Poi però sono stato illuminato: il problema potrebbe essere visto in modo ricorsivo siccome ogni flip flop deve scattare 0-1 in base a quello che fa il precedente (il primo è autonomo)....

Se immaginiamo di contare i clic di un pulsante, il primo FF deve contate cambiare stato ad ogni clic, il secondo ogni volta che il primo ridiventa 0, il terzo ogni volta che il secondo ridiventa 0.

Ve la faccio corta....
FF 1) S1 = clic AND !Q1 , R1 = clic AND Q1
quando clic è basso i due and disabilitano tutto, quando clic è alto
o è set o un reset
FF 2) S2 = !Q1 AND !Q2 , R2 = !Q1 AND Q2
idem come sopra Q1 sostiuisce il clic ma negato perché deve
diventare alto quando FF1 è basso
FF 3 e tutti gli altri che si vogliono mettere sono delle copie esatte

L'uscita è Q3+Q2+Q1
L'unico problema è che, ad inizio sequenza, il valore non è 000 ma 010.
Ci vuole qualcosa per dire "il FF prima di me è diventato 1 almeno una volta". Io lo fare con un FF di supporto con R scollegato e S = Q1 per cui

FF i) Si = !Q(i-1) AND !Q(i) AND Qsupp(i),
Ri = !Q(i-1) AND Q(i) AND Qsupp(i)

Non l'ho testato, l'ho appena abbozzato su carta... che ne dite???

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
17 Anni 8 Mesi fa #67018 da Massimiliano Bontempi
correggo.... forse basterebbe prendere le uscite dirette e negate in modo alternato

ciao ciao

Si prega Accedi o Crea un account a partecipare alla conversazione.