Guía Hardware

Lenguaje de programación Chisel: la revolución en el diseño de chips

Actualizado a: 2 de noviembre de 2023

El lenguaje de programación Chisel se ha convertido en una herramienta fascinante y poderosa en el mundo de la electrónica digital y el diseño de hardware, especialmente de chips. A medida que la demanda de sistemas y componentes electrónicos altamente especializados continúa creciendo, Chisel ha emergido como una solución innovadora que permite a los ingenieros y diseñadores crear circuitos digitales de manera eficiente y flexible, con un grado de abstracción para facilitar el trabajo. En este artículo te explicaremos todos los detalles de este nuevo lenguaje…

¿Qué es HDL?

HDL

HDL (Hardware Description Language) es un lenguaje de descripción de hardware. Es un tipo de lenguaje de programación especializado que se utiliza para describir y modelar hardware digital, como circuitos integrados. Los HDL permiten a los diseñadores de hardware especificar la funcionalidad y la estructura de un circuito o sistema digital de una manera que pueda ser comprendida dado su nivel de abstracción. Luego, este HDL puede ser usado por otras herramientas para su simulación, depuración, e incluso por herramientas CAD para crear el layout para fabricar el circuito descrito.

Los HDL más comunes son VHDL (VHSIC Hardware Description Language) y Verilog, sin embargo, en la actualidad ha nacido otro lenguaje muy interesante, y con algunas grandes características, ese es Chisel. No obstante, existen otros lenguajes que se pueden usar para programar también FPGAs.

El uso de HDL es esencial en el diseño y la verificación de hardware digital, ya que proporciona una representación precisa y detallada de los sistemas electrónicos, facilitando el desarrollo, la simulación y la depuración de circuitos complejos.

¿Qué es HDL?

RTL (Register Transfer Level), o nivel de transferencia de registros, es un nivel de abstracción en el diseño digital y la descripción de hardware. En el diseño de circuitos digitales, el nivel RTL se encuentra entre el nivel alto, que se centra en la funcionalidad general del sistema, y el nivel bajo, que se refiere a la implementación física detallada del hardware.

En RTL, el diseño se describe en términos de registros y las transferencias de datos entre ellos. Los registros son elementos de almacenamiento de datos que pueden representar valores binarios y realizar operaciones lógicas y aritméticas simples. En un nivel RTL, se especifica cómo los datos se mueven de un registro a otro a través de puertas lógicas y cómo se realiza el procesamiento en el camino.

El nivel RTL es una etapa importante en el diseño de hardware, ya que proporciona una representación intermedia que puede ser sintetizada para comprobar el funcinamiento lógico de un circuito, y es aquí donde se aplica Chisel.

¿Qué es el lenguaje Chisel?

El Chisel corresponde a las siglas Constructing Hardware in a Scala Embedded Language. Se trata de un lenguaje de descripción de hardware (HDL) de código abierto (bajo licencia Apache 2.0) utilizado para describir electrónica digital y circuitos a nivel de transferencia de registros (RTL), y que nació en Berkley.

Chisel se basa en el lenguaje Scala como un lenguaje tipo DSL. Chisel hereda los aspectos de programación orientada a objetos y funcional de Scala para describir hardware digital. Además, al ser de código abierto, existen gran cantidad de documentación y ayuda si quieres comenzar a aprender este lenguaje.

El término DSL (Domain-Specific Language) es un lenguaje de programación o especificación diseñado con el propósito de abordar un problema concreto, describir una situación particular y ofrecer una solución adaptada a una circunstancia específica. Aunque el concepto no es reciente, ha cobrado mayor relevancia en la actualidad.

Eso sí, los circuitos descritos en Chisel no se pueden usar para la síntesis y la simulación, como ocurre con Verilog y VHDL, pero se puede convertir este código fuente en una descripción en Verilog para síntesis y simulación sin problema. FIRRTL es la herramienta con la que puedes hacer esta conversión. Básicamente es un compilador creado por LLVM Circt.

Ventajas y desventajas de Chisel

Como cualquier otro lenguaje de programación HDL, Chisel también tiene sus ventajas y desventajas:

  • Ventajas:
    • Chisel tiene muchas ventajas en comparación con Verilog y algunas ventajas sobre SystemVerilog sintetizable. En primer lugar, es un lenguaje de metaprogramación mucho mejor que SystemVerilog o Verilog. Y es que, en lugar de declaraciones de generación simplistas, puedes escribir código arbitrario (en Scala) para componer la lógica de la manera que desees.
    • Por otro lado, es de código abierto y puede compilarse con herramientas gratuitas, el uso es también gratuito y puede ejecutarse en cualquier sistema operativo Windows, Linux y MacOS.
    • Tampoco hay que olvidar que cuenta con inferencia de ancho de bits y primitivas de composición ricas que ayudan en la tarea de metaprogramación.
    • En teoría, es más fácil de aprender que SystemVerilog, y tienes gran cantidad de documentación bastante buena en la red a tu disposición, e incluso algunos libros.
    • Finalmente, dado que solo existe una implementación de Chisel, no tienes que preocuparte por la compatibilidad con las herramientas disponibles.
  • Desventajas:
    • Cuando se escriben operadores aritméticos simples, las ventajas de Chisel se disipan, y de hecho es un poco más engorroso sintácticamente en comparación con Verilog/SystemVerilog, ya que Chisel está realmente integrado dentro del lenguaje Scala en lugar de ser un lenguaje propio. Es cuando estás componiendo módulos con interfaces muy complejas que realmente brilla.
    • Chisel también es muy limitado en cuanto a lo que admite para escribir bancos de pruebas funcionales, lo cual puede ser tanto una ventaja como una desventaja.
    • Finalmente, la naturaleza funcional de Scala puede requerir más esfuerzo intelectual del que los desarrolladores de hardware están dispuestos a invertir mientras diseñan su hardware.
    • No admite síntesis y simulación directa como otros lenguajes como VHDL o Verilog, sino que hay que convertirlo a Verilog para ello.

Aplicaciones

Chisel y RISC-V son proyectos de investigación complementarios, ambos nacidos en Berkeley, como he comentado antes. Chisel está buscando avanzar en el ámbito de los lenguajes de descripción de hardware. Y ha sido usado en el proyecto Berkeley Rocket, que es una implementación de un prototipo RISC-V que utiliza Chisel.

Aunque Chisel todavía no es un lenguaje de descripción de hardware convencional, ha sido explorado por varias empresas e instituciones. Por ejemplo, el DARPA ha puesto sus miradas en él como una tecnología para mejorar la eficiencia del diseño electrónico, especialmente en casos de proyectos complejos.

Google también ha comenzado a usar el lenguaje Chisel para desarrollar TPU (Tensor Processing Unit). Y cada vez más particulares y empresas están interesadas en emlear Chisel por sus ventajas.

Ejemplos de código Chisel

Para finalizar, vamos a ver un ejemplo de Chisel para programar un sumador de n-bits creado como ejemplo por la propia Universidad de Berkeley:

package examples

import chisel3._

//Sumador de n-bit con carry in y carry out
class Adder(val n:Int) extends Module {
  val io = IO(new Bundle {
    val A    = Input(UInt(n.W))
    val B    = Input(UInt(n.W))
    val Cin  = Input(UInt(1.W))
    val Sum  = Output(UInt(n.W))
    val Cout = Output(UInt(1.W))
  })
  //crear array para FullAdder o sumador completo
  val FAs   = Array.fill(n)(Module(new FullAdder()).io)
  val carry = Wire(Vec(n+1, UInt(1.W)))
  val sum   = Wire(Vec(n, Bool()))

  //el primer acarreo está en el nivel superior del carry in
  carry(0) := io.Cin

  //escribir en los puertos del sumador
  for (i <- 0 until n) {
    FAs(i).a := io.A(i)
    FAs(i).b := io.B(i)
    FAs(i).cin := carry(i)
    carry(i+1) := FAs(i).cout
    sum(i) := FAs(i).sum.asBool
  }
  io.Sum := sum.asUInt
  io.Cout := carry(n)
}

Jaime Herrera

Jaime Herrera

Técnico electrónico y experto en el sector de los semiconductores y el hardware. Con una amplia y sólida trayectoria en el campo de la electrónica, he acumulado una extensa experiencia. Mi pasión por la tecnología y la informática me ha impulsado a dedicar décadas de mi vida al estudio y desarrollo de soluciones en este fascinante sector. Como técnico electrónico, he tenido el privilegio de trabajar en una variedad de proyectos y desafíos, lo que me ha permitido adquirir un profundo conocimiento y experiencia en la creación, diseño y mantenimiento de dispositivos electrónicos.

>
Guía Hardware
Logo