Download presentation
1
مظفر بگ محمدی بهار 94 دانشگاه ایلام
فصل 5 مظفر بگ محمدی بهار 94 دانشگاه ایلام
2
روش ما فقط از فلیپ فلاپها استفاده می کنیم.
تمام آنها با یک لبه کار می کنند. (مثلا لبه ی پایین رونده) کلاک همه یکسان است. نیازی به رسم کلاک نیست. تمام اعمال مورد نظر در یک کلاک خاتمه می یابند.
3
روش ما (ادامه...) کلاک وارد هیچ گیتی نمی شود. طراحی صحیح:
4
مسیر داده – CPI برابر 1 فرض: یعنی هر دستورالعمل در یک کلاک انجام می شود. دستورالعملها: add, sub, and, or slt, lw, sw, & beq هر دستورالعمل را جدا طراحی می کنیم. بعد همه را به هم وصل می کنیم.
5
واکشی دستورالعملها فرض کنید:
دستورالعمل را واکشی کنید، سپس PC را افزایش دهید. برای همه دستورات یکسان است. فرض کنید: PC هر سیکل به روزرسانی می شود. فعلا jump و انشعاب نداریم. بعد از انجام این دستور، دستور بعدی را واکشی می کنیم.
6
دستورالعملهای ALU and $1, $2, $3 # $1 <= $2 & $3 E.g. MIPS R-format
Opcode rs rt rd shamt function
7
دستورالعملهای load/store
lw $1, immed($2) # $1 <= M[SE(immed)+$2] E.g. MIPS I-format: Opcode rt rt immed
8
دستورالعملهای انشعاب beq $1, $2, addr # if ($1==$2) PC = PC + addr<<2 در حقیقت: newPC = PC + 4 target = newPC + addr << 2 # in MIPS offset from newPC if (($1 - $2) == 0) PC = target else PC = newPC
9
دستورالعملهای انشعاب
10
تجمیع همه
11
نمای کلی واحد کنترل دستورالعملهای تک سیکلی
مسیر داده: منطق ترکیبی، حافظه ی دستورالعملها، رجیسترها، حافظه ی داده، PC، سه حافظه ی آخر در انتهای چرخه نوشته می شود. نیاز به کنترل دارد: از منطق ترکیبی استفاده می کنیم. ورودیها: دستور العملها (خروجی واحد حافظه ی دستورالعملها) صفر (برای دستور beq) خروجیها: خطوط کنترلی مولتی پلکسرها ALUop Write-enables
12
نمای کلی واحد کنترل کنترل سریع مثال: هر واحدی به چه داده ای نیاز دارد؟
هر چه تعداد ورودیها کمتر باشد، مدار سریعتر است. مثال: کنترل کننده ی عمومی نیازی ندارد بداند که کدام ALUop اجرا می شود.
13
کنترل ALU فرض کنید ALU از جدول زیر استفاده می کند: 000 and 001 or 010
add 110 sub 111 slt (set less than) others don’t care
14
کنترل ALU ALU-ctrl = f(opcode,function) برای ساده کردن ALU-ctrl
دستورالعمل عمل کد دستورالعمل opcode بیتهای function add 000000 100000 sub 100010 and 100100 or 100101 slt 101010 lw 100011 xxxxxx sw 101011 beq 000100 ALU-ctrl = f(opcode,function) برای ساده کردن ALU-ctrl ALUop = f(opcode) 2 bits 6 bits
15
کنترل ALU ALU-ctrl = f(ALUop, function) 3 bits 2 bits 6 bits
10 add, sub, and, … 00 lw, sw 01 beq ALU-ctrl = f(ALUop, function) 3 bits 2 bits 6 bits می توان مدار مربوطه را با 5 گیت و تعدادی معکوس کننده ساخت.
16
کنترلهای عمومی R-format: opcode rs rt rd shamt function
I-format: opcode rs rt address/immediate J-format: opcode address 6 26
17
کنترلهای عمومی از instruction[25:21] به عنوان رجیستر خواندنیreg1 استفاده کنید. از instruction[20:16] به عنوان رجیستر خواندنیreg2 استفاده کنید. از instruction[20:16] در دستور load و instruction[15:11] در بقیه ی دستورات به عنوان رجیستر نوشتن استفاده کنید. از یک مولتی پلکسر استفاده کنید. از instruction[31:26] به عنوان op[5:0] استفاده کنید.
18
کنترلهای عمومی خروجیها ALU-ctrl - اسلایدهای قبلی را ببینید.
ALU src - R-format, beq vs. ld/st MemRead - lw MemWrite - sw MemtoReg - lw RegDst - lw dst in bits 20:16, not 15:11 RegWrite - all but beq and sw PCSrc - beq taken
19
کنترلهای عمومی خروجیهای عمومی
PCsrc را با موارد زیر جابجا کنید: Branch beq PCSrc = Branch * Zero چه ورودیهایی برای تعیین سیگنالهای کنترلی فوق الذکر ضروری است؟ فقط Op[5:0]
20
سیگنالهای کنترلی مورد نیاز
21
کنترلهای عمومی RegDst = ~Op[0] ALUSrc = Op[0]
Instruction Opcode RegDst ALUSrc rrr 000000 1 lw 100011 sw 101011 x beq 000100 ??? others RegDst = ~Op[0] ALUSrc = Op[0] RegWrite = ~Op[3] * ~Op[2]
22
کنترلهای عمومی اگر کل MIPS ISA را پیاده کنیم، به ساختار سازمان یافته تری نیاز داریم. تا بتوان گیتها را بین سیگنالهای کنترلی به اشتراک گذاشت. راه حل رایج: PLA کد دستورالعملهای MIPS طوری طراحی شده اند که ورودیهای PLA، مینترمها و خروجیها حداقل شوند.
23
اضافه کردن دستور Jump
24
سیگنالهای کنترلی مورد نیاز Jump
25
طراحی تک سیکلی چه مشکلی دارد؟
Instructions Cycles Program Instruction Time Cycle (code size) X (CPI) (cycle time) بحرانی ترین مسیر احتمالاً مال دستور lw است: I-mem, reg-read, alu, d-mem, reg-write دستورات دیگر سریعتر هستند: مثلاً دستورات rrr نیازی به d-mem ندارند. اگر کل ISA را پیاده کنیم تفاوت بین دستورات خیلی معنادارتر است. تقسیم اعداد اعشاری عدم وجود دستور در حافظه ی نهان (فصلهای بعدی)
26
پیاده سازی تک سیکلی راه حلها: کلاک متغییر؟ یک کلاک کوچک و ثابت
کنترل و طراحی خیلی مشکل است. یک کلاک کوچک و ثابت تعداد کلاکهای مورد نیاز هر دستور (یعنی CPI) متفاوت خواهد بود.
27
پیاده سازی چند سیکلی اما:
Clock cycle = max(i-mem, reg-read+reg-write, ALU, d-mem) از منطق ترکیبی در سیکلهای متفاوت مجددا استفاده می کنیم: یک حافظه یک ALU و عدم استفاده از بقیه ی جمع کننده ها اما: کنترل خیلی پیچیده تر خواهد بود به رجیسترهای جدیدی برای ذخیره ی نتایج نیاز داریم (مثل IR) . در سیکلهای بعدی مجددا استفاده می شود. منطقی که سیگنالها را محاسبه می کند نیز مجددا استفاده می شود.
28
یک مسیر داده چند سیکلی سطح بالا
توجه: رجیستر دستورالعمل، رجیستر داده حافظه یک حافظه که دارای باس آدرس است. یک ALU که خروجی آن در رجیستر ALUOut ذخیره می شود.
29
توضیح باس سیمها را به اشتراک می گذاریم تا تعداد سیگنالها کاهش یابند.
یک مولتی پلکسر توزیع شده داریم. چندین منبع روی یک باس هستند. باید مطمئن باشیم که در هر لحظه از زمان فقط یکی از آنها فعال هستند!
30
سیگنالهای کنترلی در طراحی چند سیکلی
31
مسیر داده ی چند سیکلی
32
گامهای طراحی چند سیکلی IR=MEM[PC] PC=PC+4 A=RF(IR[25:21])
Step Description Sample Actions IF Fetch IR=MEM[PC] PC=PC+4 ID Decode A=RF(IR[25:21]) B=RF(IR[20:16]) ALUout=PC+SE(IR[15:0]) << 2 EX Execute ALUout = A + SE(IR[15:0]) # lw/sw ALUout = A op B # rrr ALUout=A-B # beq if (zero==1) PC = ALUout # beq PC=PC[31-28]:SE(IR[26:0])<<2 # jmp Mem Memory MEM[ALUout] = B # sw MDR = MEM[ALUout] #lw WB Writeback RF(IR[15:11]) = ALUout # rrr Reg(IR[20:16]) = MDR # lw
33
کنترل طراحی چند سیکلی تابعی از Op[5:0] و حالت فعلی
به عنوان یک ماشین حالت متناهی (FSM) یا یک میکرو-برنامه یا میکرو-کد (بعدا) outputs Next State State Fn Output Fn Current state Inputs
34
ماشین حالت متناهی برای هر حالت تعریف کنید:
سیگنالهای کنترلی مورد نیاز مسیر داده در این سیکل سیگنالهای کنترلی برای تعیین حالت بعدی تمام دستورات از IF شروع می شوند. تمام دستورات بعد از خاتمه، یک IF جدید را شروع می کنند: البته قبل از آن، PC را به صورت مناسب به روز رسانی می کنند.
35
مثال چند سیکلی: and Start IF ID EX MEM WB PCWrite PCSource = 10
ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 ALUOp = 10 MemRead IorD = 1 MemWrite RegDst = 1 RegWrite MemtoReg = 0 RegDst = 0 MemtoReg = 1 Start ALUSrcA=0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCSrc = 00 ALUSrcA = 0 ALUSrcB = 11 ALUSrcB = 10 LW | SW RRR BEQ J LW SW IF ID EX MEM WB مثال چند سیکلی: and
36
مثال چند سیکلی :and
37
FSM: تخصیص حالتها تخصیص حالت باعث تبدیل حالتهای منطقی به معادل دودویی آنها می شود. اهمیت موضوع؟ اگر تخصیص حالت را درست انجام دهیم، مدار کنترلی حاصله کوچکتر خواهد بود. پیدا کردن جواب بهینه سخت است. در ماشین طراحی شده 10 حالت داریم. می توان هر یک از اعداد 0 تا 15 را به هر کدام از حالتها تخصیص داد.
38
تخصیص حالت: سیگنال RegWrite
State 0 PCWrite PCSource = 10 ALUSrcA = 1 ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 ALUOp = 10 MemRead IorD = 1 MemWrite RegDst = 1 RegWrite MemtoReg = 0 RegDst = 0 MemtoReg = 1 Start ALUSrcA=0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCSrc = 00 ALUSrcA = 0 ALUSrcB = 11 ALUSrcB = 10 LW | SW RRR BEQ J LW SW IF ID EX MEM WB State 1 State 2 State 6 State 8 State 9 State 4 State 7 State 5 State 3 State 7 (0111b) State 9 (1001b) State 4 (0100b) State 8 (1000b) Original: 2 inverters, 2 and3s, 1 or2 New: No gates--just bit 3!
39
دستور lw Start IF ID EX MEM WB PCWrite PCSource = 10 ALUSrcA = 1
ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 ALUOp = 10 MemRead IorD = 1 MemWrite RegDst = 1 RegWrite MemtoReg = 0 RegDst = 0 MemtoReg = 1 Start ALUSrcA=0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCSrc = 00 ALUSrcA = 0 ALUSrcB = 11 ALUSrcB = 10 LW | SW RRR BEQ J LW SW IF ID EX MEM WB
40
دستور lw
41
دستور sw Start IF ID EX MEM WB PCWrite PCSource = 10 ALUSrcA = 1
ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 ALUOp = 10 MemRead IorD = 1 MemWrite RegDst = 1 RegWrite MemtoReg = 0 RegDst = 0 MemtoReg = 1 Start ALUSrcA=0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCSrc = 00 ALUSrcA = 0 ALUSrcB = 11 ALUSrcB = 10 LW | SW RRR BEQ J LW SW IF ID EX MEM WB
42
دستور sw
43
دستور (beq T) Start IF ID EX MEM WB PCWrite PCSource = 10 ALUSrcA = 1
ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 ALUOp = 10 MemRead IorD = 1 MemWrite RegDst = 1 RegWrite MemtoReg = 0 RegDst = 0 MemtoReg = 1 Start ALUSrcA=0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCSrc = 00 ALUSrcA = 0 ALUSrcB = 11 ALUSrcB = 10 LW | SW RRR BEQ J LW SW IF ID EX MEM WB
44
دستور (beq T)
45
دستور (beq NT)
46
دستور j Start IF ID EX MEM WB PCWrite PCSource = 10 ALUSrcA = 1
ALUSrcB = 00 ALUOp = 01 PCWriteCond PCSource = 01 ALUOp = 10 MemRead IorD = 1 MemWrite RegDst = 1 RegWrite MemtoReg = 0 RegDst = 0 MemtoReg = 1 Start ALUSrcA=0 IorD = 0 IRWrite ALUSrcB = 01 ALUOp = 00 PCSrc = 00 ALUSrcA = 0 ALUSrcB = 11 ALUSrcB = 10 LW | SW RRR BEQ J LW SW IF ID EX MEM WB
47
دستور j
48
خلاصه پیاده سازی پردازنده پیاده سازی چند سیکلی بعدی: microprogramming
مسیر داده کنترل پیاده سازی چند سیکلی بعدی: microprogramming
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.