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:

  1. 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.

  2. 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.

  3. 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.

  4. 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..

  5. 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:

  1. Divide el problema en cajas lógicas con una sola tarea (Cohesión).

  2. Define las interfaces usando AXI4-Stream (Acoplamiento).

El flujo se completa con los pasos siguientes que aplicaremos en la sección 5.3:

  1. Diseña el interior separando Control y Camino de Datos (Encapsulación).

  2. Verifica con un Testbench aislando cada módulo.

  3. Integra instanciando componentes en un fichero estructural superior (Jerarquía).