NandGame – कंप्यूटर को शुरुआत से बनाने का तरीका
(nandgame.com)- NandGame एक शैक्षिक puzzle game है, जिसमें सरल logic parts से शुरू करके अंत में programmable computer असेंबल किया जाता है
- हर level में specification के अनुसार काम करने वाला component बनाना होता है, और तैयार किया गया part अगले चरण का building block बन जाता है
- computer architecture या software की पूर्व जानकारी की जरूरत नहीं है, और math में भी जोड़ और घटाव के स्तर तक जानना पर्याप्त है, हालांकि कुछ tasks में समय लग सकता है
- पहला task inputs
aऔरbदोनों के1होने पर ही output0देने वाले nand component को wires और relay से implement करना है - toolbox के parts को नीले area में drag करके रखा जाता है, और spacebar, arrow keys व Escape से drag और cancel को control किया जाता है
बुनियादी parts से computer तक
- NandGame बुनियादी components को जोड़कर धीरे-धीरे अधिक powerful parts बनाने और अंत में programmable computer तैयार करने के तरीके से आगे बढ़ता है
- यह कई levels में बंटा है, और हर चरण में दिए गए specification के मुताबिक काम करने वाला component बनाना होता है
- पूरा किया गया component बाद के levels में इस्तेमाल होने वाला part बन जाता है
- शुरुआत सबसे सरल logic component से होती है
जरूरी पूर्व-ज्ञान और कठिनाई
- computer architecture या software के बारे में कोई पूर्व जानकारी जरूरी नहीं है
- math में जोड़ और घटाव से अधिक की जरूरत नहीं होती
- कुछ tasks को हल करने में समय लग सकता है, इसलिए धैर्य चाहिए
पहला task: nand बनाना
- पहला task wires और relay का इस्तेमाल करके nand component implement करना है
- inputs
aऔरbको output से जोड़ना है, लेकिन circuit ऐसा बनाना होगा कि specification के मुताबिक behavior मिले 1का मतलब current flow की स्थिति है, और0का मतलब current न flow होना हैVinput हमेशा1रहने वाला constant current देता है
nand specification
nandका output तभी0होता है जब दोनों inputs1हों- सटीक input-output specification इस प्रकार है
| a | b | output |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
#操作方式
- toolbox के components को नीले area में drag करके रखा जाता है
- drag किए जा सकने वाले item को उठाने के लिए spacebar दबाएं
- drag करते समय item को arrow keys से move करें
- फिर spacebar दबाने पर वह नई जगह पर रखा जाता है, और Escape दबाने पर cancel होता है
1 टिप्पणियां
Hacker News की राय
यह गेम पसंद आया, इसलिए एक छोटा FPGA development board खरीदा और खुद अपना instruction set और soft CPU बनाकर देखा
व्यावहारिक तो नहीं था, लेकिन मजेदार exercise थी, और open source ecosystem ठीक-ठाक व कीमत कम होने की वजह से iCE40 board चुना: https://www.digikey.com/en/products/detail/lattice-semicondu...
अब शायद इससे बेहतर विकल्प भी हो सकते हैं
आम तौर पर लोग जैसे-तैसे कोई USB converter बना लेते, लेकिन Wirth ने इसे ठीक से संभालने के लिए FPGA board लिया, soft CPU बनाया, और उस पर OS, window system, language toolchain वगैरह चढ़ा दिए
इसके चलते वे hardware design app और text editor चला सके, और अपने पसंदीदा mouse के साथ और भी soft CPU designs पर experiment कर सके
इसी तरह का गेम Turing Complete खेला था, और वह वाकई मजेदार था: https://store.steampowered.com/app/1444480/Turing_Complete/
यह Nand2Tetris किताब से काफी मिलता-जुलता है
मैंने मशीन को 32-bit instructions पर upgrade कर दिया था, और उसके लिए assembly language documentation तक लिख डाली थी
अभी early access में है, फिर भी शानदार गेम है
दिखने में अच्छा, polish भी बढ़िया, और काफी addictive है
GOG पर भी है, यह अच्छी बात है: https://www.gog.com/game/turing_complete
संबंधित पोस्ट:
NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=36862274 - जुलाई 2023
NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=31055307 - अप्रैल 2022
NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=25282507 - दिसंबर 2020
Show HN: Online challenge: Build a CPU from scratch - https://news.ycombinator.com/item?id=17508151 - जुलाई 2018
वाकई मजेदार exercise है
इसे देखकर याद आया कि मैं कितना कुछ भूल चुका हूं, इसलिए थोड़ा कड़वा लगा
20 साल से भी ज्यादा पहले university में electrical engineering की थी और computer architecture में specialize किया था, लेकिन पेशेवर तौर पर उसका बिल्कुल उपयोग नहीं किया और software side में चला गया
यहां की चीजें कैसे करनी हैं, कुछ भी याद नहीं था, और trial-and-error के बाद मुश्किल से half-adder तक बना पाया
यह वैसा ही है जैसे यह याद न होने पर खुद को कोसना कि Corn Laws किसने पास किए थे, या अमेरिका में refrigerated shipping शुरू करने वाला कौन था
अगर मुख्य narrative और background समझ हो—जैसे युद्ध engineering की मांग करते हैं, agricultural revolution के बाद industrial revolution आता है, और इतिहास class struggle है—तो नई जानकारियां magnetic field में टुकड़ों की तरह अपनी जगह पर फिट होने लगती हैं
इसलिए खुद को ज्यादा मत कोसिए, अपने प्रति थोड़ा और उदार हो सकते हैं
इस गेम और Nand2Tetris course दोनों करने के बाद ही समझ आया कि दोनों एक ही computer implement करते हैं
यह गेम interactive graphical version है, जबकि original Nand2Tetris में logic gates के बीच connections click और drag करने के बजाय text HDL में लिखा जाता है
दोनों ही मजेदार और educational थे, लेकिन NandGame ज्यादा मजेदार लगा
फिर भी दोनों का संबंध पता होना अच्छा है। NandGame पूरा करने के बाद Nand2Tetris के follow-up assignments, यानी higher layers के computer software वाले काम तक आगे बढ़ सकते हैं, और दूसरा version कर चुके लोगों के साथ experience और content share करना भी आसान होता है
assignments करने के लिए मुझे university textbooks और exam papers तक फिर से खोजने पड़े, और CPU के मुख्य हिस्से को लगभग पूरा करने वाले बिंदु पर जाकर छोड़ दिया
lectures और text सच कहूं तो काफी कमी वाले लगे, और internet era में यह आम बात है या नहीं पता नहीं, लेकिन मुझे उम्मीद थी कि course और textbook कुछ हद तक self-contained होंगे
Andrew Wilkes का desktop-based LogicSimX/Logic Simulator 2: https://logicsimx.com/about/ https://andrew-wilkes.itch.io/logic-simulator-2
ठीक लगता है, लेकिन ठीक से evaluate करने जितना मैं नहीं जानता
सोचने वाली बात यह है कि अगर पहले चरण में NAND gate को असल में बनाने वाले हिस्से को छोड़ दें, तो इस प्रक्रिया के अंत में जो चीज़ निकलती है वह आखिरकार neural network जैसी ही दिखती है
एक NAND gate को व्यक्त करने के लिए 2 neurons चाहिए, n layers की गहराई, weight matrix में बहुत सारे 0, और थोड़ी-सी storage वाली संरचना जैसी लगती है
सवाल यह है: अगर सिर्फ assembly-level input/output semantics दिए जाएं, तो क्या एक खाली neural network को train करके ऐसी संरचना जैसा बनाया जा सकता है? Backpropagation तो जाहिर है नहीं चलेगा, लेकिन क्या किसी तरह की directed search संभव नहीं होगी?
3-majority gate और कई दूसरे gates इस्तेमाल किए, लेकिन एक layer से आगे backpropagation ठीक से नहीं चला, शायद bit precision कम होने की वजह से
“backpropagation के बिना training” की समस्या वाकई काफी कठिन है और आखिरकार हमने छोड़ दिया
क्या backpropagation के बिना neural network train करने का कोई अच्छा तरीका है? Information bottleneck कुछ हद तक लगता है, लेकिन neural network के बिना mutual information का आकलन करना मुश्किल है
मुझे इस क्षेत्र का कोई अनुभव नहीं है, इसलिए अच्छा होगा अगर कोई बताए कि हर component क्या करता है
relay क्या करता है,
cऔरinक्या हैं, यह समझ नहीं आ रहायह भी उलझन है कि अलग power source होने के बावजूद,
aयाbको power से जोड़कर on करने पर सिर्फ उसी से power क्यों आ जाती हैcoil (
c) में power आने पर switch की state default state से उलट state में बदल जाती हैdefault-on switch में
c = 0होने परinvalue output तक pass होती है, लेकिनc = 1होने पर coil में power आती है और switch खुल जाता है या off हो जाता हैdefault-off switch उल्टा काम करता है
ccoil है, और power मिलने पर switch को toggle करता हैinवह value है जो switch बंद होने पर गुजरती है; यहां यह 1 या 0 हैअलग power source इसलिए चाहिए ताकि दोनों input values से स्वतंत्र रूप से 1 value मिल सके
उदाहरण के लिए, अगर दोनों inputs 0 हों और फिर भी हमेशा 1 output करना हो, तो खींचने के लिए एक high value चाहिए; power वही भूमिका निभाती है
Cशायद coil या control का C होगाrelay एक mechanical switch है जिसे लोहे के core पर लिपटी coil से बना electromagnet control करता है
जब coil में current बहता है, तो वह metal spring को खींचता है, और इसके परिणामस्वरूप
inसे output तक current बहने देता है या उल्टा उसे काट सकता हैदिए गए दो तरह के relay parts इन्हीं दो actions को दिखाते हैं
वाकई शानदार। सभी को MHRD भी एक बार देखने या खेलकर देखने की सलाह दूंगा
https://store.steampowered.com/app/576030/MHRD/
अच्छा लग रहा है। अफसोस है कि किताब को आखिर तक नहीं कर पाया, और इसे और ज्यादा आज़माना चाहता हूं