Alibaba Cloud FPGA: 200 डॉलर का Kintex UltraScale+
(essenceia.github.io)- Kintex UltraScale+ FPGA बोर्ड को 200 डॉलर में खरीदकर उसे development platform के रूप में इस्तेमाल करने के प्रयोग का परिचय
- यह बोर्ड बिना आधिकारिक documentation या warranty के बेचा जाता है, इसलिए JTAG debugging और शुरुआती setup में चुनौतियाँ हैं
- OpenOCD और Segger JLink का उपयोग करके स्वतंत्र रूप से FPGA configuration और debugging environment लागू करने की संभावना तलाशता है
- प्रयोग का लक्ष्य सेकंड-हैंड FPGA के PCIe/Ethernet interface सत्यापन, pin layout की पुष्टि, और system monitoring करना है
- Initialization और JTAG connection, scan chain की पहचान, temperature/voltage monitoring तक की चरणबद्ध प्रक्रिया और troubleshooting अनुभव को संक्षेपित करता है
परिचय
- लेखक बड़े प्रोजेक्ट के prototyping के लिए एक शक्तिशाली FPGA, खासकर Xilinx Virtex परिवार का UltraScale+, चाहता था, लेकिन लागत और Vivado enterprise license के बोझ के कारण WebPack समर्थित Kintex UltraScale+ chips (XCKU3P, XCKU5P) तक विकल्प सीमित किए
- ये chips भी hobby स्तर से कहीं आगे जाकर LUTs और GTY transceivers जैसी उच्च specifications प्रदान करते हैं
- कम-से-कम 2 SFP+ या 1 QSFP, JTAG, और PCIe x8 या उससे अधिक की शर्तें पूरी करने वाला development board चाहिए था; खुद design करने, Alinx product खरीदने, या सेकंड-हैंड market देखने के बीच लेखक ने Ebay से Alibaba Cloud accelerator FPGA board 200 डॉलर में खरीदा
- खरीदे गए बोर्ड के लिए कोई documentation उपलब्ध नहीं थी और यह भी स्पष्ट नहीं था कि वह ठीक से काम करता है या नहीं, लेकिन कम कीमत पर Kintex UltraScale+ बोर्ड को hack करने का आकर्षण था
Debugger की चुनौतियाँ
- Xilinx के UG908 document के अनुसार FPGA को recommended JTAG probe से configure/debug करना सामान्य है, लेकिन महंगे official probe के बजाय open source alternatives (जैसे OpenOCD) को आजमाया गया
- Xilinx की official toolchain (जैसे ILA) छोड़ने के बदले, JTAG USER register आधारित अपना debugging logic विकसित किया जा सकता है
- OpenOCD का उपयोग मुख्यतः ARM/RISC-V के लिए होता है, लेकिन व्यापक probes, JTAG operations पर सूक्ष्म नियंत्रण, और SVF format support के कारण इसे FPGA पर भी उपयोग किया जा सकता है
- UltraScale+ series support से जुड़ी documentation कम है, फिर भी JTAG और SVF standard तथा scan structure अब भी वैध हैं
संपूर्ण योजना
- Ebay से सस्ते में खरीदे गए सेकंड-हैंड FPGA बोर्ड को बिना आधिकारिक support के open source/अनौपचारिक probes (OpenOCD, JLink आदि) से configure करके development platform के रूप में उपयोग करने की चरणबद्ध प्रयोग-योजना है
- प्रत्येक चरण बोर्ड के device operation की पुष्टि → JTAG debugger connection → pin layout ढूँढना → bitstream transfer के क्रम में आगे बढ़ता है
चरण 1 - बोर्ड के सही काम करने की पुष्टि
- यदि Flash memory मिटाई नहीं गई है, तो पिछले उपयोगकर्ता के bitstream के जरिए PCIe endpoint की पहचान या SFP PHY Ethernet signal की मौजूदगी से शुरुआती तौर पर कामकाज की पुष्टि की जा सकती है
चरण 2 - JTAG debugger connection
- JTAG interface pin location, जुड़े हुए devices की संख्या, और Daisy chain की स्थिति जैसी जानकारी पता करनी होगी
- FPGA के JTAG system registers (खासकर SYSMON) के जरिए temperature/voltage की real-time monitoring भी उपयोगी हो सकती है, और OpenOCD support बढ़ने की उम्मीद है
चरण 3 - pin layout (pinout) की पहचान
- बाहरी clock source का प्रकार/frequency/connection pins, और SFP तथा PCIe से जुड़े transceivers जैसी जानकारी के लिए वास्तविक circuit analysis की आवश्यकता है
चरण 4 - bitstream लिखना
- JTAG के जरिए अस्थायी configuration (Flash bypass), OpenOCD virtex2 + pld driver, या Vivado से बने SVF को replay करने की योजना है
- Vivado → SVF conversion की पूरी flow को automate करने का इरादा है
बोर्ड प्राप्ति और शुरुआती परीक्षण
- Alibaba Cloud accelerator से आया Kintex UltraScale+ FPGA (XCKU3P-FFVB676) बोर्ड, SFP28 25G Huawei transceiver, OS2 patch cable आदि साथ में प्राप्त हुए
- बोर्ड पर कुछ उपयोग के निशान थे, लेकिन accessories और PCIe/SFP की स्थिति अच्छी थी
Standalone power की पुष्टि
- PCIe-USB adapter से साधारण power injection करके LED और hardware heating के आधार पर शुरुआती power check किया गया
PCIe interface प्रयोग
- Raspberry Pi 5 के PCIe Gen2.0 x1 external interface का उपयोग कर FPGA (Gen3.0, x8 support) को test करने पर backward compatibility के कारण सही पहचान की उम्मीद थी
- Linux
dmesglog में बोर्ड PCIe Bridge और endpoint (Ethernet type) के रूप में पहचाना गया; OS conflicts से बचने के लिए vendor/device id को विशेष रूप से सेट किया गया था lspci -vvvcommand से पूरे PCIe device state की जाँच में पता चला कि बोर्ड में Gen3.0 x8 support स्पष्ट है, लेकिन Pi से जुड़ने पर bandwidth/speed वास्तविकता में Gen2.0 x1 तक downgrade हो गई (Bridge limits और physical connection constraints के कारण)- इससे FPGA बोर्ड के PCIe interface के सही काम करने की पुष्टि हुई
JTAG interface
- Xilinx FPGA को JTAG के जरिए internal CMOS Configuration Latch (CCL) को SRAM तरीके से update/load किया जा सकता है
- वास्तविक बोर्ड का JTAG interface standard 4-wire (TCK/TMS/TDI/TDO) और power/ground signals से बना है; reset को Xilinx FSM के जरिए implement किया जा सकता है
- वास्तविक pin arrangement standard से अलग है, इसलिए अलग wiring की आवश्यकता पड़ी
Segger JLink का उपयोग
- AMD का official JTAG programmer उपलब्ध न होने पर Segger JLink को OpenOCD के साथ उपयोग किया गया
- JTAG को सिर्फ 4 GPIO से implement किया जा सकता है, इसलिए यह तात्कालिक प्रयोगों के लिए उपयुक्त है
- JLink → FPGA बोर्ड के बीच wiring diagram दिया गया, और breadboard jumper तथा लंबे signal delay को देखते हुए TCK (clock) speed को 1~10MHz तक सीमित रखा गया
OpenOCD environment
- OpenOCD विभिन्न probes/boards को support करने वाला open source on-chip debugger है
- standard SVF format support (Vivado integration), और circuit के open source होने की वजह से समस्या आने पर सीधे analysis/patching आसान है
- नवीनतम OpenOCD (0.12.0+dev) और JLink library को manually build करके इस्तेमाल किया गया
JTAG Scan Chain की पुष्टि और IDCODE जाँच
- बोर्ड का schematic ज्ञात न होने की स्थिति में OpenOCD की automatic scan feature से JTAG chain के भीतर devices/IDCODE खोजे गए
- यह बोर्ड Xilinx KU3P के IDCODE (
0x04a63093) से मेल खाता पाया गया - IR length (instruction register length 6-bit) को manually specify करके भी सही detection हुई
- अंततः बोर्ड की JTAG scan chain को व्यवस्थित रूप से पहचान लिया गया
SYSMON system monitor
- Xilinx की पुरानी पीढ़ी में XADC होता था, जबकि UltraScale+ परिवार में temperature/voltage measurement के लिए SYSMON4 built-in है
- OpenOCD में default रूप से SYSMON JTAG integration support नहीं है, इसलिए इसे स्वयं जोड़ना पड़ा
- SYSMON (DRP) command transmission और status register के जरिए temperature/voltage की real-time जाँच तक की क्षमता script के माध्यम से hack की जा सकती है
इन प्रक्रियाओं के जरिए, बिना आधिकारिक support वाले पुराने Alibaba Cloud FPGA accelerator बोर्ड को सस्ते में हासिल कर केवल open source tools से debugging और उपयोग के लिए आधारभूत ढाँचा (PCIe/JTAG interface, system monitoring) स्थापित करने के अनुभव को दर्ज किया गया है
1 टिप्पणियां
Hacker News की राय
Raspberry-PI V से Lattice Certus-Pro NX "Versa" बोर्ड के PCIe interface को टेस्ट करके देखा, और यह सच में बहुत सुविधाजनक लगा Raspberry-PI V इतना तेज़ है कि यह आधुनिक desktop software (यहाँ तक कि Microsoft Teams भी!) चला सकता है मैं FPGA design का live demo कर सका और conference call के दौरान desktop screen share भी कर सका बस Broadcom के SoC documentation की कमी खली Intel NDA के बाद सभी chip documents दे देता था, इसलिए Xeon Ivy Bridge पर एक शानदार FPGA PCIe environment बना सका PCI configuration registers को save करने के बाद FPGA को reconfigure करके फिर registers को दोबारा program कर दें, तो server को reboot या re-enumerate किए बिना chip bus पर दिखाई दे जाती थी, जो बहुत सुविधाजनक था इसका राज़ यह था कि reconfiguration के दौरान root complex bit को अस्थायी रूप से set करके PCIe error detection को disable कर दिया जाता था (उस समय Altera Stratix-IIgx इस्तेमाल किया था) शायद इसका कोई और तरीका भी हो, इसलिए संदर्भ के लिए यह लिंक छोड़ रहा हूँ: Stack Overflow लिंक कुल मिलाकर, अगर documentation अच्छी हो तो PCIe bring-up प्रक्रिया में error reporting बहुत उपयोगी होती है
अगर आपके पास FT2232H adapter है (या नहीं है तो एक खरीदने की सलाह दूँगा), तो इसे flash करके Vivado के साथ आसानी से compatible बनाया जा सकता है संदर्भ: Vivado FTDI Device Programming गाइड
हमारी कंपनी में हम FT2232H के हमेशा 20-30 units stock में रखते हैं GPIO, I2C, SPI, parallel FIFO जैसे कई protocols को support करता है, इसलिए बहुत उपयोगी है और pyFTDI Python library शानदार है
यह adapter मेरे पास दूसरे project से बचा हुआ है, लेकिन मैंने कभी FPGA का काम नहीं किया Vivado compatible होने का व्यावहारिक मतलब क्या है, यही जानना चाहता हूँ क्या इसका मतलब AMD FPGA को configure किया जा सकता है, या कुछ और?
Alibaba का database क्षेत्र में FPGA cluster के साथ LSM compaction को custom MySQL storage engine में handle करने वाला एक अभिनव उदाहरण याद आता है संदर्भ: संबंधित paper PDF RocksDB की तुलना में throughput और latency में बड़ा सुधार हुआ था, और कुछ workloads में यह एक स्तर ऊपर था उन्होंने इसे service के रूप में भी दिया था, लेकिन अंततः बंद कर दिया वे अभी भी इसे internally इस्तेमाल करते हैं या नहीं, पता नहीं, लेकिन यह हैरानी की बात थी कि repetitive database tasks में hardware acceleration का उपयोग करने वाली जगहें बहुत कम थीं
अगर आपको FPGA PCIe या PCI cards में रुचि है, तो इस्तेमाल किए हुए Gidel boards भी काफी मिल जाते हैं ProcSpark/ProcStar जैसी कई series हैं official software proprietary है, और FPGA कई हैं, इसलिए Quartus में सीधे इस्तेमाल करने के लिए pinout ढूँढने की मेहनत करनी पड़ती है मुझे एक ऐसा board मिला था जिसमें एक बहुत बड़ा Stratix IV लगा था Kintex UltraScale+ board इतना आकर्षक है कि यह पोस्ट मुझे बहुत प्रभावशाली लगी
अगर आप चीन में हैं, तो यही उत्पाद idlefish पर 480 युआन (लगभग 68 डॉलर) में बिक रहा है कीमत इतनी अविश्वसनीय रूप से कम है कि मैं खुद इसे आज़माने वाला हूँ
अभी तक पता नहीं कि पीछे वाले SFP connector की pinout जानकारी किसी ने निकाली है या नहीं अगर यह हिस्सा documented हो जाए और PCI-e lines भी verify हो जाएँ, तो इससे custom optical networking gear बनाना मज़ेदार हो सकता है SFP transceiver input जो मिलता है, उसे उसी तरह output कर देता है, इसलिए PCIe backplane के साथ या standalone रूप में भी दिलचस्प custom optical signal devices बनाए जा सकते हैं
क्या किसी को FPGAs पर neural networks या किसी अन्य connectionist architecture को implement करने के उदाहरण पता हैं? FPGAs की सबसे दिलचस्प बात यह है कि "custom" chips अब universities या individual लोगों की पहुँच में भी हैं ऐसे समय में जब AI का फोकस LLMs पर केंद्रित है, मुझे लगता है कि छोटे groups या individuals के पास FPGAs के साथ ज़्यादा animal-oriented bottom-up AI approaches आज़माने का अवसर है
FNAL में LHC/CMS high-energy physics experiments के inference workloads के लिए FPGA-based neural networks इस्तेमाल किए जाते हैं ऐसे उदाहरण भी हैं जहाँ microsecond स्तर पर dynamic systems को control किया जाता है संदर्भ सामग्री: HLS4ML CERN IRIS-HEP प्रस्तुति PDF Deploying tinyML on FPGAs Whitepaper NeurIPS ML4PhysicalSciences उदाहरण PDF
"FPGAs पर neural network implement करना" से आपका मतलब inference के लिए hardware accelerator है, या पूरे network (weights सहित) को सीधे FPGA architecture में synthesize करना? किसी भी स्थिति में, FPGA पूरी तरह arbitrary logic implement नहीं करता, बल्कि limited blocks को software synthesis के नतीजे के रूप में इस्तेमाल करने वाली संरचना है LLM जैसे मामलों में, जहाँ बहुत बड़ी capacity और high-bandwidth memory चाहिए, यह उपयुक्त नहीं है FPGA में high-speed memory connect की जा सकती है, लेकिन आज के GPU उस उपयोग के लिए कहीं बेहतर हैं
differentiable logic gate networks को देखना दिलचस्प हो सकता है
संदर्भ paper: arXiv:2404.10076
समझ नहीं आता इसे इतने downvotes क्यों मिले मेरी समझ से AI को model के लिए बहुत RAM और fast RAM चाहिए, इसलिए FPGA उपयुक्त नहीं है FPGA में fast RAM जोड़ने के लिए pins होते हैं, लेकिन board design और layer traces बहुत जटिल हो जाते हैं इसलिए graphics cards कहीं ज़्यादा उपयुक्त हैं
इस AI उछाल को देखकर मुझे निजी तौर पर ऐसा लगता है
अभी भी eBay पर काफी stock है eBay लिंक लगता नहीं कि GPIO header वगैरह के रूप में बाहर निकाले गए हैं; अगर कोई अच्छी project ideas हों तो बताइए
यह बात प्रभावशाली लगी कि "board के साथ travel case आता है" सोच रहा हूँ क्यों—क्या data center में लोग इस board को बार-बार निकालकर इधर-उधर ले जाते हैं? या eBay seller ने सुरक्षा के लिए जोड़ा है?