Alibaba Cloud FPGA: Kintex UltraScale+ ราคา 200 ดอลลาร์
(essenceia.github.io)- แนะนำการทดลองซื้อบอร์ด Kintex UltraScale+ FPGA ในราคา 200 ดอลลาร์มาใช้เป็น แพลตฟอร์มพัฒนา
- บอร์ดนี้ถูกขายโดยไม่มีเอกสารทางการหรือการรับประกัน จึงมี ความท้าทาย ในด้าน การดีบักผ่าน JTAG และการตั้งค่าเริ่มต้น
- สำรวจความเป็นไปได้ในการสร้าง สภาพแวดล้อมสำหรับคอนฟิกและดีบัก FPGA ด้วยตนเอง โดยใช้ OpenOCD และ Segger JLink
- เป้าหมายของการทดลองคือการ ตรวจสอบอินเทอร์เฟซ PCIe/อีเธอร์เน็ตของ FPGA มือสอง ยืนยันผังขา และมอนิเตอร์ระบบ
- สรุปขั้นตอนแบบเป็นลำดับพร้อมประสบการณ์แก้ปัญหา ตั้งแต่ การเริ่มต้นระบบและการเชื่อมต่อ JTAG การตรวจสอบ scan chain ไปจนถึงการมอนิเตอร์อุณหภูมิ/แรงดันไฟฟ้า
เกริ่นนำ
- ผู้เขียนต้องการ FPGA ประสิทธิภาพสูงสำหรับทำต้นแบบโปรเจกต์ขนาดใหญ่ โดยเฉพาะ UltraScale+ ตระกูล Xilinx Virtex แต่ด้วยปัญหาเรื่องต้นทุนและภาระค่าไลเซนส์ Vivado Enterprise จึงจำกัดตัวเลือกมาที่ชิป Kintex UltraScale+ ที่รองรับ WebPack (XCKU3P, XCKU5P)
- ชิปเหล่านี้ก็ยังมีสเปกระดับสูงเกินงานอดิเรกทั่วไป ทั้ง LUTs และ GTY transceiver
- ต้องการบอร์ดพัฒนาที่มีอย่างน้อย 2x SFP+ หรือ 1x QSFP, JTAG และ PCIe x8 ขึ้นไป ระหว่างการพิจารณาว่าจะออกแบบเอง ซื้อผลิตภัณฑ์ของ Alinx หรือหาของมือสอง สุดท้ายได้ซื้อบอร์ด FPGA accelerator ของ Alibaba Cloud จาก Ebay ในราคา 200 ดอลลาร์
- แม้บอร์ดที่ซื้อมาจะไม่มีเอกสารรองรับเลยและยังไม่รู้ว่าทำงานปกติหรือไม่ แต่แนวคิดในการแฮ็กบอร์ด Kintex UltraScale+ ราคาถูกก็น่าสนใจมาก
ความท้าทายด้านดีบักเกอร์
- ตาม เอกสาร UG908 ของ Xilinx การคอนฟิก/ดีบัก FPGA ด้วย JTAG probe ที่แนะนำเป็นแนวทางปกติ แต่ผู้เขียนเลือกลองใช้ทางเลือกโอเพนซอร์สแทน probe ทางการที่มีราคาแพง เช่น OpenOCD
- แม้จะต้องยอมสละการใช้ toolchain ทางการของ Xilinx (เช่น ILA) ก็ยังสามารถพัฒนาลอจิกดีบักของตนเองที่อิงกับ JTAG USER register ได้
- OpenOCD มักถูกใช้กับ ARM/RISC-V เป็นหลัก แต่ด้วยการรองรับ probe ที่หลากหลาย การควบคุมงาน JTAG อย่างละเอียด และการรองรับฟอร์แมต SVF จึงนำมาใช้กับ FPGA ได้เช่นกัน
- แม้เอกสารเกี่ยวกับการรองรับ UltraScale+ จะมีน้อย แต่ตัวมาตรฐาน JTAG และ SVF รวมถึงโครงสร้าง scan ยังใช้ได้
แผนทั้งหมด
- นี่คือแผนการทดลองแบบเป็นขั้นตอนเพื่อเปลี่ยนบอร์ด FPGA มือสองราคาถูกจาก Ebay ให้เป็นแพลตฟอร์มพัฒนา ด้วย probe แบบโอเพนซอร์ส/ไม่เป็นทางการที่ไม่มีการรองรับจากผู้ผลิต เช่น OpenOCD และ JLink
- แต่ละขั้นตอนจะดำเนินไปตามลำดับ: ยืนยันการทำงานของอุปกรณ์บนบอร์ด → เชื่อมต่อ JTAG debugger → หา pinout → ส่ง bitstream
ขั้นที่ 1 - ยืนยันว่าบอร์ดทำงานปกติ
- หาก Flash memory ยังไม่ถูกล้าง ก็อาจใช้ bitstream ของผู้ใช้คนก่อนเพื่อตรวจสอบเบื้องต้นได้ เช่น ระบุ PCIe endpoint หรือดูว่ามีสัญญาณอีเธอร์เน็ตจาก SFP PHY หรือไม่
ขั้นที่ 2 - เชื่อมต่อ JTAG debugger
- ต้องหาตำแหน่งขาอินเทอร์เฟซ JTAG จำนวนอุปกรณ์ที่เชื่อมอยู่ และสถานะของ daisy chain
- ยังสามารถใช้ JTAG system register ของ FPGA (โดยเฉพาะ SYSMON) เพื่อติดตามอุณหภูมิ/แรงดันแบบเรียลไทม์ได้ และคาดหวังว่า openOCD จะรองรับเพิ่มขึ้นในอนาคต
ขั้นที่ 3 - ตรวจสอบผังขา (pinout)
- จำเป็นต้องวิเคราะห์วงจรบนบอร์ดจริง เช่น ชนิด/ความถี่/ขาที่เชื่อมของแหล่ง clock ภายนอก รวมถึงข้อมูล transceiver ที่เชื่อมกับ SFP และ PCIe
ขั้นที่ 4 - เขียน bitstream
- วางแผนใช้การคอนฟิกชั่วคราวผ่าน JTAG (ข้าม Flash) โดยอาศัย openOCD virtex2 + ไดรเวอร์ pld หรือใช้วิธี replay ไฟล์ SVF ที่สร้างจาก Vivado
- มีแผนจะทำระบบอัตโนมัติสำหรับฟลोว์ Vivado → SVF ทั้งหมด
รับบอร์ดและทดสอบเบื้องต้น
- ได้รับบอร์ด Kintex UltraScale+ FPGA (XCKU3P-FFVB676) จาก accelerator ของ Alibaba Cloud พร้อมอุปกรณ์ที่แถมมา เช่น ทรานซีฟเวอร์ Huawei SFP28 25G และสายแพตช์ OS2
- ตัวบอร์ดมีร่องรอยการใช้งานอยู่บ้าง แต่สภาพอุปกรณ์และพอร์ต PCIe/SFP ยังดี
ตรวจสอบไฟเลี้ยงแบบสแตนด์อโลน
- ใช้อะแดปเตอร์ PCIe-USB จ่ายไฟแบบง่าย ๆ และตรวจสอบเบื้องต้นจาก LED/ความร้อนของฮาร์ดแวร์ว่ามีไฟเข้าหรือไม่
ทดลองอินเทอร์เฟซ PCIe
- ใช้อินเทอร์เฟซภายนอก PCIe Gen2.0 x1 ของ Raspberry Pi 5 เพื่อทดสอบ FPGA (รองรับ Gen3.0, x8) โดยคาดหวังว่าจะถูกตรวจพบได้ตามความสามารถในการทำงานย้อนหลังร่วมกัน
- จาก log
dmesgบนลินุกซ์ พบว่าบอร์ดถูกตรวจพบเป็น PCIe Bridge และ endpoint (ชนิดอีเธอร์เน็ต); มีการกำหนด vendor/device id แบบเฉพาะเพื่อหลีกเลี่ยงการชนกับ OS - ใช้คำสั่ง
lspci -vvvเพื่อตรวจสอบสถานะของอุปกรณ์ PCIe ทั้งหมด: แม้บอร์ดนี้จะระบุว่ารองรับ Gen3.0 x8 แต่เมื่อเชื่อมต่อกับ Pi จริง ความเร็ว/แบนด์วิดท์จะลดลงเหลือ Gen2.0 x1 (เพราะข้อจำกัดของ Bridge และการเชื่อมต่อทางกายภาพจริง) - จากจุดนี้จึงยืนยันได้ว่าอินเทอร์เฟซ PCIe ของบอร์ด FPGA ทำงานปกติ
อินเทอร์เฟซ JTAG
- FPGA ของ Xilinx สามารถอัปเดต/โหลด CMOS Configuration Latch (CCL) ภายในแบบ SRAM ผ่าน JTAG ได้
- อินเทอร์เฟซ JTAG บนบอร์ดจริงประกอบด้วยสัญญาณมาตรฐาน 4 เส้น (TCK/TMS/TDI/TDO) และสัญญาณไฟเลี้ยง/กราวด์; ส่วนรีเซ็ตสามารถทำผ่าน Xilinx FSM ได้
- อย่างไรก็ตาม การจัดเรียงขาจริงไม่ตรงกับมาตรฐาน จึงต้องเดินสายเพิ่มต่างหาก
การใช้ Segger JLink
- ในสถานะที่ไม่มีโปรแกรมเมอร์ JTAG ทางการของ AMD ผู้เขียนใช้ Segger JLink ร่วมกับ OpenOCD
- JTAG สามารถประกอบการใช้งานได้ด้วย GPIO เพียง 4 เส้น จึงเหมาะกับการทดลองเฉพาะหน้า
- มีการแสดงผังการเดินสายระหว่าง JLink → บอร์ด FPGA และเมื่อคำนึงถึง jumper สำหรับเบรดบอร์ดกับความหน่วงของสัญญาณจากสายยาว จึงจำกัดความเร็ว TCK (clock) ไว้ที่ 1~10MHz
สภาพแวดล้อม OpenOCD
- OpenOCD คือ on-chip debugger แบบโอเพนซอร์สที่รองรับ probe/บอร์ดหลากหลายชนิด
- รองรับฟอร์แมต SVF มาตรฐาน (ทำงานร่วมกับ Vivado ได้) และด้วยความที่วงจรเป็นโอเพนซอร์ส จึงสามารถวิเคราะห์/แพตช์เองได้ง่ายเมื่อมีปัญหา
- ผู้เขียนคอมไพล์ OpenOCD เวอร์ชันล่าสุด (0.12.0+dev) และไลบรารี JLink ขึ้นมาใช้งานเอง
ตรวจสอบ JTAG Scan Chain และเช็ก IDCODE
- เนื่องจากไม่ทราบ schematic ของบอร์ด ผู้เขียนจึงใช้ฟังก์ชันสแกนอัตโนมัติของ OpenOCD เพื่อค้นหาอุปกรณ์/IDCODE ภายใน JTAG chain
- ยืนยันได้ว่าบอร์ดนี้ตรงกับ IDCODE ของ Xilinx KU3P (0x04a63093)
- เมื่อตั้งค่า IR length (ความยาว instruction register 6 บิต) แบบกำหนดเอง ก็สามารถตรวจพบได้อย่างถูกต้อง
- ในที่สุดก็สรุปโครงสร้าง JTAG scan chain ของบอร์ดได้
มอนิเตอร์ระบบ SYSMON
- Xilinx รุ่นเก่าใช้ XADC ส่วนตระกูล UltraScale+ ใช้ SYSMON4 ที่มีฟังก์ชันวัดอุณหภูมิ/แรงดันในตัว
- โดยค่าเริ่มต้น openOCD ยังไม่รองรับการเชื่อมต่อ SYSMON ผ่าน JTAG จึงต้องเพิ่มเอง
- สามารถแฮ็กสคริปต์ให้ส่งคำสั่ง SYSMON (DRP) และอ่านค่าแบบเรียลไทม์ของอุณหภูมิ/แรงดันผ่าน status register ได้
จากกระบวนการทั้งหมดนี้ ผู้เขียนได้บันทึกประสบการณ์การหาบอร์ด FPGA accelerator รุ่นเก่าของ Alibaba Cloud ที่ไม่มีการรองรับอย่างเป็นทางการในราคาถูก แล้วใช้เพียงเครื่องมือโอเพนซอร์สเพื่อวางรากฐานสำหรับการดีบักและใช้งานจริง (อินเทอร์เฟซ PCIe/JTAG, การมอนิเตอร์ระบบ)
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ลองทดสอบอินเทอร์เฟซ PCIe ของบอร์ด Lattice Certus-Pro NX "Versa" กับ Raspberry-PI V แล้ว รู้สึกว่าสะดวกมาก Raspberry-PI V เร็วพอจะรันซอฟต์แวร์เดสก์ท็อปล่าสุดได้ (แม้แต่ Microsoft Teams!) สามารถเดโมดีไซน์ FPGA แบบสด ๆ และแชร์หน้าจอเดสก์ท็อประหว่างคอนเฟอเรนซ์คอลได้ ที่น่าเสียดายมีแค่เอกสารของ SoC จาก Broadcom ที่ยังไม่ดีพอ ส่วน Intel ถ้าผ่าน NDA ก็จะให้เอกสารชิปทั้งหมด ทำให้สร้างสภาพแวดล้อม FPGA PCIe ที่ยอดเยี่ยมบน Xeon Ivy Bridge ได้ ถ้าเก็บ PCI configuration register ไว้ก่อน แล้ว reconfigure FPGA และโปรแกรม register กลับเข้าไปใหม่ ชิปจะกลับมาปรากฏบนบัสได้โดยไม่ต้องรีบูตเซิร์ฟเวอร์หรือ re-enumerate ใหม่ ซึ่งสะดวกมาก เคล็ดลับคือระหว่าง reconfiguration ให้ตั้งค่า root complex bit ชั่วคราวเพื่อปิดการตรวจจับข้อผิดพลาดของ PCIe (ตอนนั้นใช้ Altera Stratix-IIgx) น่าจะมีวิธีอื่นอีกด้วย เลยฝากลิงก์อ้างอิงไว้: ลิงก์ Stack Overflow โดยรวมแล้ว ถ้ามีเอกสารที่ดี การรายงานข้อผิดพลาดในขั้นตอนเริ่มต้นของ PCIe จะมีประโยชน์มาก
ถ้ามี FT2232H adapter อยู่แล้ว (หรือถ้ายังไม่มี ก็แนะนำให้ซื้อสักตัว) มันสามารถแฟลชให้ใช้งานร่วมกับ Vivado ได้อย่างง่ายดาย อ้างอิง: คู่มือ Vivado FTDI Device Programming
ที่บริษัทเราเก็บ FT2232H ไว้ในสต็อกตลอด 20-30 ตัว มันมีประโยชน์มากเพราะรองรับโปรโตคอลหลากหลาย เช่น GPIO, I2C, SPI, parallel FIFO ฯลฯ แล้วไลบรารี Python อย่าง pyFTDI ก็ยอดเยี่ยมมาก
ผมมี adapter ตัวนี้เหลือมาจากโปรเจ็กต์อื่น แต่ไม่เคยทำงานกับ FPGA มาก่อน เลยสงสัยว่าที่บอกว่าใช้งานกับ Vivado ได้จริง ๆ หมายความว่าอะไร มันหมายถึงใช้ configure FPGA ของ AMD ได้หรือเปล่า หรือหมายถึงอย่างอื่น
ทำให้นึกถึงเคสสุดล้ำที่ Alibaba เคยใช้ FPGA cluster จัดการ LSM compaction ในฐานข้อมูลผ่าน custom MySQL storage engine อ้างอิง: PDF งานวิจัยที่เกี่ยวข้อง เมื่อเทียบกับ RocksDB ทั้ง throughput และ latency ดีขึ้นอย่างมาก และในบางงานก็ดีกว่าขึ้นไปอีกระดับ พวกเขาเคยเปิดให้บริการเทคโนโลยีนี้ด้วย แต่สุดท้ายก็ยุติไป ยังไม่รู้ว่าทุกวันนี้ยังใช้ภายในอยู่ไหม แต่ก็น่าแปลกใจที่แทบไม่มีที่ไหนใช้ hardware acceleration กับงานฐานข้อมูลที่ทำซ้ำ ๆ แบบนี้
ถ้าสนใจ FPGA PCIe หรือการ์ด PCI ก็ยังมีบอร์ด Gidel มือสองอยู่เยอะพอสมควร มีหลายซีรีส์ เช่น ProcSpark/ProcStar ซอฟต์แวร์ทางการเป็น proprietary และเพราะมี FPGA หลายตัว ถ้าจะใช้กับ Quartus ตรง ๆ ก็ต้องไปไล่หาพินเอาต์ก่อน ผมได้บอร์ดที่มี Stratix IV ตัวใหญ่มากมาหนึ่งใบ บอร์ด Kintel UltraScale+ นี่น่าอยากได้มากจนโพสต์นี้น่าประทับใจสุด ๆ
ถ้าอยู่ในจีน สินค้าตัวเดียวกันนี้ขายอยู่บน idlefish ที่ 480 หยวน (ประมาณ 68 ดอลลาร์) ถูกจนน่าเหลือเชื่อ เลยคิดว่าจะลองซื้อมาเล่นเอง
ยังไม่แน่ใจว่าตอนนี้มีใครหา pinout ของคอนเน็กเตอร์ SFP ด้านหลังได้หรือยัง ถ้าส่วนนี้มีเอกสารและยืนยันเส้นทาง PCI-e ได้ ก็น่าจะสนุกดีถ้าเอาไปทำอุปกรณ์เครือข่ายแสงแบบคัสตอม ตัวรับส่งสัญญาณ SFP แค่ป้อนสัญญาณเข้าไปก็จะส่งออกตามนั้น ทำให้มันน่าสนใจทั้งสำหรับการทำเป็น PCIe backplane หรืออุปกรณ์สัญญาณแสงแบบสแตนด์อโลน
มีใครรู้ตัวอย่างของการใช้ FPGA ทำ neural network หรือสถาปัตยกรรมแบบ connectionist อื่น ๆ ไหม? สิ่งที่น่าสนใจที่สุดของ FPGA คือแม้แต่ในมหาวิทยาลัยหรือระดับบุคคลก็ยังพอเอื้อมถึงการทำชิปแบบ "คัสตอม" ได้ ในช่วงที่ AI เทไปทาง LLM กันหมด ผมคิดว่ามันอาจเป็นโอกาสให้กลุ่มเล็ก ๆ หรือบุคคลลองทดลองแนวทาง AI แบบ bottom-up ที่อิงสัตว์มากกว่า โดยใช้ FPGA
ที่ FNAL มีการใช้ neural network บน FPGA สำหรับงาน inference จากผลการทดลองฟิสิกส์พลังงานสูงของ LHC/CMS ยังมีกรณีใช้งานสำหรับควบคุมระบบไดนามิกในระดับไมโครวินาทีด้วย เอกสารอ้างอิง: HLS4ML PDF สไลด์ของ CERN IRIS-HEP Whitepaper: Deploying tinyML on FPGAs PDF กรณีศึกษาจาก NeurIPS ML4PhysicalSciences
ผมสงสัยว่าคำว่า "ทำ neural network บน FPGA" หมายถึงใช้เป็น hardware accelerator สำหรับ inference หรือหมายถึงสังเคราะห์ทั้งเครือข่าย (รวมถึงค่าน้ำหนัก) ลงไปเป็นสถาปัตยกรรม FPGA โดยตรง ไม่ว่าแบบไหน FPGA ก็ไม่ได้สามารถสร้างตรรกะแบบใดก็ได้อย่างไร้ขีดจำกัด แต่เป็นการใช้บล็อกที่มีข้อจำกัดผ่านผลลัพธ์จากการสังเคราะห์ซอฟต์แวร์ สำหรับงานอย่าง LLM ที่ต้องใช้หน่วยความจำปริมาณมากและแบนด์วิดท์สูง มันไม่เหมาะนัก ถึงจะเชื่อมต่อหน่วยความจำความเร็วสูงกับ FPGA ได้ แต่ทุกวันนี้ GPU เหมาะกับงานลักษณะนั้นกว่ามาก
ลองดู differentiable logic gate networks น่าสนใจดี
งานวิจัยอ้างอิง: arXiv:2404.10076
ผมสงสัยว่าทำไมถึงโดนโหวตลบเยอะ เท่าที่เข้าใจ AI ต้องการ RAM เยอะและ RAM ที่เร็ว ดังนั้น FPGA จึงไม่ค่อยเหมาะ FPGA มีขาที่ต่อ RAM เร็ว ๆ ได้ก็จริง แต่การออกแบบบอร์ดและการลากเลเยอร์สัญญาณจะซับซ้อนมาก เพราะงั้นการ์ดจอจึงเหมาะกว่ามาก
กระแส AI นี้ทำให้ผมคิดอยู่ส่วนตัวว่า
ตอนนี้ยังมีของอยู่บน eBay เยอะเลย ลิงก์ eBay ดูเหมือน GPIO จะไม่ได้ถูกแยกออกมาที่ header อะไรทำนองนั้น ถ้าใครมีไอเดียโปรเจ็กต์ที่น่าใช้ก็แนะนำหน่อย
จุดที่สะดุดตาคือ "มีเคสพกพาแถมมากับบอร์ด" เลยสงสัยว่าทำไมถึงมี แบบว่าในดาต้าเซ็นเตอร์เขาถอดบอร์ดออกมาเคลื่อนย้ายบ่อยเหรอ หรือเป็นคนขายบน eBay ที่ใส่มาเพื่อป้องกันกันแน่