Computer Architecture
& Verilog HDL
তোমার পুরো lecture টা এখানে — diagram, code, বাংলা explanation, আর exam practice সব একসাথে। Lecture দেখতে দেখতে এটা খোলা রাখো।
Lecture 1 (logic gates, transistor context) recommended.
Why do we need HDL? কেন HDL দরকার?
Before learning Verilog, we need to understand the PROBLEM it solves. Your lecture starts here.
আগের দিনে engineers দুইভাবে circuit design করত। তোমার lecture এর slide 2 এ এই দুইটার কথা আছে:
🔌 Gate Level Design (LogiSim)
প্রতিটা AND, OR, NOT gate হাতে আঁকতে হতো। ছোট circuit এর জন্য ঠিকই আছে — কিন্তু বড় circuit এ হাজার হাজার gate!
একটা calculator বানাতে হলে হাজারো gate। হাতে আঁকলে কত সময় লাগবে? ভুল হলে খুঁজে বের করা আরো কঠিন।
📐 Schematic Design (PSpice)
Computer software দিয়ে circuit আঁকা হতো। কিছুটা ভালো — কিন্তু তবুও একটা একটা করে component বসাতে হয়। Complex design এ scale করে না।
40 million transistor এর chip কি এভাবে আঁকা সম্ভব? একদমই না।
From Lecture 1 you know Moore's Law and transistor counts. তোমার lecture এ দুইটা processor compare করা হয়েছে। এটা দেখো — এটাই বোঝায় কেন HDL এত জরুরি:
Intel 4004 Processor (1971)
2,300 transistor এখনো হাতে design করা possible ছিল — কিন্তু অনেক কষ্টের।
Intel P4 Processor (2000)
40 million transistor! হাতে আঁকা কল্পনাতেও সম্ভব না।
মাত্র ৩০ বছরে transistor সংখ্যা ২,৩০০ থেকে ৪ কোটিতে চলে গেছে। এই জটিলতা সামলানোর জন্যই HDL এসেছে। Verilog দিয়ে তুমি code লিখবে, আর computer সেটাকে hardware circuit এ convert করবে — ঠিক যেমন C++ code কে computer executable এ convert করে!
System Design Pyramid
Hardware design হয় বিভিন্ন level এ। Pyramid দিয়ে সেই levels বোঝানো হয়।
⬆ More Abstract | More Physical ⬇
Physical chip এর actual material। Transistor বানানোর raw layer। তুমি এটা নিয়ে কাজ করবে না।
Transistor গুলো কীভাবে connect → বিদ্যুৎ প্রবাহ। Resistor, Capacitor ইত্যাদি।
AND, OR, NOT — Logic gates। এই level এ Verilog এর gate-level modeling কাজ করে।
Flip-flops, Registers — Data store করতে পারে। Verilog এর behavioral modeling এখানে।
Multiple components মিলে একটা chip (যেমন CPU)।
পুরো computer system — CPU, RAM, I/O সব মিলিয়ে।
Verilog দিয়ে তুমি যেকোনো level এ design করতে পারো। Lecture এর pyramid এ দেখো — Structure side এ Verilog আছে, মানে Verilog দিয়ে gate থেকে শুরু করে পুরো system পর্যন্ত describe করা যায়। তোমার course এ মূলত Gate এবং Register level নিয়ে কাজ করবে।
Gate Level
AND, OR, NOT gate এর instance create করো। Pyramid এর GATE level।
Dataflow (assign)
Boolean equations দিয়ে। তোমার lecture এর main focus। সবচেয়ে বেশি ব্যবহার হয়।
Behavioral (always)
if/else, case দিয়ে behavior describe করো। REGISTER level এবং উপরে।
Two HDL Languages: Verilog vs VHDL
তোমার lecture এ দুইটা HDL compare করা হয়েছে। আমরা Verilog শিখছি।
| Feature | ⚡ Verilog | 🏛️ VHDL |
|---|---|---|
| Full Name | Verilog HDL | VHSIC Hardware Description Language |
| Syntax feels like | C / C++ — তোমার জানা! | Ada / Pascal — কঠিন |
| Ease of learning | ✅ সহজ | ❌ কঠিন |
| Popular where | North America, Asia (তোমার region!) | Europe (academia তে বেশি) |
| Lower-level design | ✅ খুব ভালো (lecture অনুযায়ী) | তুলনামূলক দুর্বল |
| Simulation speed | ✅ দ্রুত | ধীর |
| Industry use | ✅ ASIC design এ dominant | Academic এবং European industry |
| তোমার course | ✅ এটা শিখবে | ❌ এই course এ না |
- Verilog এর syntax C এর মতো — তুমি C++ জানো, তাই তোমার জন্য অনেক সহজ হবে
- Lecture এ বলা হয়েছে Verilog "results in fast simulations, relatively simple, easy in first contacts" — মানে শিখতে সহজ
- VHDL "also difficult, complex character" — আমাদের দরকার নেই এখন
- Verilog North America এবং Asia তে most popular — তোমার job market এর জন্যও কাজে লাগবে
The Module Interface: Port List & Port Declaration
এটা Verilog এর সবচেয়ে গুরুত্বপূর্ণ concept। প্রতিটা hardware component কে "module" হিসেবে লেখা হয়।
C++ (তুমি জানো):
Verilog (শিখছো):
-
class=module— একটা component কে define করে -
C++ এর parameter = Verilog এর
input/outputports -
C++ এর
return= Verilog এরoutputwire
তোমার lecture এ ALU (Arithmetic Logic Unit) এর module interface দেখানো হয়েছে। এটাই lecture এর exact code:
Port List (প্রথম line এ): module এর নাম এবং সব
ports এর নাম একসাথে লেখা →
module ALU (Result, Equal, Cout, In1, In2, ...)
Port Declaration (ভেতরে): প্রতিটা port কি
input নাকি output, আর কত bit সেটা
declare করো → output [3:0] Result;
মনে রাখো: Port list এ নাম, declaration এ type। দুইটাই লাগবে, একটা বাদ দিলে error।
wire — Physical তার
Hardware এর actual wire এর মতো। কোনো value নিজে store করে না —
শুধু signal বহন করে। assign statement এর সাথে
ব্যবহার হয়।
তার = wire। তার কারেন্ট store করে না, বহন করে। input/output by default wire type।
reg — Register (Store করে)
Value store করে রাখতে পারে। always block এর ভেতরে
যে signals assign হয় তারা reg type হতে হবে।
reg = register = ছোট memory। Clock এর সাথে update হয়। Sequential circuit এ দরকার।
Logic Gates — Hardware এর LEGO Blocks
From Lecture 1 you know AND, OR, NOT, NAND, NOR. Here we describe them in Verilog.
Lecture এর full adder বোঝার আগে এই ৫টা gate ভালো করে বুঝতে হবে। প্রতিটা দেখো, truth table মুখস্থ করো।
কী করে?
দুইটা input নেয়। Output 1 হয় শুধুমাত্র যখন দুইটাই 1। একটাও 0 হলে output 0।
AND = "এবং" — "A এবং B দুটোই সত্য হলে Y সত্য।" যেমন: বৃষ্টি আসে এবং ছাতা নেই → ভিজবো।
Truth Table
| A | B | Y = A & B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 ← only here! |
কী করে?
Output 1 হয় যখন যেকোনো একটা বা উভয় input 1 হয়। শুধু দুইটাই 0 হলে output 0।
OR = "অথবা" — "A অথবা B যেকোনো একটা সত্য হলেই Y সত্য।"
Truth Table
| A | B | Y = A | B |
|---|---|---|
| 0 | 0 | 0 ← only here 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
একটাই input। Output সবসময় উল্টো।
NOT = "না" — A সত্য হলে Y মিথ্যা। A মিথ্যা হলে Y সত্য।
| A | Y = ~A |
|---|---|
| 0 | 1 |
| 1 | 0 |
Output 1 যখন inputs আলাদা। দুটো same হলে 0।
XOR = "ভিন্নতা detector" — inputs আলাদা → 1, একই → 0।
Full Adder এ XOR দিয়ে Sum বানানো হয়!
| A | B | Y = A ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 ← different |
| 1 | 0 | 1 ← different |
| 1 | 1 | 0 |
& = AND | | = OR
| ~ = NOT | ^ =
XOR | ~^ বা ^~ = XNOR
One-bit Full Adder — তোমার Lecture এর Main Example
এটা তোমার lecture এর সবচেয়ে important circuit। ভালো করে বোঝো — 4-bit adder বানাতে এটাই 4 বার ব্যবহার হবে।
Problem: দুইটা single-bit binary number যোগ করতে হবে, সাথে আগের ঘর থেকে আসা carry।
মনে করো তুমি হাতে 1 + 1 যোগ করছো binary তে:
A = 1
+ B = 1
─────────
Sum = 0 (কারণ 1+1=10 binary তে, unit digit = 0)
Cout = 1 (carry = 1, পরের ঘরে যাবে)
Cin হলো আগের ঘর থেকে আসা carry। Full Adder তিনটা জিনিস যোগ করে: A + B + Cin।
Ports বুঝি:
| A | B | Cin | Sum | Cout | Decimal: A+B+Cin |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0+0+0 = 0 |
| 0 | 0 | 1 | 1 | 0 | 0+0+1 = 1 |
| 0 | 1 | 0 | 1 | 0 | 0+1+0 = 1 |
| 0 | 1 | 1 | 0 | 1 | 0+1+1 = 2 = 10₂ |
| 1 | 0 | 0 | 1 | 0 | 1+0+0 = 1 |
| 1 | 0 | 1 | 0 | 1 | 1+0+1 = 2 = 10₂ |
| 1 | 1 | 0 | 0 | 1 | 1+1+0 = 2 = 10₂ |
| 1 | 1 | 1 | 1 | 1 | 1+1+1 = 3 = 11₂ |
Highlighted rows গুলো দেখো — Sum=1 কারণ result এর unit digit 1। যখন যোগফল ≥ 2 (binary 10), তখন Sum=0 এবং Cout=1 (carry হয়)।
এই exact code তোমার lecture এ আছে। প্রতিটা line বোঝো:
Sum equation দেখতে জটিল — কিন্তু logic সহজ। Truth table থেকে Sum=1 হওয়ার সব row গুলো OR করা হয়েছে:
-
(A & B & Cin)→ row: A=1, B=1, Cin=1 → Sum=1 ✓ -
(~A & ~B & Cin)→ row: A=0, B=0, Cin=1 → Sum=1 ✓ -
(~A & B & ~Cin)→ row: A=0, B=1, Cin=0 → Sum=1 ✓ -
(A & ~B & ~Cin)→ row: A=1, B=0, Cin=0 → Sum=1 ✓
এই pattern কে Sum of Products (SOP) বলে — "যে যে conditions এ output 1, সেগুলো AND করো, তারপর সব OR করো।"
A, B, Cin এর value দাও, দেখো Sum আর Cout কী হয়:
Four-bit Adder — Module Reuse & Structural Modeling
এখানে একটা নতুন concept — আগে বানানো module কে বারবার ব্যবহার করা। ঠিক C++ এ class instance তৈরির মতো।
কল্পনা করো একটা কারখানায় ৪টা worker আছে। প্রথম worker কাজ করে, তার output দ্বিতীয়কে দেয়, দ্বিতীয় তৃতীয়কে, এভাবে চলে। চার-bit adder এ carry ঠিক এভাবে FA1 থেকে FA2, FA2 থেকে FA3, FA3 থেকে FA4 তে যায়।
-
input [3:0] A— 4-bit input। A[3] হলো MSB (বাম দিক), A[0] হলো LSB (ডান দিক) -
wire C0, C1, C2— FA গুলোর মধ্যে carry বহন করার জন্য internal wires। এগুলো বাইরে থেকে দেখা যায় না। -
full_adder FA1(...)— এটা C++ এFullAdder fa1 = new FullAdder()এর মতো! Module এর একটা instance তৈরি করছি। -
Port connection order:
full_adder(A, B, Cin, Sum, Cout)এই order অনুযায়ী values দিতে হয় - FA1 এর Cout (C0) যায় FA2 এর Cin হিসেবে — এটাই "carry ripple"
full_adder FA1(A[0], B[0], Cin, Sum[0], C0) — এখানে
পঞ্চম argument C0 হলো Cout, Cin না। Module definition এর order
মিলিয়ে দেখো।
- N-bit bus =
[N-1 : 0] - 4-bit =
[3:0]→ A[3], A[2], A[1], A[0] -
8-bit =
[7:0]→ 256 possible values (0 to 255) - 16-bit =
[15:0]→ 65536 possible values
Exam Practice — Code পড়া ও লেখা
তোমার instructor দুই ধরনের question করতে পারেন। দুইটাই practice করো।
❓ এই code টা কী করছে? Truth table বানাও।
"Design a 2-to-1 Multiplexer with inputs A, B (data) and Sel (select). When Sel=0 output Y=A, when Sel=1 output Y=B."
❓ If A=4'b0011 (3) and B=4'b0101 (5), Cin=0, what are Sum and Cout?
Quiz — নিজেকে Test করো
Lecture শেষ হলে এই quiz দাও। সব ঠিক হলে তুমি ready!