Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática# Lenguajes de programación

Optimización del flujo de datos en circuitos digitales

Una guía sobre las especificaciones de Tydi para mejorar la transferencia de datos en el diseño.

― 8 minilectura


Transferencias de datosTransferencias de datoseficientes con Tydidiseño de circuitos digitales.Simplificando el flujo de datos en el
Tabla de contenidos

Tydi es una especificación que ayuda a la gente a diseñar cómo fluye la data en circuitos digitales. Permite a los diseñadores describir cómo se envían diferentes tipos de datos, que pueden cambiar de tamaño, a través de flujos usando tipos simples y claros. Estos tipos de datos son útiles en muchas áreas como big data y proyectos de SQL. Tydi busca facilitar a los diseñadores definir cómo se comunican las distintas partes de un sistema, a comparación de métodos más antiguos que se centraban en bits y bytes.

En este artículo, vamos a presentar un formato intermedio que ayuda a los usuarios a definir los tipos de Tydi. Este formato permite crear y enlazar componentes que usan Tydi Streams como conexiones, llamados Streamlets. También ayuda a mantener información importante como la documentación durante el proceso de diseño. Los tipos y Streamlets se pueden reutilizar en diferentes proyectos, y los streams de Tydi pueden ayudar a establecer acuerdos sobre cómo interactúan las partes de un sistema más grande.

Construyendo Mejores Interfaces

Cuando los diseñadores necesitan transferir datos en streaming dentro de circuitos digitales, pueden crear sus propias conexiones o usar estándares existentes como el Avalon-ST de Intel o el AXI4-Stream de Arm. Usar una conexión estándar hace que sea más sencillo para otros diseñadores conectar diferentes partes, ya que estas conexiones utilizan las mismas señales y reglas. Esto lleva a una mejor reutilización de diseños y ayuda a las herramientas que gestionan la propiedad intelectual (IP) a automatizar el proceso.

Sin embargo, los estándares existentes no explican cómo debería representarse la data. Por esto, los diseñadores aún necesitan crear, documentar y compartir estas representaciones de datos. Además, muchas de las herramientas para integrar IPs son propietarias, lo que hace más difícil trabajar con estos componentes en software que no sea de esas herramientas específicas.

Para abordar estos desafíos, Tydi permite a los diseñadores definir claramente la data que se envía con un sistema de tipos completo para diferentes estructuras de datos. Este artículo explicará cómo Tydi puede combinarse con el formato intermedio para crear conexiones simples para componentes del sistema.

Representación Intermedia (IR)

El objetivo principal de la representación intermedia es proporcionar una manera sencilla de declarar los tipos de Tydi, definir conexiones y conectar partes de acuerdo a las reglas de Tydi. La IR no está diseñada para ser un lenguaje completo para diseño de hardware; en cambio, debería trabajar junto con herramientas que ayudan a automatizar procesos de diseño. No maneja comportamiento directamente, pero facilita la verificación y la delineación de acciones deseadas.

Herramientas y Enfoques Relacionados

Muchos proyectos recientes se enfocan en desarrollar mejores lenguajes y marcos para procesar datos en streaming. Este área ha visto una investigación significativa y ha evolucionado en las últimas dos décadas. Mientras tanto, continúan los esfuerzos para mejorar las herramientas usadas para diseñar hardware, incluyendo nuevos lenguajes de descripción y métodos de síntesis de alto nivel que simplifican el proceso.

Si bien lenguajes y marcos mejorados pueden acelerar el trabajo de diseño, los estándares de interfaz establecidos ayudan a asegurar que diferentes componentes pueden trabajar juntos. Además, las herramientas de diseño proporcionan bibliotecas de componentes reutilizables, haciendo más fácil crear sistemas complejos.

Para promover un conjunto completo de herramientas, hay un esfuerzo separado para un lenguaje de front-end llamado Tydi-lang, que ayudará a describir el comportamiento de los componentes.

Tipos Clave en Tydi

Tydi define cinco tipos principales para estructuras de datos:

  1. Stream: Usado para flujos de datos.
  2. Null: Representa un valor único que es simplemente nulo.
  3. Bits: Representa una señal de datos que contiene un número específico de bits.
  4. Group: Una colección de varios campos, donde todos pueden ser configurados al mismo tiempo.
  5. Union: Una elección entre varios campos, donde solo uno puede estar activo en cualquier momento.

La IR permite a los diseñadores crear y usar estos tipos en varias combinaciones, dándoles la flexibilidad para definir cómo está organizada la información en las transferencias de datos.

Entendiendo Streams y Sus Propiedades

El tipo Stream es crucial ya que no solo representa el camino físico para enviar datos, sino que también contiene información que describe cómo se estructura la data. Por ejemplo, los Streams pueden indicar si la data viene en una serie y si necesita una señal para marcar el final de la serie. Varias propiedades de los Streams, incluyendo el rendimiento (cuánta data se transfiere a la vez), dirección y complejidad (que gobierna cómo debe organizarse la data durante las transferencias), ayudan a los diseñadores a especificar cómo fluirán los elementos de datos.

Importancia de las Interfaces

Los tipos de Tydi no solo se tratan de qué datos se están transfiriendo; también transmiten cómo debería enviarse. Al aclarar esto, una descripción detallada del Stream puede actuar como un contrato entre diferentes componentes, ayudando a todos los involucrados a entender qué esperar durante las transferencias de datos.

La IR se basa en esta idea utilizando Interfaces, que son conjuntos de puertos en un componente que manejan Streams entrantes y salientes. Cada Interface o sus puertos también pueden incluir documentación para aclarar aún más sus roles.

Diseñando y Conectando Componentes

La IR también permite a los diseñadores declarar componentes conocidos como Streamlets, que consisten en una Interface y potencialmente una Implementación. Estos Streamlets ayudan a los diseñadores a conectar mejor diferentes partes, aumentando la reutilizabilidad y compatibilidad.

Implementación Estructural

Una característica clave de la IR es su capacidad para crear implementaciones estructurales, que permiten a los diseñadores vincular múltiples Streamlets juntos. Esto significa que diferentes partes de un sistema pueden integrarse más fácilmente, y sus conexiones pueden definirse claramente, reduciendo el riesgo de errores.

Verificación de Comportamiento

Si bien la IR no expresa comportamiento detallado, permite la especificación de comportamiento a través de pruebas. Se pueden crear herramientas para verificar que las entradas y salidas coincidan con lo que se espera en el diseño, asegurando que todo funcione correctamente. Este enfoque significa que los diseñadores no tienen que preocuparse por la programación específica requerida al dirigirse a varios lenguajes o hardware.

Cadena de Herramientas Prototipo

Para mostrar cómo se puede usar efectivamente la IR, se ha desarrollado una cadena de herramientas prototipo. Esta cadena de herramientas consta de varios componentes, incluyendo un sistema de consultas para gestionar definiciones de IR, una gramática y un analizador para interpretar esas definiciones, y un backend que convierte la IR en un lenguaje de descripción de hardware como VHDL.

Sistema de Consultas

El sistema de consultas ayuda a almacenar y recuperar información sobre la IR de manera flexible. Este sistema permite a los usuarios obtener lo que necesitan a demanda en lugar de pasar por un proceso de compilación tradicional. Al habilitar este tipo de acceso, los diseñadores pueden trabajar de manera más eficiente y evitar cálculos innecesarios.

Pruebas y Validación

Otro aspecto significativo de la IR es su capacidad para soportar pruebas. Propone una gramática para la verificación a nivel de transacción, donde se puede verificar el comportamiento de los componentes sin centrarse en detalles de programación específicos. Esto significa que diferentes aspectos se pueden probar en paralelo, mejorando la eficiencia durante el proceso de diseño.

Conclusión

La representación intermedia para Tydi ofrece una nueva manera de definir cómo se mueve la data entre componentes en circuitos digitales. Al centrarse en tipos claros y orientados a datos, permite a los diseñadores crear interfaces más reutilizables y manejables. A través de esta estructura, los diseñadores pueden TRANSMITIR sus intenciones más fácilmente, apoyar pruebas y asegurar que los componentes trabajen bien juntos.

Usando este enfoque, el objetivo es simplificar diseños complejos y mejorar cómo se unen las diferentes partes de un sistema, allanando el camino para procesos de desarrollo más eficientes en el futuro.

Fuente original

Título: An Intermediate Representation for Composable Typed Streaming Dataflow Designs

Resumen: Tydi is an open specification for streaming dataflow designs in digital circuits, allowing designers to express how composite and variable-length data structures are transferred over streams using clear, data-centric types. These data types are extensively used in a many application domains, such as big data and SQL applications. This way, Tydi provides a higher-level method for defining interfaces between components as opposed to existing bit and byte-based interface specifications. In this paper, we introduce an open-source intermediate representation (IR) which allows for the declaration of Tydi's types. The IR enables creating and connecting components with Tydi Streams as interfaces, called Streamlets. It also lets backends for synthesis and simulation retain high-level information, such as documentation. Types and Streamlets can be easily reused between multiple projects, and Tydi's streams and type hierarchy can be used to define interface contracts, which aid collaboration when designing a larger system. The IR codifies the rules and properties established in the Tydi specification and serves to complement computation-oriented hardware design tools with a data-centric view on interfaces. To support different backends and targets, the IR is focused on expressing interfaces, and complements behavior described by hardware description languages and other IRs. Additionally, a testing syntax for the verification of inputs and outputs against abstract streams of data, and for substituting interdependent components, is presented which allows for the specification of behavior. To demonstrate this IR, we have created a grammar, parser, and query system, and paired these with a backend targeting VHDL.

Autores: Matthijs A. Reukers, Yongding Tian, Zaid Al-Ars, Peter Hofstee, Matthijs Brobbel, Johan Peltenburg, Jeroen van Straten

Última actualización: 2023-09-27 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2308.13436

Fuente PDF: https://arxiv.org/pdf/2308.13436

Licencia: https://creativecommons.org/licenses/by/4.0/

Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.

Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.

Más de autores

Artículos similares