5.1.4 · D2 · HinglishInstruction Set Architecture (ISA)

Visual walkthroughRegister file organization

2,702 words12 min read↑ Read in English

5.1.4 · D2 · Hardware › Instruction Set Architecture (ISA) › Register file organization

Shuru karne ke liye sirf teen plain-word ideas chahiye, toh aao unhe ek baar naam dein:


Step 1 — Ek storage cell (the atom)

KYA HAI. Hum sab se chhote possible piece se shuru karte hain: ek single box jo ek bit yaad rakhti hai. Hardware mein yeh box ek D flip-flop hota hai. Iske paas ek data-in wire hoti hai, ek data-out wire hoti hai, aur ek clock tick hoti hai jo use batati hai "ab, data-in par jo bhi hai use capture karo aur pakad lo."

YAHAAN SE KYU shuru karein? Kyunki ek register file kuch nahi hai sirf inhi boxes ka ek bada grid. Agar tum ek box samajhte ho aur yeh (a) andar dekhna aur (b) use badalna, toh tum poori file samajhte ho — baki sab kuch sirf yahi ek saath bahut saare boxes ke liye karna hai.

PICTURE. Figure mein ek cell dikhaya gaya hai. Green arrow data hai jo clock edge par andar aa raha hai; orange arrow woh value hai jo bahar padhi ja rahi hai. Chhota triangle clock input mark karta hai — ise box ki heartbeat samjho.

Figure — Register file organization

Step 2 — Cells ko ek register mein stack karo (width )

KYA HAI. Ek box ek bit rakhta hai, lekin hum poore numbers par compute karte hain. Toh hum boxes side by side rakhte hain aur unhe ek shared clock aur ek shared write-enable line dete hain. Woh bundle ek single register hai: bits jo saath mein update hote hain.

KYUN. Ek -bit number bits hai jo ek unit ke roop mein store aur fetch hone chahiye — tum kabhi nahi chahoge ki number ka aadha update ho. Ek enable line share karna guarantee karta hai ki saare bits ek hi tick par capture karein, ya koi bhi na kare.

PICTURE. Neechey, Step 1 ke cells ek row mein draw kiye gaye hain. Upar ki single teal wire shared write-enable hai; jab yeh clock tick par hoti hai, saare boxes ek saath apna input latch karte hain.

Figure — Register file organization

Upar har symbol: = width (ek number mein kitne bits); "cell" = Step 1 ka single box; product ka matlab hai "ek register un copies hai us box ki jo ek enable se wired hain".


Step 3 — Registers ko file mein stack karo ( rows)

KYA HAI. Ab un registers ko vertically stack karo. Woh grid hi register file hai: rows, har ek bits wide.

number kyun? Kyunki hum har row ko ek -bit address se naam denge, aur ek -bit binary number exactly alag-alag rows ko point kar sakta hai — na zyada, na kam. ko power of two chunna matlab koi bhi address waste nahi jaata. Agar hai, toh rows hain, jo exactly common case hai.

PICTURE. Ek grid: rows registers hain (labelled R0, R1, ... R), columns bit positions hain. Storage boxes ki total number poora grid hai.

Figure — Register file organization

= kitni rows; = address mein kitne bits hain jo row pick karta hai; = grid mein har ek box. ke liye yeh state boxes hain.


Step 4 — Reading: ek wire par EK row pick karo (the MUX)

KYA HAI. Hamare paas rows hain lekin ALU ek baar mein ek read wire par sirf ek hi dekh sakta hai. Humein ek gadget chahiye jo ek address le aur matching row ka output us wire par select kare. Woh gadget ek multiplexer (MUX) hai: ek many-in, one-out switch jo address se steer hota hai.

MUX kyun aur kuch nahi? Read problem ki shape hi yahi hai ki "diye gaye candidates aur ek chosen index mein, chosen wala single output wire par daalo." Yeh sentence MUX ki definition hai. Hum MUX ke liye pahunchte hain kyunki problem literally "ek wire par kai mein se ek select karo" hai — koi aur block exactly yeh nahi karta. -bit address se steer hone wala -to- MUX poora kaam karta hai.

PICTURE. Figure mein saare row-outputs ek bade trapezoid (MUX) mein enter karte dikhaye gaye hain. Ek plum-coloured -bit address narrow side mein enter karta hai aur exactly ek input ko seedha single read port wire par, right side par, steer karta hai. Highlighted path follow karo: sirf addressed row output tak pahuncha hai.

Figure — Register file organization

Step 5 — Writing: ek wire ko ONE row mein wapas route karo (the decoder)

KYA HAI. Writing reading ka reverse hai: ek incoming value exactly ek chosen row mein land karni chahiye. Hum destination address lete hain, use ek decoder mein feed karte hain, aur decoder apni output lines mein se ek ko light up karta hai. Hum us line ko ek global WriteEnable ke saath AND karte hain; sirf woh row jis ki line high hai next clock tick par data capture karti hai.

Decoder + enable kyun? Write problem hai "ek wire → kai rows mein se ek", MUX ka mirror. Ek decoder ek -bit address ko lines mein turn karta hai jisme exactly ek line hot hoti hai — precisely "kaunsi row likhni hai" signal. AND-with-WriteEnable safety catch hai: koi bhi row tab tak nahi badalti jab tak hum deliberately na kahein "ab likho."

PICTURE. -bit write address ek decoder mein enter karta hai (left). Iske output lines mein se, exactly ek (highlighted orange) hai. Woh line teal WriteEnable ke saath AND hoti hai aur Step 2 ke us ek register ki cells ki shared enable ban jaati hai. Green data bus saari rows tak pahunchti hai, lekin sirf enabled row use latch karti hai.

Figure — Register file organization

Step 6 — Ek saath do read ports (MUX replicate karo)

KYA HAI. Ek real instruction add rd, rs1, rs2 ko same cycle mein dono source rows chahiye. Ek MUX humein ek cycle mein ek row deta hai, toh hum ek second independent MUX banaate hain jo same grid of cell-outputs padh raha hai, second address se steer ho raha hai. Ab rs1 aur rs2 saath bahar aate hain.

Replicate kyun, reuse kyun nahi? Ek single MUX apne output par ek cycle mein sirf ek row rakh sakta hai — use reuse karna do reads ko do cycles mein serialise kar deta, single-cycle execution khatam kar deta. Do ports matlab do alag selection paths same stored bits se. Stored boxes shared hain; sirf read machinery duplicate ki gayi hai. Yahi hai jo physically " read ports" ka matlab hai.

PICTURE. Same grid, ab iske upar do trapezoid MUXes lage hain — burnt-orange wala address A se steer hokar read port 1 deta hai, teal wala address B se steer hokar read port 2 deta hai. Dono ek saath identical cell outputs se draw karte hain.

Figure — Register file organization

= independent read MUXes ki number; = independent write decoders ki number. 2-aur-1 combo exactly 2-operand ALU op ki shape hai.


Step 7 — Ports SQUARE kyun cost karte hain (wiring picture)

KYA HAI. Ab punchline. Har read port har cell par wires bichhaata hai (taaki jo bhi row select ho use reach kar sake), aur har write port bhi yahi karta hai. Toh ek cell par cross hone wale wires ke saath badhte hain. Lekin ek port add karna har cell ko fatness bhi deta hai — use zyada word-lines (horizontal) aur zyada bit-lines (vertical) chahiye — toh har cell ki height aur width dono ke saath badhte hain. Area = height width, toh yeh ke roop mein badhta hai.

YEH KYUN MATTER KARTA HAI. Yeh square law wohi reason hai kyun register files chhoti aur kam-ported rehti hain. Yeh koi scary formula nahi hai — yeh bas "ek cell ki height aur width dono ports ke saath stretch hoti hai" hai.

PICTURE. Ek cell do baar draw ki gayi hai: left mein ke saath (thin), right mein ke saath (dono directions mein fat). Horizontal word-lines aur vertical bit-lines count ki gayi hain taaki tum dekh sako height aur width .

Figure — Register file organization

Step 8 — Degenerate row: R0 zero se hardwired

KYA HAI. Ek special row ke liye — register — hum koi bhi flip-flop nahi banaate. Iska read-MUX input simply constant se tied hai, aur iska decoder write-line disconnected chhooda jaata hai taaki writes gayab ho jaayein.

Yeh edge case kyun? Iska kuch kharcha nahi (low se tied wire free hoti hai) phir bhi har program ko constant ka permanent source milta hai. Yeh kai instructions ko us ALU mein collapse karta hai jo tumhare paas already hai: mov rd, rs ban jaata hai add rd, rs, r0; nop ban jaata hai add r0, r0, r0. Degenerate row ek feature hai, gap nahi.

PICTURE. R0 row draw ki gayi hai apne boxes grey/removed ke saath; iska MUX line se pinned hai, iska write-enable line cut hai. Iske saath ek normal row compare karo.

Figure — Register file organization

Ek-picture summary

Upar sab kuch, compressed: beech mein cells ka shared grid; do read MUXes (source addresses A, B se steer hoke) ALU ko operands nikaale de rahe hain; ek decoder + WriteEnable ALU result ko destination row mein wapas route kar raha hai; R0 low se tied. Trace green = write path, orange/teal = read paths, plum = address/steering.

Figure — Register file organization
Recall Feynman retelling — poora walkthrough plain words mein

Ek chhote se box se shuru karo jo ya yaad rakhta hai lekin sirf clock beat par change hota hai (Step 1). unhe line mein lagao aur woh saath mein ek poora number yaad rakhte hain (Step 2). un rows ko stack karo aur tumhare paas ek grid hai — numbers ki ek filing cabinet (Step 3). Ek drawer dekhne ke liye tum ek selector switch use karte ho jise MUX kahte hain; tum iska address dial karte ho aur woh ek row bahar aati hai (Step 4). Ek drawer badalne ke liye tum ek decoder use karte ho jo exactly ek drawer ki "abhi suno" line light up karta hai, aur ek master WriteEnable jo kahta hai "actually save karo" — toh sirf chosen drawer incoming value latch karta hai (Step 5). Kyunki ek normal add ko ek saath do sources chahiye, tum do selector switches banaate ho same cabinet se padhte hue, plus ek writer (Step 6). Har extra port har drawer ko dono directions mein stretch karta hai, toh cost ports ke square ke roop mein badhti hai — isliye hum kanjoos rehte hain (Step 7). Finally, drawer ke paas koi bhi boxes nahi hain: yeh bas hamesha ke liye se wired hai, free mov, nop, aur ek constant deta hai (Step 8). Final picture (Step 9) do read paths aur ek write path ko ALU se milte dikhata hai — yahi ek register file hai.


Connections


Kaun sa hardware block ek register ko bus par padhta hai, aur kyun woh block?
Ek -to-1 MUX, kyunki "ek wire par kai mein se ek select karo" MUX ki definition hai.
Write par ek register mein value kaun sa block route karta hai?
Ek -to- decoder jo WriteEnable ke saath AND hota hai, kyunki "ek wire se kai mein se ek tak" ek decoder + enable hai.
Register-file area ke roop mein kyun scale karta hai?
Ek port add karna har cell ki height aur width dono badhata hai, aur area = height × width.
R0 zero se hardwired hona free kyun hai?
Iske liye koi flip-flop build nahi hote; read line low se tied hoti hai aur writes drop ho jaate hain.