Paste
Copy
Cut
Options

¡Tu solución está lista!

Nuestra ayuda de expertos desglosó tu problema en una solución confiable y fácil de entender.

Mira la respuesta
  • Pregunta: En esta práctica de laboratorio, implementará una máquina de estado utilizando Verilog para describir el siguiente estado y la lógica de salida. Recuerde que su diseño debe estar sincronizado con la señal de reloj especificada en esta práctica de laboratorio. Esto significa que debes use solo flip-flops activados por flanco positivo, no utilizar borrados

    En esta práctica de laboratorio, implementará una máquina de estado utilizando Verilog para describir el siguiente estado y la lógica de salida.

    Recuerde que su diseño debe estar sincronizado con la señal de reloj especificada en esta práctica de laboratorio. Esto significa que debes

    • use solo flip-flops activados por flanco positivo,
    • no utilizar borrados asincrónicos o preajustes de ningún elemento secuencial,
    • conecte solo el reloj del sistema que se le proporcionó a los pines de entrada del reloj de cualquier componente secuencial,
    • no conecte el reloj del sistema a ningún pin de entrada que no sean los pines de entrada del reloj de los componentes secuenciales, y
    • y solo use la declaración de asignación en su diseño.

    Descripción general

    Implementarás el siguiente juego que utiliza los interruptores, botones y LED.

    En este juego, dos jugadores, A y B, compiten para ser los primeros en accionar su interruptor después de que se da la luz verde. La cantidad de tiempo entre el comienzo de una ronda y cuando la luz verde será aleatoria para que no puedan predecir la luz verde.

    Específicamente, el juego procederá de la siguiente manera:

    1. Se da la señal de inicio, Inicio.
    2. Los dos jugadores, A y B, esperan a que se encienda la luz verde (LED 7 y 8).
    3. Después de la luz verde, el primer jugador en accionar su interruptor gana un punto.
    4. Si un jugador acciona su interruptor antes de la luz verde, el otro jugador gana un punto.
    5. Si ambos activan sus interruptores al mismo tiempo antes de que aparezca la luz verde, nadie gana.
    6. Si ambos activan sus interruptores al mismo tiempo después de la luz verde, ambos ganan un punto.
    7. La siguiente ronda comienza después de que alguien haya ganado o perdido, los interruptores vuelven a su posición original (apagado) y se da la señal de inicio.
    8. Antes y después de cada ronda, se muestran las puntuaciones de los dos jugadores.

    En la placa BASYS3,

    • los dos jugadores usarán el interruptor 0 para A y el interruptor 15 para B.
    • PushButton btnU se utilizará para iniciar el juego (la señal de inicio).
    • Los LED 7 y 8 serán la luz verde que indica que los jugadores pueden accionar sus interruptores.
    • El LED 0 corresponderá al interruptor 0.
    • El LED 15 corresponderá al interruptor 15.
    • La puntuación del jugador A se mostrará en el dígito más a la derecha (AN0) de la pantalla de 7 segmentos.
    • La puntuación del jugador B se mostrará en el dígito más a la izquierda (AN3) de la pantalla de 7 segmentos.
    • PushButton bntR se conectará al restablecimiento global incorporado. Dado que afectará a todos los FF en el FPGA, borrará las puntuaciones. (No se puede utilizar para iniciar rondas).

    También hay un interruptor de trucos (Interruptor 3). Cuando es alto, el valor del temporizador utilizado para retrasar la luz verde se muestra en AN2 y AN1. (Más sobre esto a continuación...)

    Aquí hay un video corto para demostrar Quick Draw en el tablero BASYS3:

    A continuación se muestra el diagrama de bloques de todo su sistema; utiliza dos pulsadores, 3 de los 15 interruptores y el reloj BASYS3 ( clkin ) como entradas y salidas para los displays de 7 segmentos y leds.
    (Las señales clkin y global reset btnR serán entradas, pero no formarán parte de su lógica).

    Generador de números aleatorios

    Utilizará un registro de desplazamiento de retroalimentación lineal (LFSR) para generar un número binario aleatorio de 8 bits. A continuación se muestra un registro de desplazamiento de retroalimentación lineal de 8 bits. Este LFSR es simplemente un registro de desplazamiento de 8 bits donde la entrada al primer registro es el XOR de bits específicos en el registro. Si todos los bits en el registro son 0, la salida LFSR siempre será 0. Pero de lo contrario, pasará por una secuencia de los 255 estados distintos de cero antes de repetirse. Esta secuencia no es aleatoria, pero leer el LFSR en momentos aleatorios (asumiendo que pasa por suficientes estados lo suficientemente rápido) le dará un número aleatorio de 8 bits de la misma manera que una rueda de ruleta proporciona un resultado aleatorio. La elección de entradas en la puerta XOR no es arbitraria, así que asegúrese de usar las entradas correctas.

    Para evitar esperar hasta un minuto para que el Contador de tiempo llegue a 0, use solo 6 bits del LFSR para cargar en el Contador de tiempo. Todavía necesita el registro de desplazamiento de retroalimentación lineal de 8 bits, pero debe agregar dos 0 a los 6 bits que usa del LFSR de 8 bits.

    Al comienzo de cada ronda, deberá cargar el contenido del LFSR en su contador de tiempo para que pueda mostrarlo y luego realizar la cuenta regresiva.

    Contador de tiempo

    Necesitará un contador cargable que pueda cargar un valor binario de 8 bits y contar hasta 0.
    Ya que completó el laboratorio 4, debe tener uno a mano.
    En realidad, puede usar su contador de 16 bits y no conectar los 8 bits superiores a nada. Las herramientas eliminarán cualquier lógica que no sea útil y eso convertirá su contador de 16 bits en un contador de 8 bits.

    Visualización de puntuación

    Se puede usar un contador de 4 bits para realizar un seguimiento de la puntuación de cada jugador, uno para cada jugador. Puede controlar si un dígito de la pantalla está encendido o apagado proporcionando la lógica adecuada para su salida AN. El punto decimal (DP) debe estar desactivado en esta práctica de laboratorio.

    Máquina estatal

    En el diagrama general hay un bloque para la máquina de estado que debe construir. (Puede decidir que desea entradas y/o salidas adicionales). Comience dibujando un diagrama de estado. Asegúrese de considerar todos los casos, por ejemplo, si Anow y Bnow se invierten exactamente cuando expira el tiempo.

    Tenga en cuenta que las entradas del botón pulsador (btnU) y los interruptores no están sincronizados con su reloj (son asíncronos). Debe pasar estas entradas a través de un sincronizador (D Flip-Flop) antes de usarlas en su circuito.

    Consejo: obtener una máquina de estado correcta generalmente requiere varias iteraciones. Es probable que al demostrar su diseño, el AT descubra algún caso que no se haya manejado adecuadamente. A menudo, los cambios en la máquina de estado no son sencillos. Puede ser necesario un rediseño completo. Tratar de parchearlo cambiando una señal aquí o allá, o insertando una puerta o puertas casi siempre empeora las cosas. Por favor, déjate suficiente tiempo. Se recomienda enfáticamente que su diseño completo sea ingresado y simulado antes de su segunda sección.

    Instrucciones

    1. Lea todas las instrucciones a continuación antes de comenzar cualquier diseño.
    2. Lea ingresando una máquina de estado con Verilog.
    3. Cree los módulos para sus componentes y, si tienen flip flops, asegúrese de que se inicialicen con los valores apropiados. Por ejemplo, su LFSR debe comenzar con el contenido 10000000 cuando se afirma el restablecimiento global (btnR), no la señal de inicio (btnU).
    4. Dibuje un diagrama de estado para su máquina de estado, obtenga las siguientes ecuaciones lógicas de estado y salida. Querrás usar la codificación one-hot.
    5. Ingrese la lógica para su próximo estado y las ecuaciones de salida usando la declaración de asignación y proporcione flip-flops para mantener su estado actual.
      Recuerde que el restablecimiento global restablecerá todos los flip-flops. Asegúrese de que esto pondrá su máquina de estado en su estado inicial.
    6. Simule su máquina de estado. Es mucho más fácil detectar problemas cuando controla la señal TimeUp en lugar de esperar muchos ciclos de reloj en la simulación de todo el diseño.
    7. En su nivel superior, conecte su máquina de estado, LFSR, el contador descendente de 8 bits, sus dos contadores de puntaje, las entradas y salidas, y cualquier otra cosa que necesite. Cree una red llamada clk , conéctela a la entrada de reloj de su máquina de estado, LFSR, contador cargable de 8 bits y cualquier otro componente secuencial. Este es el reloj del sistema para el diseño. Es la única señal que se puede utilizar como reloj en su diseño.
    8. Simule todo su proyecto. Aunque cada una de sus partes puede haber pasado las pruebas de simulación, no hay garantía de que funcionen juntas correctamente.

      ¡Felicidades! Para este laboratorio, está escribiendo sus propios bancos de pruebas.
      Aquí hay algunos consejos:

      1. o Querrá utilizar el código Verilog de los bancos de pruebas de laboratorios anteriores para generar el reloj y mostrar la pantalla de 7 segmentos.
      2. Debe probar varios escenarios diferentes (consulte los requisitos para el Informe a continuación). Los TA también pueden solicitar otros. Asegúrese de mostrar las señales que se mencionan a continuación.
      3. La señal qsec no es de 1/16 segundos durante la simulación; es intencionalmente mucho más rápido para que no tenga que simular grandes cantidades de tiempo antes de la luz verde. También puede reducir el tiempo eligiendo cuándo la señal de inicio (btnU) pasa a nivel alto. Simule y mire la salida de su LFSR. Encuentre un valor pequeño y haga que btnU sea alto en ese momento para que su contador de tiempo cargue un valor pequeño. En el simulador, el LFSR no es aleatorio.
    9. Descargue este archivo verilog y guárdelo como lab5_clks.v en el directorio de su proyecto.
    10. En Vivado Project Manager, agréguelo a su proyecto. Asegúrese de seleccionar la opción para copiarlo en su proyecto.
    11. Agregue una instancia del módulo lab5_clks a su nivel superior de la siguiente manera:
      lab5_clks slowit (.clkin(clkin), .greset(btnR), .clk(clk), .digsel(digsel), .qsec(qsec));
      La señal clk es el reloj de su sistema. La señal digsel debe usarse para avanzar el contador de timbres para las pantallas de 7 segmentos; ¡No debe usarse como reloj!
      La señal qsec es alta durante un ciclo de reloj cada 1/16 de segundo (16 veces por segundo) y debe utilizarse para hacer avanzar el contador de tiempo; ¡No debe usarse como reloj!
    12. Simule todo su diseño.
      Deberá implementar un reloj en su dispositivo de prueba. Las señales qsec y digsel estarán altas cada 16 ciclos de clk durante la simulación. Son mucho más rápidos durante la simulación que cuando se implementan, por lo que debe transcurrir menos tiempo durante la simulación.
      Debe simular hasta que las señales de su temporizador sean altas para asegurarse de que su máquina de estado y el contador de tiempo funcionen correctamente juntos.
    13. Implemente su diseño, configure el FPGA y demuestre su diseño al TA.
    14. Recuerde archivar su proyecto y hacer una copia de seguridad del archivo zip. Asegúrese de cargarlo en Canvas si no está seguro de realizar una demostración antes de la próxima fecha límite.
    15. Una vez que se haya demostrado su diseño de trabajo, asegúrese de cargar el archivo zip de su proyecto de trabajo en la tarea de envío de laboratorio. El archivo del proyecto comprimido debe enviarse antes de la fecha de vencimiento del informe.
      (Puede continuar mejorando su proyecto para la redacción si lo desea, pero debe enviar la versión que demostró).

    Redactar

    En el reportaje debes incluir:

    • Su diagrama de estado, siguiente estado y ecuaciones lógicas de salida.
    • Describa cada estado de su máquina en palabras.
      Ejemplo: "La máquina está en estado WINA cuando el jugador A ha ganado el juego. En este estado, los LED 7 y 8 están encendidos. La máquina permanece en estado WINA hasta que Start está alto".
    • Una copia impresa de todo el código fuente de Verilog.
      (Solo el código Verilog que ingresó).
    • Capturas de pantalla del visor de forma de onda que muestran los resultados de la simulación para cada uno de los escenarios a continuación.
      Las siguientes señales de entrada y salida deben incluirse clk, btnR, btnU, sw[], led[], así como los contenidos de LFSR, el contador de tiempo, los bits de estado de la máquina de estado. Mostrar como autobuses en hexadecimal.
      1. El jugador A gana al ser el primero después de la luz verde.
      2. El jugador B gana al ser el primero después de la luz verde.
      3. El jugador B gana cuando el jugador A acciona el interruptor antes de la luz verde.
      4. El jugador A gana cuando el jugador B acciona el interruptor antes de la luz verde.
      5. Los jugadores A y B ganan al activar sus interruptores al mismo tiempo después de la luz verde.
      6. Los jugadores A y B pierden al accionar sus interruptores al mismo tiempo antes de la luz verde.
      (Puede hacer un banco de pruebas y simplemente hacer una captura de pantalla de las diferentes secciones para cada uno de los escenarios).

  • Chegg Logo
    Esta es la mejor manera de resolver el problema.
    Solución

    vimos varios ejemplos de circuitos combinacionales y circuitos secuenciales. En los circuitos combinacionales, la salida depende únicamente de los valores actuales de las entradas; mientras que en los circuitos secuenciales, la salida depende de los

    Mira la respuesta completa
    answer image blur