Tái tạo card đồ họa Voodoo và PC chơi game cuối thập niên 1990 trên FPGA
Một kỹ sư đã dùng FPGA trên bo mạch Xilinx KV260 để tái tạo card 3dfx Voodoo huyền thoại cùng CPU 486, tạo nên cỗ máy DOS hoàn chỉnh chạy được Tomb Raider với renderer 3dfx gốc. Dự án mã nguồn mở zSST và z486 XL cho thấy bài toán khó nhất không phải là phần tính toán đồ họa mà là cấp dữ liệu đủ nhanh từ bộ nhớ.

Tái tạo card đồ họa Voodoo và PC chơi game cuối thập niên 1990 trên FPGA
Có những cỗ máy tưởng như chỉ còn trong ký ức, như card đồ họa 3dfx Voodoo — thứ đã đưa làn sóng đồ họa 3D mượt mà vào game PC cuối thập niên 1990. Mới đây, một kỹ sư đã dựng lại toàn bộ trải nghiệm đó ngay trên chip FPGA, hoàn chỉnh đến mức chạy được Tomb Raider với renderer 3dfx nguyên bản. Thành quả là dự án mã nguồn mở zSST và z486 XL, mở ra cánh cửa tìm hiểu sâu về cách phần cứng đồ họa cổ điển thực sự vận hành.
Từ CPU 486 đến card Voodoo trong cùng một chip
Tác giả dành trọn một tháng để bổ sung tính năng và tối ưu hiệu năng cho z486_MiSTer, chủ yếu chạy các tựa game nửa đầu thập niên 1990. Nhìn xa hơn vài năm, ông nhận ra một thay đổi lớn đang chờ phía trước: sự xuất hiện của card đồ họa 3D. Chiếc card đầu tiên để lại ấn tượng mạnh mẽ chính là Voodoo, với tựa game Need for Speed II SE — kết cấu mượt, sương mù và tốc độ tổng thể khiến nó giống như một thế hệ chơi game PC hoàn toàn mới.
Câu hỏi đặt ra rất tự nhiên: liệu có thể tái tạo trải nghiệm đó trên FPGA, khi mà CPU z486 đã tồn tại? Câu trả lời là zSST — một hiện thực hóa bằng SystemVerilog của 3dfx Voodoo Graphics (còn gọi là SST-1). Kết hợp với CPU z486 và phần cứng PC xung quanh, nó tạo thành z486 XL: một chiếc PC chạy DOS với đồ họa Voodoo, hoạt động hoàn toàn trong logic khả trình của bo mạch Xilinx KV260. Tomb Raider giờ đây chạy với renderer 3dfx gốc của mình.
Tomb Raider chạy trên chiếc PC FPGA hoàn chỉnh
zSST hiện thực hóa phần lớn tính năng cốt lõi của Voodoo: tam giác chuẩn bị sẵn (prepared triangles), lọc texture và mipmapping, kiểm tra độ sâu và alpha, sương mù, pha trộn màu (blending), dithering, truy cập framebuffer và hoán đổi buffer. Nó hỗ trợ cả hai giao diện thiết lập dạng điểm cố định (fixed-point) lẫn dấu phẩy động (floating-point). Việc kiểm thử trên phần cứng hiện vẫn tập trung vào Tomb Raider; khả năng tương thích rộng hơn cùng các thế hệ Voodoo sau này là công việc của những ngày khác.
CPU và renderer đều chạy ở 100 MHz trên KV260. Bo mạch này có đủ logic, khối DSP, bộ nhớ trên chip và băng thông DDR cho thiết kế kết hợp. Trong khi đó, DE10-Nano không đủ chỗ cho phần đồ họa bổ sung này, và KV260 dùng DDR tích hợp sẵn thay vì cần module SDRAM ngoài.
Bắt đầu từ mô hình lập trình
May mắn thay, có rất nhiều tài liệu để làm điểm xuất phát. 3dfx từng phát hành mã nguồn Glide vào năm 1999, trước khi NVIDIA mua lại các tài sản đồ họa cốt lõi vào tháng 12 năm 2000. Mã nguồn Glide còn sót lại cùng đặc tả SST-1 giải thích cách phần mềm chuẩn bị tam giác, cấu hình pipeline pixel và quản lý texture lẫn framebuffer.
Đặc tả này là mục tiêu hành vi chứ không phải sơ đồ mạch. Nó nói điều gì phải xảy ra khi phần mềm ghi vào một thanh ghi, nhưng để ngỏ nhiều lựa chọn triển khai. 86Box cung cấp tham chiếu hữu ích cho các hành vi render phức tạp, còn công trình MAME Voodoo trước đó là một phần khác của quá trình bảo tồn này. SpinalVoodoo đóng góp những dấu vết Glide (Glide traces) và ảnh chụp tham chiếu đặc biệt hữu ích cho việc kiểm thử.
Từ tam giác đến 3D, mỗi xung nhịp một pixel
Voodoo Graphics biến tam giác thành pixel, để phần lớn công việc 3D lại cho CPU chủ. Giao diện lệnh của nó gọn gàng đến bất ngờ: chỉ năm thanh ghi lệnh chính điều khiển toàn bộ bộ tăng tốc.
| Thanh ghi | Chức năng |
|---|---|
| triangleCMD | Bắt đầu render một tam giác đã chuẩn bị |
| ftriangleCMD | Bắt đầu tam giác qua giao diện thiết lập dấu phẩy động |
| nopCMD | Đẩy sạch pipeline; tùy chọn đặt lại các bộ đếm thống kê |
| fastfillCMD | Xóa một vùng chữ nhật đã cắt của dữ liệu màu và/hoặc độ sâu |
| swapbufferCMD | Chuyển buffer hiển thị, ngay lập tức hoặc đồng bộ với hồi quét dọc |
Cả hai lệnh tam giác đều khởi động cùng một pipeline render. Các thanh ghi khác giữ tọa độ, gradient và trạng thái render, trong khi vùng ánh xạ bộ nhớ cung cấp khả năng tải texture và truy cập framebuffer trực tiếp. Nguyên thủy vẽ chính chỉ đơn giản là một tam giác đã chuẩn bị.
Với nhà phát triển game, Glide mang đến một giao diện thân thiện hơn hẳn:
void grDrawTriangle(const GrVertex *a, const GrVertex *b, const GrVertex *c);
Trước lời gọi này, CPU chủ biến đổi hình học 3D, tính ánh sáng đỉnh, cắt xén và chiếu lên màn hình. Glide sau đó chuẩn bị tam giác trong không gian màn hình cùng các gradient tham số — tức các gia lượng dùng để nội suy giá trị trên bề mặt — rồi ghi lệnh tam giác để bắt đầu render. Khác với các GPU đời sau như GeForce 256, SST-1 không có engine biến đổi và chiếu sáng bằng phần cứng.
Dù vậy, bộ tăng tốc vẫn còn rất nhiều việc. Bộ rasterizer tìm những tâm pixel nằm trong tam giác và nội suy màu, độ sâu cùng tọa độ texture của chúng. Đơn vị texture nạp và lọc texel; đơn vị framebuffer kết hợp màu, áp dụng kiểm tra hiển thị và sương mù, pha trộn với ảnh hiện có rồi ghi kết quả.
Một pixel cần vài tầng xử lý mới hoàn tất, trong khi các pixel mới vẫn liên tục đi vào. Card gốc chia công việc này giữa hai ASIC: FBI (Frame Buffer Interface) và TREX (đơn vị ánh xạ texture, thường gọi là TMU). Với xung nhịp đồ họa 50 MHz, đỉnh điểm quảng cáo là một pixel đầu ra có texture và đã kiểm tra độ sâu mỗi xung nhịp: 50 triệu pixel mỗi giây.
Một pixel mỗi xung nhịp không có nghĩa là một pixel hoàn thành trong một xung nhịp. Nó có nghĩa là các tầng khác nhau có thể xử lý những pixel khác nhau cùng lúc: trong khi một pixel đang được tạo texture, một pixel trước đó có thể đang được pha trộn và một pixel khác nữa đang được ghi ra. Khi pipeline đã đầy, về lý thuyết nó có thể nhận và hoàn tất một pixel mỗi xung nhịp, miễn là bộ nhớ theo kịp.
Đó chính là sức hút của pipeline chức năng cố định. Một renderer phần mềm phải thực thi rất nhiều lệnh cho mỗi pixel; phần cứng chuyên dụng lại chồng lấn công việc đó qua một dòng pixel đều đặn. Voodoo đã thổi sức sống vào các game 3D giàu texture ở mức 30 FPS mượt mà trở lên — một phần lớn lý do khiến nó trở nên phổ biến đến vậy.
Xây dựng pipeline pixel
So với CPU x86, đường tính toán ở đây đều đặn một cách dễ chịu. Hãy cùng theo dõi một pixel từ các tham số đã nội suy, qua khâu tạo texture và xử lý màu, cho đến framebuffer — bắt đầu từ cách biểu diễn các con số.
Điểm cố định ẩn sau giao diện dấu phẩy động
Số học dấu phẩy động là trung tâm của lập trình GPU hiện đại. SST-1 nằm ở một điểm chuyển tiếp thú vị: phần mềm có thể gửi giá trị dấu phẩy động, nhưng bộ máy render phần lớn vận hành bằng điểm cố định — số nguyên kèm một hệ số tỉ lệ ngầm định.
| Giá trị thiết lập | Định dạng thanh ghi điểm cố định |
|---|---|
| Tọa độ màn hình X và Y | 12.4 |
| Đỏ, lục, lam, alpha | 12.12 |
| Độ sâu Z | 20.12 |
| Texture S/W và T/W | 14.18 |
| Nghịch đảo W | 2.30 |
Ở đây 12.4 nghĩa là mười hai bit trước dấu chấm nhị phân (bao gồm cả dấu) và bốn bit phân số. Một tọa độ màn hình 10.5 do đó được lưu dưới dạng số nguyên 168: nhân với 16 để mã hóa, chia cho 16 để khôi phục giá trị. Những bit phân số này cho phép bộ rasterizer xử lý các đỉnh nằm giữa tâm các pixel.
Các thanh ghi fvertex, fstart và gradient dấu phẩy động chấp nhận giá trị IEEE đơn chính xác. SST-1 chuyển chúng thành biểu diễn điểm cố định nội bộ, và zSST tuân thủ đúng hợp đồng đó. Sau khi tam giác đã được chuẩn bị, việc tiến dọc theo một scanline chủ yếu là cộng một gia lượng đã tính trước vào từng tham số nội suy. Phần lớn công việc theo từng pixel trở thành phép cộng số nguyên đơn giản.
Bốn texel cho một pixel
Để tạo texture chính xác theo phối cảnh, TMU nội suy S/W, T/W và 1/W, rồi chia hai giá trị đầu cho giá trị thứ ba để khôi phục tọa độ texture. Điều này giữ cho texture sàn nhà hay bức tường vẫn đúng phối cảnh khi bề mặt lùi xa. TMU cũng chọn một mip level: phiên bản nhỏ hơn của texture dành cho những pixel bao phủ vùng lớn hơn trên bề mặt. Việc này giảm hiện tượng răng cưa và lấp lánh ở khoảng cách xa.
Lọc song tuyến tính kết hợp bốn texel lân cận thành một mẫu
Sau đó lọc song tuyến tính (bilinear filtering) kết hợp bốn texel lân cận — tức các pixel của texture — quanh vị trí lấy mẫu. Trước tiên trộn cặp trên theo chiều ngang, rồi cặp dưới, cuối cùng trộn theo chiều dọc giữa hai kết quả đó. Vị trí phân số quyết định trọng số, tạo ra sự chuyển tiếp mượt mà giữa các màu texel thay vì nhảy đột ngột từ màu này sang màu kế tiếp.
Bốn lần đọc texture tạo ra một mẫu đã lọc. Trong zSST, một tầng đầu bốn giai đoạn pipeline hóa các phép tính phối cảnh và mức chi tiết. Khâu tạo địa chỉ và tra cache cung cấp texel, còn hai tầng giải mã có thanh ghi chuyển định dạng lưu trữ của chúng thành màu để lọc và kết hợp texture. Texture dạng bảng màu và mã hóa NCC cần quy tắc giải mã khác nhau, nhưng rốt cuộc đều đưa vào cùng một dòng pixel.
Màu sắc, kiểm tra, sương mù và pha trộn
Khi dữ liệu texture và framebuffer đã sẵn sàng, đường pixel FBI của zSST dùng sáu tầng có thanh ghi:
| Tầng | Công việc chính |
|---|---|
| F0 | Chọn nguồn, kiểm tra chroma key, chuẩn bị giá trị độ sâu Z/W |
| F1 | Áp dụng các hàm kết hợp màu và alpha |
| F2a | Kiểm tra alpha/độ sâu và tra hệ số sương mù |
| F2b | Áp dụng sương mù |
| F3 | Tái tạo màu đích và thực hiện pha trộn alpha |
| F4 | Chuyển về độ chính xác framebuffer, dither và áp dụng mặt nạ ghi |
Các ranh giới tầng này được chọn để đáp ứng mục tiêu xung nhịp của FPGA. Đặc tả SST-1 mô tả các phép toán nhưng không tiết lộ thanh ghi pipeline chính xác của ASIC gốc. Việc tách khâu tra hệ số sương mù khỏi khâu áp dụng sương mù, chẳng hạn, giúp tránh một đường tính toán dài trong một xung nhịp mà vẫn giữ được khả năng nhận một pixel mỗi xung nhịp.
Kết quả được ghi vào back buffer. Một lần hoán đổi buffer đồng bộ với hồi quét sau đó hiển thị ảnh hoàn chỉnh mà không đổi buffer giữa chừng khi đang quét màn hình. Voodoo gốc là card bổ trợ chỉ làm 3D, chuyển tiếp tín hiệu từ card VGA thường khi không hoạt động. z486 XL thực hiện lựa chọn tương tự giữa đầu ra VGA của PC và đầu ra hiển thị của zSST ngay bên trong hệ thống FPGA.
Phần khó nhất: cấp dữ liệu từ bộ nhớ
Pipeline pixel của zSST hóa ra khá đơn giản để hiện thực, ít nhất là so với các pipeline CPU của z486. Giữ cho nó luôn được cấp dữ liệu mới là điều khó hơn nhiều. Một mẫu song tuyến tính cần bốn texel từ các địa chỉ riêng biệt. Một pixel đã kiểm tra độ sâu và pha trộn cũng cần độ sâu cùng màu hiện có, sau đó là ghi các giá trị mới. Thực hiện từng truy cập một sẽ nhanh chóng phá hủy thông lượng. Tác giả tốn nhiều thời gian thiết kế, tinh chỉnh và gỡ lỗi hệ thống bộ nhớ hơn cả pipeline tính toán.
Sơ đồ bo mạch Diamond Monster 3D chia việc giữa chip TMU và FBI
Phân công lao động hiện rõ trên chiếc Diamond Monster 3D. Chip 3dfx phía trên là TMU, chip phía dưới là FBI, mỗi chip có bốn chip EDO RAM bên phải. Nhóm trên giữ texture; nhóm dưới giữ buffer màu và độ sâu/alpha.
FBI và TMU mỗi bên có một đường bộ nhớ 64-bit riêng. Về phía texture, khả năng xen kẽ bốn chiều (four-way interleaving) cho phép các bank đọc địa chỉ độc lập, cung cấp bốn texel lân cận cho lọc song tuyến tính song song. Đặc tả (trang 13) hứa hẹn thông lượng ngang với lấy mẫu điểm, mà không cần lưu texel trùng lặp.
Nhưng nếu hai texel lân cận rơi vào cùng một chip thì sao? Mẹo nằm ở chỗ phân bố texel theo một mẫu hai chiều lặp lại, thay vì chia ảnh thành bốn vùng lớn. Gán một bank cho mỗi tổ hợp chẵn/lẻ của cột và hàng, và lý do trở nên rõ ràng: mọi cửa sổ 2×2 đều chứa đủ A, B, C và D — kể cả cửa sổ nằm vắt qua ranh giới khối ngang lẫn dọc. Hai cột liên tiếp có tính chẵn lẻ đối lập nhau, và hai hàng liên tiếp cũng vậy. Cả bốn tổ hợp xuất hiện đúng một lần, nên mỗi bank cung cấp một texel mà không xảy ra xung đột.
Các cạnh texture và mip level nhỏ cần cẩn thận hơn một chút. SST-1 dùng kích thước texture lũy thừa của hai, nên việc bao vòng (wrapping) vẫn giữ nguyên mẫu xen kẽ với kích thước từ hai trở lên. Ở các cạnh bị kẹp, hoặc trong mip level chỉ rộng hay cao một texel, một số mẫu dùng lại cùng một texel. Điểm mấu chốt vẫn là: lọc song tuyến tính nhanh phụ thuộc vào việc bố trí bộ nhớ sao cho phần tính toán nhận được tất cả đầu vào cùng lúc.
FBI áp dụng ý tưởng tương tự cho bộ nhớ màu và độ sâu/alpha. Đường xen kẽ của nó hỗ trợ đỉnh điểm một pixel render mỗi xung nhịp, hoặc hai pixel mỗi xung nhịp khi xóa. Làm việc trên các pixel kề nhau cùng lúc giúp trải đều chi phí đọc/ghi khắp một scanline.
Ở 50 MHz, mỗi đường 64-bit có băng thông lý thuyết 400 MB/s: tổng cộng 800 MB/s, nhưng được dành riêng cho những nhiệm vụ khác nhau. TMU không thể mượn băng thông nhàn rỗi của FBI, và ngược lại. Những bus chuyên dụng và các bank được sắp đặt kỹ lưỡng này gợi nhớ đến các thiết kế thời NES và SNES — bài học cốt lõi là muốn khai thác tối đa bộ nhớ thì phải thiết kế xoay quanh chính xác thời điểm và vị trí mà từng giá trị được cần đến.
Điều gì thay đổi trên FPGA SoC
Cách bố trí bộ nhớ của Voodoo giải thích vì sao nó giữ được pipeline luôn bận rộn, nhưng không thể đơn giản cấy thiết kế đó sang KV260. Bo mạch này có băng thông bộ nhớ lớn hơn nhiều, nhưng không có bộ nhớ EDO chuyên dụng gắn vào từng đơn vị render. Thay vào đó, FPGA truy cập DDR dùng chung qua các cổng AXI của hệ xử lý Zynq. Linux, chiếc PC FPGA và khâu quét hiển thị đều tranh nhau vùng bộ nhớ đó.
Mục tiêu vẫn như cũ — giữ cho pipeline pixel luôn được cấp dữ liệu — nhưng cách đạt được phải thay đổi. Các phép đo trên KV260 cho thấy vì sao chỉ băng thông là không đủ. Một cổng 128-bit ở 100 MHz có băng thông lý thuyết 1,6 GB/s. Với một yêu cầu đang chờ, một lần đọc 4 KiB đạt 1.370 MiB/s, nhưng một lần đọc 64 byte chỉ đạt 189 MiB/s. Dữ liệu đầu tiên thường mất khoảng 280 ns mới tới — tương đương 28 xung nhịp ở 100 MHz — và đôi khi chờ lâu hơn nhiều.
Một renderer cứ chờ từng lần đọc nhỏ xong mới phát yêu cầu tiếp theo sẽ dành phần lớn thời gian trong trạng thái chờ. zSST cần đủ công việc độc lập đang bay để che lấp khoảng chờ đó. Cách giải quyết gồm ba phần: cache, hàng đợi phát lại (replay queue) và buffer sắp xếp lại (reorder buffer).
Đầu tiên là cache. Các pixel màn hình gần nhau thường lấy mẫu những phần chồng lấn của texture, nên texel vừa nạp có thể tái sử dụng từ RAM trên chip. Cache texture của zSST chứa 8 KiB theo dòng 64 byte; mỗi lần nạp cũng mang về các texel lân cận mà những pixel sau có khả năng cần. Một lần trượt cache vẫn tốn nhiều xung nhịp, nhưng các mẫu texture độc lập không nhất thiết phải chờ nó. zSST giữ tối đa tám lần nạp dòng cache đang bay, dùng hàng đợi phát lại để tạm gác các mẫu thiếu dữ liệu và thử lại khi dữ liệu về. Trong lúc đó, những mẫu đã có texel trong cache vẫn có thể tiếp tục.
Giờ một lần trúng cache muộn có thể hoàn thành trước một lần trượt cache sớm hơn. Một reorder buffer 64 mục thu kết quả lại và nhả chúng theo đúng thứ tự gốc. Nguyên lý này quen thuộc từ CPU: làm việc hữu ích trong lúc chờ lâu, rồi khôi phục trật tự trước khi chuyển kết quả xuống hạ nguồn.
Phía framebuffer dùng cache đọc riêng 4 KiB cho màu và cho độ sâu/alpha, trong khi bộ gộp ghi đóng gói các cập nhật 16-bit lân cận thành yêu cầu 128-bit. Ở đây thứ tự rất quan trọng: pha trộn hoặc kiểm tra độ sâu có thể cần một giá trị mà pixel trước đã thay đổi nhưng chưa ghi xuống DDR. Cơ chế chuyển tiếp (forwarding) cung cấp giá trị đang chờ đó trực tiếp. Các cập nhật framebuffer có hiệu lực theo thứ tự, và những thay đổi trạng thái cần công việc đã hoàn tất phải chờ nó xả hết. Các yêu cầu bộ nhớ có thể chồng lấn, nhưng pixel sau vẫn phải thấy hiệu ứng của pixel trước.
FBI và TMU dùng chung cổng AXI 128-bit của renderer là HP2. PC dùng HP0 và khâu quét hiển thị dùng HP3, giữ hàng đợi yêu cầu của chúng tách biệt dù cuối cùng cả ba vẫn chia sẻ DDR.
Kết quả đánh giá
Tác giả đo renderer tách biệt khỏi chiếc PC hoàn chỉnh. Bài đo mô phỏng gửi lệnh qua tầng đầu của zSST và luyện tập TMU, FBI, bộ phân xử dùng chung cùng một mô hình định thời DDR. Dữ liệu đọc tới sau ít nhất 26 xung nhịp, với biến thiên có tính xác định và đôi khi trễ lâu hơn; khâu ghi cũng bị giới hạn tốc độ. Các bài kiểm thử toàn renderer cho phép 32 lần đọc đang bay.
Ở 100 MHz, zSST đạt 78,5 triệu pixel mỗi giây (MPix/s) cho tam giác có texture, và 72,8 MPix/s khi kèm kiểm tra độ sâu và pha trộn. Các ước lượng công bố của Voodoo 1 ở xung nhịp gốc 50 MHz là 43 và 37 MPix/s cho bộ tính năng tương đương. Đây không phải phép so sánh cùng điều kiện: khối lượng tam giác khác nhau, và các ước lượng gốc còn bao gồm sương mù, mipmapping và tô bóng Gouraud. Tác giả không có card Voodoo 1 để chạy cùng bài kiểm thử trên cả hai. Phép so sánh chỉ cho thấy khoảng tốc độ đổ đầy (fill-rate) xấp xỉ, chứ không phải một mức tăng tốc đo được so với card gốc.
Tốc độ đổ đầy cao không tự động chuyển thành FPS game cao. Trên bo mạch, màn 2 của Tomb Raider tạo ra 237 lần hoán đổi buffer được hiển thị trong khoảng 20 giây — tức khoảng 12 lần mỗi giây, đo từ số lần hoán đổi chứ không phải bộ đếm FPS của engine. Các đo lường sơ bộ chỉ ra nút thắt cổ chai nằm ở CPU: nó vẫn phải chạy game, chuẩn bị hình học và gửi lệnh. Việc tranh chấp DDR dùng chung cũng có thể góp phần. Vẫn còn nhiều dư địa để tối ưu trong cỗ máy hoàn chỉnh.
Với các game không dùng Voodoo, z486 XL hiện tại ở 100 MHz chạy Doom ở mức chi tiết tối đa đạt 38,5 FPS và Quake 1.06 đạt 8,1 FPS. Con số này nhanh hơn khoảng 20% so với bản dựng DE10-Nano ở 85 MHz — khoảng 23% với Doom và 19% với Quake. Một cache L2 ghi lại (write-back) 512 KiB trong UltraRAM giúp CPU tận dụng DDR tốt hơn.
Trong bản dựng XCK26 tích hợp, zSST chiếm khoảng 29.500 LUT, 28.100 flip-flop, 14 khối RAMB36, 8 khối RAMB18 và 97 lát DSP. Thiết kế PC kết hợp với đồ họa đáp ứng được yêu cầu định thời ở 100 MHz.
Lời kết
Điều đáng giá nhất là được thấy phần mềm Glide nguyên bản điều khiển phần cứng do chính mình dựng bằng RTL. Tác giả từng nghĩ phần tính toán render mới là khó; hóa ra việc đưa dữ liệu tới đó hiệu quả lại tốn nhiều công hơn. Bộ nhớ EDO xen kẽ kỹ lưỡng của Voodoo và hệ cache cùng hàng đợi của zSST giải quyết cùng một bài toán dưới những ràng buộc rất khác nhau: một pipeline pixel nhanh chỉ hữu ích khi nó có việc để làm.
Cả zSST và z486 XL đều được phát hành dưới dạng mã nguồn mở. Nếu bạn đã có sẵn một chiếc KV260, ảnh SD của z486 XL cung cấp phần hỗ trợ Linux và ứng dụng cần thiết để khởi chạy ảnh đĩa DOS của riêng bạn.
Dự án là một ví dụ đẹp cho thấy cộng đồng mã nguồn mở và những người yêu phần cứng cổ điển đang cùng nhau gìn giữ lịch sử điện toán — không chỉ mô phỏng bằng phần mềm, mà tái tạo chính xác đến từng xung nhịp.
Với độc giả Việt Nam quan tâm đến FPGA và thiết kế phần cứng, đây cũng là cơ hội thực hành quý giá: các bo mạch như KV260 hay DE10-Nano ngày càng dễ tiếp cận, và những dự án như z486 XL cho thấy một cá nhân hoàn toàn có thể dựng lại cả một thế hệ máy tính trong vài nghìn dòng RTL — kèm theo một bài học kinh điển rằng bộ nhớ, chứ không phải tốc độ tính toán, thường là giới hạn thật sự của mọi hệ thống.


