Collaborazione
ARTE
BELLEZZA E BENESSERE
MESTIERE
CULTURA E STORIA
DIVERTIMENTO
AMBIENTE
CIBO E BEVANDE
INGEGNERIA INVERSA
SCIENZE
SPORT
TECNOLOGIA
INDOSSABILI

English
Youblob (simulation output) · CC0
Il SRAM on-chip: una luce che respira, memorizzata nella memoria del tuo chip
Il template di wafer.space include due macro SRAM nel suo progetto di esempio, da 512 byte ciascuna, e le lascia disattivate. Una macro è un blocco di memoria già completo della PDK: 4.096 celle di memoria statica, disegnate una volta sola con il relativo decodificatore di indirizzi e i circuiti di lettura, che si posiziona intera invece di costruirla con le porte logiche.
Questo gradino ne attiva una. Il dimmer PWM del gradino precedente ora riproduce un motivo: un microcontrollore scrive 256 byte nel chip attraverso i suoi pad, una sola volta, e da quel momento il chip li legge autonomamente, un byte per passo, come luminosità di una luce che respira lentamente.
Il core e il suo testbench sono stati eseguiti per questo blueprint con Icarus Verilog 12.0, cocotb 2.1.0 e il modello di simulazione proprio della PDK della macro SRAM: l'uscita ha seguito la tabella memorizzata per 600 periodi PWM. L'immagine è l'output stesso di quella simulazione, una barra per periodo. Lo sketch ESP32 che carica la tabella è stato compilato per questo blueprint; non esiste ancora un chip su cui eseguirlo.
Avanzato
Una sera, più il chip
Istruzioni
1
1
Il pattern, la tempistica e le dimensioni
Il pattern, la tempistica e le dimensioni
Caricamento del notebook Jupyter…
2
2
Cosa rappresenta ciascuno dei 4.096 bit
Cosa rappresenta ciascuno dei 4.096 bit
Il progetto incorporato mostra come un singolo bit di memoria statica si mantiene: un anello di due invertitori. La macro di questo gradino è costituita da 4.096 bit di memoria statica in un unico array.
3
3
I pin della macro e tre cose che il suo modello indica
I pin della macro e tre cose che il suo modello indica
gf180mcu_fd_ip_sram__sram512x8m8wm1 contiene 512 byte. I suoi pin: CLK; A, un indirizzo a 9 bit; D, il byte da scrivere; Q, il byte letto. I tre controlli sono tutti attivi LOW. CEN a 0 accende la memoria. GWEN a 0 fa sì che il fronte di clock sia una scrittura, a 1 una lettura. WEN ha un bit per ogni bit di dato, e uno 0 consente la scrittura di quel bit, quindi una scrittura può modificare alcuni bit di un byte lasciando invariati gli altri.
Leggendo il modello di simulazione della PDK emergono tre aspetti utili. Primo, la memoria funziona solo dopo che CEN è passato da 1 a 0; altrimenti il modello stampa «CEN is not reset, memory is not operational», quindi il core mantiene CEN a 1 durante il reset e lo abbassa successivamente. Secondo, una lettura fornisce mem[A] su Q subito dopo il fronte di clock che ha campionato A, quindi i dati sono pronti un ciclo di clock dopo. Terzo, il modello parte con ogni byte a 0. Un chip reale non fa così: il suo SRAM all'accensione contiene il valore in cui è caduta ogni cella, quindi il progetto deve scrivere prima di leggere.
L'esempio del template collega CEN a 1, quindi le sue due macro restano disattivate. I file di temporizzazione indicano il periodo minimo di clock della macro come 6.6 ns nell'angolo tipico a 5 V e 18.3 ns nell'angolo lento a 3.0 V, 125 °C, entrambi ampiamente entro i 40 ns del template.
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
Strumenti necessari:
Computer da tavolo5
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
Strumenti necessari:
Computer da tavolo6
6
Cosa ha stampato la simulazione
Cosa ha stampato la simulazione
Esecuzione di questo blueprint con Icarus Verilog 12.0 e cocotb 2.1.0:
-------- MESSAGE: CEN appena resettato, la memoria è operativa ---------
test_pattern.test_plays_the_table PASS (600 periodi, la tabella si allinea a esattamente un offset)
test_pattern.test_reload PASS
TESTS=2 PASS=2 FAIL=0 SKIP=0
Per dimostrare che il test può fallire, WEN è stato cambiato da 8'b0 a 8'hFF, il classico errore con un pin attivo basso: ogni bit mascherato, nulla scritto, una tabella di zeri. Entrambi i test sono falliti e il core è stato ripristinato.
La prima riga è il messaggio del modello SRAM: il core ha abbassato CEN dopo il reset, come richiede il modello.
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
Materiali per questo passaggio:
Chip ASIC personalizzato1 pezzo
Circuito stampato1 pezzo
LED da 5 mm1 pezzo
Resistenza da 330 ohm1 pezzoStrumenti necessari:
Scheda di sviluppo ESP32
Breadboard
Cavetti ponticello
Computer da tavolo8
8
Un pattern che non si salva o non riproduce
Un pattern che non si salva o non riproduce
Risoluzione dei problemi del pattern SRAM.
Flow
Loading...
9
9
Fonti e limiti onesti
Fonti e limiti onesti
**Fonti**, consultate il 29 settembre 2026: il GF180MCU PDK al commit fissato dal template (gf180mcuD, f6eeac7dad085ffcc829ccfd721f7b4ce39edcf7, dalle release fossi-foundation ciel; Apache-2.0): il modello SRAM gf180mcu_fd_ip_sram__sram512x8m8wm1.v, il suo LEF per il contorno e i file di timing per il periodo minimo di clock; il file di timing della libreria di celle standard per l'area dei flip-flop. Il repository wafer-space/gf180mcu-project-template (src/chip_core.sv, src/chip_top.sv, README.md, librelane/config.yaml; Apache-2.0).
**Limiti onesti.** La simulazione è a livello chip_core, con il modello proprio del SRAM ma senza il pad ring, la sintesi o il layout, e i controlli di timing del modello non decidono nulla qui. Lo sketch ESP32 è stato compilato, non eseguito. HOLD_LOG2 era 0 nel test così che terminasse; il chip userebbe 9, un respiro di circa 1,3 s.
Materiali
4- 1 pezzoSegnaposto
- 1 pezzoSegnaposto
- Segnaposto
- 1 pezzoSegnaposto
Strumenti richiesti
4- Segnaposto
- Segnaposto
- 1 vendor sell this, none ship to you yetSegnaposto
- 3 vendors sell this, none ship to you yetSegnaposto
Blueprint correlati
Questi blueprint condividono conoscenze — tecniche, materiali o principi
CC0 Pubblico dominio
Questo progetto è rilasciato sotto CC0. Sei libero di copiare, modificare, distribuire e utilizzare quest'opera per qualsiasi scopo, senza chiedere permesso.
Supporta il Maker acquistando prodotti tramite il suo progetto dove guadagna una Commissione Maker stabilita dai venditori, oppure crea una nuova iterazione di questo progetto e includilo come collegamento nel tuo progetto per condividere i ricavi.



