ساخت یک Datapath: اتصال رجیسترها، حافظه، و ALU

یک datapath مدار فیزیکی است که داده را در طول اجرای یک دستور از میان پردازنده حرکت می‌دهد. این مقاله بلوک‌های سازنده اساسی سخت‌افزاری مورد نیاز برای fetch، decode، و اجرای دستورات را تجزیه می‌کند، و نشان می‌دهد آن‌ها چگونه به‌هم سیم‌کشی می‌شوند تا یک datapath پردازنده کارآمد، هرچند ساده‌شده، تشکیل دهند.

Datapathپردازنده, واکشی دستور,فایل رجیستر

~4 min read · Updated Sep 6, 2026

یک Datapath واقعاً چه کاری انجام می‌دهد

یک Datapath مجموعه‌ای از واحدهای عملکردی و اتصالات مسئول جابه‌جایی و تبدیل داده در حین اجرای یک دستور است. ساخت آن نیازمند شناسایی عناصر سخت‌افزاری ضروری در ابتدا، سپس اتصال آن‌ها به‌گونه‌ای است که داده برای هر نوع دستوری که پردازنده باید پشتیبانی کند، به‌درستی جریان یابد.

بلوک‌های سازنده اصلی

تعداد کمی مؤلفه ضروری بارها در سراسر datapath ظاهر می‌شوند.

  • Program Counter (PC) رجیستری است که آدرس حافظه دستوری که در حال حاضر اجرا می‌شود را نگه می‌دارد.
  • Instruction Memory دستورات برنامه را ذخیره می‌کند و با استفاده از PC برای واکشی دستور بعدی برای اجرا خوانده می‌شود.
  • Register File مجموعه کوچک و سریع رجیسترهای همه‌منظوره است، که اجازه می‌دهد دو رجیستر خوانده شوند و یکی در طول یک دستور واحد نوشته شود.
  • ALU (Arithmetic Logic Unit) عملیات‌های محاسباتی و منطقی، مانند جمع یا مقایسه، را روی مقادیری که دریافت می‌کند انجام می‌دهد.
  • Data Memory از حافظه دستور جداست و فقط توسط دستورات load و store برای خواندن یا نوشتن مقادیر داده دسترسی‌پذیر است.

واکشی دستور بعدی

هر سیکل دستور به همان شکل شروع می‌شود: مقدار فعلی PC برای خواندن دستور بعدی از حافظه دستور استفاده می‌شود، و هم‌زمان، یک جمع‌کننده کوچک PC را به‌اندازه یک مقدار ثابت افزایش می‌دهد تا به دستور بعدی اشاره کند، مگر اینکه یک branch یا jump این را بعداً در همان سیکل تغییر دهد.

PC → Instruction Memory → دستور واکشی‌شده
PC → Adder (+4 یا +عرض دستور) → مقدار PC بعدی

اجرای یک دستور محاسباتی

برای یک دستور محاسباتی ساده مانند add، datapath دو مقدار رجیستر منبع را از فایل رجیستر می‌خواند، آن‌ها را به ALU برای محاسبه نتیجه تغذیه می‌کند، و آن نتیجه را دوباره در رجیستر مقصد در فایل رجیستر می‌نویسد.

اجرای یک دستور انتقال داده

یک دستور load یا store مسیری مشابه اما متمایز را دنبال می‌کند. ALU نه برای محاسبه یک نتیجه محاسباتی نهایی، بلکه برای محاسبه یک آدرس حافظه با جمع کردن مقدار رجیستر پایه با یک آفست استفاده می‌شود. برای یک load، این آدرس برای خواندن یک مقدار از حافظه داده استفاده می‌شود، که سپس در فایل رجیستر نوشته می‌شود؛ برای یک store، مقداری که از فایل رجیستر خوانده شده در آن آدرس محاسبه‌شده در حافظه داده نوشته می‌شود.

اجرای یک دستور شاخه

یک دستور شاخه شرطی دو مقدار رجیستر را می‌خواند، آن‌ها را با استفاده از ALU مقایسه می‌کند، و از نتیجه آن مقایسه برای تصمیم‌گیری اینکه آیا مقدار PC بعدی باید آدرس پی‌درپی معمولی باشد یا یک آدرس جدید محاسبه‌شده از آفست مقصد شاخه، استفاده می‌کند.

چرا مالتی‌پلکسرها مورد نیازند

انواع مختلف دستورات نیاز دارند داده را به روش‌های متفاوتی از میان datapath مسیریابی کنند — یک دستور محاسباتی یک نتیجه ALU را دوباره در یک رجیستر می‌نویسد، در حالی که یک دستور load به‌جای آن یک مقدار خوانده‌شده از حافظه را می‌نویسد. Multiplexers، که با سیگنال‌های استخراج‌شده از دستور در حال اجرا کنترل می‌شوند، مشخص می‌کنند کدام منبع داده باید در هر نقطه اتصال استفاده شود، که اجازه می‌دهد همان سیم‌های فیزیکی و واحدهای عملکردی به چند نوع دستور خدمت کنند.

از بلوک‌های سازنده تا یک Datapath کارآمد

هیچ‌کدام از این مؤلفه‌های منفرد به‌تنهایی کار معناداری انجام نمی‌دهد. ارزش آن‌ها از نحوه اتصال آن‌ها به یکدیگر می‌آید، با سیگنال‌های کنترلی که داده را در مسیر درست برای هر نوع دستور هدایت می‌کنند — پایه‌ای که بخش بعدی روی آن می‌سازد تا دقیقاً تعریف کند این سیگنال‌های کنترلی چگونه تولید می‌شوند.

Written & researched by Dr. Shahin Siami

Related Articles

تصورات غلط رایج درباره محاسبات موازی و درس‌های نهایی کتاب

پس از پوشش هر چیزی از موازی‌سازی سطح رشته تا محاسبات در مقیاس انبار، ارزش دارد تصورات غلط پایداری درباره سیستم‌های موازی که حتی مهندسان باتجربه هم گاهی به آن‌ها دارند را اصلاح کنیم. این مقاله به مغالطات رایج درباره مقیاس‌پذیری و سخت‌افزار موازی می‌پردازد، سپس فصل پردازش موازی را با پیوند دادن مسیر کامل از یک دستور منفرد تا یک ساختمان پر از ماشین‌های همکار به پایان می‌رساند.

Continue

واقعیت‌های عملی: بنچمارک CPU در مقابل GPU و ضرب ماتریس چندپردازنده‌ای

مقایسه منصفانه یک CPU و یک GPU نیازمند مدلی است که هم توان عملیاتی محاسباتی و هم محدودیت‌های پهنای باند حافظه را با هم در نظر بگیرد. این مقاله مدل roofline مورد استفاده برای مقایسه سخت‌افزار واقعی مانند Intel Core i7 و NVIDIA Tesla GPU را معرفی می‌کند، سپس نشان می‌دهد ضرب ماتریس چگونه در سراسر چند پردازنده تسریع می‌شود، به‌عنوان کاربرد عملی نهایی مفاهیم موازی این فصل.

Continue

بنچمارک کردن چندپردازنده‌ها و مدل‌سازی کارایی موازی

سنجش کارایی یک سیستم موازی نیازمند ابزارها و سنجه‌های متفاوتی نسبت به سنجش یک پردازنده تک‌هسته‌ای است. این مقاله بنچمارک‌های تخصصی مورد استفاده برای ارزیابی سیستم‌های چندپردازنده را پوشش می‌دهد، توضیح می‌دهد چگونه رفتار مقیاس‌پذیری را با افزودن پردازنده‌های بیشتر مدل‌سازی کنیم، و قانون آمدال را در زمینه سنجش کارایی دنیای واقعی بازبینی می‌کند.

Continue

شبکه‌سازی کلاستر: ارتباط با دنیای بیرون

یک کلاستر از ماشین‌ها فقط زمانی مفید است که بتواند به‌طور کارآمد هم داخلی و هم با دنیای بیرون ارتباط برقرار کند. این مقاله لایه‌های شبکه‌سازی درگیر در ارتباط کلاستر، مبادلات بین تأخیر و پهنای باند در مقیاس، و اینکه کلاسترها چگونه به شبکه‌های خارجی و کاربران متصل می‌شوند را پوشش می‌دهد.

Continue

کلاسترها، کامپیوترهای در مقیاس انبار، و توپولوژی‌های شبکه

فراتر از یک تراشه واحد، موازی‌سازی به کل ساختمان‌های پر از کامپیوترهای مستقلی که با هم کار می‌کنند گسترش می‌یابد. این مقاله گذار از چندپردازنده‌سازی حافظه مشترک به کلاسترهایی از ماشین‌های جداگانه را توضیح می‌دهد، مفهوم محاسبات در مقیاس انبار را معرفی می‌کند، و توپولوژی‌های شبکه که این ماشین‌های مستقل را به‌طور کارآمد متصل می‌کنند را پوشش می‌دهد.

Continue

مقدمه‌ای بر GPU: موازی‌سازی عظیم برای بارهای کاری سنگین از نظر داده

یک GPU ایده SIMD که پیش‌تر در این مجموعه پوشش داده شد را به یک مقیاس افراطی می‌برد، و هزاران رشته سبک را به‌طور هم‌زمان اجرا می‌کند تا حجم عظیمی از داده مستقل را پردازش کند. این مقاله توضیح می‌دهد چرا GPU ها از نظر معماری این‌قدر با CPU متفاوت‌اند، مدل اجرای رشته آن‌ها چگونه کار می‌کند، و چه نوع بارهای کاری بیشترین بهره را از این طراحی می‌برند.

Continue