การทำงานร่วมกัน
ศิลปะ
ความงามและสุขภาพ
งานฝีมือ
วัฒนธรรมและประวัติศาสตร์
ความบันเทิง
สิ่งแวดล้อม
อาหารและเครื่องดื่ม
วิศวกรรมย้อนรอย
วิทยาศาสตร์
กีฬา
เทคโนโลยี
อุปกรณ์สวมใส่

English
Youblob (simulation output) · CC0
ชิปมีหน่วยความจำในตัว: แสงที่หายใจได้ซึ่งเก็บอยู่ในหน่วยความจำของชิปเอง
เทมเพลตของ wafer.space มาพร้อมมาโคร SRAM สองตัวในแบบออกแบบตัวอย่าง ตัวละ 512 ไบต์ และปิดไว้เป็นค่าเริ่มต้น มาโครคือบล็อกหน่วยความจำสำเร็จรูปจาก PDK: เซลล์หน่วยความจำแบบสถิต 4,096 เซลล์ ที่ออกแบบวงจรถอดรหัสแอดเดรสและวงจรอ่านไว้แล้ว และคุณวางทั้งบล็อกได้เลยแทนการสร้างจากเกต
ขั้นนี้เปิดมาโครตัวหนึ่ง ตัวหรี่ไฟ PWM จากขั้นก่อนหน้าจะเล่นรูปแบบหนึ่ง ไมโครคอนโทรลเลอร์เขียน 256 ไบต์เข้าสู่ชิปผ่านขาสัญญาณ เพียงครั้งเดียว หลังจากนั้นชิปจะอ่านค่าเหล่านั้นกลับมาเองทีละไบต์ในแต่ละก้าว เป็นค่าความสว่างของไฟที่ค่อย ๆ หายใจเข้าออก
แกนวงจรและ testbench ของมันถูกรันสำหรับแบบออกแบบนี้ด้วย Icarus Verilog 12.0, cocotb 2.1.0 และโมเดลจำลองของ PDK เองสำหรับมาโคร SRAM ผลลัพธ์เป็นไปตามตารางที่เก็บไว้ตลอด 600 คาบ PWM ภาพนั้นคือผลลัพธ์ของการจำลองเอง โดยแต่ละแท่งแทนหนึ่งคาบ สเก็ตช์ ESP32 ที่โหลดตารางถูกคอมไพล์สำหรับแบบออกแบบนี้แล้ว แต่ยังไม่มีชิปจริงให้นำไปรัน
ขั้นสูง
เย็นวันหนึ่ง กับชิปหนึ่งตัว
คำแนะนำ
1
1
รูปแบบ จังหวะเวลา และขนาด
รูปแบบ จังหวะเวลา และขนาด
กำลังโหลดสมุด Jupyter…
2
2
สิ่งที่แต่ละบิตจากทั้งหมด 4,096 บิตเป็น
สิ่งที่แต่ละบิตจากทั้งหมด 4,096 บิตเป็น
พิมพ์เขียวที่ฝังอยู่แสดงให้เห็นว่าหน่วยความจำสถิตแต่ละบิตยึดสถานะของตัวเองอย่างไร ด้วยวงจรวนของอินเวอร์เตอร์สองตัว มาโครในขั้นนี้คือหน่วยความจำสถิต 4,096 บิตในอาร์เรย์เดียว
3
3
พินของมาโคร และสามสิ่งที่โมเดลของมันระบุ
พินของมาโคร และสามสิ่งที่โมเดลของมันระบุ
gf180mcu_fd_ip_sram__sram512x8m8wm1 เก็บข้อมูลได้ 512 ไบต์ พินของมันคือ: CLK; A ซึ่งเป็นแอดเดรส 9 บิต; D ซึ่งเป็นไบต์ที่จะเขียน; Q ซึ่งเป็นไบต์ที่อ่านได้ สัญญาณควบคุมทั้งสามตัวทำงานที่ระดับ LOW CEN ที่ระดับ 0 จะเปิดหน่วยความจำ GWEN ที่ระดับ 0 ทำให้ขอบสัญญาณนาฬิกาเป็นการเขียน ที่ระดับ 1 เป็นการอ่าน WEN มีหนึ่งบิตต่อหนึ่งบิตข้อมูล และค่า 0 ทำให้บิตนั้นถูกเขียนได้ ดังนั้นการเขียนสามารถเปลี่ยนบางบิตของไบต์และปล่อยบิตอื่นไว้ตามเดิมได้
การอ่านโมเดลจำลองของ PDK แสดงให้เห็นสามสิ่งที่ควรทราบ ประการแรก หน่วยความจำจะทำงานได้ก็ต่อเมื่อ CEN เปลี่ยนจาก 1 เป็น 0 มิฉะนั้นโมเดลจะแสดงข้อความ "CEN is not reset, memory is not operational" ดังนั้นคอร์จึงคง CEN ไว้ที่ 1 ตลอดช่วงรีเซ็ตและลดลงภายหลัง ประการที่สอง การอ่านจะให้ mem[A] ออกทาง Q ทันทีหลังขอบสัญญาณนาฬิกาที่สุ่มค่า A ดังนั้นข้อมูลจะพร้อมหนึ่งคล็อกถัดไป ประการที่สาม โมเดลเริ่มต้นโดยทุกไบต์เป็น 0 แต่ชิปจริงไม่เป็นเช่นนั้น SRAM ของมันจะมีค่าเริ่มต้นเป็นค่าใดก็ตามที่แต่ละเซลล์ตกลงไปอยู่ ดังนั้นการออกแบบต้องเขียนก่อนอ่านเสมอ
ตัวอย่างของเทมเพลตเองผูก CEN ไว้กับ 1 ดังนั้นมาโครทั้งสองจึงถูกปิดอยู่ ไฟล์ด้านเวลาให้คาบสัญญาณนาฬิกาขั้นต่ำของมาโครเป็น 6.6 ns ที่มุมปกติ 5 V และ 18.3 ns ที่มุมช้า 3.0 V ที่ 125 °C ซึ่งทั้งสองค่าอยู่ภายใน 40 ns ของเทมเพลตอย่างเหลือเฟือ
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
เครื่องมือที่ต้องใช้:
คอมพิวเตอร์ตั้งโต๊ะ5
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
เครื่องมือที่ต้องใช้:
คอมพิวเตอร์ตั้งโต๊ะ6
6
สิ่งที่การจำลองพิมพ์ออกมา
สิ่งที่การจำลองพิมพ์ออกมา
รันสำหรับ blueprint นี้ด้วย Icarus Verilog 12.0 และ cocotb 2.1.0:
-------- MESSAGE: CEN เพิ่งรีเซ็ต หน่วยความจำพร้อมใช้งาน ---------
test_pattern.test_plays_the_table PASS (600 periods, table aligns at exactly one offset)
test_pattern.test_reload PASS
TESTS=2 PASS=2 FAIL=0 SKIP=0
To prove the test can fail, WEN was changed from 8'b0 to 8'hFF, the classic slip with an active-low pin: every bit masked, nothing written, a table of zeros. Both tests failed, and the core was put back.
The first line is the SRAM model's own message: the core lowered CEN after reset, as the model requires.
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
วัสดุสำหรับขั้นตอนนี้:
ชิป ASIC สั่งทำ1 ชิ้น
แผ่นวงจรพิมพ์1 ชิ้น
หลอด LED 5 มม.1 ชิ้น
ตัวต้านทาน 330 โอห์ม1 ชิ้นเครื่องมือที่ต้องใช้:
บอร์ดพัฒนา ESP32
เบรดบอร์ด
สายจัมเปอร์
คอมพิวเตอร์ตั้งโต๊ะ8
8
รูปแบบที่ไม่สามารถบันทึกหรือไม่สามารถเล่นได้
รูปแบบที่ไม่สามารถบันทึกหรือไม่สามารถเล่นได้
การแก้ไขปัญหาของรูปแบบ SRAM
Flow
Loading...
9
9
แหล่งที่มาและข้อจำกัดที่ซื่อตรง
แหล่งที่มาและข้อจำกัดที่ซื่อตรง
**แหล่งที่มา** อ่านเมื่อ 29 กันยายน 2026: GF180MCU PDK ที่ commit ที่ template ปักหมุดไว้ (gf180mcuD, f6eeac7dad085ffcc829ccfd721f7b4ce39edcf7, จาก fossi-foundation ciel releases; Apache-2.0): โมเดล SRAM gf180mcu_fd_ip_sram__sram512x8m8wm1.v, LEF สำหรับรูปร่างภายนอก และไฟล์กำหนดเวลาสำหรับคาบสัญญาณนาฬิกาต่ำสุด; ไฟล์กำหนดเวลาของไลบรารี standard-cell สำหรับพื้นที่ของ flip-flop คลังข้อมูล wafer-space/gf180mcu-project-template (src/chip_core.sv, src/chip_top.sv, README.md, librelane/config.yaml; Apache-2.0)
**ข้อจำกัดที่ซื่อตรง** การจำลองทำที่ระดับ chip_core โดยใช้โมเดลของ SRAM เอง แต่ไม่รวม pad ring, การสังเคราะห์ หรือการจัดวางผัง และการตรวจสอบเวลาของโมเดลไม่ได้ตัดสินสิ่งใดในที่นี้ โค้ดตัวอย่าง ESP32 ได้รับการคอมไพล์แล้ว แต่ไม่ได้ถูกรัน HOLD_LOG2 ถูกตั้งเป็น 0 ในการทดสอบเพื่อให้จบการทำงานได้ ชิปจริงจะใช้ค่า 9 ซึ่งเป็นช่วงลมหายใจประมาณ 1.3 วินาที
วัสดุ
4- 1 ชิ้นตัวยึดตำแหน่ง
- 1 ชิ้นตัวยึดตำแหน่ง
- ตัวยึดตำแหน่ง
- 1 ชิ้นตัวยึดตำแหน่ง
บลูพริ้นท์ที่เกี่ยวข้อง
บลูพริ้นท์เหล่านี้แบ่งปันความรู้ — เทคนิค วัสดุ หรือหลักการ
CC0 สาธารณสมบัติ
พิมพ์เขียวนี้เผยแพร่ภายใต้ CC0 คุณสามารถคัดลอก แก้ไข แจกจ่าย และใช้งานผลงานนี้เพื่อวัตถุประสงค์ใดก็ได้ โดยไม่ต้องขออนุญาต
สนับสนุนเมกเกอร์โดยซื้อสินค้าผ่านพิมพ์เขียวของพวกเขา ซึ่งพวกเขาจะได้รับ ค่าคอมมิชชันเมกเกอร์ ที่ผู้ขายกำหนด หรือสร้างเวอร์ชันใหม่ของพิมพ์เขียวนี้และรวมเป็นการเชื่อมต่อในพิมพ์เขียวของคุณเพื่อแบ่งรายได้



