- ในการแข่งขันเดโมของ Tiny Tapeout 8 มีการสร้างเดโม ASIC สองชิ้นที่แสดงผล กราฟิก VGA และเสียง 1 บิต โดยใช้ลอจิกเกตราว 4,000 ตัวเท่านั้น
- ชิ้นแรกเป็นอินโทรสไตล์เดโมซีนแบบดั้งเดิมที่มี กระดานหมากรุก 3D, พื้นหลังดาว, ข้อความเลื่อน, เพลง และถูกสร้างด้วย state machine ล้วน ๆ โดยไม่มี CPU·RAM
- ชิ้นที่สองคือ แอนิเมชัน Nyan Cat ซึ่งใช้ 640x480 VGA และ เสียงที่ซิงก์กับวิดีโอ โดยบรรจุวงจรแทบทั้งหมดไว้ในไทล์เดียว
- เอฟเฟกต์ภาพและเสียงทั้งหมดถูกสร้างขึ้นโดยตรงด้วย วงจรลอจิกบน Verilog และสร้างเพลงใหม่ด้วยทรัพยากรน้อยที่สุด เช่น ตัวสังเคราะห์คลื่นสามเหลี่ยม·คลื่นพัลส์, สัญญาณรบกวน LFSR, Sigma-Delta DAC
- แม้ว่า การผลิตจะหยุดลงจากการล้มละลายของ Efabless แต่ภายหลังชิปได้รับการกู้คืน และยืนยันได้ว่าทำงานได้สมบูรณ์บนฮาร์ดแวร์จริง
เดโมอินโทร TT08
- กราฟิกประกอบด้วย พื้นหลังดาว, กระดานหมากรุก 3D, ข้อความเลื่อนแบบเป็นคลื่น และเอฟเฟกต์เงา
- ความละเอียด VGA 1220x480 ใช้สัญญาณนาฬิกา 48MHz
- ใช้ การจำลองด้วย Verilator แปลงเป็น C++ แล้วเรนเดอร์ลงหน้าต่าง SDL เพื่อสร้างวิดีโอ
- ใช้ ฟลิปฟลอป 293 ตัว รวมทั้งหมด 3374 เซลล์ ซึ่งเกือบชนขีดจำกัดพื้นที่
- เนื่องจากการเข้ารหัสฟอนต์กินพื้นที่เกตมาก จึงตัดค่าสีทิ้งและแทนที่ด้วย แพตเทิร์นแถบทแยง
- เพื่อ เข้ารหัสข้อมูลโดยไม่มี ROM จึงแสดงแพตเทิร์นโดยตรงด้วยลอจิกเกต
- ไปป์ไลน์สังเคราะห์ของ Yosys จะ แปลง truth table เป็น standard cell
- เมื่อเทียบกับความซับซ้อนของข้อมูลแล้ว ความเรียบง่ายเชิงอัลกอริทึมตามแอดเดรส ช่วยประหยัดพื้นที่ได้มากกว่า
- ตัวเลื่อนแบบไซน์เวฟ ถูกสร้างด้วยการหมุนเวกเตอร์โดยไม่ใช้ตาราง
- ใช้วิธี symplectic integrator ของ Minsky เพื่อสร้างวิถีวงกลม
- การฉายระนาบกระดานหมากรุก ทำด้วยการคำนวณ fixed-point
- โมดูล
recip16 คำนวณค่ากลับของพิกัด y เพื่อทำ การแปลงเพอร์สเปกทีฟ
- สร้างแพตเทิร์นสีด้วยการทำ XOR และปรับระดับความสูงของระนาบตามจังหวะกลอง
รายละเอียดกราฟิก
- เอฟเฟกต์เงา ทำโดยฉายข้อความเลื่อนไปยังระบบพิกัดของระนาบแล้วเลื่อนบิตสี
- พื้นหลังดาว (Starfield) สร้างเลขสุ่มในแต่ละสแกนไลน์ด้วย LFSR
- เมื่อนำไปรวมกับตัวนับเฟรม จะใช้กำหนดตำแหน่งและความเร็วของดาว และปรับความยาวหางให้เข้ากับจังหวะสแนร์
การสังเคราะห์เพลง
- ใช้โครงสร้างซ้ำแบบ ABACABAD เพื่อลดการซ้ำซ้อนของลอจิกเกตให้น้อยที่สุด
- ประกอบด้วย สามช่องสัญญาณ
- นอยส์+การลดทอนแบบเอ็กซ์โปเนนเชียล (สแนร์)
- อาร์เพจจิโอคลื่นสี่เหลี่ยม (เมโลดี้/คอร์ด)
- คลื่นสามเหลี่ยม+การลดทอนแบบเอ็กซ์โปเนนเชียล (คิก/เบส)
- ส่งออกเสียงด้วย Sigma-Delta DAC
- แทนที่จะใช้ PWM จะส่งออกบิตแคร์รีของตัวสะสมเพื่อให้โครงสร้างเรียบง่าย
- ยืมคอร์ดโปรเกรสชันจากเพลง Crooner (C64 SID)
- อิงกับสเกล 8 โน้ต ช่วง 2 อ็อกเทฟ และใช้อาร์เพจจิโอระดับบิต
- สร้างจังหวะสวิงด้วยการสลับเทมโป 15·25 ทิก
ข้อสังเกตย้อนหลัง
- การออกแบบที่แยกนาฬิกาออดิโอกับวิดีโอทำให้เกิด ความคลาดเคลื่อนของซิงก์ระหว่างเพลงกับภาพ
- การเลือกใช้ความละเอียดนอกมาตรฐาน 1220x480 ทำให้ คุณภาพการแสดงผลบน LCD ลดลง
- บน CRT จะมีเอฟเฟกต์ dithering ที่เป็นธรรมชาติ แต่ในการแคปเจอร์แบบดิจิทัลจะเกิดความเพี้ยน
เดโม Nyan Cat
- สร้างขึ้นก่อนเดดไลน์ของ Tiny Tapeout 8 ไม่นาน โดยใช้ 640x480 VGA และเสียงซิงก์ที่ 60Hz
- ดึงเฟรมและพาเลตจาก GIF ต้นฉบับแล้วแปลงเป็น dithering แบบ RGB222
- นำ พื้นหลังดาวแบบ LFSR กลับมาใช้ซ้ำ
- ข้อมูลเพลง มาจากการพาร์สไฟล์ MIDI แล้วรีแมปเป็นสเกล 8 โน้ต
- ใช้เพียงสองช่องคือช่องเบส/คิก และช่องเมโลดี้
- ใช้ เอนเวโลปการลดทอนแบบเอ็กซ์โปเนนเชียล ทุกครั้งที่เริ่มแต่ละเฟรม (60Hz)
- สร้างเมโลดี้ด้วย คลื่นพัลส์แบบ duty cycle 25%
- ปรับความถี่โดยเลือกบิตระดับบนตามแต่ละอ็อกเทฟ
- เพิ่มตัวกรอง low-pass เพื่อปรับโทนเสียง
การผลิตและผลลัพธ์
- Tiny Tapeout 8 เริ่มการผลิตในเดือนกันยายน 2024 แต่หยุดลงเพราะ Efabless ล้มละลาย
- ในช่วงครึ่งหลังของปี 2025 ทีมปฏิบัติการชุดใหม่ได้นำชิปกลับมาและแจกจ่าย
- จากการทดสอบชิปจริง ทุกดีไซน์ทำงานได้ตามปกติ
- มีเพียงเดโม Donut ที่ต้องลดสัญญาณนาฬิกาลงเหลือ 45MHz เพื่อความเสถียร
- เดโม Nyan Cat เล่นได้สมบูรณ์ทั้งบน LCD และ CRT
- มีการสาธิตในไลฟ์ YouTube ของ Bitluni
สรุป
- หลังจากรอนานกว่าหนึ่งปี ในที่สุดก็ยืนยันได้ว่าเป็น เดโมที่ทำงานได้สมบูรณ์บนซิลิคอนจริง
- เป็นตัวอย่างของ การสร้างเอฟเฟกต์ภาพและเสียงด้วยวงจรลอจิกล้วนในสภาพแวดล้อม Tiny Tapeout โดยไม่มี CPU·RAM
- มีการกล่าวถึงแผนพัฒนา เทคนิคเดโมฮาร์ดแวร์ระดับล่าง ให้ก้าวหน้าขึ้นในอนาคต
1 ความคิดเห็น
ความเห็นจาก Hacker News
แม้จะเรียนเอกวิทยาการคอมพิวเตอร์ แต่ก็สนใจวิศวกรรมคอมพิวเตอร์ด้วย เลยอยากลองสร้าง สถาปัตยกรรมการเรนเดอร์แบบเรโทร แบบนี้ด้วยตัวเองและไปจนถึงขั้น tapeout
เป็นโครงสร้างที่เรียบง่ายแต่สนุกมาก เลยชอบโปรเจ็กต์แบบนี้สุดๆ
แค่ FPGA อย่างเดียวก็ไปได้ไกลพอสมควรแล้ว การได้ออกแบบ SoC เองนี่น่าตื่นเต้นเสมอ
เช่นถ้าคิดว่า “ต้องมีพอร์ต I2C 9 พอร์ตแฮะ?” ก็แค่คัดลอกบล็อกแล้ววางเพิ่มได้เลย
ถ้ามีงานคำนวณที่ช้าบนซอฟต์แวร์ ก็สามารถทำ hardware accelerator ขึ้นมาเองได้ด้วย
แม้การที่ทุกคนเชื่อมถึงกันจะทำให้วัฒนธรรมมีความเป็นเนื้อเดียวกันมากขึ้นด้วย แต่การที่มีคนไม่กี่สิบคนจากทั่วโลกมารวมตัวกันเพื่อการแข่งขันเจ๋งๆ แบบนี้ได้ก็สุดยอดมาก
ชอบการกำกับภาพที่ทำให้กริด เต้นเป็นจังหวะตามเสียงคิกดรัม รายละเอียดเล็กๆ แบบนี้ดีมาก
สงสัยเรื่องเสถียรภาพระยะยาวของ ตัวสร้าง sin/cos แบบ HAKMEM ที่ถูกอ้างถึง เลยไปค้นดู
สรุปภาพรวมที่เกี่ยวข้องอยู่ ที่นี่
(บอกว่าเสถียรภายใต้เงื่อนไขทางคณิตศาสตร์ที่แม่นยำ)
บังเอิญว่าเกี่ยวข้องกับ วิดีโอ Verlet integration ที่โพสต์เมื่อสัปดาห์ก่อนด้วย
ผมก็เห็นวิดีโอนั้นจากคำแนะนำใน YouTube เหมือนกัน และดูเพลินมาก
ทำให้นึกถึงสมัยเรียนมหาวิทยาลัย — นึกถึงคำพูดที่ว่า “ฮาร์ดแวร์กับซอฟต์แวร์มีความเท่าเทียมกันในเชิงตรรกะ”
เป็นงานที่น่าประทับใจจริงๆ เมื่อก่อนผมเล่น JS demoscene บ่อย โดยเฉพาะ dwitter แต่นี่คนละระดับกันเลย
พอเห็นคอมเมนต์นี้เลยไปเช็กดู ถึงได้รู้ว่า TinyTapeout กลับมามีชีวิตอีกครั้งแล้ว
อยากลองทำ FPAA ด้วย Tiny Tapeout แต่คิดว่าน่าจะไม่พอดีกับพื้นที่ที่จัดสรรไว้
พอแพตเทิร์นอย่าง “No x, no y, just z” ถูกใช้ใน ChatGPT บ่อยๆ ตอนนี้ดูเหมือนแม้แต่ผู้ใช้ทั่วไปก็เริ่มใช้กันแล้ว
ทำให้นึกถึงตอนที่เคย ซ่อมเครื่องพินบอลในโรงเรียนอาชีวะ เป็นความทรงจำที่ดี
เจ๋งมาก!
ตอนนี้พอดู Open Shuttle แล้ว ถ้าจะใช้ไลเซนส์ 4KB SRAM ในโปรเจ็กต์ต้องจ่าย $2500
แต่จะรวมอินเทอร์เฟซ Wishbone Bus มาด้วย