Buenass, hay una solución de este diseño RTL? y si no la hay podría mandar lo que hicea ver si estaría bien? O sea al simularlo manualemente parece estar bien pero no estoy segura de algunas cosas. Además la nota del final dice "La señal Send debe permanecer en 1 hasta que se terminen de recibir todos los bits", de la manera en que yo lo diseñe Send se baja un poco después de ready, o sea un poco después de terminar de recibir todos los datos, para ser más exacta se apaga en el flanco de reloj siguiente, no se si habría alguna manera de que se baje exactamente con ready o si es necesario. Por otro lado, me llevó bastantes pasos y poder guardar toda la información se haría en tipo 9 períodos de reloj, no se si capaz hay una manera más efectiva de hacerlo y por eso también me gustaría poder ver una solución. Graciass.
O sea creo que tiene que haber una manera más efectiva de almacenar datos que entran en serie y no como vector, pero no se
Hola!
Para almacenar los datos en serie que te llegan, lo podes hacer en un paso solo, en este caso te piden que almacenes 8 bits ( en caso que vel sea menor que 8 bits, hay que completar con 0), para eso debes utilizar un contador, de manera de ir controlando cuantos bits vas almacenando.
Llamamos rVel al registro que almacenamos los datos. Para capturar los bits realizamos : ( fíjate en el diagrama que el primero que llega es el bits menos significativo)
rVel[8] <-- Vel,rVel[7..1]
De esta forma estamos almacenando los bits que nos llegan en serie. Permaneceremos en este paso hasta que el contador llegue a 7, lo cual significa que almacenaste 8 bits.
Ahora Vel no siempre te da 8 bits, para eso debes agregar una lógica a la transferencia, mientras Ready sea 1 significa que recibes datos válidos del receptor, si baja READY y todavía no se han completado los 8 bits debes rellenar con 0.
Para eso hacemos:
rVel[8] <- Ready.(Vel,rVel[7:1]) + !Ready.(0,rVel[7:1])
Y mientras se realizan estas transferencias debes activar la salida SEND, para eso en este paso pones SEND = 1, y cuando se almacenen todos los datos,y te salgas del paso, esta bajará a 0 ( para eso el próximo paso a cual vayas no debes realizar ninguna conexión a SEND)
En resumen para el paso que debes almacenar los datos ( paso K) te quedaría:
K. SEND = 1
rVel[8] <- Ready.(Vel,rVel[7:1]) + !Ready.(0,rVel[7:1])
CONT <--- INC(CONT)
(CONT = 7 , !(CONT = 7)) / ( ... , K )
Espero que esto te ayude, si no pregúntanos de nuevo!Saludos!
Pa claro, tremendo, gracias! Una cuestión nomás que me surge, como SEND tiene que valer 1 aunque no esté ingresando nada y READY valga cero, podría poner un condicional a cont con ready, o sea que solo aumente si ready vale 1, para quedarme en el paso sin hacer modificaciones mientras no ingreso dato y sin aumentar el contador y que llegue a 7 antes de tiempo.
SEND va a valer 1 desde que se suelta el botón NUEVO hasta que hasta que se terminen de recibir todos los bits.
En principio estarías esperando que se presione el botón NUEVO, una vez que se apretó, irías a otro paso para esperar a que se suelte el botón. Una vez que se soltó, irías a otro paso esperando por la señal READY. (Aca ya das podes dar salida 1 en SEND) (Otro cuidado que debes tener es que cuando detectas la señal READY ya tenes que grabar el primer dato antes de irte al próximo paso).
Luego de detectado READY te irías a otro paso para capturar los demás datos, hasta que contador valga 7. ( lo que te comente anteriormente).
Necesitas el incrementar el contador en cada captura de dato, hasta llegar a 7. Si lo detienes cuando se baja READY, después no vas a saber "cuanto más debes rellenar con 0".Imagínate que vel te manda 3 bits D2 D1 D0
rVel = D0 0 0 0 0 0 0 0
rVel = D1 D0 0 0 0 0 0 0
rVel = D2 D1 D0 0 0 0 0 0 -- BAJA READY ( debes seguir contando para saber hasta cuando "completar con 0")
rVel = 0 D2 D1 D0 0 0 0 0
rVel = 0 0 D2 D1 D0 0 0 0
rVel = 0 0 0 D2 D1 D0 0 0
rVel = 0 0 0 0 D2 D1 D0 0
rVel = 0 0 0 0 0 D2 D1 D0
Perdón si no era esa la duda, pero no me quedo claro, cualquier cosa me vuelves a preguntar
saludos