در قسمت اول این مجموعه از مقالات، سیستم مکمل 2 را که همهی ما از دوران دانشگاه از درس مدار منطقی با آن آشنا هستیم، به خوبی واکاوی کردیم و از خاصیتی نهفته در دل این سیستم پرده برداشتیم و مفصلا توضیح دادیم که این خاصیت نهفته چه کاربردی میتواند داشته باشد. همچنین در نهایت یک مثال را در میکروکنترلر AVR که رجیسترهای این نوع از میکروکنترلرها 8 بیتی هستند، بررسی کردیم و ادعای خود مبنی بر همان خاصیت نهفته در دل سیستم متمم 2 رابه اثبات رساندیم.
در قسمت قبل یکی از دوستان با ادمین کانال تلگرام سیسوگ مرتبط شدند و اشاره کردند که اسم این خاصیت که سیستم متمم 2 را منحصر به فرد کرده است، wraparound نام دارد. بله این دوست عزیز درست فرمودند و اسم این خاصیت مهم wraparound نام دارد. اما ما چون میخواستیم همین موضوع را بیشتر توضیح داده و البته موضوعی دیگر را نیز بیان کنیم، صبر کردیم تا در این قسمت موضوعی دیگر را بیان کنیم و در قسمت بعد، از تر کیب این دو موضوع مثالی کاربردیتر و البته بسیار جذاب، برای شما ارائه بدهیم.
شاید برای شما مفید باشد: آموزش FPGA
این مقاله هم مانند مقاله قسمت قبل به نکتهای نهفته در درون اعداد اشاره میکند و یک اشتباهی که نه تنها دانشجویان، بلکه بسیاری از افراد با تجربه در حوزه الکترونیک نیز تکرار میکنند را یادآور میشود.
آیا بین کری (carry) و سرریز (overflow) تفاوتی وجود دارد؟
شاید بنا به یک دلیل بعضی افراد فکر کنند که بین این دو پارامتر هیچ تفاوتی وجود ندارد، اما این دلیل به کجا برمیگردد؟ اگر به خاطر داشته باشید اولین بار در درس مدار منطقی سیستم اعداد بدون علامت به ما آموخته شده است، در این سیستم هیچ تفاوتی بین کَری و سرریز وجود نداشت و میگفتیم هر موقع کری داشته باشیم سرریز رخ داده است یا اینکه کری و سریز یکی هستند. بعد از آن، سیستم علامت و مقدار و بقیهی سیستمهای علامتدار به ما آموخته شد، مسئله همینجا پیش میآید، حال در سیستم اعداد علامتدار آیا کری و سرریز یکی هستند؟
خیر، در سیستم اعداد علامتدار کری و سرریز یکی نیستند و شاید دلیل این اشتباه که بعضی از افراد فکر میکنند در سیستم اعداد علامتدار این دو پارامتر یکی هستند این باشد که هنگامی که درس مدار منطقی را میگذراندند، وقتی از سیستم اعداد بدون علامت گذر کردند و به سیستم اعداد علامتدار رسیدند، به آنها تعریف جدید گفته نشد و همان تعریف قبلی را به سیستم اعداد علامتدار نیز تعمیم دادند که خود اشتباه است و یا اگر گفته شد خیلی سطحی و سرسری بیان شد، چون اگر این موضوع به خوبی بیان میشد و گفته میشد که چه کاربردی دارد، تقریبا محال ممکن است که افراد به اشتباه فکر کنند در سیستم اعداد علامتدار هم کری وسرریز یکی هستند.
رابطه بین کری و سرریز در سیستم اعداد متمم 2
برای اینکه بتوانیم این موضوع را در سیستم اعداد علامتدار شرح بدهیم، سیستم متمم 2 که تا به امروز بهترین و بهینهترین سیستم شناختهشده در نمایش اعداد در دیجیتال میباشد را انتخاب کردیم. در سیستم اعداد متمم 2، در رابطه با کری و سرریز، چهار حالت ممکن است به وجود بیاید که به تشریح هر کدام از این حالتها به صورت دقیق خواهیم پرداخت. اما قبل از آن اجازه بدهید به تنها حالت ممکن که در سیستم اعداد بدون علامت وجود دارد بپردازیم.
کری و سرریز در اعداد بدون علامت
فرض کنید میخواهیم دو عدد بدون علامت 3 بیتی را با هم جمع کنیم، اعداد 4+ و 5+ را در نظر میگیریم. طبق تصویر زیر آنها را با هم جمع میکنیم.
همانطور که از تصویر بالا مشخص است چون جمع نهایی در محدوده نبوده است، سرریز رخ داده است و بیت کری هم داریم.
حال با این توضیحات سراغ مثالهایی در سیستم متمم 2 میرویم تا نشان دهیم که وجود یا عدم وجود کری به هیچ وجه نمیتواند نشاندهندهی وجود سرریز باشد.
در مثالهای زیر ما عرض بیت را 3 بیت تعیین کردیم، یعنی محدوده اعدای که با این تعداد بیت میتوانیم نمایش بدهیم از 4- تا 3+ میباشد.
نه کری داریم و نه سرریز رخ داده است
خب در این حالت اتفاق خاصی نیفتاده است و دو عدد طبق روال معمول باهم جمع شدهاند.
کری داریم ولی سرریز رخ نداده است
در تصویر بالا کری وجود دارد، اما همانطور که گفتیم صرفا وجود کری نمیتواند مشخص کند که سرریزی رخ داده است یا خیر.
کری نداریم اما سرریز رخ داده است
در تصویر بالا کری وجود ندارد، اما میدانیم که جمع این دو عدد در محدودهی قابل نمایش توسط 3 بیت نمیگنجد و سرریز رخ داده است.
هم کری داریم و هم سرریز رخ داده است
در تصویر بالا کری وجود دارد، سرریز نیز رخ داده است، این حالت مشابه با اعداد بدون علامت میباشد که وجود کری مشخصکنندهی رخ دادن سر ریز است. اما در نظر بگیرید که این حالت، فقط یک حالت از چهار حالت ممکن میباشد و صرفا وجود کری نمیتواند مشخص کند که سرریز رخ داده است یا خیر.
پس تا اینجا متوجه شدید که جز در حالتی خاص کری و سرریز هیچ ارتباطی با همدیگر ندارند و دو چیز جدا از هم هستند. اما بهتر است که دو تعریف کلی و مجزا برای این دو پارامتر ارائه بدهیم تا در فهمیدن و تشخیص این موارد دچار اشتباه و سردرگم نشویم.
اینکه چگونه کری و سرریز را تشخیص بدهیم و چه عملیاتی روی آنها انجام بدهیم تا بتوانیم سرریز را کنترل کنیم، چه مواقعی نیاز به کنترل سرریز نمیباشد و اگر نیاز است که کنترل کنیم با چه روشهایی و چگونه میتوانیم سر ریز را کنترل کنیم، روشهای wrapping و saturation در کنترل سرریز چیست و کلی سوال دیگر از جمله سوالاتی هستند که هم در قسمت سوم پاسخ داده خواهند شد و هم اینکه به صورتی عملی همراه با مثال روی میکروکنترلر یا fpga تست خواهند شد.
سلام
بسیار عالی بود
حیف قسمت سوم نیومد
سلام.
این سبک مقالات را چون خودم خیلی علاقه داشتم و در کل فکر میکنم ارزش هر علمی از جمله برنامهنویسی به درک عمیق جزئیات هستش و نه به کار بردن کلیات، شروع به نوشتن کردم. اما خب دیدم به کار کسی نمیاد و استقبالی هم نشد دیگه ادامه ندادم.
با عرض سلام و خسته نباشید
خیلی ممنون از آموزش های خوبتون
ما که دوس داریم این مطالب رو و خیلی هم پیگیریم
اگه ادامه بدین خیلی ممنون میشیم
با سلام
مطالب منتشر شده در قسمت آموزش FPGA بسیار نزدیک به آموزش های آموزشگاه فراد اندیش است (حتی ترتیب بیان مطالب) و احساس کپی برداری صد در صدی به خواننده دست می دهد. این در حالی است که به احتمال زیاد، موسس آموزشگاه (آقای ثقفی)، شرعا و قانونا مخالف این روند هستند و از دانش آموختگان دوره طراحی دیجیتال با FPGA ، خواهش اخلاقی مبنی بر عدم کپی برداری کرده بودند.
ای کاش رعایت اصل کپی رایت را فدای آموزش های رایگان و مفید نکنیم.
با تشکر
سلام دوست عزیز
انتقاد شما کاملا به جا و منطقی هست و اتفاقا دوست دیگه ای هم چنین انتقادی را داشتند
پیرو این انتقاد و اینکه نویسنده این مطالب نیز از شاگردان جناب مهندس ثقفی هستند با ایشون مرتبط شدند و در مورد این مطالب صحبت کردند که ایشون از اینکه یکی از شاگرداش تونست این مطالب را تا این حد عمیق یاد بگیرند و یاد بدهند خوشحال بود، اما بحث نحوه ارائه و سایر موارد انشاله برای اینکه این قضیه برای همه واضح تر بشه با ایشان مفصلا صحبت میشود و در صفحه اصلی این آموزشها این مورد بصورت واضح اورده خواهد شد.
سلام.
مطلب خوبی بود .راستش هیچوقت بهش فکر نکرده بودم .
سپاس.
سلام حسین عزیز. وجودش که تقریبا بدیهی به نظر میرسد، اما توجهای به آن نمیشود. بیشتر آشکارسازی و کنترل آن مدنظر است.
راستش به نظر میاد فقط کری به صورتی سخت افزاری قابل پیگیری هست . و سرریز برای اعداد علامتدار بیشتر یک چیز ذهنی باشه ( چون اساسا اعداد منفی مکمل 2 قرار داد ذهنی هستن )آیا همینطوره یا مثل کری یک بیت هست که 1 میشه؟
برای کری باید بیت n+1ام که به صورت سختافزاری وجود دارد 1 شود. به این صورتی که میفرمائید نمیتوان گفت ذهنی، نهایتا به صورت سختافزاری باید تمهیداتی برای این مورد در نظر گرفته شود، اما خب این امکان وجود دارد که بیتی 1 نشود که شما لزوما با یک شدن آن بیت سرریز را تشخیص بدهید. نه لزوما یک بیت 1 نخواهد شد.
سپاس.
???