# اخبار و اعلانات > گفتگوی عمومی کامپیوتر و فناوری اطلاعات >  پیاده سازی هر نرم افزاری فقط با گیت NAND یا NOR

## Saeed_m_Farid

با سلام

*تاریخچه:*
پیرو صحبت هایی که با دوستان و اساتید در* این تاپیک* کردیم، قرار شد تاپیکی مستقل در مورد این مطلب زده بشه تا ابهامات رفع بشن.

* مقدمه:*

قبل از هرچیز از اینکه این تاپیک رو می‌خونید یا در اون شرکت می‌کنید، از  شما تشکر می‌کنم و خواهش می‌کنم من رو بخاطر لحن صحبت‌ام (کمی آمرانه!) در  این تاپیک ببخشید، بنده کوچک تمام برنامه‌نویسان (چه مبتدی و چه حرفه‌ای)  هستم و هرگز قصد اهانت به هیچ شخص یا گروه و ... ندارم، تنها برای اینکه  ماهیت این تاپیک مقداری جنجال برانگیز هست اینطوری قانونگذاری می‌کنم تا _"جنگ اول به از صلح آخر"_ بشود...
ضمناً حرفه‌ای بودن در زمینه‌ای -از دید بنده!- بخودی خود افتخار محسوب  نمی‌شه، چرا؟ چون مانند کسی که کارش فیزیک یا روانشناسی و ... هست، و برای بدست آوردن مایحتاج زندگی از علمش استفاده می‌کنه، برای یک برنامه نویس حرفه‌ای هم  قضیه همین‌طور هست و اگر در *زمینه کاری* خودش بروز و آگاه نباشه، کلاهش پس معرکه است؛ اینمورد  رو مقایسه کنید با کسی که کارش مثلاً برج‌سازی هست! ولی درمورد فیزیک،  روانشناسی، مکانیک و ... هم می‌دونه (حالا یا تئوری یا آکادمیک) خوب معلومه  که اون خیلی راحت تر می‌تونه به این دانسته هاش افتخار کنه تا دانش  برج‌سازیش! و می‌تونه به نحو احسن در زمینه کاریش ازشون استفاده کنه؛ دیگه  کـــــــِـــــش نمیدم تا حوصله‌تون سر نره؛ ولی اگه یک لحظه احساس کردید  که قصد به رخ کشیدن دانسته‌ها و ... در مطالب پائین یا پست‌های بعدی مشاهده می‌کنید، برگردین و اینها رو بخونین و  اعلام براعت بنده رو از خودشیفتگی پذیرا باشید.
اینم بگم، قرار نیست با به نتیجه رسیدن / نرسیدن این تاپیک گِرِهی از مشکلات جامعه برنامه نویسان باز بشه! پس اگه شما تو این بحث شرکت نداشتین‌ (مطالعه / پست / ذینفع بودن) و از حوصله کمی برخوردار هستید، بیزحمت به ادامه مطلب رجوع نفرمایید.

*هدف تاپیک:*
صحبت در مورد این جمله هست : 


> *اصولا هربرنامه نرم افزاری رو میشه با سخت افزار  هم پیاده سازی کرد؛ اما  وقتی سخت افزاری پیاده سازی بشه هم هزینه ها خیلی  میره بالا ، هم تاخیر  توی سیستم پیش میاد؛ اینا مشکلات جدا نشدنی استفاده  از سخت افزار هست.*



*درصورت تغییر اسامی / عقیده و ... این قسمت بروز می‌گردد:* (آخرین تغییر: '18:15 1391/04/11)
موافقان تا این لحظه: *Negin.cs* و *Esmail Solhkhah*  و *eshpilen*
مخالفان تا این لحظه: *Saeed_m_Farid*
ممتنعین: *amin1softco* و *barnamenevisforme*

*پیش نیازها:*
کسانی که قصد پست زدن در این تاپیک رو دارند، باید با حداقل‌هایی از مهندسی نزم افزار، پیاده سازی سخت افزار (حداقل یک پروژه در این زمینه)، سیستم های سازمانی نرم افزاری،‌ فیزیک کوانتوم، نجوم، فلسفه!(قوانین علت/معلول، سفسطه، قیاس مع الفارق و ...)، روانشناسی و سایر اقوام و وابستگان که در اینجا فراموش شده اند؛ آشنایی نسبی داشته باشند.
از سوی دیگر      بدلیل تنوع مطالب مرتبط با این بحث، خواهشمند است از هرگونه کج‌روی و ارسال مطالب نامرتبط با بحث که دردی از این مشکل دوا نمی‌کند، جداً پرهیز نمایید و تاپیک را به بیراهه نبرید؛ بعنوان مثال مطالبی که در حوزه زیر می‌گنجند، *نامرتبط* محسوب می‌گردند :

عدم رعایت *قوانین کلی سایت*ذکر مطالب نامرتبط سخت افزار (مثلاً CNC، جنس یا تعداد کلاک و ... پردازنده خاص، مطالب عهد بوقی)حدس‌ها و گمانه زنی های نامرتبط و بدون ذکر سند و مدرک معتبر (سخنان نوستراداموسی)پیشرفت‌های اخیر هر نوع صنعت نامرتبط با بحث (مخصوصاً گالکسی و لومیا و ...)ذکر طوطی وار مطالب ترم اول تا پنجم دانشگاه! فرض بر اینست که شرکت کنندگان مدار منطقی، معماری کامپیوتر، اسمبلی، ریزپردازنده و ... را در دانشگاه پاس کرده اند یا همینطوری بلد هستند! اینحا محل آموزش کتاب موریس مانو، درک مایر و ... نیست! *[1]*ایرادگیری به نحوه نامه نگاری و املاء درست و جمله بندی فارسی و ...ذکر نمودن افتخارات کسب شده در مجامع بین‌المللی، ملی، بازار کار، این سایت، اونیکی سایت ها، تعداد هیت های وبلاگ، فروم شخصی، ذکر شاگردان و رهروان و ... تنها در حدی که بتوان فهمید که کاربر مورد نظر در زمینه ذکر شده دارای تجربه میباشد، بدون جزئیات مرتبط با Narcissismناسزا، توهین به سایرین، جک و لطیفه های نامرتبط، بامزگی های متداول و ...مطالب مرتبط با جامعه شناسی، تاریخ، وضعیت کنونی کشور از لحاظ تکنولوژی، حقوق اولیه انسانها، وضعیت پیشرفت، قیمت نان و مایحتاج اولیه، مقایسه با زمان شاه و ...پیشینه خانوادگی، قومیت، فامیل‌های نسبی و سببی، دوستان اندیشمند، ازفضل پدر تو را چه حاصل، آپولو هوا کردن خانوادگی یا با گروه دوستان مجرب در زمان‌های قدیم و سایر نکات در این رده ...شعرسرایی و مداحی و ذکر مصیبت و ...چایی ریختن برای خداحرفهای صدمن یه غازهذیان‌های شبانه یا مرتبط با بیخوابیو مهمترین مورد: پرهیز از سفسطه، قیاس مع الفارقهر مورد نامرتبط فراموش شده دیگر ...*[2]*
ضمناً از شرکت کنندگان محترم مستدعی است: تاپیک ذکر شده در ابتدای این مباحثه را مطالعه کرده و از وسط بحث شروع به نظردهی نکنند.

*دسته بندی:
*با تشکر از همفکری همه دوستان شرکت کننده، اگر احساس می‌کنید مطلبی برای ارائه دارید و در یکی از موارد زیر نمی‌گنجه، احتمالاً ربطی به بحث ما نداره (اگر اینطور نیست طی پ.خ. مطرح کنید تا آیتم موردنظر شما افزوده شود):

معرفی پیشینه (عملی / تئوری) مختصر جهت آشنایی و اعتبارسنجی دیدگاه‌ها در صورت صلاحدید.مباحث مرتبط با سخت افزار (در حوزه مرتبط با پیاده سازی نرم افزار)تکنولوژی‌های جدید سخت افزاری مستقل از نرم‌افزارمباحث مرتبط با *هر* نرم افزار (بخاطر ماهیت سوال)تئوری‌های مرتبط با فلسفه شکل‌گیری علوم رایانه و پردازش رقمی و هر مورد مرتبط دیگر با ذکر دقیق ماخذ یا منابع حداقل Wikipedia(از زمان کیکاووس تا ذرات تئوری ریسمان!)سایر مباحث مرتبط با نحوه پیاده سازی رویکردهای نرم‌افزاری با سخت افزار که در حوزه دید دیگران نیستند. (مثلاً LED سخت افزاری که مشابه نرم افزاری هم دارد، در حوزه دید کودکان ابتدایی نیز هست!)
درنهایت با اینکه قوانین کمی محکم گرفته شدند، اینجا یک محیط بر مبنای دموکراسی است و شما می‌تونید نظرات خود رو برای تکمیل قوانین ذکر شده! یک جوری به اطلاع برسونید که ساختار مباحثه (مثل سایر بحث‌های از ایندست) به هم نریزد.(مثلاً پ.خ.)

از اینکه به حقوق خود و دیگران احترام میگذارید و تاپیک رو به بیراهه نمی‌برید، پیشاپیش از شما سپاسگزارم
موفق باشید.
____________
*[1]* در مقالات این *لینک* می‌توانید اطلاعات اولیه‌ای در مورد پردازنده ها پیدا کنید، ولی اون مطالب (یا سایر موارد مشابه که در این سطح همه بلدند) رو تو این تاپیک کپی/پِیست نفرمائید، مگر اینکه بخواهید بهشون استناد کنید.
*[2]* تمام این موارد شامل خود نویسنده نیز می‌شوند و اگر خطاهای مشابهی در گذشته از اینجانب در موارد فوق سر زده (که زده!) بدلیل مبرا نبودن هیچ انسانی از گناه لطفاً عفو نموده و سعی می‌گردد تکرار نگردد!

----------


## amin1softco

بهترین زبان به نظرم C باشه چون سیستم عامل که کارش با سخت افزاره با این زبان نوشته شده .
در مورد 



> *اصولا هربرنامه نرم افزاری رو میشه با سخت افزار  هم پیاده سازی کرد؛  اما  وقتی سخت افزاری پیاده سازی بشه هم هزینه ها خیلی  میره بالا ، هم  تاخیر  توی سیستم پیش میاد؛ اینا مشکلات جدا نشدنی استفاده  از سخت افزار  هست.*


خوب این نظر شخصی من است و ممکنه دقیق و کاملاً علمی نباشه
 اگر بیاییم و از نگاه معماری کامپیوتر به مسئله نگاه کنیم ما یک واحد پردازش منطقی (سی پی یو) داریم که از یکسری گیت ها تشکیل شده است یکسری دستور عمل هم داریم که در یک حافظه ذخیره شده (که حافظه هم از لچ یا چند تا گیت تشکیل شده )  بعد ما دستورات را تعریف می کنیم اینجوری زبان اسمبلی شکل میگره و بعدشم کامپیوتر شکل میگیره خوب پس کامپیوتر از گیت ها تشکیل شده است . پس تمام نرم افزار ها یی هم که در کامپیوتر ایجاد می شه قابل پیاده سازی در سطح سخت افزار است ولی معقولانه نیست.
قدیما در اتوماتا تورینگ گفته بود می شه هر کاری که کامپیوتر ها انجام میدهند رو با ماشین تورینگ پیاده سازی کرد . خوب حالا یکمی فکر کنیم می بینم این نقل قول بالایی درسته !!! اما حالا عاقلانه است یا نه مسلماً جوابش نه است .

 با اسمبلی هم می شد برنامه بنویسیم احتیاجی به زبانی مثل سی یا بیسیک نبود اما ما این ها رو خلق کردیم و این لایه ها رو روی هم گذاشتیم که راحت تر کد بنویسیم یا احتیاجی به سیستم پایگاه داده نبود چون می تونیستیم با سیستم فایلی قدیم کار های خودمون رو انجام بدیم نکتش اینجاست که جوابگوی نیاز های در حال رشد ما نبودند پس اینها رو خلق کردیم که به نیاز ها پاسخ داده بشه.
ولی کار های سخت افزاری و سی زوج جدا نشدنی ایی هستند....

----------


## Saeed_m_Farid

> قدیما در اتوماتا تورینگ گفته بود می شه هر  کاری که کامپیوتر ها انجام میدهند رو با ماشین تورینگ پیاده سازی کرد . خوب  حالا یکمی فکر کنیم می بینم این نقل قول بالایی درسته !!! اما حالا  عاقلانه است یا نه مسلماً جوابش نه است.


 من باید یه قسمتی هم میذاشتم برای ممتنعین! ولی شما یه بحثی رو مطرح کردین  که گلوگاه این‌نوع بحث‌هاست، یعنی مستقیم رفتین سر اصل مطلب؛ ماشین  تورینگ:
 


> an unlimited memory capacity obtained in the  form of an infinite tape  marked out into squares, on each of which a  symbol could be printed. At  any moment there is one symbol in the  machine; it is called the scanned  symbol. The machine can alter the  scanned symbol and its behavior is in  part determined by that symbol,  but the symbols on the tape elsewhere  do not affect the behaviour of  the machine. However, the tape can be  moved back and forth through the  machine, this being one of the  elementary operations of the machine.  Any symbol on the tape may  therefore eventually have an  innings.


قبلش من یه چیز بگم: قبلاً *اینجا* با دوستان بحثی داشتیم که مدل تورینگ (تست تورینگ) و مسائل از این‌دست، جوابگوی تمام مسائل پیرامون ما هستند یا نه؟! بالاخره قبول شد که بلی، *امکان*اش هست : _"با همین سیستم دودویی، داریم الگوریتم های فازی رو می نویسیم، یعنی چیزی که دیگه دودویی نیست و چند ارزشی هست."_
نمیخوام دیگه تا اون حد بریم تو جزئیات و سر همه رو درد بیارم ولی اونجا هم  نهایت حرف من این شد که : 


> برای مثال ما می تونیم زمین رو مرکز  منظومه شمسی درنظر بگیریم و خورشید و  سایر سیارات رو در مدارات فوق العاده  پیچیده ای در گردش بدور زمین فرض  کنیم، که معادلات بسیار پیچیده ای رو می  طلبه (که فکر کنم فقط خود ارشمیدس  باید بیاد حلشون کنه!) : تصور کنید  فیزیک نجومی رو که بر این مبنا پایه  گذاری شده باشه رو تا کجا میشه بصورتی  بسط داد که به بن بست نخوره! ولی  بجای اینکار تونستیم ذهنیت زمین مرکزی  رو کنار بذاریم و علم نجوم منفجر شد.


در تایید صحبت‌های خودم! تستی بود که اخیراً فیلسوف مشهور John R. Searle در مورد تست تورینگ ارائه داد‌ (جزئیات) و به اتاق چینی‌ها معروف هست، خلاصه‌اش رو از نارنجی براتون میذارم :



> ... حتی اگه یک کامپیوتر  بتواند این تست [تورینگ] را پاس کند، باز  هم به معنی این نیست که کامپیوتر همه چیز  را در این ارتباط متوجه شود و  درک کند. یکی از مهمترین دلایل برای نقض تست  تورینگ، مسئله «اتاق چینی ها»  است.
>    نویسنده می گوید، اخیرا به توصیه پروفسور جان سیرل، تجربه ذهنی ای تحت  عنوان «اتاق چینی ها» داشته است. در آنجا ایده اینکه روزی ماشین ها بتوانند  دقیقا مانند انسان فکر کنند به چالش کشیده می شود. 
> به این صورت که نویسنده داخل اتاقی قرار گرفته بود و سپس از او خواسته  بودند در برابر سوالاتی به زبان چینی به داخل اتاق فرستاده می شود، یک جواب  به زبان چینی ارائه کند.
> اگرچه او هیچ چیزی از زبان ماندارین (Mandarin) بلد نبوده، اما توانسته یک  گفتگوی قابل قبول با شخصی که به ماندارین صحبت می کرد انجام دهد. گرچه او  یک کلمه از این گفتگو را متوجه نمی شده.
> 
> *مسئله اتاق چینی ها*
> یک پیام (کاغذ زرد رنگ) به شخصی که به زبانی به جز ماندارین مثلا انگلیسی صحبت می کند و در داخل اتاق چینی ها است فرستاده می شود.
> یک دفترچه دستورالعمل (آبی رنگ) در داخل اتاق وجود دارد که حاوی سوال و  جواب های احتمالی است. شخص غیر ماندارینی می تواند از میان سوال ها، آن  سوالی که شبیه ترین کارکترها به پیام اولیه را دارد، پیدا کند و جواب مناسب  پیام اولیه را بدهد.
> شخص ماندارینی با دیدن جواب فکر می کند که دارد با شخصی مسلط به زبان  ماندراین صحبت می کند. اما شخص غیر ماندارینی که داخل اتاق چینی ها است،  اصلا متوجه نیست که چه چیزی به شخصی ماندارینی گفته است.
> پروفسور سیرل مرد داخل اتاق چینی ها را به کامپیوترها تشبیه می کند. این  مرد گرچه پاسخ مناسب می دهد اما در واقع زبان ماندارینی بلد نیست، بنابراین  کامپیوتر نیز گرچه جواب مناسب به سوالات ما می دهد، اما خودشان درکی از  صحبت ها ندارند.


اینجا هم صحبت من همین هست؛ بیاید قبول کنیم که ماشینی که آلن تورینگ درباره‌اش صحبت می‌کنه، یه *فلسفه* هست، هیچ آدم عاقلی سعی در ساختن چنین چیزی نمی‌کنه! 100% قبول دارم که این نظریه   تأثیر عمده‌ای بر تفکر دربارۀ ذهن داشته (که اونهم از دید من بسیار جای  بحث داره! قبلاً هم کلی بحث کردم در موردش) ولی فقط مباحث فلسفی / ریاضی و  پایه‌ای علوم، نه مسائل عملی! چون :
=+=+=+=+=+=+=+=+=+=+=+=+=
*مقایسه با ماشینهای واقعی*
اغلب گفته می شود که ماشینهای تورینگ برخلاف دیگر آتاماتاهای ساده تر  توان  و قدرت ماشینهای واقعی را داراست , وقادر است که هر عملیاتی که یک ماشین  واقعی می تواند اجرا کند را اجرا نماید.چیزی که در این جمله به آن توجه  نشده آن است که تقریبا هر برنامه خاصی که بر روی یک ماشین خاص در حال  اجراست در واقع هیچ چیزی نیست مگر یک  خودکارسازی محدود قطعی، چراکه   ماشینی که آنرا اجرا می کند فقط می تواند بصورت محدود در پیکربندی‌های  زیادی قرار بگیرد . ماشینهای تورینگ درواقع معادلند با ماشینی که دارای  مقدار فضای ذخیره سازی نا محدودی است .ممکن است بپرسیم که چرا ماشینهای  تورینگ مدلهای مفیدی برای کامپیوتر های واقعی هستند .
روشهای مختلفی برای پاسخ به آن وجود دارد:

هر چیزی که یک کامپیوتر واقعی قادر به محاسبه آن  است , ماشین تورینگ نیز قادر به آن است , بنابراین هر جمله ای درباره  محدودیتهای ماشین تورینگ  بر کامپیوتر های واقعی نیز اعمال خواهد شد.تفاوت  کاذبی که وجود دارد تنها با این توانایی ماشین تورینگ که قادر است مقدار  نامحدودی از داده را دستکاری کند ایجاد می شود . اگرچه براساس یک محدوده  زمانی داده شده , یک ماشین تورینگ ( مانند یک ماشین واقعی ) فقط می تواند  مقدار محدودی از داده را دستکاری کند.مانند یک ماشین تورینگ , یک  ماشین واقعی میتواند درصورت نیاز با دریافت دیسکهای بیشتر یا رسانه های  ذخیره سازی دیگر فضای ذخیره سازیش را بزرگ تر کند . اگراز فراهم کردن آن  واماند, در ان صورت ممکن است که ماشین تورینگ بعنوان یک مدل غیر مفید بنظر  برسد , ولی حقیقت آن است که نه ماشین تورینگ ونه ماشین واقعی هیچ کدام برای  انجام محاسبات مفید به مقادیر نجومی فضای ذخیره سازی نیاز ندارند.زمان  پردازش مورد نیاز معمولا خیلی بیشتر از یک مساله می باشد ؛بعنوان نمونه  "busy beaver" مثالی است از ماشینهایی که تعداد خیلی زیادی از مراحل را فقط  با استفاده از مقادیر ناچیزی ازتعداد بیتها بانجام می رسانند.ماشینهای  واقعی خیلی پیچیده تر از یک ماشین تورینگ هستند.بعنوان مثال ماشین تورینگی  که یک الگوریتم را شرح می دهد ممکن است از تعداد کم " چند صد حالت " تشکیل  شده باشد , در حالی که خودکارسازی  محدود قطعی معادل روی یک ماشین واقعی  دارای 1015 حالت می باشد ! این موجب می شود که نمایش DFA برای آنالیز غیر  عملی باشد.ماشینهای تورینگ الگوریتمها را شرح می دهند مستقل از  اینکه چقدر حافظه بکار می برند. برای هر ماشین شناخته شده حد بالای مقدار  حافظه ای که دارد مشخص است ولی این محدودیت بطور قراردادی می تواند برطرف  شود, ماشین های تورینگ به ما این امکان را می دهند که جملاتی در باره  الگوریتم ها بسازیم که بصورت تئوریک همواره نگه داشته می شوند, بدون توجه  به پیشرفتها در زمینه معماری مرسوم ماشین محاسبه گر.ماشین های  تورینگ جملات الگوریتم را ساده سازی می کنند , الگوریتمهای اجرا شده روی  ماشینهای مجرد معادل تورینگ معمولا خیلی کلی تر از همتایشان روی ماشین  واقعی هستند, زیرا آنها دارای انواع داده با دقت قراردادی هستند و هرگز  نباید با شرایط غیر منتظره مواجه شوند( مثلا running out of memory)
   از مواردی که در آن ماشینهای تورینگ مدلهای ضعیفی برای برنامه ها هستند  می توان به بسیاری از برنامه های واقعی اشاره کرد , مانند سیستمهای عامل و  پردازشگر کلمات , که این برنامه ها برای دریافت ورودی نامحدود در طول زمان  نوشته شده اند . ماشینهای تورینگ چنین محاسبات موجودی را بخوبی مدل نمی کند  ( ولی هنوزقسمتهایی از آنرا نیز مدل می کند , مانند رویه های مستقل)
محدودیت دیگر ماشینهای تورینگ این است که آنها توانایی های آرگومانهای خاص  را بخوبی مدل نمی کنند . برای مثال کامپیوتر های مدرن درواقع نمونه هایی از  فرم ماشینهای محاسبه گرخیلی خاص که بانام ماشینهای بادسترسی تصادفی(RAM)  مشخص می شوند هستند.  ابتدایی ترین تفاوت میان این ماشینها و ماشین تورینگ  این است که ماشینهای تورینگ یک نوار نامحدود استفاده می کنند در حالی کهRAM  ها  یک دنباله اندیس دارشمارشی را استفاده می کنند(بطور نمونه یک فیلد  Integer). نتیجه این تفاوت این است که براساس اندیس های حافظه ای می توان  بهینه سازی های محاسباتی بکار برد که در یک ماشین تورینگ عام ممکن نیست ؛  بنابراین زمانیکه ماشینهای تورینگ  بعنوان اساس اجراهای زمانی محدود بکار  می روند , یک " اشتباه محدودیت  پایین"  می تواند در زمان های اجرای  الگوریتم های معینی بوجود آید ( مربوط به فرض "  "false simplifyingدر  ماشین تورینگ).
یک مثال از آن مرتب سازی شمارشی است که از قرار معلوم در الگوریتم های مرتب  سازی حد پایین   (Ω(n log n را نقض می کند. مورد دیگر جستجوی دودویی است  که حد پایین خطی (Ω(n جستجو در لیست مرتب ماشینهای تورینگ را نقض می کند. *[1]*

=+=+=+=+=+=+=+=+=+=+=+=+=
ادامه مطالب بمونه تا دوستان موافق نظرشون رو ابراز کنند...
______________________
*[1].* *ترجمه شده از مطلب wikipedia در اینجا*

----------


## Esmail Solhkhah

با تشکر از جناب *Saeed_m_Farid*

*هدف تشریح این جمله هست : اصولا هربرنامه نرم افزاری رو میشه با سخت افزار هم پیاده سازی کرد*

یه راست میرم سر اصل مطلب ، به قول شما



> اینحا محل آموزش کتاب موریس مانو، درک مایر و ... نیست!


نکته : گفتیم اصولا هربرنامه نرم افزاری رو میشه با* سخت افزار* هم پیاده سازی کرد
پس وقتی صحبت از سخت افزار شد ان شاالله که دستمون رو باز میگذارید تا  احیانا از قطعات آنالوگ هم استفاده کنیم (مثلا در مدار مولد کلاک CPU)

CPU و حافظه ، کدم یکیش رو نمیشه با گیتهای NAND و NOR پیاده سازی کرد ؟

نرم افزار موجود داخل حافظه نهایتا بصورت 0 و 1 نیست ؟ نمیشه این 0 و 1 ها رو موقع پیاده سازی حافظه ست کرد ؟

*دیتای موجود در حافظه چیزی نیست جز 0 و 1 به ازای هر بیت اطلاعات یعنی VCC یا GND خب این ولتاژ رو چی تفسیر میکنید ؟ نرم افزار یا سخت افزار ؟*

خوردیم به اصل عدم قطعیت هایزنبرگ یا گربه شرودینگر نه ؟

وقتی ما با سخت افزار خالص توانستیم یه برنامه ساده مثلا جمع دو عدد رو انجام بدیم پس میتونیم کارهای بزرگتری هم انجام بدیم

ببخشید اگه اینجا مجبورم یکم وارد جزئیات بشم

برای جمع دوعدد ALU تو خطوط کنترلیش (فرضا 8 عدد برای 256 دستور) دیتای فرضی 00000001 رو میگیره و این رو به معنی جمع دو عدد تفسیر میکنه پس دو عدد پاس میشن به 

مدار جمع کننده حالا اگر برنامه AND کردن دوعدد بود ALU تو خطوط کنترلیش یه دیتای فرضی میگیره 00000010 و این رو به معنای AND تفسیر کرده و دو عدد پاس میشن به مدار AND 

کننده همینطور میتونیم دستورات متفاوتی ایجاد کنیم با افزودن مدار مربوطه به ALU (البته بعضی دستورات نیاز به مدار جداگانه ندارن) و کد مربوطه به حافظه که قراره بعدا روی خطوط 

کنترلی ALU قرار داده بشه پس ما با افزایش مدارات محاسباتی  به ALU امکان پردازشهای بیشتری فراهم میکنیم.

برای نرم افزارهای ساده میتونیم بصورت عملی این کار رو انجام بدیم یعنی حافظه و CPU رو با این گیتها پیاده سازی کنیم و نرم افزار مورد نظرمون رو موقع پیاده سازی حافظه ست کنیم 

ولی برای سیستمهایی مثل ERP نیاز به داکیومنتهای یه CPU درست حسابی داریم (اینجا نیاز به کلاک بالایی داریم نیاز به خطوط آدرس و دیتای بالایی داریم و ...)، با فرض اینکه اونا رو 

هم داشتیم حالا آیا عملا توان پیاده سازیش رو داریم ؟ چه از لحاظ مالی چه زمانی ؟ ولی آیا این عدم توانایی ما در پیاده سازی عملی این چنین سیستمی ما رو به این نتیجه 

میرسونه که نمیشه این نرم افزار رو سخت افزاری پیاده کرد ؟ چرا میشه ولی با عمر نوح و صبر ایوب و گنج قارون

----------


## eshpilen

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

با برنامه و نرم افزار شما با دوتا تایپ کردن انگار داری یکسری سیم بندی و ارتباط و سویچ سخت افزاری رو دستکاری میکنی. فقط این تغییرات بصورت دینامیک و خودکار و غیرمکانیکی هستن و با سرعت بسیار بالا و هزینهء بسیار ناچیز و با ضریب اطمینان بسیار بالا انجام میشن.
برنامه هایی که در آی سی های ROM ذخیره میشن شاید یک چیزی بین نرم افزار و سخت افزار محسوب بشن. تاحدودی. مثل بایوس. اما فکر میکنم منظور شما اینه که کلا مفهوم برنامه رو نداشته باشیم و همهء کارها با اتصالات سخت افزاری تغییرناپذیر انجام شده باشه. یعنی مثلا یک سخت افزار دیجیتال پیچیده رو از ابتدا برای انجام کار خاصی شبیه یک برنامهء خاص (و نه یک رایانهء برنامه پذیر) طراحی کنیم.
اینطوری فکر کن مثلا بخوای فتوشاپ رو بصورت سخت افزاری پیاده سازی کنی! چقدر زمان چقدر هزینه نمیدونم، و دست آخر هم یک دستگاه داریم که فقط کار همین نرم افزار رو انجام میده. ضمنا از نظر تئوری شدنیه، ولی از نظر منابع مالی و انسانی و زمانی مورد نیاز شاید شدنی نباشه.

----------


## Negin.cs

سلام 

ممنون از استاد Saeed_m_Farid که خیلی قشنگ چالش بوجود میارن!

اگه یه کمی با تاخیر جواب میدم به خاطر احترام به جناب Esmail Solhkhah بود که جای استاد من هستن و باید اول ایشون شروع میکردن

بذارین یه کم شفاف سازی کنیم بحثا رو 

از تورینگ استفاده شد -> *تز تورینگ* ! {
1- تز هست یعنی بیشتر دانشمندا قبولش دارن ولی نتونستن اثباتش هم بکنن ...
2- چی میگه؟ هر سیستم الگوریتمی معادل ماشین تورینگی داره 
3 -ماشین تورینگ یه مفهوم انتزاعی هست یعنی شما با هرچیزی ممکنه بخوای پیاده سازیش کنی :نرم افزاری ، سخت افزاری ، مکانیکی....
4- کی گفته الگوریتم همون نرم افزاره ؟؟! الگوریتم یه چیزه نرم افزار یه چی دیگه دادا !
این از تز تورینگ}

من تو مبحث قبلی خیلی ساده اشاره داشتم به این موضوع که وقتی یه کد رو نوشتیم و آخرش اومد به زبان ماشین تبدیل شد یعنی این مسئله صحیحه که از ابتدا هم میشه به جای کد ، قطعه سخت افزاری جایگزین کرد
خب ، بحث رو بازتر میکنیم!
شما یه سری برنامه های کاربردی داری که *بواسطه سیستم عامل* میان تبدیل به کد ماشین میشن و در واقع این سیستم عامل هست که دقیقآ تو تبدیل کدنرم افزار به سخت افزار ( بحث ما) داره رول اصلی رو بازی میکنه؛ اگه لازمه علت وجود سیستم عامل رو هم به چالش بکشیم ، حرفی نیست ! -> میرسیم به مباحث Formal specification که از با استدلال ریاضی ثابت میکنه لازمه وجود این مهم اشتباه نیست! 



مرسی

----------


## Saeed_m_Farid

> *هدف تشریح این جمله هست : اصولا هربرنامه نرم افزاری رو میشه با سخت افزار هم پیاده سازی کرد*CPU و حافظه ، کدم یکیش رو نمیشه با گیتهای NAND و NOR پیاده سازی کرد ؟خوردیم به اصل عدم قطعیت هایزنبرگ یا گربه شرودینگر نه ؟ولی برای سیستمهایی مثل ERP نیاز به داکیومنتهای یه CPU درست حسابی داریم (اینجا نیاز به کلاک بالایی داریم نیاز به خطوط آدرس و دیتای بالایی داریم و ...)چرا میشه ولی با عمر نوح و صبر ایوب و گنج قارون


قبل هرچیز دوست دارم اول جواب دو بند آخر رو بدم و بعد برم سراغ مطالب‌ام:




> ولی برای سیستمهایی مثل ERP نیاز به داکیومنتهای یه CPU درست حسابی  داریم (اینجا نیاز به کلاک بالایی داریم نیاز به خطوط آدرس و دیتای بالایی  داریم و ...)
> ... چرا میشه ولی با عمر نوح و صبر ایوب و گنج قارون


با اینکه مفصلاً در مورد مشکل صورت مساله صحبت خواهم کرد، ولی من فکر می‌کنم نه، در  چنین رویکردهایی *نیاز* رو شما نمی‌تونین محدود به *زیاد* یا *خیلی زیاد، درست حسابی*و ...  بکنید؛ از دید من اینجا ما با یک پارادکس اساسی که مفصلاً عرض خواهم کرد بر می‌خوریم:  مثلاً روال‌های وابسته به رویکردهای خارج سیستمی (روال‌های کارتابلی،  مدیریت رویدادهای غیر سیستمی و ...)، چیزی نیست که شما بتونید با سخت افزار  متناسب‌اِشون کنید! مثل این میمونه که بگین ما ترکیبات DNA رو میدونیم (بجای  0 و 1 : ﺍﺳﻴﺪ ﻓﺴﻔﺮﻳﻚ، ﻗﻨﺪ ٥ ﻛﺮﺑﻨﻪ ﻭ ﺑﺎﺯ ﺁﻟﻲ) پس می‌تونیم انسان خلق کنیم؛  علم شیمی فقط از جزئیات DNA سر در میاره، و مثلاً میگه: 


> ﺗﺮﻛﻴﺒﺎﺕ ﺑﺰﺭﮔﻲ ﺑﺎ ﭘﻴﭽﻴﺪﮔﻲ ﺧﺎﺹ ﻭ ﺳﻄﻮﺡ ﻣﻄﺎﻟﻌﺎﺗﻲ ﻣﺨﺘﻠﻔﻲ ﻫـﺴﺘﻨﺪ ﻛـﻪ ﺍﺯ ﺁﻥ‬ ‫ﺟﻤﻠﻪ ﻣﻲﺗﻮﺍﻥ ﺑﻪ ﺍﺳﻴﺪﻫﺎﻱ ﻧﻮﻛﻠﺌﻴﻚ ﻭ ﭘﺮﻭﺗﺌﻴﻨﻬﺎ ﺍﺷﺎﺭﻩ ﻧﻤﻮﺩ. ‪ ، DNA‬ﭘﻠﻲﻣﺮ ﺧﻄﻲ ﺍﺯ ﺩﺯﻭﻛﺴﻲ ﺭﻳﺒﻮﻧﻮﻛﻠﺌﻮﺗﻴﺪﻫﺎﺳ  ‬ ‫ﻛﻪ ﭘﻠﻲﻧﻮﻛﻠﺌﻮﺗﻴﺪ ﻧﺎﻣﻴﺪﻩ ﻣﻲﺷﻮﺩ. ﻧﻮﻛﻠﺌﻮﺗﻴﺪ ﺍﺯ ﺍﺳﻴﺪ ﻓﺴﻔﺮﻳﻚ، ﻗﻨﺪ ٥ ﻛﺮﺑﻨﻪ ﻭ ﺑﺎﺯ ﺁﻟﻲ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﺳﺖ. ﺩﺭ ﻣﻮﻟﻜﻮﻝ‬ ‫‪ DNA‬ﻗﻨﺪ ﺑﻪ ﻓﺮﻡ ﺑﺘﺎ ‪ ٢- D‬ - ﺩﺯﻭﻛﺴﻲ ﺭﻳﺒﻮﺯ ﻭﺟﻮﺩ ﺩﺍﺭﺩ. ﻓﺴﻔﺎﺕ ﺑﻪ ﺻﻮﺭﺕ ﻣﻌﺪﻧﻲ 4 ‪ H 3PO‬ﺍﺳﺖ ﻛﻪ ﺑﻪ ﺗﻌﺪﺍﺩ ١،‬ ‫٢ ﻳﺎ ٣ ﻓﺴﻔﺎﺕ ﺩﺭ ﻧﻘﺎﻁ ﻣﺨﺘﻠﻒ ﻗﻨﺪ ′2 ,′3 ﻳﺎ ′5 ﻣﻲﺗﻮﺍﻧﺪ ﻭﺍﻗﻊ ﺷﻮﺩ ﻭ ﺣﺎﻟﺘﻬﺎﻱ ﻣﺨﺘﻠـﻒ ﺍﺳـﻴﺪ ﻧﻮﻛﻠﺌﻴـﻚ ﺭﺍ ﺍﻳﺠـﺎﺩ‬ ‫ﻧﻤﺎﻳﺪ. ﺑﺎﺯﻫﺎﻱ ﺁﺩﻧﻴﻦ ﻭ ﮔﻮﺍﻧﻴﻦ ﺗﺮﻛﻴﺒﺎﺕ ﺩﻭﺣﻠﻘﻪﺍﻱ (ﭘﻮﺭﻳﻦ) ﻭ ﺳﻴﺘﻮﺯﻳﻦ، ﺗﻴﻤـﻴﻦ ﻭ ﺍﻭﺭﺍﺳـﻴﻞ ﺗﺮﻛﻴﺒـﺎﺕ ﻳـﻚﺣﻠﻘـﻪﺍﻱ‬ (ﭘﻴﺮﻳﻤﻴﺪﻳﻦ) ﻫﺴﺘﻨﺪ. ﻣﺠﻤﻮﻋﻪ ﻗﻨﺪ ﻭ ﺑﺎﺯ ﺁﻟﻲ ﻛﻪ ﺍﺯ ﻃﺮﻳﻖ ﭘﻴﻮﻧﺪ ﺑﺘﺎ ‪ – N‬ﮔﻠﻴﻜﻮﺯﻳﺪﻱ ﺑﻪ ﻫﻢ ﻣﺘﺼﻞ ﻫﺴﺘﻨﺪ، ﻧﻮﻛﻠﺌﻮﺯﻳﺪ‬ ‫ﺭﺍ ﺗﺸﻜﻴﻞ ﻣﻲﺩﻫﻨﺪ. ﺍﺿﺎﻓﻪ ﺷﺪﻥ ﮔﺮﻭﻩ ﻓﺴﻔﺎﺕ ﻧﻮﻛﻠﺌﻮﺗﻴﺪ ﺭﺍ ﺗﺸﻜﻴﻞ ﻣﻲﺩﻫﺪ. ﺍﮔﺮ ﻓﺴﻔﺮ ﺁﻟﻔﺎﻱ ﻛﺮﺑﻦ ﻗﻨﺪ ﻳﻚ ﻧﻮﻛﻠﺌﻮﺗﻴﺪ‬
> ‫ﺑﻪ ﮔﺮﻭﻩ ﻫﻴﺪﺭﻭﻛﺴﻴﻞ (‪3′ − OH‬) ﻗﻨﺪ ﻧﻮﻛﻠﺌﻮﺗﻴﺪ ﺭﺍ ﺗﺸﻜﻴﻞ ﻣﻲﺩﻫﺪ. ﺍﮔﺮ ﻓﺴﻔﺮ ﺁﻟﻔﺎﻱ ﻛﺮﺑﻦ ′5 ﻗﻨﺪ ﻳﻚ ﻧﻮﻛﻠﺌﻮﺗﻴﺪ‬ ﺑﻪ ﮔﺮﻭﻩ ﻫﻴﺪﺭﻭﻛﺴﻴﻞ (‪3′ − OH‬) ﻗﻨﺪ ﻧﻮﻛﻠﺌﻮﺗﻴﺪ ﺩﻳﮕـﺮ ﻣﺘـﺼﻞ ﺷـﻮﺩ ﺟﻬـﺖ ﺗـﺸﻜﻴﻞ ﺭﺍ ′5 ﺑـﻪ‬ ‫ ‫′3 (′3 → ′5 )‬ ‫ﻣﻲﮔﻮﻳﻨﺪ ﻛﻪ ﺟﻬﺖ ﺗﺸﻜﻴﻞ ‪ DNA‬ﺩﺭ ﺣﺎﻟﺖ ﻋﺎﺩﻱ ′5 ﺑﻪ ′3 ﺍﺳﺖ.‬


شما نمی‌پرسین که جناب شیمی عزیز، اینا درست: بالاخره تو می‌تونی یه موجود زنده درست کنی یا نه؟ بگه بلی میشه ولی میلیاردها از این ترکیبات رو باید مخلوط کنیم و ... ولی من میگم نه! نمیشه! شما ماهیت قضیه رو با جزئیات‌اش نمی‌تونین بدست بیارید؛ قبلاً خیلی در اینباره صحبت کردم و لازم باشه بازم صحبت می‌کنم ولی فکر می‌کنم فعلاً برسیم به اصل قضیه...

ممنون که تو بحث شرکت کردین، فقط می‌تونم خواهش کنم یه سطح (یک یا چندش رو نمی‌دونم!) بیاین بالاتر و بحای ALU و Serialize داده ها در صفر و یک، NAND، NOR و ... اگه قرار هست از سخت افزار هم صحبت کنیم، دیگه حداقل مدارات مجتمع یا FPGA مورد علاقه شما یا ‌CPU و ... بدون درگیر شدن با جزئیات رو درنظر بگیریم؟ دلیلش هم تو پاراگراف بعدی خدمت‌تون عرض می‌کنم (برحسب اتفاق! همون سال 82 بود که ما هم یه پروژه با FPGA محصول Xilinx با دوستان -اونا رفتن دکتر شدن- کار  می‌کردیم که پایه‌هاش رو من با دلفی 6 - اونزمان دلفی 7 کمیاب بود!- مقداردهی می‌کردم و تو کد  VHDL اش هم یه فضولی‌هایی کرده بودم، که دو تا هم سوزوندیم! ...) شما می‌تونید با خیال راحت بدون مقدمات معماری کامپیوتر در موردشون صحبت کنید و بهتون اطمینان میدم اگه متوجه نشدم با دوسه تا گوگل کردن منظورتون رو می‌گیرم ...
___________

ولی! مشکل اصلی من در صورت مساله (هربرنامه نرم افزاری) هست؛ همونطورکه قبلاً هم گفتم، اصلاً از دید من این مقایسه از پایه اشتباه هست. برای توضیحش باید بگم به این نوع استدلال ها میگن قیاس مع الفارق! یعنی: 


> به قیاسی گفته می‌شود که  در آن میان اصل و فرع جامعی وجود ندارد؛ یعنی علت در فرع با علت در اصل هیچ  گونه مشابهت و مماثلتی ندارد؛ به بیان دیگر، علت در فرع نه در ذات و نه در  جنس با علت در اصل، همانند نیست.


مثل اون مثال معروف مقایسه سیب و پرتقال (یا گلابی!)، یه ضرب‌المثل هم داریم تو عموم که میگن: _"از ... به شقیقه چه مربوط!"_ یا اگه بخوام شبیه تر بگم مقایسه روح و جسم و بگیم که هرکاری که روح می‌تونه انجام بده، جسم هم قادر به انجامش هست! (چون هر دو به انسان مربوط می‌شوند) بنظر من (و خیلی های دیگه) اصولاً چنین قیاسی اشتباه هست و رده های اونها (چه در ذات، چه در جنس) با هم متفاوت هستند! معمولاً وقتی مباحثه ای با چنین سوال / پیش فرضی شروع بشه، هیچوقت به نتیجه نمی‌رسه‌  و هرکس چون ماهیت متفاوت هست، سنگ خودش رو به سینه میزنه و به احتمال زیاد هر دو گفته متناقض، کاملاً درست باشند ولی 100% در تناقض! و اینجا پاداوکس _"حق با کیست؟"_ پیش میاد... (نمونه ملموسش رو هم همیشه تو فروم های ایرانی می‌تونید ببینید، اپل بهتر است یا PC، لینوکس یا ویندوز، #C یا جاوا، کدام زبان برنامه نویسی رو انتخاب کنم و ...)
برای حل اینجور مشکلات ما باید ابتدا در تعریف نرم افزار / سخت افزار با هم به توافق برسیم، اگر تعریف این تعریف عمومی باشه:



> Computer hardware is any physical device, something that you are able to touch and software is a collection of instructions and code installed into the computer and cannot be touched. For example, the computer monitor you are using to read this text on and the mouse you are using to navigate this web page is computer hardware. The Internet browser that allowed you to visit this page and the operating system that the browser is running on is software


واقعاً نمیشه این بحث رو ادامه داد! شما هی در مورد نحوه کار سخت افزار / معماری / پیاده سازی State machine‌ با سخت افزار و ... صحبت می‌کنید و ما! در مورد الگوهای طراحی / برنامه های گسترده غیر سیستمی / پلت فرم های متنوع و ... و عدم شباهت‌شون و با اینکه هر دو درست می‌گیم احتمال توافق‌مون میشه احتمال کشف محیط بیضی!
ولی درصورتیکه مثلاً ماشین آلن تورینگ رو در نظر بگیریم و بخوایم بگیم تمام مسائل با اون قابل حل هست؛ بحث‌مون معنی پیدا می‌کنه و میشه در موردش بصورت آکادمیک صحبت کرد. برای توضیح بیشتر و تا جای ممکن حذف جزئیات (برای کسانی که آشنایی ندارن یا یادشون رفته):

*[تئوری]
______________________
*آلن تورینگ (به همراه آلنزو چرچ) در سال 1936~1937 یه راه حل برای مساله Entscheidungsproblem (تقریباً معادل مسئله تصمیم) *لایبنیتس* پیدا کردند(+)، بنام _تز چرچ-تورینگ_ که خلاصه اش اینه که: *
"هر مساله ای که قابل محاسبه با الگوریتم باشه، توسط یک ماشین تورینگ نیز قابل محاسبه هست"*
*______________________*
به نظر من این * ماشین تورینگ* یا مباحث جدیدتر در مورد ماشین تورینگ کوانتومی /نظریات استفان ولفرام در کتاب_ A New Kind of Science_  و ... جای بحث داره و قابل بحث کردن هست، چون نه من صحبت از ERP میکنم و نه شما از FPGA ولی میشه در بین صحبت هامون به اونها هم استناد کنیم...

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+



> CPU و حافظه ، کدم یکیش رو نمیشه با گیتهای NAND و NOR پیاده سازی کرد ؟


کسی چنین صحبتی کرد؟ بحث یه چیز دیگه است جناب صالح خان، خودتون هم می‌دونین بحث یه چیز دیگه است؛ خواهشاً شیطونی نفرمایید...




> خوردیم به اصل عدم قطعیت هایزنبرگ یا گربه شرودینگر نه؟


نه هنوز! چه زود؟ خیلی مونده برسیم به اونجا...

----------


## Saeed_m_Farid

> سوال فقط همینه که میشه هر برنامه ای رو فقط با سخت افزار پیاده کرد؟
> بنظرم سوال پیش پا افتاده ایه.
> معلومه که میشه. منتها خیلی سخت و پرهزینه میتونه باشه. یک سخت افزار تک کاره.
> ...
> اینطوری فکر کن مثلا بخوای فتوشاپ رو بصورت سخت افزاری پیاده سازی کنی! چقدر زمان چقدر هزینه نمیدونم، و دست آخر هم یک دستگاه داریم که فقط کار همین نرم افزار رو انجام میده. ضمنا از نظر تئوری شدنیه، ولی از نظر منابع مالی و انسانی و زمانی مورد نیاز شاید شدنی نباشه.


 من نظرم مخالف این هست و دلیلش رو گفتم! شما چون میدونی انسان از DNA درست شده، از اون خون / پوست / گوشت و ... تولید میشه و ما روابط ساختاری ارگانیسم ها رو می‌دونیم و ... پس می‌تونید انسان تولید کنید؛ من این رو قبول ندارم و باید دلیل با سند و مدرک بیارید، *معلومه که میشه* و چند تا مثال بی‌ربط دیگه جواب قانع کننده ای نیستند!!!

----------


## Saeed_m_Farid

> اگه یه کمی با تاخیر جواب میدم به خاطر احترام به جناب Esmail Solhkhah بود که جای استاد من هستن و باید اول ایشون شروع میکردناز تورینگ استفاده شد -> *تز تورینگ* !  {
> 
> 1- تز هست یعنی بیشتر دانشمندا قبولش دارن ولی نتونستن اثباتش هم بکنن ...2- چی میگه؟ هر الگوریتمی معادل ماشین تورینگی داره3 -ماشین تورینگ یه مفهوم انتزاعی هست یعنی شما با هرچیزی ممکنه بخوای پیاده سازیش کنی :نرم افزاری ، سخت افزاری ، مکانیکی....4- کی گفته الگوریتم همون نرم افزاره ؟؟! الگوریتم یه چیزه نرم افزار یه چی دیگه دادا !
>   این از تز تورینگ}
> 
> 
> شما یه سری برنامه های کاربردی داری که بواسطه سیستم عامل  میان تبدیل به کد ماشین میشن و در واقع این سیستم عامل هست که دقیقآ تو  تبدیل کدنرم افزار به سخت افزار ( بحث ما) داره رول اصلی رو بازی میکنه؛  اگه لازمه علت وجود سیستم عامل رو هم به چالش بکشیم حرفی نیست !میکشیم  -> میرسیم به مباحث Formal specification که از با استدلال ریاضی ثابت میکنه لازمه وجود این مهم اشتباه نیست!


اگه من هم دیر جواب میدم و یکمی تاخیر دارم، برای اینه که تنها هستم!و اما در مورد شفاف سازی شما! من با *تز تورینگ* کاری نداشتم، درباره _تست تورینگ_ صحبت کردم و اون را با  _تست اتاق چینی ها_  به چالش کشیدم، کما اینکه در پست بعد از اون هم در مورد تز تورینگ تعریف  کوتاهی ارائه دادم؛ ضمناً از واقعیت فرار نمی‌کنم و از سفسطه (در زمینه های  علمی) متنفرم!

1- همین تز و *فلسفۀ ذهن الن تورینگ* شالودۀ  ایده‌هایی که کامپیوتر رقمی را پدید آوردند، هست! خود تورینگ اصطلاح  «کامپیوتر» را –پیش از پیدایش چنین دستگاههایی- در مورد انسانِ در حالِ  محاسبه به کار برد! شما کسی رو می‌شناسید که فلسفه غار افلاطون با اگزیستانسیالیسم سارتر رو اثبات کنه؟! فلسفه رو اثبات نمی‌کنن، ازش استفاده می‌کنن...2- این رو که من هم اذعان دارم3- این مفاهیم انتزاعی برای این درست شدند که برای برخی مفاهیم جدید  دیالکتیک ایجاد بشه، یعنی قبل اون مردم نمی‌دونستن وسیله‌ای که روی یک  نوار پانچ حرکت کنه و یه کارهایی! انجام بده اسمش چی میشه؛ (مثلاً قبل وجود  تلویزیون جام جم مفهوم انتزاعی محسوب می‌شد!) تورینگ با ایجاد این مفهوم  انتزاعی براش اسم گذاشت و یه تحول بسیار بزرگ در علم با همین مفهوم ایجاد  کرد؛ صحبت من اینه که با ترکیب نرم افزار (درصد بسیار بالاتر!) و سخت افزار  همچین انتزاعی به واقعیت نزدیکتر هست تا سخت افزار خالص! که هیچوقت تصورش  هم نمیشه کرد! مثل Wolfram alfa یا  گوگل و ... از دید من ادعای شما مثل اینه که کسی هم به شما بگه چون IC از  سیلسکون درست شده، پس هر کار سخت افزاری رو میشه با شن دریا انجام داد!  (ببریش کارخونه، ذوب کنی، ماشین مکانیکی درست کنی و ...) خوب آخرش میرسه  بازم به سخت افزار دیگه...4- نمیدونم! کی گفته؟! من که نگفتم (دادا!!!)...



> میرسیم به مباحث Formal specification که از با استدلال ریاضی ثابت میکنه لازمه وجود این مهم اشتباه نیست!


 جمله تون رو نفهمیدم، ولی به نظر من Formal specification بیشتر ادعای من رو ثابت می‌کنه تا شما! 



> the formal specification correctly describes the problem to be solved is a separate issue.


درحالیکه issue مدنظر من همین هست که توضیح بده چطور؟ نه اینکه چی؟

----------


## barnamenevisforme

سلام
در ابتدای امر یک سوء تفاهم که فکر میکنم پیش اومده رو برطرف کنم.(البته در صورت تایید خود نویسنده)



> *اصولا هربرنامه نرم افزاری رو میشه با سخت افزار هم پیاده سازی کرد؛ اما وقتی سخت افزاری پیاده سازی بشه هم هزینه ها خیلی میره بالا ، هم تاخیر توی سیستم پیش میاد؛ اینا مشکلات جدا نشدنی استفاده از سخت افزار هست.*


به نظر میرسه که ایشون امکاناتی از جمله برنامه پذیری سیستم های سخت افزاری فعلی توسط برنامه های embedded رو نیز مد نظر قرار دادن که چنین نظری دادن و منطقی هم به نظر میرسه.(با توجه به عمر و امکانات انسان ها)
در این که سیستم هایی مستقل از مبحثی که عرض کردم به صورت کاملا سخت افزاری پیاده سازی شده باشند شکی نیست.(در زمان های پیشین و در سیستم های پیشرفته)
ولی در مورد اینکه آیا میتوان هر سیستم نرم افزاری را با سخت افزار پیاده سازی کرد،با این که هیچ غیر ممکنی غیر ممکن نیست،دور از دسترس است.(با توجه به برداشتی که دوستمون *Saeed_m_Farid* از مسئله مطرح شده ممکنه داشن-پیاده سازی سخت افزاری محض-)

از طرفی پیاده سازی سخت افزاری-کارایی های- یک نرم افزار پس از مشخص شدن قالبی که نرم افزار بر روی سیستم سخت افزاری پیاده میکند،دور از ذهن نیست.
ولی عکس آن به صورت مستقل و به شکل رقابتی تقریبا غیر ممکن به نظر میرسد.(پیاده سازی نرم افزاری،و در مقابل آن طراحی سخت افزار از پایه)
مثل این موضوع به صفر و یک های موجود در خروجی یک نرم افزار می ماند:
رسیدن از نرم افزار- با کارایی خاص- به کد های صفر و یک ممکن، و آسان،ولی در کنار هم چیدن صفر و یک هایی که نرم افزاری با آن خصوصیات ارائه کند سخت و تقریبا ناممکن.

----------


## eshpilen

برنامه چیزی نیست جز چیزی که یک سخت افزار Generic رو برای حل یک مسئلهء خاص الگوریتم بندی میکنه و بصورت یک سخت افزار مختص حل اون مسئله درمیاره. یعنی توسط اون نرم افزار در نهایت تعیین میشه که کدام سیگنالها در چه زمانی کجا باشن و از کجا به کجا برن. چیزی نیست. همش جابجایی و تاثیرات جریان الکتریسیته و الکترون و نیمه هادی هست. بنابراین همچین چیزی رو از نظر تئوریک همیشه میشه ساخت. یعنی اون حالتی رو که یک نرم افزار خاص به سخت افزار منعطف و عمومی/Generic میده میتونید به یک سخت افزار تثبیت شده و از قبل به اون شکل طراحی و پیکربندی شده بدید.

یه چیزی بگم. الگوریتم رو که دیدید با فلوچارت نشون میدن؟
خب فلوچارت چیه؟ آیا مثل یک جریان نیست که وقتی بصورت منطقی دنبال بشه کار میکنه؟ اون جریان میتونه مثل الکتریسیته فرض بشه. مسیرها میتونن سیم فرض بشن. عملا فرق اساسی ای در سطح کلی و انتزاع نیست. فقط جزییات پیاده سازی و سطح های ریزتر و ریزتر وجود دارن و هر عملی که ما اونجا نشون میدیم و مسیری که دنبال میکنیم خودش کلی سیستم و عملیات نیاز داره تا ساخته بشه. برای پیاده سازی هم احتمالا نیاز به یک پالس ساعت برای سویچ شدن مراحل مختلف اون (فلوچارت) داره. یعنی بوسیلهء پالسهای ساعت یجوری اون Step های مختلف رو شبیه سازی کنیم. درواقعیت هم رایانه داره به همین شکل کار میکنه از نظر انتزاع کلی.

هر الگوریتم رو میشه بصورت فلوچارت نشون داد. غیر از اینه؟ گرچه فلوچارت الگوریتم های پیچیده و حجیم طبیعتا خیلی پیچیده و حجیم و کشیدن اون بسیار دشوار یا حتی عملا غیرممکنه. بخصوص که بخوایم تمام جزییات رو درش بیان کنیم. بستگی داره در چه سطحی بخوایم نشون بدیم. چقدر کلی، چقدر جزیی. بهرحال اون جزیی هم خودش یک الگوریتم و فلوچارت داره و چیزی با ماهیت جداگانه ای نیست. همه چیز الگوریتمه. همه چیز جریان و عملیات منطقیه.
مثلا وقتی میگیم A و B رو جمع کن، این عملیات جمع کردن دو عدد خودش الگوریتم و فلوچارت داره، ولی ما در سطح بالاتر اون رو به شکل یک black box درنظر میگیریم و صرفا بهش اشاره میکنیم.

خب پس هر الگوریتم رو میشه با یک فلوچارت معادل کرد.
سوال بعدی اینه آیا میشه اون فلوچارت رو بصورت سخت افزاری پیاده/شبیه سازی کرد.
جوابش روشن نیست؟
چرا نمیشه؟ چی کم داریم مگه؟

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

کاری که نرم افزار میکنه فقط اینه که هر جزء سخت افزار رو در هر لحظهء خاص به شکل خاصی درمیاره.
مثلا یک مکان حافظه در یک نرم افزار به رجیستر A خونده میشه و روش عمل ضرب انجام میشه، در یک نرم افزار دیگه همون مکان حافظه به رجیستر B لود میشه و عمل دیگری روش انجام میشه. خب این کارها رو یک سخت افزار از پیش پیکربندی ثابت شده هم میتونه انجام بده. هرچقدر هم که جزییات و سطح باشه، کافیه از بالاترین و درشت ترین سطح و انتزاع شروع کنیم، و بعد هرکدام از اجزا رو دوباره بصورت الگوریتم و فلوچارت دربیاریم و سپس در سخت افزار پیاده سازی کنیم. البته اول باید از نظر طراحی الگوریتم و فلوچارت به عمیق ترین سطح و کوچکترین و پایه ای ترین واحدهای عملیات برسیم و پیاده سازی عملی رو از اون سطح شروع کنیم، چون سطوح بالاتر رو که نمیشه بدون آماده بودن سطوح پایین تر پیاده سازی کرد!

اما بهرحال همچین چیزی تقریبا هیچوقت به کار هیچکس نمیاد. چون اصلا اصلا صرف نداره یا عملا بخاطر کمبود منابع در واقعیت غیرممکنه.

----------


## amin1softco

در ادامه صحبت *eshpilen* و در پاسخ به Negin.cs و رفع ابهامات :



> *Formalization*
> 
>  Algorithms are essential to the way computers process data. *Many computer programs  contain algorithms that detail the specific instructions a computer  should perform* (in a specific order) to carry out a specified task, such  as calculating employees' paychecks or printing students' report cards.  Thus, an algorithm can be considered to be any sequence of operations  that can be simulated by a Turing-complete system. Authors who assert this thesis include Minsky (1967), Savage (1987) and Gurevich (2000):
>  Minsky: "But we will also maintain, with Turing . . . that any  procedure which could "naturally" be called effective, can in fact be  realized by a (simple) machine. Although this may seem extreme, the  arguments . . . in its favor are hard to refute".[19] Gurevich: "...Turing's informal argument in favor of his thesis  justifies a stronger thesis: every algorithm can be simulated by a  Turing machine ... according to Savage [1987], an algorithm is a  computational process defined by a Turing machine".[20]


حالا این نرم افزار رو برای ما تعریف کنید ببنیم چی هست اصلاً 
تازه وقتی شما تز تورینگ رو رد می کنید به نظرم خودتون صحبت های خودتون را رد می کنید ماشین تورینگ دقیقاً مفهوم انتزاعی از کاری است که شما می خواهید بکنید و قسمتی که *Saeed_m_Farid* ترجمه کرده بود رو اگر برید ادامه اش رو بخونید متوجه محدودیت های ماشین تورینگ می شوید(که شاید سخت افزار تازه این محدودیت ها رو ایجاد نکنه)  به نظرم شما به طور غیر مستقیم می خواهید همون تز رو اثبات کنید. 

در مورد صحبت *barnamenevisforme* که تیتر کاملاً واضح میگه که در سطح پایین تر از سیستم های embedded می خواهند کار کنند. اول که این سیستم ها از نرم افزاری استفاده می کنند که می خواهیم نباشه دوم اینکه این سیستم ها کامپیوتر با توانایی کمتر هستند به نظر من و ما باید از دید مدار منطقی به این قضیه نگاه کنیم.

اما حالا شما همین سخت افزار معمولی رو تولید کن ما فوتوشاپ سخت افزاری نمی خواهیم جهنم ضرر( چقدر من قانع هستم :دی)

----------


## Saeed_m_Farid

> به نظر میرسه که ایشون امکاناتی از جمله برنامه پذیری سیستم های  سخت  افزاری فعلی توسط برنامه های embedded رو نیز مد نظر قرار دادن که  چنین  نظری دادن و منطقی هم به نظر میرسه...از طرفی پیاده سازی  سخت افزاری-کارایی های- یک نرم افزار پس از مشخص  شدن قالبی که نرم افزار  بر روی سیستم سخت افزاری پیاده میکند،دور از ذهن  نیست.


 بله، اینها هرچند در تئوری و بی‌صرفه باشند ولی بحثی درشون نیست...




> ...بهرحال اون جزیی هم خودش یک الگوریتم و فلوچارت  داره و چیزی با ماهیت جداگانه ای نیست. همه چیز الگوریتمه. همه چیز جریان و  عملیات منطقیه.
> مثلا وقتی میگیم A و B رو جمع کن، این عملیات جمع کردن دو عدد خودش  الگوریتم و فلوچارت داره، ولی ما در سطح بالاتر اون رو به شکل یک black box  درنظر میگیریم و صرفا بهش اشاره میکنیم.
> خب پس هر الگوریتم رو میشه با یک فلوچارت معادل کرد.


من با همین بخش از قضیه مشکل دارم؛ نمیشه این رو قبول کرد: چون برخلاف تصور  اکثریت، نرم افزار دیگه یه ماهیت مستقل و بسیار گسترده‌تر از این داره که  بشه با این تعابیر ازش یاد کرد و مشکل دقیقاً همین هست که تمام دنیای  نرم‌افزار معادل با الگوریتم و فلوچارت نیست! مسائلی هستند که از تئوری incompleteness منشعب میشن و این یعنی بوسيله  الگوريتم غير قابل بيان هستند، بنابراين نمي توانند محاسبه گردند!
براي مثال، هيچ ماشيني در حالت كلي نمي تواند بگويد كه يك برنامه داده شده  به ازاء ورودي داده شده در دنیای واقعی نرم‌افزاری (شامل انواع رویدادهای سیستم‌های گسترده) پاسخي باز مي گرداند يا بينهايت بار اجرا خواهد  شد؟!؟!

 چگونه مي توانيم مسئله انجام ناپذير را تشخيص دهيم؟ تئوري NP-completeness (*ساده تر*)  كه بوسيله استفن كوك (1971) و ريچارد كارپ (1972) مطرح شد چنين روشي را  مهيا مي كند. كوك و كارپ نشان دادند، وجود گروه هاي بزرگي از مسائل جستجوي  تركيبي تمركزي و استدلالي، NP-complete هستند. هر گروه مسئله اي كه به گروه  NP-complete تقليل يابد خود نيز جزء مسائل انجام ناپذير شناخته مي شود.  (اگر چه هنوز ثابت نشده كه مسائل NP-complete ضرورتا انجام ناپذير هستند،  نظريه پردازان اندكي به گونه ديگري باور دارند.)*[1]**[1]* نمیدونم منبع اصلی از کجاست ولی خیلی خلاصه مطالب (AI،‌ فلسفه محاسبات و ...) پوشش داده شده و همه از رو دست هم کپی کردن، اصل مطلب گم شده! من هم با کمی تغییر، لینک‌های مطالعاتی و رفع اشکال آوردمش، اگر صاحب اصلی مطلب زمانی به این لینک رسید، منو حلال کنه!

----------


## eshpilen

> من با همین بخش از قضیه مشکل دارم؛ نمیشه این رو قبول کرد: چون برخلاف تصور  اکثریت، نرم افزار دیگه یه ماهیت مستقل و بسیار گسترده‌تر از این داره که  بشه با این تعابیر ازش یاد کرد و مشکل دقیقاً همین هست که تمام دنیای  نرم‌افزار معادل با الگوریتم و فلوچارت نیست! مسائلی هستند که از تئوری incompleteness منشعب میشن و این یعنی بوسيله  الگوريتم غير قابل بيان هستند، بنابراين نمي توانند محاسبه گردند!
> براي مثال، هيچ ماشيني در حالت كلي نمي تواند بگويد كه يك برنامه داده شده  به ازاء ورودي داده شده در دنیای واقعی نرم‌افزاری (شامل انواع رویدادهای سیستم‌های گسترده) پاسخي باز مي گرداند يا بينهايت بار اجرا خواهد  شد؟!؟!


فقط میدونم بهرحال هرچیزی رو که میخوایم به رایانه بدیم تا اجرا کنه بصورت الگوریتم و فلوچارت قابل بیانه. و اجراش چه با رایانه های برنامه پذیر و چه با سخت افزار اختصاصی ممکنه و تفاوت تئوریک بازدارنده ای در این بین وجود نداره. همونطور که گفتم، رایانه های برنامه پذیر صرفا سخت افزارهای ساده تر (*) یا Generic هستن که توسط دستورات نرم افزاری در لحظات مختلف به شکل عملیات و مدارهای اختصاصی تری عمل میکنن. یعنی مثل اینکه ما مدار بندی و طراحی رو مدام در هر ثانیه میلیونها و میلیاردها بار تغییر بدیم.
به خاطر همینه که ساخت سخت افزار اختصاصی برای عملیات و برنامه های پیچیده شاید عملا غیرممکن باشه. چون شما بخاطر هر بخش و عملیات از برنامه در هر لحظه باید یک سخت افزار مخصوص با پیکربندی تثبیت شده طراحی و پیاده سازی کنید، درحالیکه نرم افزار صرفا روی هر واحد و سیستم Generic سخت افزار در هر لحظه بر حسب نیاز زیرکاربرد/زیرجریان و زیرالگوریتم خودش رو پیاده میکنه. در طول اجرای برنامه یک مکان حافظه میتونه برای هزار نوع عملیات و دادهء مختلف براحتی استفاده بشه، و اینها صرفا با خوانده شدن دستورات باینری برنامه انجام میشن. اما اگر همین رو بخواید صرفا با سخت افزار پیاده سازی کنید، اصلا به این راحتی نیست و احتمالا بخاطر محدودیت های فنی لازم میشه بجای یک سیستم و یک مدار صدها و هزاران مدار مورد نیاز باشه.
نرم افزار سخت افزار Generic رو مدام برای کاربردهای مختلف استفاده میکنه. سخت افزار خودش Generic هست و به خودی خود کار خاصی انجام نمیده، اما نرم افزار حاوی نحوهء برقراری ارتباطات دینامیک و الگوریتمی هست که سخت افزار Generic باید خودش رو در هر لحظه بر اساس اون در اختیار برنامه بذاره. سخت افزار نمیفهمه و از قبل هیچ اطلاعی نداره که برنامه میخواد چکار کنه، صرفا یکسری دستورات پایه رو اجرا میکنه. مثل قطعات یک Lego که باهاشون میشه اشکال مختلفی رو ساخت. این نرم افزاره که مدام این قطعات لگو رو به شکلهای مختلف ترکیب میکنه. در هر لحظه از زمان به یک شکل خاص و مورد نیازش. با سرعت خیلی بالا.
نرم افزار باعث استفادهء بهینه از سخت افزاره. چون با یک سخت افزار حداقلی و خیلی ارزان تر و ساده تر میشه حداکثر استفاده رو داشت. درحد هزاران بار و شاید میلیونها بار بهره وری رو بالا میبره. بنابراین ساخت یک سخت افزار اختصاصی میتونه هزاران بار یا میلیونها بار پرهزینه تر و دشوارتر باشه.
و اصلا ما بیهوده داریم از نرم افزار اجتناب میکنیم. نرم افزار چیز آنچنان جدایی از ماهیت رایانه نیست. درواقع شکل بهینه و منعطف و مقرون به صرفه برای ساخت هر ماشین پردازشیه. حتی ماشین هایی که صرفا یک کار یا عملیات خیلی محدودی رو انجام میدن و برای کاربردهای خاص هستن، همون تک کاربردها امروزه اونقدری پیچیده هستن و عملیات و الگوریتم مختلف نیاز دارن که سخت افزار اونها باید اساسا مثل بقیهء رایانه ها باشه. منتها اختصاصی تر و با امکانات کمتر و مثلا برنامش رو هم میریزن توی ROM و بعضی عملیات و سیستمهای جانبی هم ممکنه بیشتر سخت افزاری باشن بجای اینکه در نرم افزار پیاده سازی بشن. ولی الان میبینی همون اجزای جانبی هم خودشون CPU و RAM دارن و یک کامپیوتر اختصاصی خیلی کوچک دیگری هستن!  خب این راهشه دیگه! راه طبیعیش. 
بخصوص بر اثر کوچک تر شدن و ارزانتر شدن و بالا رفتن روز افزون ضریب اطمینان این قطعات و مدارهای منعطف. یعنی چون این سخت افزارهای پردازشی کامل و Generic که قدرت اجرای دستورالعمل های سطح بالاتر رو دارن اینقدر در دسترس قرار گرفتن نتیجتا منجر به امکان پیشرفت امکانات و پیچیده تر شدن و منعطف تر شدن همه چیز شدن. وگرنه مثلا الان شاید ما CD ROM هم نداشتیم و هنوز از Magnetic tape استفاده میکردیم! چون اون عملیات و الگوریتمی که درایو CD ROM برای خوندن و نوشتن باید انجام بده پیچیده هست و باید با سرعت و اطمینان بالا انجام بشه، طبیعتا طراحی و پیاده سازی فیزیکی اون تنها بصورت یک سیستم کامپیوتری کوچک که CPU و ساختار کلاسیک برنامه پذیر رو داشته باشه ممکنه یا حداقل خیلی راحتتر و کم هزینه تره.

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

*: البته درمورد عملیات/الگوریتم های خیلی ساده و محدود مثل اندازه گیری و نمایش دمای محیط، سخت افزار اختصاصی بدون برنامه میتونه عملا ساده تر و کم هزینه تر دربیاد (ولی مسلما برای برنامه های حجیم و پیچیدهء امروزی اصلا داستان یک چیز دیگری میشه).

----------


## eshpilen

بهرحال حتی در رایانه های کلاسیک امروزی هم میشه گفت خیلی از بخشهای درونی اونها تقریبا همین ماهیت سخت افزار ثابت و بدون برنامه رو دارن.
مثلا وقتی CPU با مدارهای جانبی ارتباط برقرار میکنه، دیتا و آدرسهای حافظه رو روی Bus ها میفرسته و از RAM میخونه یا در اون مینویسه، آیا برنامه ای برای انجام این کارها و محاسباتی که لازمه در جایی از سخت افزار ذخیره شده؟ اینا خودشون عملیات ساده ای نیستن و میشه گفت، در سطح خودشون، یک زیربرنامه هستن و زیرالگوریتم دارن. البته محتملا یک سخت افزار پردازشی کم و بیش Generic و دستوراتی کم و بیش مثل برنامه و الگوریتم برای اینطور کارها هم درش وجود دارن. ولی باز شاید یه چیزی بین سخت افزار و نرم افزار تغییر پذیر باشه و Hard code شده هستن (البته این اصطلاح برنامه نویسه ولی فکر میکنم بشه برای توصیف غیررسمی بعضی چیزها در سخت افزار هم بکار برد). حالا فرضا یه برنامه ای برای اینطور کارهای پایهء سخت افزار هم در بین باشه. باز شما اگر از اون سطح هم پایین تر بری بالاخره به یک سطوح و زیرعملیات و سخت افزارهای اختصاصی دیگری که نزدیکتر به موضوع بحث ما باشن باید برسی.
خلاصه عملیات و الگوریتم اگر اونقدر ساده و پایه و کوچک باشه و نیازی به تغییر اون نباشه، براش سخت افزار اختصاصی طراحی و ساخته میشه. ولی در ابعاد بزرگتر و عملیات و الگوریتم پیچیده تر (که احتمال نیاز به تغییر در نحوهء کار اون اجزاء هم بیشتر میشه)، طبیعی هست که پیاده سازی به روش برنامه ای که یک مدار Generic رو مدام تغییر شکل در منطق و عملکرد میده یک روش خیلی معقول تر و راحت تری هست.

----------


## Negin.cs

تیتر این سایت چی نوشته ؟! : 

From C language to FPGA hardware, the easy way!

ابزارها و نرم افزارهای زیادی برای این مورد وجود داره
مثلا C to HDL رو سرچ کنید :

http://llvm.org/devmtg/2010-11/Rotem-CToVerilog.pdf

پس هرنرم افزار رو میشه سخت افزاری هم ساخت و این کار هم اکنون هم انجام میشه...

----------


## amin1softco

> پس هرنرم افزار رو میشه سخت افزاری هم ساخت و این کار هم اکنون هم انجام میشه...


شما منظور ما رو متوجه نمی شوید!!!! این بنده خدا داره انگشتای دستش رو داغون میکنه بعد شما چی لینک میدید.
همین صفحه که لینک دادید برید محدودیت هاش رو بخونید حتی از اعداد اعشاری که در سی وجود داره ساپورت نمی کنه  تازه این فکر نکنم کلاس ها رو در سی ++ ساپورت کنه بعد شما همینجوری می گید همه برنامه ها رو می شه تبدیل کرد . در ثانی گفته به سخت افزار هم نمی تونید در برنامه هاتون ارجاع داشته باشید حالا چطور شما می خواهید شبیه سازی های کامپیوتر رو با این انجام بدید اینم دقیقاً مثل تز تورینگه شاید نشه با قضایا ردش کرد ولی خوب شدنی هم نیست!!!

----------


## eshpilen

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

وگرنه حساب کن همین رایانه ها هم دارن این همه برنامه و الگوریتم رو در نهایت با چند عمل اصلی جمع و ضرب و تفریق و تقسیم و چند عمل منطقی مثل AND و OR و غیره انجام میدن. حتی بعضی عملیات پایه خودشون با عملیات پایه دیگه پیاده شدن. مثلا فکر میکنم تفریق با جمع پیاده سازی شده و مدار اختصاصی تفریق ندارن اکثر رایانه ها (چندبار توی منابع مختلف در این مورد خوندم) بخاطر اینکه هزینه اینطوری میاد پایین.

از نظر تئوریک میشه هر برنامه و الگوریتمی رو با همین امکانات پایه ایجاد کرد. و تمام عملیات تمام برنامه ها هم نهایتا در پایین ترین سطح و کوچکترین اجزای عملیاتی دارن به همین عملیات پایه تبدیل و اجرا میشن. ولی راه شدنی برای بوجود آوردن برنامه ها و الگوریتم های پیچیده تر و انتزاع های سطح بالاتر همون برنامه پذیر بودنه. یعنی اینکه بتونید یک سخت افزار Generic رو بصورت دینامیک برای انجام کارهای مختلف و مسیرها و منطق های گوناگون در هر لحظه پیکربندی کنید. اگر نخواید از این راه عمل کنید اونوقت برای هرکدام از اون عملیات باید یک مدار ثابت تک کاره طراحی و پیاده سازی کنید. مثلا یک مداری که مقدار موجود در آدرس X و Y از حافظه رو بخونه و جمع اونها رو در آدرس Z قرار بده. حالا حساب کنید یک برنامهء امروزی نیاز به چه تعداد مختلفی از این عملیات داره و آیا میخوایم برای هرکدام یک مدار سخت افزاری بسازیم؟
حالا اگر این مدار رو یک مقدار عمومی تر کنیم شاید بتونیم برای مکانهای دیگر حافظه هم ازش استفاده کنیم. اونوقت باید بوسیلهء کدهایی به این مدار بگیم که کدام آدرسها رو بگیره و چه عملیاتی روشون انجام بده و نتیجه رو کجا ذخیره کنه. خب این خودش نسخهء اولیه و بدوی از موجودی است بنام برنامه پذیری! وقتی این روش رو به هرچیزی که ممکنه و صرف میکنه تعمیم بدیم، یک رایانهء برنامه پذیر امروزی بدست میاد!

----------


## eshpilen

راستی دیشب یک مقدار از مقالهء ویکیپدیا درمورد ماشین تورینگ رو خوندم.

کامل و دقیق متوجه نشدم و  بنابراین مطمئن نیستم (مقاله رو هم کامل نخوندم - یخورده هم تئوریک و حالت مجرد و ریاضیاتیش زیاده)، اما فکر میکنم چیزی که جناب تورینگ کشف کرده درواقع این مسئله بوده که یک سخت افزار برنامه پذیر که در طول زمان بصورت Step هایی عمل میکنه و در هر زمان فقط یک عملیات خاص رو انجام میده، میتونه هر چیز قابل محاسبه/پردازش ای رو محاسبه/پردازش کنه.

درواقع تا قبل از اون شاید کسی به این قضیه نرسیده بود و فکر میکردن هر عملیات و پردازشی که نیاز دارن باید یک سخت افزار اختصاصی براش بسازن (سخت افزاری که احتمالا همه یا بخش بزرگی از اون عملیات رو در یک قدم/یکباره انجام میداده). بخاطر همین قادر نبودن عملیات پیچیده و حجیم رو انجام بدن چون ساخت ماشین هایی که بدون روش برنامه پذیر بودن و انجام کار در مراحل و Step ها و شکستن هر عملیات به کوچکترین واحدهای منطقی بتونن اون کار رو انجام بدن عملا غیرممکن بوده.

پس درواقع تورینگ یک روش فوق العاده مفید برای حل مسائل رو پیدا کرد که نیاز به سخت افزارهای خیلی ساده تر و پایه ای تر و ارزان تری داره که صرفا یکسری عملیات پایه رو انجام میدن. اینکه چطور بتونیم بدون افزایش حجم و پیچیدگی سخت افزار، عملیات حجیم تر و پیچیده تری رو روش انجام بدیم: بوسیلهء برنامه و الگوریتمی که در طول زمان بصورت واحدهای پایه ای روی همون سخت افزار اجرا میشه.

درست میگم بنظرتون؟

----------


## Negin.cs

> شما منظور ما رو متوجه نمی شوید!!!! این بنده خدا داره انگشتای دستش رو داغون میکنه بعد شما چی لینک میدید.
> همین صفحه که لینک دادید برید محدودیت هاش رو بخونید حتی از اعداد اعشاری که در سی وجود داره ساپورت نمی کنه تازه این فکر نکنم کلاس ها رو در سی ++ ساپورت کنه بعد شما همینجوری می گید همه برنامه ها رو می شه تبدیل کرد . در ثانی گفته به سخت افزار هم نمی تونید در برنامه هاتون ارجاع داشته باشید حالا چطور شما می خواهید شبیه سازی های کامپیوتر رو با این انجام بدید اینم دقیقاً مثل تز تورینگه شاید نشه با قضایا ردش کرد ولی خوب شدنی هم نیست!!!


اگه یه برنامه ای مثل جاوا نتونه مثلا delegate داشته باشه یعنی ما همچین چیزی نداریم؟؟
نوشته " CoDeveloper does not support floating point types in hardware processes, but interfaces to third-party floating point libraries are planned for a future release."
یه کم درمورد  FPUمطالعه بفرماین
کلاسها و ارثبری مبحث سنگینی درسخت افزار نیست! مطمئن نیستم پشتیبانی بکنه- ندیدم قابلیتهاشو کامل -  ولی verilog synthesis که صددرصد میشه استفاده کرد برای اینها هم!
چرا اینجا کسی از توابع API ویندوزی نمیگه؟! مسلمه وقتی یه برنامه قرار باشه نقش سیستم عامل رو هم خودش بازی کنه دیگه نمیتونه به سخت افزار هم ارجاع داشته باشه!اگه میخواست اون کار رو هم انجام بده دیگه باید یه سیستم عامل طراحی میکردن نه نرم افزار!
به هرصورت ممنون 
موفق باشید.

----------


## Saeed_m_Farid

قبل هرچیز خواهش می‌کنم دوستان یکمی انعطاف پذیری داشته باشن و به هم نپَرن، خودم هم جزو دوستان!  اینجا اومدیم ببینیم کجای معلومات(تئوری)مون ایراد داره، با بحث و تبادل نظر رفع‌شون کنیم و به یک اجماع برسیم؛ در مورد عقاید درونی / دینی / عرفانی صحبت نمی‌کنیم که کسی نقض‌شون کرد، برآشفته بشیم!
پس هرچقدر هم نظرهای همدیگه رو رد کردیم یا در موردشون مباحثه صورت گرفت، اگه درست باشه با این بحث ها تمیزتر میشه دیدمون و اگه اشتباه باشه، هرچه زودتر بفهمیم بهتره...
هرکی اینجا داره نظری میده، معلومه برای رفع مسئولیت، خودنمایی، عقده حقارت، استاد سوال داده و ... نیومده! چون اینجا ما نه تشکر داریم، نه افزایش پست و نه ماهی-سالی کسی از اینطرف ها رد میشه؛ خودمون هستیم و خودمون! پس همه یه level بالاتر از رفع نیاز معمولی هستیم و باارزش...



> اگه یه برنامه ای مثل جاوا نتونه مثلا delegate داشته باشه یعنی ما همچین چیزی نداریم؟؟ نوشته " CoDeveloper does not support floating point types in hardware processes, but interfaces to third-party floating point libraries are planned for a future release."مسلمه وقتی یه برنامه قرار باشه نقش سیستم عامل رو هم خودش بازی کنه دیگه نمیتونه به سخت افزار هم ارجاع داشته باشه! اگه میخواست اون کار رو هم انجام بده دیگه باید یه سیستم عامل طراحی میکردن نه نرم افزار!


نه، من به این میگم سفسطه! وقتی گزاره‌ای برای اثبات مطرح میشه، حتی یک دلیل نقض کافیه که درستی اون رو زیر سوال ببره و هر قانون علمی تا زمانیکه نقیضی براش پیدا نشه دارای ارزش هست؛ هرنوع پافشاری در غیر اینصورت اسمش میشه تعصب بیجا، فارغ از اینکه مطرح کننده نظریه تاج سر دانشمندان هست یا یه فرد معمولی! بدترین چیزی که حداقل مبانی علم رو تهدید میکنه همین هست، مثل نجوم بطلمیوسی یا پیدایش مگس از مردار ارسطو!!! (در نبوغ سرآمد ارسطو و بطلمیوس و ... فکر نمی‌کنم کسی شک داشته باشه!) البته در اینکه محدودیت اعشاری و ... نقیضی برای اصل قضیه باشن، اصلاً تاکیدی ندارم! چون قضیه خیلی عمیق تر از این حرف‌هاست و هیچکس به یکی از لینک ها و صحبت‌های من در پست هام دقت نمی‌کنه و هرکس سعی داره حرف خودش رو بگه، بدون توجه به صحبت‌های دیگران که من همون پست‌های اول گفتم اگه صورت مساله رو درست تحلیل نکنیم، آخر قضیه به مشکل می‌خوریم...بازم مثل قبلی بحث داره به بیراهه کشیده میشه، سیستم عامل قرار هست در لایه زیرین (SSDT،‌Ring0 و ...) ارتباط بین سخت افزار و نرم افزار رو برقرار کنه و در لایه های بعدی مدیریت پروسس ها، Thread ها و نواحی بحرانی و میوتکس و ... و بعد n لایه تازه میرسه به API کاربردی برای سایر نرم‌افزارها! که علاوه بر اینکه خودش مستقیماً با سخت افزار درگیر هست (که کاربران بسیار بندرت می‌تونن به این لایه دسترسی پیدا کنند)، یه واسطی هم به نرم‌افزارهای سطوح بالاتر میده که با سخت افزارهای موردنظر، بسیار مدیریت شده و با درنظر گرفتن هزار تمهیدات،‌ کار کنند؛ پس بصورت دوطرفه سرویس میده؛ تمام اینکارها هم محض احتیاط هست، والا شما می‌تونید در عمل این لایه ها رو دور بزنید، همانطورکه خیلی ها اینکار رو می‌کنند (نمونه اش تو همین سایت: امنیت در نرم افزار و برنامه نویسی و +)بنظرم شما بیشتر زوم کنید رو Firmware که نه نرم افزار محسوب میشه نه سخت افزار! و با اون روش می‌تونید به نتایجی صحیح تر برسید.
____________________
عاجزانه از جناب *eshpilen* خواهش می‌کنم، مطالب‌تون رو یکمی موجز تر بنویسید و درصورت امکان اینقدر تکرار مکررات نکنید؛ به خدا نمیشه خوندشون و آدم اعصابش خورد میشه، چون در تمام پست‌هاتون مطالب مشابه به کرّات تکرار میشه و متاسفانه علیرغم وجود مطالب مفید بیشتر از نصف مطالب نامرتبط و خوره حوصله هستند و دریغ از یک اسنتاد، منبع، لینک و ... در تایید فرمایشات‌! آدم احساس می‌کنه دارید تمرین تایپ یا انشاء کلمات می‌کنید و یا می‌خواهید حوصله و صبر کاربران رو آزمایش کنید! تمنا می‌کنم مستند و کم حجم تر صحبت کنید‌ (اصولاً در صورت جستجو برای صحت مطالب و ذکر منابع صحبت؛ حجم پست‌ها بسیار تقلیل پیدا می‌کنند).

* من فعلاً درگیر دسته بندی و واکشی مطالب مفید از داده های حجیم ایشون و تا اطلاع ثانوی درگیر هستم  :ناراحت:  و با اینکه کلی مطلب می‌خوام مطرح کنم ولی می‌ترسم چیزی رو نادیده گرفته باشم...

----------


## amin1softco

این پست به درخواست یکی از دوستان حذف شد.

----------


## Esmail Solhkhah

با تشکر از همه عزیزانی که در این بحث شرکت میکنند مخصوصا جناب *Saeed_m_Farid* اگه چاپلوسی نباشه ، خیلی به تاپیکهای ایشون علاقه دارم با صبر و حوصله خاصی ، همراه با دانش بالا جواب دوستان رو میدن.
1:



> قبلاً *اینجا* با دوستان بحثی داشتیم که مدل تورینگ (تست تورینگ) و مسائل از این‌دست، جوابگوی تمام مسائل پیرامون ما هستند یا نه؟! بالاخره قبول شد که بلی، *امکان*اش هست


2:



> بیاید قبول کنیم که ماشینی که آلن تورینگ درباره‌اش صحبت می‌کنه، یه *فلسفه* هست، هیچ آدم عاقلی سعی در ساختن چنین چیزی نمی‌کنه! 100% قبول دارم که این نظریه    تأثیر عمده‌ای بر تفکر دربارۀ ذهن داشته (که اونهم از دید من بسیار جای   بحث داره! قبلاً هم کلی بحث کردم در موردش) ولی فقط مباحث فلسفی / ریاضی و   پایه‌ای علوم، نه مسائل عملی


3:



> واقعاً نمیشه این بحث رو ادامه داد! شما هی در مورد نحوه کار سخت افزار /  معماری / پیاده سازی State machine‌ با سخت افزار و ... صحبت می‌کنید و ما!  در مورد الگوهای طراحی / برنامه های گسترده غیر سیستمی / پلت فرم های  متنوع و ... و عدم شباهت‌شون و با اینکه هر دو درست می‌گیم احتمال  توافق‌مون میشه احتمال کشف محیط بیضی!
> ولی درصورتیکه مثلاً ماشین آلن تورینگ رو در نظر بگیریم و بخوایم بگیم تمام  مسائل با اون قابل حل هست؛ بحث‌مون معنی پیدا می‌کنه و میشه در موردش  بصورت آکادمیک صحبت کرد.


4:



> _"با همین سیستم دودویی، داریم الگوریتم های فازی رو می نویسیم، یعنی چیزی که دیگه دودویی نیست و چند ارزشی هست."_


ببخشید اگه دارم از روش خودتون استفاده میکنم ولی برام سوال شده

تو بند اول گفتید مدل تورینگ جوابگوی *تمام* مسائل پیرامون ما (امکانش)هست
تو بند دوم گفتید ولی *فقط* مباحث فلسفی / ریاضی و پایه‌ای علوم، *نه مسائل عملی* و تو بند 4 *نقیض بند 2 رو گفتید و یه مثال عملی زدید*

بالاخره جوابگوی تمام مسائل هست یا نیست ؟ اگه به قول شما جوابگوی مسائل عملی نیست که مطابق بند سوم فرمایشات خودتون وجه اشتراکی بین بحث ما و شما وجود نخواهد داشت.




> در چنین رویکردهایی نیاز رو شما نمی‌تونین محدود به زیاد یا خیلی زیاد، درست حسابیو ... بکنید


عرض بنده این بود که بستر سخت افزاری رو باید متناسب بگیریم با بار پردازشی، مثلا یه نرم افزا سینگل  فروشگاه نیاز به پردازنده هایی مثال Xeon و سرورهای n میلیونی نخواهد داشت و از لحاظ مالی نیز انجام همچین کاری معقول نیست ولی برای یک سیستمی مثل اتوماسیون( فرضا تامین اجتماعی) معقول نیست از یه پردازشگر مثلا Celeron 1.8 استفاده کنیم.




> مثل این میمونه که بگین ما ترکیبات DNA رو میدونیم (بجای  0 و 1 : ﺍﺳﻴﺪ ﻓﺴﻔﺮﻳﻚ، ﻗﻨﺪ ٥ ﻛﺮﺑﻨﻪ ﻭ ﺑﺎﺯ ﺁﻟﻲ) پس می‌تونیم انسان خلق کنیم


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

در مورد ماشین ما ، شعور رو میگیم نرم افزار (روابط حاکم بر قطعات الکترونیکی به خودی خود برقرار هست یا اگر نبود میتوانیم برقرار کنیم)
آیا با داشتن اجزای تشکیل دهنده این ماشین و همچنین شعور حاکم نمیتونیم اونو بسازیم ؟
بحث دقیقا سر این نکته هست ، حداقل در مورد این ماشین آیا نمیشه مهندسی معکوس کرد ؟ در مورد قطعات الکترونیکی که این قضیه قطعی هست چون خود CPU و RAM و ... تماما سخت افزاری هستند نهایتا به کجا میرسیم ؟ به جان کلام این تاپیک (پیاده سازی نرم افزار با سخت افزار) مورد اختلاف همین جاست .

ما نیخواهیم اینجا ماشین تورینگ بسازیم یا احیانا چرخ رو دوباره اختراع کنیم ، هدف اینکه که بیایم و یک کل رو تجزیه کنیم به اجرای سازنده اون ، این اجرا رو بررسی کنیم ، تئوری داناک رو هم قبول داریم پس شعور این اجرا رو هم داریم ،  نمیشه با داشتن اجرای یک کل + شعور حاکم بر اجزا، اون کل رو ایجاد کرد ؟  (با فرض داشتن تکنولوژی لازمه)




> شما چون میدونی انسان از DNA درست شده، از اون خون / پوست / گوشت و ...  تولید میشه و ما روابط ساختاری ارگانیسم ها رو می‌دونیم و ... پس می‌تونید  انسان تولید کنید؛ من این رو قبول ندارم و باید دلیل با سند و مدرک بیارید،  *معلومه که میشه* و چند تا مثال بی‌ربط دیگه جواب قانع کننده ای نیستند!!!


بله بنده هم این رو قبول ندارم ، این مربوط میشه به بعد فیزیکی انسان ،تا بعد متافیزیکی رو درک نکردیم  نمیشه انسان ساخت.




> کسی چنین صحبتی کرد؟ بحث یه چیز دیگه است جناب صالح خان، خودتون هم می‌دونین بحث یه چیز دیگه است؛ خواهشاً شیطونی نفرمایید...


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

بحث شیطونی یا مغالطه یا امثالهم نیست، بحث این نبود که سوال بنده رو شما نقیضش رو پرسیدید بلکه هدف این بود CPU و RAM هر دو قابل پیاده سازی با سخت افزار هستند(ذاتا سخت افزار هستند)




> نه هنوز! چه زود؟ خیلی مونده برسیم به اونجا...


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




> برحسب اتفاق! همون سال 82 بود که ما هم یه پروژه با FPGA محصول Xilinx با دوستان -اونا رفتن دکتر  شدن- کار  می‌کردیم که پایه‌هاش رو من با دلفی 6 - اونزمان دلفی 7 کمیاب  بود!- مقداردهی می‌کردم و تو کد  VHDL اش هم یه فضولی‌هایی کرده بودم، که  دو تا هم سوزوندیم! ...) شما می‌تونید با خیال راحت بدون مقدمات معماری  کامپیوتر در موردشون صحبت کنید


FPGA یه بستر هست برا پیاده سازی اون معماری ، بدون صحبت درمورد معماری حرف از FPGA یا امثالهم به نظرتون درسته ؟ ما قدم به قدم اون معماری رو باید پیاده سازی کنیم حالا یا با LSI یا VLSI یا حتی ترازیستور های FET یا MOS یا ... 

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

جان کلام ما اینه که ما میگیم اون بستر رو میشه بصورت NAND و NOR پیاده سازی کرد ولی از همون اول هم گفتیم هزینه میره بالا و معقول نیست.

*اگه اجازه بدید از این تئوریمون دفاع کنیم* این مستلزم چیه ؟ کاملا مشخصه که ما سخت افزاری خواهیم ساخت مثل کامپیوتر ، باید این کامپیوتر رو تجزیه تحلیل کنیم یا نه ؟ چه سخت افزاری چه نرم افزاری پس اینجا قطعا نیازه اجزا رو بررسی کنیم ولی *هر وقتی خواستیم بریم سر جزئیات شما میگید* :



> یه سطح (یک یا چندش رو نمی‌دونم!) بیاین بالاتر و بحای ALU و Serialize  داده ها در صفر و یک، NAND، NOR و ... اگه قرار هست از سخت افزار هم صحبت  کنیم، دیگه حداقل مدارات مجتمع یا FPGA مورد علاقه شما یا ‌CPU و ... بدون  درگیر شدن با جزئیات رو درنظر بگیریم؟


خب عنوان تاپیک چی بود : *پیاده سازی هر نرم افزاری با NAND و NOR* 
یعنی صریحا به مواردی اشاره کردید که خودتون صحبت در مورد اونا رو منع میکنید . این شد دموکراسی یا دیکتاتوری ؟

بنظر میرسه این تاپیک با این شرایط بهتر بود عنوانش رو میذاشتید : نقد و بررسی ماشین آلن تورینگ.

موفق باشید.

----------


## eshpilen

البته بنده نمیدونم صرفا با NAND و NOR میشه همهء اعمال منطقی و ریاضی رو انجام داد یا نه، ولی اگر این محدودیت رو نذاریم فکر میکنم میشه هر برنامه ای رو بصورت سخت افزاری پیاده کرد. البته از نظر تئوریک! وگرنه از نظر عملی احتمالا صرف نمیکنه یا بخاطر کمبود منابع انسان ممکن نیست.

درمورد منبعی هم که کاربر دیگر داده بودن و ظاهرا برنامه های C ساده و محدودی رو به طراحی FPGA تبدیل میکرد، اینکه گفتید از اعداد اعشاری و اشیاء برنامه نویسی پشتیبانی نمیکنه بنظر بنده حرف روشن و دلیل خاصی نبود. چون پردازش اعداد اعشاری و انتزاعی بنام شیء و اینها در رایانه های کلاسیک هم در نهایت بر همون چند عمل ریاضی و منطقی پایه شکل گرفتن. یعنی موجودیت پایه و اتمیک جداگانه ای نیستن در ریاضیات و منطق که نیازی به ساپورت اونها داشته باشیم. بلکه میشه با همون مدارها و منطق و ریاضیات پایه اونها رو شبیه سازی کرد. که درواقع همهء رایانه ها دارن همین کار رو میکنن.
مثلا آیا ما نمیتونیم اعداد اعشاری رو با استفاده از همون ساپورت اعداد صحیح که وجود داره شبیه سازی کنیم؟ خب یک برنامهء C مینویسیم که این کار رو بصورت قابل نگاشت روی FPGA انجام بده، بعد اون مدار FPGA درست شده رو میتونیم در مدارهای FPGA دیگر بعنوان یک واحد پردازش اعشاری استفاده کنیم.

کلا هم چیزی که ایشون داده فقط نشون میده این کار ممکنه از اونی هم که ما فکر میکنیم خیلی عملی تر و ثابت شده تر باشه، نه اینکه لزوما یک چیز کامل و دقیقا اونی باشه که ما میخوایم.

----------


## amin1softco

ببنید صحبت ما یک رنج خاص رو شامل نمی شه ما میگیم *هر نرم افزاری* یعنی لینوکس که یک سیستم عامل متن باز هست و جزو نرم افزار ها محسوب می شه و سورسش موجوده باید براش یک سخت افزار ایجاد بشه در حالی که اصلاً زیر برنای سیستم عامل سخت افزاری با ماهیت خاص است. به هر حال ما میگیم که چون ما این لایه ها را روی هم چیدیم تا به اینجا رسیدیم از این بالا پریدن پایین نامعقول به نظر می رسه ولی کلاً در این مقطع زمانی هیچ چیزی غیر ممکن نیست . ولی تا جایی که درک و فهم و معلومات من یاری می کنه به قولی از نظر تئوریک *شاید بشه* ولی از نظر عملی همچین *بعید به نظر می رسه* . 
چیزی که کاربر negin.cs لینک دادند دلیل بر این است که یک نرم افزار با کد C که native است و  به اسمبلی تبدیل می شه رو به سخت افزار مورد نظر پورت می کنه جدا از محدودیت هاش حالا من فقط میام در برنامه نویسی از .net استفاده می کنم و managed کد می زنم در اون صورت پای .net با این همه دنگ و فنگ میاد وسط سورسشم موجود برای من درک این مشکله که این فریم ورک و برنامه من چطوری به سخت افزار پورت خواهند شد؟
ولی بازم میگم تخصص من در این زمینه نیست و اظهار نظر ها هم بر اساس علم محدودی است که الان دارم برام مصداق اینه که ما یک استوانه ایجاد کنیم و بگیم اگر با فلان سرعت در این استوانه حرکت کنید شما بر نیروی جاذبه غلبه خواهید کرد . اما بعدش یکی بگه ما می خواهیم استوانه رو تغییر شکل بدیم ما تا نبینیم برامون قبول کردنش سخته....

----------


## Negin.cs

> البته بنده نمیدونم صرفا با NAND و NOR میشه همهء اعمال منطقی و ریاضی رو انجام داد یا نه


مطمئن باشید که امکان پذیره چون این گیتها universal هستن:

http://homepage.cs.uiowa.edu/~ghosh/02-21-08.pdf

مرسی

----------


## Saeed_m_Farid

اگه اجازه بدین، به ترتیبی که بنظر خودم اولویت دارن جواب بدم / سوال کنم:
اول مهمه:



> صلح خواه ، این رو بگیرم انگلیسیتون ضعیفه یا اشتباه تایپی یا خدای نکرده توهین؟ شما با این بار علمی بعیده انگلیسیتون ضعیف باشه ، و در مورد اشتباه تایپی فاصله کاراکترهای موجود روی کیبورد برای کلمه *صالح خان* و *صلح خواه* خیلی زیاد نیست ؟ پس بیزحمت رعایت کنید دوست عزیز.


باور کنید h رو n خونده بودم، چَشم و عذر میخوام‌:( ضمناً چرا بعیده؟ مگه ما نمی‌تونیم خنگ باشیم! اتفاقاً یکی از معایب افرادی مثل من، خالی نبودن لیوان‌مون هست که مانع خیلی پیشرفت ها میشه...
من این حق (کم توجهی به مسائل عادی = خِنگی) رو برای خودم محفوظ نگه می‌دارم چون خیلی جاها بدرد میخوره ...
________________



> بنظر میرسه این تاپیک با این شرایط بهتر بود عنوانش رو میذاشتید : نقد و بررسی ماشین آلن تورینگ.


جدی یا شوخی؟ چون نمی‌دونم قبول می‌کنید یا نه! صحبت از سخت‌افزار بدون نرم‌افزار، دقیقاً به مصداق عکسش بی‌معنی هست! برای همین من عرض کردم صورت مساله مغلطه آمیز هست؛ و تمام صحبت من در همین مورد هست، تئوری مشهور incompleteness گودل و موارد مشابه که (مثلاً state-space explosion یا عموماً پیاده سازی های معماری‌های موازی نرم‌افزاری با سخت افزار) حتی از دید تئوری هم قضیه بی‌نیازی کامل سخت‌افزار از هر نرم‌افزاری رو رد می‌کنن...
________________



> بالاخره جوابگوی تمام مسائل هست یا نیست ؟ اگه به قول شما جوابگوی مسائل عملی نیست که مطابق بند سوم فرمایشات خودتون وجه اشتراکی بین بحث ما و شما وجود نخواهد داشت.


اون 4 بند رو پس و پیش آوردین ولی این بند پایین (درست بعد از نقل قول‌های 1 و 4 مطالب و قبل از 2!) رو که دلیل و برهان اصلی من بود، رو فاکتور گرفتید‌:-؟
_
اونجا هم  نهایت حرف من این شد که :_  _                              برای مثال ما می تونیم زمین رو مرکز  منظومه شمسی درنظر بگیریم و  خورشید و  سایر سیارات رو در مدارات فوق العاده  پیچیده ای در گردش بدور  زمین فرض  کنیم، که معادلات بسیار پیچیده ای رو می  طلبه (که فکر کنم فقط  خود ارشمیدس  باید بیاد حلشون کنه!) : تصور کنید  فیزیک نجومی رو که بر این  مبنا پایه  گذاری شده باشه رو تا کجا میشه بصورتی  بسط داد که به بن بست  نخوره! ولی  بجای اینکار تونستیم ذهنیت زمین مرکزی  رو کنار بذاریم و علم  نجوم منفجر شد.                     _ 


_ در تایید صحبت‌های خودم! تستی بود که اخیراً فیلسوف مشهور John R. Searle در مورد تست تورینگ ارائه داد‌ (جزئیات) و به اتاق چینی‌ها معروف هست، خلاصه‌اش رو از نارنجی براتون میذارم :
_ _                              ... حتی اگه یک کامپیوتر  بتواند این تست [تورینگ] را پاس کند، باز  هم  به معنی این نیست که کامپیوتر همه چیز  را در این ارتباط متوجه شود و  درک  کند. یکی از مهمترین دلایل برای نقض تست  تورینگ، مسئله «اتاق چینی ها»   است.
   نویسنده می گوید، اخیرا به توصیه پروفسور جان سیرل، تجربه ذهنی ای تحت   عنوان «اتاق چینی ها» داشته است. در آنجا ایده اینکه روزی ماشین ها بتوانند   دقیقا مانند انسان فکر کنند به چالش کشیده می شود. 
به این صورت که نویسنده داخل اتاقی قرار گرفته بود و سپس از او خواسته   بودند در برابر سوالاتی به زبان چینی به داخل اتاق فرستاده می شود، یک جواب   به زبان چینی ارائه کند.
اگرچه او هیچ چیزی از زبان ماندارین (Mandarin) بلد نبوده، اما توانسته یک   گفتگوی قابل قبول با شخصی که به ماندارین صحبت می کرد انجام دهد. گرچه او   یک کلمه از این گفتگو را متوجه نمی شده.

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

اینکار خیلی عجیب هست و من اون رو تحریف  (از جنبه علمی، نه سوء رفتار و ...) به حساب میارم! یک ربع الّاف شدم ببینیم خودم چی گفتم؟
_____________



> نمیشه با داشتن اجرای یک کل + شعور حاکم بر اجزا، اون کل رو ایجاد کرد ؟  (با فرض داشتن تکنولوژی لازمه)


بنظر من نمیشه، چون به بن بست می‌خوریم! اگه موضوع بحث این باشه می‌تونم مفصل بازش کنم ولی چون می‌دونم خیلی طولانی میشه فعلاً دست نگه می‌دارم تا فرصت مناسب ...
____________



> همین که بنده میگم نرم افزار داخل حافظه رو میشه بصورت تغییرات ولتاژ در  نظر گرفت و به عقیده بنده این همون سخت افزاره و شما قبول ندارید شد اصل  عدم قطعیت.
> مثل این میمونه که ... اگه کل دنیا هم چشمهاشون آبی باشه دلیل نمیشه نور آبی باشه.


این تفاوت منطق هست و یک بحث فلسفی؛ بخاطر همین هست که میگن نظر هرکسی برای خودش محترم هست، ولی اصل عدم قطعیت هایزنبرگ یک اصل کاملاً فرموله شده به ریاضی هست مبنی بر اینکه: _"غیر ممکن است که همزمان سرعت و مکان الکترون یا هر ذرهٔ دیگری با دقت یا قطعیت دلخواه معین شود"_و مشخصاً به دو عامل *سرعت / مکان* می‌پردازه و درسته که بسیار نظریه جالبی هست ولی به نظر من استفاده ابزاری از این نظریه، بیشتر از منفعت ضرر داره! (تنها استفاده از فرمول و نتایج قطعی)


بقیه اش بمونه واسه بعد چون رئیس اومد گیر داد :( فعلاً هرچی رو جواب ندادم، قبول دارم...

----------

