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.
Para ejecutar la simulación, simplemente pulsar el botón Run (arriba de la página)+------+ | | +--+--+ +--+--+ | | A | | B | | +--+--+ +--+--+ | | | | ----- ----- | \ \ / / | \ \__/ / | \ / | \ + / | ---+---- | | | +-------------+
También tengo hechos en ese entorno algunas tonterías más, como:
- Un comparador de 4 bits. https://www.edaplayground.com/x/CPq
- Una UART simple. https://www.edaplayground.com/x/5Qs
- Una interfaz host SPI simple (también un módulo para SPI esclavo, para simular el funcionamiento de un dispositivo SPI al que se conectara el host). https://www.edaplayground.com/x/5hJP
- Un módulo para quitar rebotes y glitches a una señal (un botón por ejemplo), y detectar cuando se ha pulsado (detector de flanco). https://www.edaplayground.com/x/AQY
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
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