Página 1 de 1

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

Publicado: 15 Ago 2018, 11:21
por mcleod_ideafix
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 5153 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