- Tại cuộc thi demo Tiny Tapeout 8, đã tạo ra hai bản demo ASIC có thể xuất đồ họa VGA và âm thanh 1 bit chỉ với khoảng 4 nghìn cổng logic
- Tác phẩm đầu tiên là một intro theo phong cách demoscene truyền thống gồm bàn cờ 3D, nền sao, chữ cuộn, âm nhạc, được hiện thực bằng máy trạng thái thuần túy không có CPU hay RAM
- Tác phẩm thứ hai là hoạt ảnh Nyan Cat, dùng VGA 640x480 và âm thanh đồng bộ với video, tích hợp gần như toàn bộ mạch trong một tile
- Mọi hiệu ứng hình ảnh và âm thanh đều được tạo trực tiếp bằng mạch logic dựa trên Verilog, tái tạo âm nhạc với tài nguyên tối thiểu như bộ tổng hợp sóng tam giác/sóng xung, nhiễu LFSR, DAC sigma-delta
- Việc sản xuất từng bị dừng do Efabless phá sản, nhưng sau đó chip đã được khôi phục và xác nhận hoạt động hoàn hảo trên phần cứng thực
Demo intro TT08
- Cấu hình đồ họa gồm trường sao nền, bàn cờ 3D, chữ cuộn gợn sóng và hiệu ứng đổ bóng
- Độ phân giải VGA 1220x480, dùng xung nhịp 48MHz
- Tạo video bằng cách chuyển sang C++ qua mô phỏng Verilator rồi render vào cửa sổ SDL
- Sử dụng 293 flip-flop và tổng cộng 3374 cell, gần chạm giới hạn diện tích
- Do mã hóa font chiếm nhiều diện tích cổng, tác giả bỏ giá trị màu và thay bằng mẫu sọc chéo
- Để mã hóa dữ liệu mà không cần ROM, các mẫu được biểu diễn trực tiếp bằng cổng logic
- Pipeline tổng hợp Yosys chuyển truth table thành standard cell
- So với độ phức tạp dữ liệu, sự đơn giản mang tính thuật toán theo địa chỉ có lợi hơn cho việc tiết kiệm diện tích
- Scroller sóng sin được hiện thực bằng phép quay vector không cần bảng tra
- Dùng phương pháp symplectic integrator của Minsky để tạo quỹ đạo tròn
- Phép chiếu mặt phẳng bàn cờ được hiện thực bằng phép toán fixed-point
- Mô-đun
recip16 tính nghịch đảo của tọa độ y để thực hiện biến đổi phối cảnh
- Tạo mẫu màu bằng phép XOR, đồng thời thay đổi độ cao mặt phẳng theo nhịp trống
Chi tiết đồ họa
- Hiệu ứng đổ bóng được tạo bằng cách chiếu chữ cuộn vào hệ tọa độ mặt phẳng rồi dịch bit màu
- Nền sao (Starfield) tạo số ngẫu nhiên cho từng scanline bằng LFSR
- Kết hợp với bộ đếm frame để quyết định vị trí và tốc độ sao, thay đổi độ dài đuôi theo nhịp snare drum
Tổng hợp nhạc
- Dùng cấu trúc lặp ABACABAD để giảm thiểu trùng lặp cổng logic
- Gồm ba kênh
- Nhiễu + suy giảm hàm mũ (snare)
- Arpeggio sóng vuông (giai điệu/hợp âm)
- Sóng tam giác + suy giảm hàm mũ (kick/bass)
- Xuất âm thanh bằng DAC sigma-delta
- Thay vì PWM, xuất bit carry của bộ tích lũy để hiện thực đơn giản hơn
- Mượn tiến trình hợp âm từ ca khúc Crooner (C64 SID)
- Dựa trên thang 8 nốt, phạm vi 2 quãng tám, arpeggio theo đơn vị bit
- Xen kẽ tempo 15 và 25 tick để tạo nhịp swing
Nhìn lại
- Thiết kế tách riêng xung nhịp audio và video gây ra lệch đồng bộ giữa nhạc và hình
- Việc chọn độ phân giải phi chuẩn 1220x480 làm giảm chất lượng hiển thị trên LCD
- Trên CRT có hiệu ứng dithering tự nhiên, nhưng khi capture số thì bị méo
Demo Nyan Cat
- Được làm sát hạn chót Tiny Tapeout 8, dùng VGA 640x480 và âm thanh đồng bộ 60Hz
- Trích frame và bảng màu từ GIF gốc rồi chuyển đổi dithering sang RGB222
- Nền sao dựa trên LFSR được tái sử dụng
- Dữ liệu nhạc được parse từ file MIDI rồi remap sang thang 8 nốt
- Chỉ dùng hai kênh: bass/kick và melody
- Áp dụng envelope suy giảm hàm mũ ở đầu mỗi frame (60Hz)
- Tạo giai điệu bằng sóng xung duty cycle 25%
- Chọn bit cao theo từng quãng tám để điều chỉnh tần số
- Thêm bộ lọc thông thấp để chỉnh âm sắc
Chế tạo và kết quả
- Tiny Tapeout 8 bắt đầu sản xuất vào tháng 9/2024 nhưng bị gián đoạn do Efabless phá sản
- Nửa cuối năm 2025, đội vận hành mới thu hồi và phân phối chip
- Trong bài kiểm tra chip thực, mọi thiết kế đều hoạt động bình thường
- Chỉ riêng demo Donut phải hạ xung xuống 45MHz để ổn định
- Demo Nyan Cat phát hoàn hảo trên cả LCD lẫn CRT
- Đã được trình diễn trong buổi livestream YouTube của Bitluni
Kết
- Sau hơn 1 năm chờ đợi, đã xác nhận bản demo chạy hoàn hảo trên silicon thực
- Đây là một ví dụ về việc hiện thực hiệu ứng hình ảnh và âm thanh bằng mạch logic thuần túy, không cần CPU hay RAM trong môi trường Tiny Tapeout
- Tác giả cũng đề cập kế hoạch phát triển thêm các kỹ thuật demo phần cứng mức thấp tiên tiến hơn
1 bình luận
Ý kiến trên Hacker News
Tôi học chuyên ngành khoa học máy tính nhưng cũng quan tâm đến kỹ thuật máy tính, nên rất muốn tự tay làm một kiến trúc dựng hình retro như thế này và thậm chí đưa nó tới tape-out
Cấu trúc đơn giản nhưng thực sự rất thú vị, nên tôi cực kỳ thích những dự án kiểu này
Chỉ riêng FPGA thôi cũng đã đi được khá xa. Việc có thể tự thiết kế SoC luôn mang lại cảm giác rất phấn khích
Ví dụ nếu nghĩ “mình cần 9 cổng I2C nhỉ?” thì cứ sao chép khối rồi dán vào là xong.
Nếu có phép toán chậm trong phần mềm thì cũng có thể tự làm bộ tăng tốc phần cứng
Đúng là khi mọi người đều kết nối thì văn hóa cũng có phần bị đồng nhất hóa, nhưng việc vài chục người trên khắp thế giới có thể tụ lại vì một cuộc thi thú vị như vậy vẫn rất tuyệt
Tôi thích cách lưới dao động theo nhịp kick drum. Một chi tiết rất tinh tế
Tôi tò mò về độ ổn định dài hạn của bộ tạo sin/cos HAKMEM được trích dẫn nên đã tìm thử
Có phần tổng quan liên quan ở đây
(nghe nói là ổn định dưới các điều kiện số học chính xác)
Tình cờ là nó cũng có liên quan đến video về Verlet integration được đăng tuần trước
Tôi cũng xem video đó qua gợi ý YouTube và thấy khá thú vị
Làm tôi nhớ lại thời đại học — tôi chợt nghĩ đến câu nói rằng phần cứng và phần mềm về mặt logic là tương đương
Thật sự là một công trình ấn tượng. Trước đây tôi hay nghịch JS demoscene, đặc biệt là dwitter, nhưng cái này ở một đẳng cấp hoàn toàn khác
Nhờ bình luận này tôi mới vào kiểm tra và biết rằng TinyTapeout đã hoạt động trở lại
Tôi muốn thử làm FPAA bằng Tiny Tapeout, nhưng có lẽ nó sẽ không vừa trong diện tích được cấp
Vì các mẫu kiểu “No x, no y, just z” được dùng rất nhiều trên ChatGPT, nên giờ có vẻ cả người dùng phổ thông cũng bắt đầu dùng theo
Làm tôi nhớ lại thời còn sửa máy pinball ở trường nghề. Kỷ niệm đẹp
Thật tuyệt vời!
Xem Open Shuttle hiện tại thì để dùng giấy phép SRAM 4KB trong dự án sẽ cần $2500
Bù lại có kèm giao diện Wishbone Bus