Esto creo que puede ser un bug y que el código funcione en algún ratón en concreto pero no generalice, la solución que he pensado es bastante sencilla aunque no sé si robusta, símplemente cambiar :
m2_next_state <= m2_error_no_ack por m2_next_state <= m2_wait en el estado m2_error_no_ack.
Esto asegura que el módulo no se atasque si falla el ack del ratón y pueda intentar recibir datos nuevamente, básicamente tiene una máquina de estados que espera un ACK y básicamente no le llega, no sé si por evolución de los ratones o por algún otro bug, pero bueno la realidad es que así funciona de lujo, aunque habría que revisarlo porque aquí hay algún bug/error o similar.
En cualquier caso como veis en el vídeo que os adjunto a mi me ha funcionado bien, ahora es ver si es generalizable y funciona en muchos ratones.
Luego he ajustado el código para que funcione a 12MHz porque la temporización es clave (el código está para una placa de xilinx a más megaherzios ), así que los parámetros son claves y los valores los he calculado para temporizar contando los 12Mhz de la Alhambra,
esto sería ideal calcularlo automáticamente pero bueno de momento vamos andando:
WATCHDOG_TIMER_VALUE_PP = 4800 (400 µs).
WATCHDOG_TIMER_BITS_PP = 13.
DEBOUNCE_TIMER_VALUE_PP = 45 (3.75 µs).
DEBOUNCE_TIMER_BITS_PP = 6.
Para seguir FSMs si son complejas o largas, suelo usar mermaid que de paso, puede quedar algún gráfico chulo para documentar, aquí os dejo por si os interesa la fsm del código del ratón (la url es un chorizo porque contiene en sí el diseño):
https://mermaid.live/edit#pako:eNplk-Fu2jAQx1_l5M-0C0kDTbRVohBaqrWq6NQPCxUyzlEsgp05TlUKPMyeYdoLrC-2ixM2TcuXxOf__3d39mXHhM6QxezZ8GIFX0YzBfQM0omSQmr4AFMs0T7ByckFXFJ0JRfSQFH6c5Gv4ePCXMCZ58Gvn-VTY7100mGaqBfJDQi94SrT4L2Ozxp5ovgiR3iwBvkGbil96xw65yhNygINWQ2WRYWl5ZBhDobb9x-qQRBs0JpGtWk_EGuSC6ot03tIUqJqQMdpHJ9laTUUnNYZt7r8z73kee7M4zQxRhtQes5F2-EUZX0cdTtS5Lo1j129SbNIHGmEFoUl3TLnSlAJ6nhUe7hKpyh03uwX_FtF2gYfBLCQ9ljTlSPdtwI6vyJHS4Vdp49o5FKKv_bWce0cj-_fmw4m6b3RAkvSuV6bJANhK57LN4qW9M54-Y_7TsPLEdC2NHH93aR32rZpG1xen2VLpQif00VmW_gE3ZZ444h1tA4Sj3XYBs2Gy4wmbVeLZsyucIMzFtNnxs16xmbqQDpeWf2wVYLF1lTYYVVBKXAkOQ3o5hg0unpesZjurKRVwdVXrf9sYiatNrfNWLvpdhIW79gri_2ge9rrhUH3PIqCbhh1gw7bsjigoBf2_TAK_Cjyw_NDh705qHca9b3QDzwa837QD7u9Dv0sdSdtLagyNENdKUuYyDv8Bm8KDwU
Este es más en detalle:
https://mermaid.live/edit#pako:eNqVVtty2jAQ_RWNZpInksE2BPAkmeEakkD6EJ5aMh5hK1gTI1FZbkJu_9Jv6Cfkx6q1IbGAGsoDl909Zw-7q7VesC8Cil08lWQeolFnzJF-xckkM4zxzHJRhyrq--zjD0cBRfcR4b6IEeVoHtueHz2McQaD19Bq_phZYPVCdDqR58iPKOFgQGfIukNHR-ev70vgqw5vQfg9iSLGpx4NpjRDGRYA5lO0gEV_tvPYR8KUEdVOcwV0IhLuU0-xGZVeIDiFtJ2VysjAdFJMTl4X4iSLTXV5w7q47lJcL4cEbduqkcf1iuQ2s0jKgzHf7JHtorbgSooIzSXjPpuTCFHEOPMZidgzSZtntMnWbbI9SWOq7jLBdgssoYiCrC6Z3mUpvJB5z1pyOS_ZTvvw-kiUHwZimpOMDtH75z_V-u02cAdEES8Sj571xZ3atpJn7ctX-hBNmPJ8XR-Fzs6QA8SdT-KQTcN_MRuVtju7mCvA3DUk2_tI7u4irgJxz5Rs7yO5t4u5AcwXhmRnH8kX68TA0zcVOvso7KdExrHVQ7DCAOslsBI4CjB3c8FjupshT3AFBFRKIT0uPOI_ZLoMy7qsy5TUKJVtA9k1kP2ikt0vDMDV8jQMwL--U-zrbD_oTFR5UyECoBpCaBIvd4NI1DxRXqyP42RjOywJ3tcYBvmQ4UpB3jjYKA7gbiDzlKiQSiPLTcHBNGox-jZqDrzW5eg2rcn_c5yuUbQKF5Xjoj7hQRySBwrPEt1Z_SSJWKw_jPXk6PXkZNMmKQkWX93-sqWznIo0Sq5VOC0TvQVpdMXJFhn4AL25bA8OYMHSJ6bf4MmnJEWzj98_E8ZJnIXoHZ2SGGuvtfK1trZvUOy-Wbm72w5pu9DbKfR2C729Qu9Fsej-0p2N8WZrmriE9STNCAv0veMFosdYD_CMjrGrvwZEpheKNx1HEiVuF9zHrpIJLeFkrntIO4zogZphV6eOtVWKZBp-_poT_l2I2QpCA6aEHGa3nPSyk4Zg9wU_YdeqlI-tul2xauVKreLUrJMSXmD3pHpslWt2vVKuV2tOtdp4K-HnlLR83LDr9ZOKYzVqVqVetqySvjvBX8nSST00VLbhaGC3ZtXe_gLRrer2
Y esto es todo amigos! os dejo el fichero de icestudio, el verilog generado por icestudio y el bitstream por si sólo queréis subirlo a la Alhambra para probar.
El setup es D0 como CLK y D1 como data.
Lo que hace la demo es usar los 8 leds con el formato:
Si validáramos que es un módulo más o menos estable o terminamos de depurarlo puede dar mucho juego.
Espero que lo disfrutéis tanto como yo en este proceso.
¡Buena tarde!
--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/d5a55fdc-c2e9-4aea-ba92-abba763d10c7n%40googlegroups.com.