2 điểm bởi GN⁺ 2025-12-21 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2025-12-21
Ý 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

    • Tôi khuyên nên bắt đầu từ mô phỏng rồi chuyển sang FPGA như tác giả
      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
    • Thật đáng kinh ngạc khi Internet có thể kết nối những cộng đồng nhỏ với cùng mối quan tâm như thế này
      Đú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

    • Trong một số điều kiện thì nó hoạt động chính xác. Có thể xem như đang dùng cùng một mẹo toán họ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

    • Viết phần cứng giống viết phần mềm, nhưng tính song song rẻ hơn rất nhiều còn sai sót thì đắt hơn rất nhiều
  • 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ới TT, nếu trả thêm phí thì cũng có thể làm thiết kế đa khối
  • 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

    • Ngôn ngữ luôn biến đổi. LLM có nhiều mặt tiêu cực, nhưng những thay đổi ngôn ngữ kiểu này thì tôi nghĩ là vô hại
    • Thật ra tôi cũng nhớ hồi tiểu học từng dùng một khẩu hiệu kiểu “no x, no y, just z” khi tranh cử lớp trưởng
    • Cũng có thể là ChatGPT đã học lại cách diễn đạt của người dùng phổ thông
  • 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

    1024x32 Commercial SRAM
    CF_SRAM_1024x32
    SRAM thương mại: 1024 từ x 32 bit (4KB) với giao diện Wishbone Bus
    Diện tích: 0.17mm²
    Giấy phép: Thương mại - $2500 cho mỗi dự án