EDA playground: para hacer desarrollos rápidos en Verilog o VHDL desde un navegador web

Temas de diseño con HDL que no dependen de un lenguaje en particular, o que pueden aplicarse a cualquier lenguaje (diseño óptimo de FSM, optimizaciones para facilitar el timing closure, etc). Si hay que poner algún ejemplo podrá usarse VHDL o Verilog (o idealmente, el mismo ejemplo en ambos lenguajes)
Avatar de Usuario
mcleod_ideafix
Site Admin
Mensajes: 80
Registrado: 14 Ago 2018, 01:15

EDA playground: para hacer desarrollos rápidos en Verilog o VHDL desde un navegador web

Mensaje por mcleod_ideafix » 15 Ago 2018, 11:21

https://www.edaplayground.com

Es un entorno de desarrollo en la nube, con varios tipos de sintetizadores y simuladores (iverilog, yosys, etc). Permite escribir en una ventana un diseño para ser sintetizado (en una suerte de circuito electrónico hecho a base de grafos) o para ser simulado mediante un testbench que escribiremos en otra ventana.

Es gratis (al menos hasta ahora), y se puede usar con tu cuenta de Google. Como en otros sitios del estilo, puedes compartir diseños hechos en este entorno. Por ejemplo, esto de aquí es un ejemplo de un sistema sencillo con una ruta de datos y un controlador.

https://www.edaplayground.com/x/5QYp

El sistema acepta números enteros y los va sumando en un acumulador. En todo momento podemos ver el resultado del acumulador. La ruta de datos es muy sencilla: un sumador de 32 bits cuyas entradas son los registros A y B. El registro A puede cargarse con un dato desde el exterior. El registro B tiene una señal para ponerlo a 0, o bien para cargar un dato que proviene de la salida del sumador. Así, B va teniendo el resultado de lo sumado hasta ahora. La ruta de datos tiene esta pinta.
+------+ | | +--+--+ +--+--+ | | A | | B | | +--+--+ +--+--+ | | | | ----- ----- | \ \ / / | \ \__/ / | \ / | \ + / | ---+---- | | | +-------------+
Para ejecutar la simulación, simplemente pulsar el botón Run (arriba de la página)

También tengo hechos en ese entorno algunas tonterías más, como:
Los circuitos que produce el sintetizador no son, digamos, muy estándares, pero creo que se entienden, y además es donde se ve como lo que escribimos no se traduce a código máquina que ejecuta un procesador, sino a una descripción de un circuito. Por ejemplo, este código:

Código: Seleccionar todo

module dos_flipflops (
  input wire clk,
  output wire oa,
  output wire ob
);
  
  reg a, b;
  
  always @(posedge clk) begin
    a <= b;
    b <= a;
  end
  
  assign oa = a;
  assign ob = b;
  
endmodule
que intercambia entre sí los contenidos de A y B, se traduce a este circuito:
asignacion_simultanea_dos_ff.png
asignacion_simultanea_dos_ff.png (72.45 KiB) Visto 5091 veces

Creo que se pilla la idea, no? DFF son "flip flops tipo D", cada uno con una entrada de reloj C y una de datos D, y una salida Q.
Los rombos se usan para dar nombre a una "net" (señales o cables, para entendernos).
Los octógonos son "ports" (entradas o salidas del circuito), y habitualmente las señales se conectan a ellos mediante buffers.

https://www.edaplayground.com/x/2uux

Responder

Volver a “General”