5.2 Diseño modular del sistema
El sistema debe diseñarse siguiendo una arquitectura modular, dividiendo su funcionalidad en bloques autónomos (ej.: oscilador - uart_tx - reset_bridge …) con interfaces bien definidas, que permiten su reutilización y sustitución sin afectar al resto del diseño.
El diseño modular debe basarse en los siguientes principios:
Alta Cohesión (Responsabilidad Única): Cada módulo debe ejecutar una única función (ej. generación de señal, protocolo de comunicación). Evita bloques «híbridos» que mezclen tareas.
Bajo Acoplamiento (Interfaces Estándar): Las dependencias entre módulos se minimizan mediante el uso del protocolo AXI4-Stream. Un módulo debe ser independiente de la procedencia o destino de sus datos.
Encapsulación (Caja Negra): Los detalles de implementación (algoritmos, máquinas de estado, precisión interna) deben ser privados. Solo la interfaz de puertos es visible al exterior.
Jerarquía Estructural (Top-Down): El nivel superior (top-level) se reserva exclusivamente para la instanciación e interconexión de componentes. No debe contener lógica adicional..
Verificabilidad Independiente: Cada bloque debe poder ser simulado y validado de forma aislada mediante un testbench específico antes de su integración.
Tarea: Diseño de la arquitectura
Propón una arquitectura en bloques para el oscilador en cuadratura con salida serie aplicando los principios anteriores, sigue los pasos siguientes:
Divide el problema en cajas lógicas con una sola tarea (Cohesión).
Define las interfaces usando AXI4-Stream (Acoplamiento).
El flujo se completa con los pasos siguientes que aplicaremos en la sección 5.3:
Diseña el interior separando Control y Camino de Datos (Encapsulación).
Verifica con un Testbench aislando cada módulo.
Integra instanciando componentes en un fichero estructural superior (Jerarquía).