El editor de Downcodes lo llevará a comprender los métodos de prueba de simulación y escritura de código Verilog del registro de desplazamiento de ocho bits que está integrado en la salida en serie. Este artículo detalla cómo diseñar un registro de desplazamiento de ocho bits con carga paralela y salida en serie, incluida la definición del módulo, el registro interno y el diseño lógico, la implementación de la lógica de control y la escritura de módulos de simulación. A través de pasos claros y códigos de muestra, lo ayuda a comprender y dominar la aplicación de Verilog HDL en el diseño de circuitos digitales y, finalmente, lograr un registro de desplazamiento de ocho bits completamente funcional.
El registro de desplazamiento de ocho bits de entrada y salida en paralelo es un registro que puede cargar datos en paralelo y generar datos en serie. Para escribir código Verilog para este tipo de registro, puede definir un proceso activado por flanco de reloj, usar una variable de registro de 8 bits de ancho para guardar el estado y definir señales de control para controlar la carga paralela y la salida en serie. Al escribir código, se deben tener en cuenta los diferentes modos de funcionamiento y se deben proporcionar interfaces de control y datos adecuadas.
A continuación se describe en detalle cómo diseñar la función de carga paralela:
Para implementar la función de carga paralela, puede definir una señal de control, como carga. Cuando la carga es de nivel alto, el estado del registro se actualiza inmediatamente en función de los datos paralelos en el extremo de entrada, en lugar de a través de la entrada de secuencia. En el código Verilog, esta lógica se puede implementar en un bloque siempre activado por flanco de reloj. Al detectar la señal de carga, se puede decidir si cargar datos paralelos proporcionados externamente en el registro o cambiar según la entrada en serie.
módulo ShiftRegister_8bit(
cable de entrada,
cable de entrada primero,
carga del cable de entrada,
cable de entrada serial_in,
cable de entrada [7:0] paralelo_in,
registro de salida [7:0] salida_datos
);
registro [7:0] shift_reg;
siempre @(posedge clk o posedge rst) comienza
si (primero) comienza
shift_reg <= 8'b0;
salida_datos <= 8'b0;
terminar si no (cargar) comenzar
shift_reg <= paralelo_in; // Carga paralela
fin si no comenzar
shift_reg <= shift_reg << 1; // desplazamiento a la izquierda
shift_reg[0] <= serial_in // Los datos de entrada en serie ingresan el bit más bajo
fin
fin
siempre @(*) comienza
data_out = shift_reg; // Siempre actualizando los datos de salida
fin
En el bloque siempre anterior, el registro se inicializa detectando primero la señal de reinicio, y la señal de carga se usa para controlar si se realiza una carga en paralelo o un desplazamiento en serie. En la operación de desplazamiento en serie, además de desplazar todo el registro hacia la izquierda para realizar el movimiento de bits de datos, también es necesario aceptar una nueva entrada en serie a través de la señal serial_in.
módulo ShiftRegister_8bit_tb;
// puerto de entrada
reg clk_tb;
reg primero_tb;
reg cargar_tb;
reg serial_in_tb;
reg [7:0] paralelo_in_tb;
//puerto de salida
cable [7:0] data_out_tb;
// Crea una instancia del módulo a probar
ShiftRegister_8bit uut (
.clk(clk_tb),
.primero(primer_tb),
.cargar(cargar_tb),
.serial_in(serial_in_tb),
.parallel_in(paralelo_in_tb),
.data_out(data_out_tb)
);
//Generación de señal de reloj
comienzo inicial
clk_tb = 0;
siempre #10 clk_tb = ~clk_tb; // Crea una señal de reloj con un período de 20 unidades de tiempo
fin
//Secuencia de estímulo de prueba
comienzo inicial
//Inicializa la señal
primer_tb = 1; carga_tb = 0; serial_in_tb = 0; paralelo_in_tb = 0;
#25 rst_tb = 0; // Liberar señal de reinicio
#20 load_tb = 1; paralelo_in_tb = 8'b10101010 // Carga datos de prueba en paralelo
#20 load_tb = 0; // Desactiva la carga paralela y comienza el cambio en serie
serial_in_tb = 1; //Iniciar datos de entrada en serie y observar la salida
#(8 * 20) serial_in_tb = 0; //Ingrese datos en serie de múltiples ciclos de reloj y verifique la salida
// Prueba completada, restablecer restablecer
#40 primer_tb = 1;
#20 primer_tb = 0;
fin
módulo final
En el módulo de simulación, primero se genera una señal de reloj para controlar el funcionamiento de todo el registro de desplazamiento. Luego, las entradas externas se simulan cambiando el valor del estímulo de prueba en un momento específico, como la primera señal de reinicio, la señal de control de carga en paralelo y la señal de entrada en serie serial_in. Durante la simulación, verifique si los cambios en la salida data_out se ajustan al comportamiento esperado del registro de desplazamiento bajo diferentes excitaciones de señal. Verifique la corrección funcional de los registros observando formas de onda de simulación o registros de simulación.
En resumen, el diseño razonable del código Verilog y las pruebas de verificación de hechos son pasos clave para garantizar el funcionamiento correcto del registro de desplazamiento de ocho bits de entrada y salida en paralelo.
P: 1. ¿Cómo escribir y ejecutar el código Verilog de un registro de desplazamiento de ocho bits? R: Para escribir y ejecutar el código Verilog para un registro de desplazamiento de ocho bits, debe seguir los siguientes pasos:
Utilice el lenguaje Verilog para escribir el código del módulo de registro de desplazamiento y definir los puertos de entrada y salida. Escriba código de banco de pruebas para pruebas de simulación del módulo de registro de desplazamiento. Utilice una herramienta de simulación Verilog, como ModelSim o Vivado, para cargar y compilar los archivos de diseño y los archivos de prueba. Ejecute la simulación, observe la salida del registro de desplazamiento y realice un análisis de forma de onda para verificar su funcionalidad.P: 2. ¿Cómo simular y probar el código Verilog del registro de desplazamiento de ocho bits? R: Para realizar una prueba de simulación de código Verilog de un registro de desplazamiento de ocho bits, siga los pasos a continuación:
Escriba código de banco de pruebas, incluidos vectores de prueba que asignan valores a las señales de entrada del módulo de registro de desplazamiento y declaraciones que verifican los resultados de salida. En el código del banco de pruebas, use el comando $monitor o $display en Verilog para mostrar los valores de las señales de entrada y salida del módulo en tiempo real. Durante la simulación, genere señales de reloj apropiadas para controlar el funcionamiento del registro de desplazamiento y observar sus resultados de salida. Ejecute la simulación y observe y analice la forma de onda de la simulación para verificar que el registro de desplazamiento esté funcionando correctamente.P: 3. ¿Existe alguna herramienta de simulación Verilog que pueda recomendar para realizar la simulación de código Verilog de un registro de desplazamiento de ocho bits? R: Al realizar la simulación de código Verilog de un registro de desplazamiento de ocho bits, existen varias herramientas de simulación Verilog comunes para elegir, incluidas ModelSim, Vivado, ISE, Quartus, etc.
ModelSim es una herramienta de simulación Verilog de uso común que proporciona potentes funciones de simulación y depuración y se puede utilizar para realizar pruebas de simulación del código Verilog. Vivado es un conjunto de herramientas integral desarrollado por Xilinx, que también incluye funciones de simulación y es adecuado para ejecutar pruebas de simulación de código Verilog. ISE y Quartus son conjuntos de herramientas integrales para dispositivos Xilinx y Altera FPGA. También proporcionan funciones de simulación que se pueden utilizar para realizar pruebas de simulación de código Verilog. Al elegir las herramientas de simulación de Verilog, puede elegir según sus preferencias personales y necesidades del proyecto, y tomar decisiones en función de sus respectivas características.Espero que este artículo pueda ayudarlo a comprender y dominar mejor los métodos de prueba de simulación y escritura de código Verilog de registros de desplazamiento de ocho bits. Si tiene alguna pregunta, no dude en preguntar.