صورت پروژهٔ پایانی – نسخهٔ ۱٫۰ شبیهسازی مدارات منطقی ترکیبی توضیحات کلی پروژه را میتوانید در تیمهای حداکثر دونفری تهیه کنید. زمان تحویل پروژه تاریخ ۵ / ۱۵خواهد بود. لطفًا توضیحات پروژه را چندین بار بخوانید و در صورت نامفهموم بودن بخشهایی از آن ،سئوالت خود را در بخش discussion ت درس مطرح کنید. سای ِ مقدمه در این پروژه قرار است شما برنامهای بنویسید که مدارات منطقی را شبیهسازی کند .برنام ٔه شما باید قابلیت خواندن و نمایش دادن مدارهای منطقیِ ذخیره شده در فایلهای با قالب lcxرا داشته باشد .توانایی تغییر فایلهای مورد نظر به صورت گرافیکی و دادن ورودی به مدار و گرفتن خروجی از دیگر قابلیتهای برنامهٔ شماست. هر مدار منطقی به صورت یک ماژول در یک فایل ذخیره میشود که ممکن است از ماژولهای دیگر (فایلهای دیگر) در ساختار خود استفاده کند. هر ماژول تعداد مشخصی ورودی دارد و تعدادی خروجی که خروجیها به طور یکتا براساس ورودیها تعیین میشوند .چون در این پروژه تنها شبیهسازی مدارات ترکیبی مورد نظر است ،در سیمکشی مدارات دور وجود ندارد و مفهوم زمان وارد مدار نمیشود. قالب فایها با پسوند ( )lcx قالب فایلهایی که میخوانید و ذخیره میکنید به صورت سختگیرانه باید از قواعد زیر پیروی کند .چون بخشی از نمرٔه شما به تستهای کامپیوتری اختصاص دارد ،اگر از این قالب دقیقاً پیروی نکنید ،بخش زیادی از نمره را از دست خواهید داد. ● فایلهای lcxنوعی فایل متنی هستند که در آنها حرف ،عدد و علمت نوشته شده است( .با رمزگذاری )ascii ● در هر فایل دقیقًا یک ماژول ذخیره میشود .هر فایل علوه بر مشخصات ساختاری مدار (چگونه وصل شدن زیرماژولها به هم) اطلعات مورد نیاز برای رسم دقیق خود بر روی صفحه را نیز داراست. ● ل فایل And.lcxمربوط به ماژول Andاست .حرف اوّل ماژولها بزرگ و نام ماژول از روی نام فایل تعیین میشود .مث ً بقیه حرفها کوچک هستند .نام ماژول چیزی است که برای ارجاع دادن به یک ماژول استفاده میشود. ● دو نوع ماژول و بنابراین دو نوع فایل وجود دارد -۱ :ماژولهای اتمی(تجزیه ناپذیر) و -۲ماژولهای مرکب .برای ماژولهای اتمی ،دقیقًا جدول خروجی براساس انواع ورودی در فایل lcxنوشته شده است و برای ماژولهای مرکب، اطلعات چگونگی ترکیب ماژولهای دیگر و قرار گرفتن آنها کنار هم آمده است در اینجا وقتی از مختصات صحبت میکنیم ،مبدأ مختصات در گوش ٔه بال و سمت چپ قرار دارد و ( )width, heightنقطهٔ پایین و سمت راست را نشان میدهد .واحدها نیز همه نقطه ( )pixelهستند. در سطر اول فایل ابتدا عرض ( )widthو سپس طول ( )heightماژول آمده است .هر ماژول یک مستطیل با این ابعاد را اشغال میکند. از سطر دوم توضیحات مربوط به ورودیها و خروجیها شروع میشود .در یک خط جدا گانه نوشته شده IOو در خط بعد ،Nتعداد ورودیها آمده است .در Nخط بعد در هر خط ابتدا Xiو سپس Yiمربوط به ورودی iام قرار دارد .ورودیها و خروجیها حتمًا باید ل با مختصات ( )x,0یا ( ... )width, xورودی iام را با Iiنمایش روی لبههای خارجی مستطیلِ ماژول قرار داشته باشند .مث ً میدهیم و در بقیهٔ فایل با این برچسب از آن استفاده میکنیم .به این ترتیب ورودیها عبارت اند از .I0 I1 ....IN1در خط بعد Mتعداد خروجیها آمده و سپس در Mسطر مختصات خروجیها که آنها را با برچسبهای O0 – O1 .... IM1نشان میدهیم. AND.lcx 200 100 IO 2 0 30 )(I0 0 70 )(I1 1 200 50 )(O0 N حال در صورتی که فایل مربوط به یک ماژول اتمی باشد در یک سطر نوشته شده Tableو در ۲سطر در هر سطر N+M صفر و یک آمده که Nتای اول نمایندهٔ یک مقداردهی به ورودیها و Mتای دوم خروجیهای مربوط به آن ورودیها را مشخص میکند .بدیهی است تمام ۲ Nحالت ممکن در فایل وجود دارند .فایل مربوط به ماژول اتمی در همین جا به پایان میرسد. Table 0 0 0 0 1 0 1 0 0 1 1 1 اگر ماژول مورد نظر مرکب باشد ،در یک سطر نوشته شده Modulesو در سطر بعد Xکه تعداد ماژولهاست آمده است .در X خط بعدی در هر خط مشخصات یک زیرماژول آمده است .در خط iام مشخصات زیرماژول iام که با Miبرچسب گذاری ل این میشود .در این خط ابتدا نام ماژول (نوع آن) و سپس به ترتیب X1 Y1 X2 Y2آمده است که محل قرار گرفتن مستطی ِ زیرماژول را نشان میدهد .گوشهٔ سمت چپ بال در ( )X1,Y1و گوشهٔ پایین سمت راستش در ( .)X2,Y2بدیهی است ماژول مورد نظر باید از نظر عرضی ،طولی یا هر دو مقداری تغییر اندازه دهد و براساس این اندازههای جدید محل جدیدی برای ورودی و خروجیهای آن به دست میآیند .برای نوشت ورودی دوم از ماژول صفر از نماد روبرو M0:I2و برای خروجی اول ماژول سوم از نماد M3:O1استفاده میکنیم .بنابراین در این Xخط مشخصات M0 M1 ... MX1آمده است .در نمایش گرافیکی باید مستطیل ماژول را در محل مشخص شده رسم کنید ،نام آن را درون مستطیلش بنویسید و ورودیها و خروجیهای آن را طوری مشخص کنید که محل آنها دیده شوند. Modules 2 AND 3 3 10 10 )(M0 OR 3 12 10 19 )(M1 در بخش پایانی یک فایل ماژول مرکب ،در یک خط نوشته شده Wiresو در خط بعد عدد ( Wتعداد سیمها) آمده است .سپس در Wسطر در هر سطر دو برچسب مربوط به ورودی/خروجی/ورودی یا خروجی یک زیرماژول آمده است که مشخص میکند سیگنال خروجی اولی به دومی وارد میشود .شما در نمایش گرافیکی صرفاً باید با یک خط مستقیم نقاط متناظر برچسبها را به هم متصل کنید. Wires 5 I0 M0:I0 I1 M0:I1 M0:O0 M1:I0 I2 M1:I1 M1:O0 O0 واسط گرافیکی باید یک واسط گرافیکی با قابلیتهای زیر طراحی کنید. ● خواندن فایلهای با قابلیت ذکر شده ،تشخیص خطا در آنها و یا نمایش گرافیکی آنها ● نمایش برچسب هر یک از زیرماژولها و برچسبهای ورودی/خروجی /ورودی و خروجی زیرماژول ● توانایی جابجا کردن زیرماژولها و محل ورودی و خروجی ماژول ● تغییر دادن اندازٔه یک زیر ماژول ● تغییر اندازهٔ کل ماژول و به همان نسبت تغییر اندازٔه زیرماژولها ● ساختن یک ماژول جدید و استفاده از ماژولهای دیگر در آن و یا پر کردن جدول درستی برای ماژولهای اتمی. بدیهی است باید بتوانیم از یک یک ورودی یا خروجی را انتخاب کنیم و با سیم به یک ورودی یا خروجی دیگر متصل کنیم .دقت کنید که سیمها جهتدار هستند. ● حذف یک زیرماژول و در پی آن حذف شدن سیمهای متصل به آن ماژول .شمارهٔ ماژولهای بعدی ماژول حذف شده باید کم شوند. ● ذخیره کردن تغییرات بال در فرمت lcx ● توانایی دادن ورودی عددی به ماژول و محاسب ٔه خروجیهای آن واسط خط فرمان ۱ شما باید کلسی با نام TestModuleدر پکیج دیفالت برنامهتان قرار دهید متود استاتیک mainداشته باشد و به عنوان آرگومان اول پوشهٔ ماژولها و زیرماژولها و به عنوان آرگومان دوم نام فایل تست را بگیرد .این کلس باید نتیج ٔه پردازش ماژول مورد نظر را (که در پوشهای که به عنوان آرگومان اول پاس داده شده است ،قرار دارد) در فایل » «TestModule.txtذخیره کند .در فایل تست نیز که به عنوان آرگومان دوم پاس داده میشود ،ابتدا نام ماژولی که باید تست شود و سپس در هر خط یک صفر یا یک آمده که عدد خط iام به معنی نسبت داده شدن آن عدد به ورودی iام ماژول مورد نظر است .در فایل خروجی ( )TestModule.txtیا بنویسید » «Problem occuredبه معنی اینکه فایل ماژول یا فایلهای زیرماژول مشکل دارند و یا به تعداد خروجیهای ماژول مورد تست در هر خط یک صفر یا یک که نمایندٔه خروجی iام ماژول مورد نظر خواهد بود. Command line ۱ توجه شاید بهتر باشد ابتدا واسط خطفرمان که سادهتر و به نوعی پیشنیاز دیگری است را پیادهسازی کنید و وقتی مطمئن شدید که برنامهتان در این قسمت درست کار میکند ،به سراغ قسمت دیگر روید. به زودی تستهایی در سایت درس قرار میگیرد که حتماً برنامهتان را با آنها تست کنید تا در قالب فایلهای lcxتفاوتی نداشته باشیم.
© Copyright 2026 Paperzz