Colaboración
ARTE
BELLEZA Y BIENESTAR
ARTESANÍA
CULTURA E HISTORIA
ENTRETENIMIENTO
MEDIO AMBIENTE
COMIDA Y BEBIDAS
INGENIERÍA INVERSA
CIENCIAS
DEPORTES
TECNOLOGÍA
TECNOLOGÍA VESTIBLE

English
Youblob (simulation output) · CC0
La SRAM en el chip: una luz que respira almacenada en la propia memoria del chip
La plantilla de wafer.space incluye dos macros SRAM en su diseño de ejemplo, de 512 bytes cada una, y las deja desactivadas. Una macro es un bloque de memoria terminado de la PDK: 4.096 celdas de memoria estática, dibujadas una vez con su decodificador de direcciones y sus circuitos de lectura, que se colocan completas en lugar de construirse a partir de puertas.
Este escalón activa una de ellas. El atenuador PWM del escalón anterior ahora reproduce un patrón: un microcontrolador escribe 256 bytes en el chip a través de sus pads, una sola vez, y a partir de ese momento el chip los lee por sí mismo, un byte por paso, como el brillo de una luz que respira lentamente.
El núcleo y su banco de pruebas se ejecutaron para este blueprint con Icarus Verilog 12.0, cocotb 2.1.0 y el modelo de simulación propio de la PDK para la macro SRAM: la salida siguió la tabla almacenada durante 600 periodos de PWM. La imagen es la salida propia de esa simulación, una barra por periodo. El sketch de ESP32 que carga la tabla se compiló para este blueprint; todavía no hay un chip en el que ejecutarlo.
Avanzado
Una tarde, más el chip
Instrucciones
1
1
El patrón, el tiempo y el tamaño
El patrón, el tiempo y el tamaño
Cargando el cuaderno de Jupyter…
2
2
Qué representa cada uno de los 4.096 bits
Qué representa cada uno de los 4.096 bits
El plano incrustado muestra cómo un bit de memoria estática se mantiene a sí mismo: un bucle de dos inversores. La macro de este nivel son 4.096 bits de memoria estática en un solo arreglo.
3
3
Los pines de la macro y tres cosas que dice su modelo
Los pines de la macro y tres cosas que dice su modelo
gf180mcu_fd_ip_sram__sram512x8m8wm1 contiene 512 bytes. Sus pines: CLK; A, una dirección de 9 bits; D, el byte a escribir; Q, el byte leído. Los tres controles son todos activos en LOW. CEN en 0 enciende la memoria. GWEN en 0 hace que el flanco del reloj sea una escritura, y en 1 una lectura. WEN tiene un bit por cada bit de datos, y un 0 permite escribir ese bit, por lo que una escritura puede cambiar algunos bits de un byte y dejar los demás intactos.
Leer la simulación del modelo de PDK muestra tres cosas útiles. Primero, la memoria solo funciona después de que CEN haya pasado de 1 a 0; de lo contrario, el modelo imprime "CEN is not reset, memory is not operational", así que el núcleo mantiene CEN en 1 durante el reinicio y lo baja después. Segundo, una lectura entrega mem[A] en Q justo después del flanco de reloj que muestreó A, por lo que los datos están listos un ciclo de reloj después. Tercero, el modelo inicia con todos los bytes en 0. Un chip real no: su SRAM arranca con el valor que tenía cada celda al caer, por lo que el diseño debe escribir antes de leer.
El ejemplo propio de la plantilla conecta CEN a 1, así que sus dos macros permanecen apagadas. Sus archivos de temporización dan el periodo mínimo de reloj de la macro como 6.6 ns en la esquina típica de 5 V y 18.3 ns en la esquina lenta de 3.0 V y 125 °C, ambos muy por debajo de los 40 ns de la plantilla.
4
4
The core
The core
src/chip_core.sv for the pattern player, with the template's port list unchanged plus one parameter, HOLD_LOG2. Input pad 0 enables, pad 1 selects LOAD mode, pad 2 is the write strobe; bidirectional pads 0 to 7 carry the byte, pad 8 the PWM. The LOAD and strobe pads are passed through two flip-flops before use, a synchroniser: they change whenever the outside world likes, not in step with the chip's clock, and a flip-flop caught mid-change can hover between 0 and 1 for a while. In play mode, each time HOLD_LOG2 periods have passed, the byte the SRAM has been reading becomes the new duty and the address moves on.
chip_core.svsystemverilog
Herramientas necesarias:
Ordenador de sobremesa5
5
The test
The test
test_pattern.py builds the core with the PDK's SRAM model, gf180mcu_fd_ip_sram__sram512x8m8wm1.v, at the template's 25 MHz and with HOLD_LOG2 = 0 so the whole table plays in 256 periods. It loads the table through the pads the way the ESP32 will, then counts the high clocks in each of 600 PWM periods and requires them to follow the table from exactly one starting point. A second test loads again and checks the new pattern replaced the old.
test_pattern.pypython
Herramientas necesarias:
Ordenador de sobremesa6
6
Lo que imprimió la simulación
Lo que imprimió la simulación
Ejecución de este diseño con Icarus Verilog 12.0 y cocotb 2.1.0:
-------- MESSAGE: CEN acaba de reiniciarse, la memoria está operativa ---------
test_pattern.test_plays_the_table PASS (600 periodos, la tabla se alinea en exactamente un desplazamiento)
test_pattern.test_reload PASS
TESTS=2 PASS=2 FAIL=0 SKIP=0
Para demostrar que la prueba puede fallar, WEN se cambió de 8'b0 a 8'hFF, el error clásico con un pin activo en bajo: cada bit enmascarado, nada escrito, una tabla de ceros. Ambas pruebas fallaron y el núcleo se restauró.
La primera línea es el propio mensaje del modelo SRAM: el núcleo bajó CEN tras el reinicio, como exige el modelo.
7
7
Load it from an ESP32
Load it from an ESP32
Once the chip is on its breakout board, this sketch writes the table. Eight GPIOs carry the byte, three more drive LOAD, the strobe and enable, and an LED with a 330 ohm resistor from pad 8 to ground shows the breath. Each level is held for 1 microsecond, 25 of the chip's clocks, so the synchroniser always sees it. The sketch then does nothing: the pattern lives in the chip. It is lost when the chip loses power, so send r over serial to load it again.
The ESP32 is a 3.3 V part and its inputs are not 5 V tolerant. The sketch only drives the chip and never reads from it. The template's default libraries are the 5 V ones; before you connect, check in the I/O library's documentation that 3.3 V is a valid logic high for your chip's inputs, or build with the 3.3 V libraries, as the template's README shows. The sketch compiles for the ESP32 with the Arduino ESP32 core 3.3.12; it has not been run, because the chip does not exist yet.
load_pattern.inocpp
Materiales para este paso:
Chip ASIC a medida1 pieza
Placa de circuito impreso1 pieza
LED de 5 mm1 pieza
Resistencia de 330 ohmios1 piezaHerramientas necesarias:
Placa de desarrollo ESP32
Placa de pruebas
Cables de puente
Ordenador de sobremesa8
8
Un patrón que no se guarda o no se reproduce
Un patrón que no se guarda o no se reproduce
Solución de problemas del patrón SRAM.
Flow
Loading...
9
9
Fuentes y límites honestos
Fuentes y límites honestos
**Fuentes**, consultadas el 29 de septiembre de 2026: el GF180MCU PDK en el commit que fija la plantilla (gf180mcuD, f6eeac7dad085ffcc829ccfd721f7b4ce39edcf7, de los lanzamientos fossi-foundation ciel; Apache-2.0): el modelo SRAM gf180mcu_fd_ip_sram__sram512x8m8wm1.v, su LEF para el contorno y sus archivos de temporización para el periodo mínimo de reloj; el archivo de temporización de la biblioteca de celdas estándar para el área del flip-flop. El repositorio wafer-space/gf180mcu-project-template (src/chip_core.sv, src/chip_top.sv, README.md, librelane/config.yaml; Apache-2.0).
**Límites honestos.** La simulación se realiza a nivel de chip_core, con el propio modelo del SRAM, pero sin el anillo de pads, la síntesis ni el layout, y las comprobaciones de temporización del modelo no deciden nada aquí. El boceto de ESP32 se compiló, no se ejecutó. HOLD_LOG2 valía 0 en la prueba para que terminara; el chip usaría 9, un respiro de unos 1,3 s.
Materiales
4- 1 piezaMarcador de posición
- 1 piezaMarcador de posición
- Marcador de posición
- 1 piezaMarcador de posición
Herramientas requeridas
4- Marcador de posición
- Marcador de posición
- 1 vendor sell this, none ship to you yetMarcador de posición
- 3 vendors sell this, none ship to you yetMarcador de posición
Blueprints relacionados
Estos blueprints comparten conocimiento — técnicas, materiales o principios
CC0 Dominio público
Este Blueprint se publica bajo CC0. Eres libre de copiar, modificar, distribuir y usar este trabajo para cualquier propósito, sin pedir permiso.
Apoya al Maker comprando productos a través de su Blueprint, donde gana una Comisión del Maker establecida por los vendedores, o crea una nueva iteración de este Blueprint e inclúyela como conexión en tu propio Blueprint para compartir ingresos.



