Este proyecto implementa un pipeline básico en Vivado para procesadores ARM, con un ciclo único que soporta un conjunto inicial de instrucciones.
El pipeline actual maneja las siguientes instrucciones:
-
Operaciones Aritméticas y Lógicas:
ADDySUB(con operandos de registro e inmediato, sin desplazamientos)ANDyORR(con operandos de registro e inmediato, sin desplazamientos)
-
Operaciones de Memoria:
LDRySTR(con desplazamiento inmediato positivo)
-
Instrucciones de Salto:
B(salto incondicional)
Para configurar el proyecto en Vivado, sigue estos pasos:
-
Clonar el repositorio
Abre una terminal y clona el repositorio en tu máquina local:git clone git@github.com:JFpro160/pipeline.git
-
Abrir el Proyecto en Vivado
- Abre Vivado y selecciona la opción para abrir un proyecto existente.
- Navega hasta el directorio del proyecto clonado y selecciona el archivo
pipeline.xpr.
-
Ejecutar el Diseño
Una vez que el proyecto esté abierto en Vivado, puedes sintetizar, implementar y simular el diseño según sea necesario.
Este proyecto permite cargar instrucciones de ensamblador ARM en formato hexadecimal para probar el pipeline. Puedes generar instrucciones en formato Big Endian en ARM Converter.
Las instrucciones predefinidas para el testbench están en el archivo memfile.asm, ubicado en la carpeta pipeline.ip_user_files/mem_init_files/. Estas instrucciones son las siguientes:
E04F100F // SUB R1, PC, R15 ; R1 = PC - R15
E2811007 // ADD R1, R1, #7 ; R1 = R1 + 7
E04F200F // SUB R2, PC, R15 ; R2 = PC - R15
E2822064 // ADD R2, R2, #100 ; R2 = R2 + 100
E5821000 // STR R1, [R2] ; Mem[R2] = R1Estas instrucciones están diseñadas para validar el funcionamiento del pipeline en el testbench predeterminado.
Nota: Los registros y la memoria comienzan en valores indefinidos (XXXXXXXXX). Se recomienda inicializarlos en 0 usando una instrucción como SUB R0, R15, R15.
El testbench incluido (testbench.v) simula el pipeline y verifica la ejecución correcta de las instrucciones cargadas:
-
Secuencia de Reset: Se inicia con un
resetactivo durante los primeros 22 nanosegundos para asegurar un inicio limpio. -
Generación de Señal de Reloj: La señal de reloj (
clk) se alterna cada 5 nanosegundos, simulando el ciclo de trabajo. -
Verificación de Escriba en Memoria:
- El testbench monitorea la señal
MemWrite. SiMemWriteestá activo y la dirección de memoria (DataAdr) es100con un valor de escritura (WriteData) de7, se muestra"Simulation succeeded"y se detiene la simulación. Esto indica que las instrucciones se ejecutaron correctamente. - Si
MemWritese activa en otra dirección distinta de96, se muestra"Simulation failed"y se detiene la simulación.
- El testbench monitorea la señal
-
Configuración de Tiempo Máximo de Simulación:
- La simulación está configurada con un tiempo máximo de
100unidades. Si se alcanza este límite sin éxito, el testbench muestra"Simulation timed out"y finaliza la simulación. Puedes ajustar este límite según sea necesario.
- La simulación está configurada con un tiempo máximo de
-
Dumpfile y Dumpvars:
- Aunque el proyecto está configurado para Vivado, las directivas
$dumpfiley$dumpvarsse incluyeron para que se pueda compilar el testbench con Icarus Verilog y visualizar las señales en GTKWave, si se desea.
- Aunque el proyecto está configurado para Vivado, las directivas
Este testbench es la versión predeterminada del código proporcionado en Canvas y sigue el diseño de referencia del libro de Harris & Harris.
Aquí están las imágenes relacionadas con el pipeline para ayudarte a visualizar el proyecto y su estructura:
Cada imagen ilustra componentes específicos del pipeline, como el datapath, la ALU y el controlador de ciclo único, para una comprensión más visual del diseño del proyecto.




