0% found this document useful (0 votes)
26 views

Finalproject

Uploaded by

Ahmadreza Banaei
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views

Finalproject

Uploaded by

Ahmadreza Banaei
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

‫دانشکده مهندسی برق و کامپیوتر‬

‫پروژه پایانی‬

‫پیاده سازی الگوریتم فشرده سازی ‪ Chain Code‬بر بستر‬


‫‪FPGA‬‬

‫استاد درس‬

‫دکتر صفدرخانی‬
‫فصل اول ‪ :‬آشنایی با فشرده سازی اطالعات و کد گذاری منبع و انواع روش های‬
‫فشرده سازی اطالعات‬

‫فشردهسازی دادهها‬

‫منظور از فشرده سازی اطالعات کاستن از حجم آن به نحوی است که محتوای آن دچار تغییر نامناسبی نشود‪ .‬در علوم کامپیوتر و نظریه‬
‫اطالعات‪ ،‬فشردهسازی داده ها‪ ،‬در واقع فرایند کدکردن اطالعات با استفاده از تعداد بیتهایی کمتر از همان اطالعاتِ کدنَشده‪ ،‬و با‬
‫بهکارگرفتن روشهای ویژۀ کُدکردن است‪.‬‬
‫ارسال و دریافت اطالعات فشردهشده‪ ،‬تنها زمانی کار میکند که هم فرستنده و هم گیرنده اطالعات‪ ،‬روش کدکردن را بدانند‪ .‬به‬
‫همین ترتیب‪ ،‬داده فشردهسازی شده تنها زمانی مفهوم است که گیرنده روش کدگشایی (دیکُدکردنِ‪ ،‬عکس عمل کدکردن) آن را‬
‫بداند‪ .‬فشردهسازی به این دلیل مهم است که کمک میکند مصرف منابع باارزش‪ ،‬مانند فضای هارددیسک یا پهنای باند ارسال‪ ،‬را‬
‫کاهش دهد‪ ،‬که این نکته در کاهش هزینه و جلوگیری از اتالف وقت کمک میکند‪ .‬البته از طرفی دیگر‪ ،‬اطالعات فشردهسازی شده‬
‫برای اینکه مورد استفاده قرار بگیرند باید از حالت فشرده خارج شوند و این فرایند اضافه ممکن است برای بعضی از برنامههای کاربردی‬
‫زیانبار باشد‪.‬‬

‫فشردهسازی بی اتالف اطالعات‬

‫فشردهسازی بیاتالف اطالعات دستهای از الگوریتمهای فشردهسازی اطالعات است که به داده اصلی اجازه میدهد از داده فشردهشده‬
‫دقیقاً بازنویسی شود‪ .‬واژه بیاتالف در تقابل با فشردهسازی بااتالف اطالعات است که در آن داده نوسازیشده‪ ،‬نزدیک به داده اصلی‬
‫است و این کار به خاطر فشردهتر شدن دادهها صورت میگیرد‪.‬‬

‫فشردهسازی بیاتالف اطالعات در بسیاری از برنامهها کاربرد دارد‪ .‬برای نمونه‪ ،‬در گونه فایل ‪ zip‬از این روش فشردهسازی استفاده‬
‫میشود‪.‬‬
‫فشردهسازی بیاتالف زمانی کاربردی میشود که همسانبودن داده اصلی و داده بازسازی شده از نسخه فشرده شده آن‪ ،‬اهمیت داشته‬
‫باشد‪.‬‬
‫فصل دوم ‪ :‬آشنایی با الگوریتم ‪ chain code‬و معرفی ساختار و مدل رفتاری الگوریتم‬
‫یک کد زنجیره ای (‪ ) chain code‬یک الگوریتم فشرده سازی بی اتالف برای تصاویر تک رنگ است‪ .‬اصل اساسی کارکرد کدهای‬
‫زنجیره ای‪ ،‬این است که به طور جداگانه هر یک از تصاویر بهم متصل شده یا به اصطالح "لکه" را در تصویر کد می کند‪.‬‬
‫برای هر یک از این لکه ها ‪ ،‬یک نقطه در مرز انتخاب شده و مختصات آن منتقل می شود‪ .‬سپس رمزگذار در طول مرز منطقه حرکت‬
‫می کند و در هر مرحله یک نماد را نشان می دهد که جهت این حرکت است‪.‬‬
‫این فرآیند تا زمانی ادامه می یابد که رمزگذار به موقعیت اولیه بازگردد‪ ،‬در آن نقطه لکه به طور کامل شرح داده شده است و‬
‫رمزگذاری با لبه بعدی در تصویر ادامه می یابد‪.‬‬
‫این روش رمزگذاری مخصوصا برای تصاویری که شامل تعداد قابل قبولی از اجزای بزرگ متصل به هم می باشد‪ ،‬مؤثر است‪.‬‬
‫در این پروژه‪ ،‬هدف پیاده سازی کدینگ زنجیره ای فریمن هشت جهته (‪ )FCCE1‬میباشد‪.‬‬

‫شکل ‪ .1‬جهت ها در الگوریتم ‪ Chain Code‬و یک مثال از انجام کدینگ‬

‫در پردازش تصویر بنا به دالیلی که در فصل اول گفته شد ‪ ،‬گاه الزم است که تصاویر را کد کنیم‪ .‬الگوریتم های کد کردن تصویر با‬
‫استفاده از بخش بندی تصویر تالش می کنند تا خصوصیات بخش های مهم و شناخته شده تصویر را به گونه ای مؤثر و به نحوی که‬
‫بازسازی مجدد تصویر با دقت کافی امکان پذیر باشد‪ ،‬توصیف کنند‪ .‬الگوریتم های متعددی برای کد کردن تصویر وجود دارد‪ .‬الگوریتم‬
‫‪ chain code‬یکی از الگوریتمهای کد کردن تصویر می باشد‪ .‬در این الگوریتم که برای کد کردن لبه های یک شیء استفاده می‬

‫‪1‬‬
‫‪Freeman Chain Code of Eight Directions‬‬
‫شود‪ ،‬هریک از پیکسل های لبه شیء با یکی از ‪ ۸‬بردار جهت نشان داده شده در شکل ‪ 1‬بیان می شوند‪ .‬به این ترتیب با تخصیص‬
‫کد به هریک از این بردارهای جهت می توان لبه یک شیء را کدگذاری کرد‪ .‬از طرف دیگر‪ ،‬با استفاده از ‪ chain code‬میتوان‬
‫ویژگیهای آماری متعددی از شیء از قبیل طول‪ ،‬عرض‪ ،‬محیط و مساحت را محاسبه نمود‪ .‬از این پارامترها میتوان در مراحل نهایی‬
‫پردازش تصویر برای شناسایی و تصمیم گیری در مورد تصویر و همچنین مقایسه میان اشیاء مختلف موجود در تصاویر استفاده کرد‪.‬‬
‫در ضمن باید به این نکته توجه داشت که الگوریتم ‪ chain code‬تنها بر روی تصاویر باینری قابل پیاده سازی است‪.‬‬

‫عملکرد الگوریتم به این صورت است که پس از یافتن اولین پیکسل لبه شیء موجود در تصویر‪ ،‬جهت حرکت به سمت پیکسل بعدی‬
‫روی لبه شیء در جهت ( یا خالف جهت عقربه های ساعت با توجه به یکی از ‪ ۸‬جهت موجود تعیین گردیده و ذخیره می گردد‪ .‬پس‬
‫از آن با اجرای الگوریتم روی پیکسل بعدی‪ ،‬جهت حرکت به سمت پیکسل بعد از آن تعیین می گردد‪ .‬این کار آنقدر ادامه می یابد‬
‫تا مجددا به پیکسل ابتدایی باز گردیم‪.‬‬
‫در ادامه و شکلهای زیر مثالهایی از نوع استاندارد الگوریتم فشرده سازی ‪ chain code‬برای فهم بهتر آورده شده است‪( .‬با توجه‬
‫به جمع آوری مثال ها از منابع مختلف کد مرتبط با جهت ها ممکن است متفاوت باشد ولی روش یکسان است‪).‬‬

‫مثال ‪: 1‬‬
‫مثال ‪: 2‬‬

‫مثال ‪: 3‬‬
‫مثال ‪: 4‬‬

‫مثال ‪: 5‬‬

‫مثال ‪: 6‬‬
‫فصل سوم ‪ :‬پیاده سازی الگوریتم ‪ chain code‬بر روی مدارات منطقی قابل برنامه‬
‫ریزی ‪FPGA‬‬
‫با مشاهده محیط یک شیء توپر‪ ،‬می توان مالحظه کرد که خصوصیات ‪ chain code‬یک ناحیه بسته در صورتی که نقطه شروع آن‬
‫در نظر گرفته نشود‪ ،‬منحصر به فرد است و کد حاصل از الگوریتم برای یک پیکسل‪ ،‬تنها به همان پیکسل و ‪ ۸‬پیکسل همسایه آن‬
‫بستگی دارد‪ .‬با توجه به این امر‪ ،‬برای پیاده سازی الگوریتم ‪ chain code‬بر روی ‪ ،FPGA‬کافی است که روشی برای یافتن جهت‬
‫حرکتبه سمت پیکسل بعدی به دست آوریم‪ .‬به این ترتیب برای یافتن کد (جهت حرکت) بعدی‪ ،‬کافی است که جهت کد فعلی را‬
‫دنبال کرده تا به پیکسل بعدی لبه برسیم‪.‬‬

‫در ابتدا خاطر نشان می شود که فرض ما برای طراحی الگوریتم ‪ ، chain code‬توپر بودن شیء است و همچنین فرض می کنیم‬
‫که تنها یک شیء در داخل تصویر وجود دارد‪ .‬ضمنا جهت حرکت روی لبه برای یافتن ‪ chain code‬را نیز در خالف جهت‬
‫عقربه های ساعت در نظر می گیریم‪ .‬همچنین به جهت حرکت صحیح بر روی اشکال اولویت حرکت همواره با انتخاب ابتدا‬
‫راست ترین پیکسل روشن و سپس حرکت به سمت خالف جهت عقربه های ساعت خواهد بود‪.‬‬

‫برای تولید کد مربوط به یک پیکسل به صورت زیر عمل می کنیم‪:‬‬


‫با توجه به حالت های مختلف پیکسل های همسایه و با توجه به جهت حرکت روی لبه که در خالف جهت عقربه های ساعت می‬
‫باشد‪ ،‬حداکثر ‪ ۸‬کالس مختلف برا ی تشخیص موقعیت پیکسل بعدی روی لبه وجود دارد که در شکل ‪ ۲‬نشان داده شده است‪ .‬در‬
‫این شکل‪ ،‬منظور از ‪ P‬پیکسل قبلی روی لبه ‪ ،‬منظور از © پیکسل روی لبه در حال پردازش فعلی و منظور از ‪ X‬پیکسل های خالی‬
‫هستند‪.‬‬

‫نکات مهم ‪:‬‬


‫‪ . 1‬همواره باید با توجه به لبه های تصویر ‪ ،‬اولویت لبه ها برای کد کردن تصویر با توجه به حرکت در خالف جهت حرکت عقربه های‬
‫ساعت و با برتر قرار دادن لبه های راست و باال به ترتیب نسبت به سایر لبه ها حرکت و کدگذاری انجام شود‪.‬‬
‫‪ .۲‬همواره باید با توجه به ‪ ۸‬جهت حرکت دقت داشت که حرکت میتواند بصورت اریب هم صورت پذیرد‪ .‬پس بنابراین در شکل زیر‬
‫مورد سمت راست (‪ ۸‬جهته) مالک حرکت صحیح خواهد بود‪.‬‬

‫‪ . 3‬در تمامی اشکال فرض بر این است که جسم کامال توپر بوده و هیچ فضای خالی در داخل جسم بوسیله پیکسل های روشن احاطه‬
‫نشده است‪.‬‬
‫در بخش قبل الگوریتم ‪ chain code‬به گونه ای مناسب برای پیاده سازی روی ‪ FPGA‬طراحی گردید‪ .‬می توان الگوریتم فوق را‬
‫ابتدا با استفاده از زبان ‪ verilog‬توصیف سخت افزاری کرده و سپس برنامه مذکور را روی ‪ FPGA‬پیاده سازی کرد‪ .‬در این بخش به‬
‫بررسی الگوریتم برنامه نوشته شده توسط زبان توصیف سخت افزار ‪ verilog‬می پردازیم‪.‬‬
‫این سخت افزار به صورت ‪ State Machine‬عمل می کند‪ ،‬لذا انجام هر کاری در آن وابسته به لبه های باال رونده ورودی ‪ CLK‬است‪.‬‬
‫به این ترتیب سرعت پردازش کدها نیز با سرعت ‪ CLK‬ورودی متناسب است‪ .‬این ماشین حالت سه وضعیت دارد که در ‪ state‬اول‪،‬‬
‫مقدار دهی اولیه انجام می گیرد (‪ .)ST1‬در ‪ state‬دوم یافتن اولین پیکسل روشن در لبه یا اولین لبه شیء انجام می شود (‪ )ST2‬و‬
‫در سومین ‪ state‬کدهای مربوط به پیکسل های لبه شیء تا بازگشت به اولین پیکسل لبه تولید می شود‪.‬‬
‫(‪ .)ST3‬در این سخت افزار از یک بیت خروجی به نام ‪ Error _ Flag‬برای نشان دادن هرگونه خطا در دیتای ورودی استفاده می‬
‫شود‪ .‬در صورتی که مقدار آن '‪ '1‬باشد‪ ،‬نشان دهنده وقوع خطا در تصویر می باشد‪.‬‬
‫این سخت افزار کل تصویر را در خود ذخیره خواهد کرد ‪ ،‬باید در هنگام وارد کردن اطالعات مربوط به همسایه های پیکسل جاری‬
‫به این نکته توجه کرد که اگر پیکسل جار ی جزء کناره تصویر می باشد و پیکسل های همسایه در خارج از تصویر قرار می گیرند‪،‬‬
‫آنها را '‪ '0‬در نظر می گیریم‪.‬‬
‫عملکرد برنامه به شرح زیر است‪:‬‬
‫در ابتدا باید ورودی ‪ Start‬را ‪ 1‬کرد تا وضعیت برنامه به ‪ ST1‬منتقل شود‪ .‬در صورتی که ‪ Start‬غیرفعال شده باشد‪ ،‬در لبه باال رونده‬
‫بعدی ‪ ، CLK‬ماژول استارت نشده و همچنان در ‪ state‬اول باقی میماند‪ .‬با ‪ 1‬شده استارت و آماده شدن داده ورودی ‪ ،‬وضعیت مدار‬
‫به ‪ state‬دوم تغییر پیدا میکند‪ .‬در وضعیت ‪ ، ST2‬آدرس اولین پیکسلی که باید ابتدا توسط دانشجو به عنوان اولین لبه تشخیص‬
‫داده شده وارد شود ‪ .‬در این صورت وضعیت برنامه به ‪ ST3‬تغییر می کند‪.‬‬
‫اگر پس از وارد کردن دیتای کلیه پیکسل ها با توجه به ابعاد تصویر ‪ ،‬هیچ پیکسل با مقدار 'ا' پیدا نشود‪ Error _ Flag ،‬به نشانه خطا‬
‫در تصویر '‪ '1‬می گردد‪ .‬همچنین اگر در هر یک از مراحل حرکت بر روی لبه تصویر مشکلی در حرکت بوجود بیاید مجددا این بیت‬
‫به نشانه خطا در کد کردن لبه تصویر ‪ 1‬خواهد شد‪.‬‬
‫برنامه در وضعیت ‪ ، ST3‬پس از دریافت پیکسل جاری '‪ '1‬به همراه همسایه های آن‪ ،‬کد متناظر با آن را تولید می کند‪ .‬با توجه به‬
‫کد تولید شده‪ ،‬جهت حرکت روی لبه شیء مشخص می شود و به این ترتیب‪ ،‬برنامه لبه را شناسایی کرده و به کار خود ادامه می‬
‫دهد ‪ .‬این کار تا هنگامی که برنامه دوباره به اول ین پیکسل شیء برسد ادامه می یابد‪ .‬در هر مرحله از کار که دیتای اشتباهی وارد‬
‫گردد و یا چینش دیتای ورودی به نحوی باشد که آدرس پیکسل ها از محدوده مجاز خود خارج شود‪ Error - Flag ،‬به نشانه وجود‬
‫خطا '‪ '1‬می گردد‪.‬‬
‫در هنگام تولید کد مربوط به پیکسل جاری‪ ،‬کد تولید شده در خروجی به کاربر نشان داده می شود‪ .‬البته امکان ذخیره کدها در یک‬
‫حافظه خارجی وجود دارد‪ .‬در صورت نیاز به ذخیره کدها‪ ،‬می بایست از یک متغیر شمارنده برای شمارش کدها در برنامه استفاده‬
‫کرد که با تولید هر کد جدید‪ ،‬این کد به عنوان ورودی دیتای حافظه با توجه به مقدار شمارنده در آدرس مربوطه در حافظه ذخیره‬
‫گردد‪.‬‬
‫برای این که وارد کردن دیتای هر پیکسل به صورت دستی انجام نگیرد نیز بایستی از یک حافظه استفاده نمود‪ .‬در یک روش‬
‫پیشنهادی می توان کلیه مقادیر مورد نیاز برای دیتای هر پیکسل را از قبل در خانه های حافظه جای داد‪ .‬در این روش به عنوان‬
‫مثال‪ ،‬در آدرس ‪ 1‬از حافظه‪ ،‬مقادیر پیکسل ‪ 1‬تصویر به همراه پیکسل های همسایه آن قرار می گیرند و به همین ترتیب برای پیکسل‬
‫های دیگر خانه های بعدی حافظه پر می شوند‪ .‬حال به جای اینکه برنامه در هر لحظه آدرس سطر و ستون پیکسل جاری را بدهد‪،‬‬
‫با اعمال تغیی راتی‪ ،‬برنامه در هر لحظه آدرس پیکسل مورد نیاز از حافظه را در خروجی خود ظاهر می سازد که به این ترتیب با اتصال‬
‫این خروجی به خط آدرس حافظه‪ ،‬می توان مقادیر پیکسل جاری و پیکسل های همسایه را از حافظه دریافت کرده و کد متناظر با‬
‫آن را تولید کرد‪.‬‬
‫پس از اتمام کار تولید کدها با رسیدن به پیکسل ابتدایی‪ ،‬محیط و مساحت شیء محاسبه و در خروجی نشان داده می شود‪ .‬در ضمن‬
‫آدرس موجود در خروجی نیز در انتهای کار‪ ،‬نشان دهنده اولین پیکسل شیء هستند که این آدرس می تواند برای بازیابی مجدد‬
‫شیء از ‪ chain code‬موجود‪ ،‬مفید باشد‪.‬‬
‫فصل چهارم‪ :‬نکات مهم در تحویل پروژه‬
‫الف) ضمن آشنایی با الگوریتم فشرده سازی ‪ chain code‬و مدل کالسیک (‪ )F8‬معرفی شده‪ ،‬سخت افزاری طراحی کنید که بر‬
‫مبنای ‪ Top_Module‬زیر رفتار کند‪:‬‬

‫‪code‬‬
‫‪reset‬‬ ‫‪done‬‬

‫‪CLK‬‬ ‫‪error‬‬
‫‪start‬‬ ‫‪Chain code‬‬ ‫‪perimeter‬‬
‫‪encoder‬‬ ‫‪area‬‬

‫‪Start pixel_X‬‬

‫‪Start pixel_Y‬‬

‫جزئیات پورت های ورودی و خروجی به شرح زیر است‪:‬‬


‫الف ) ورودی ها ‪:‬‬
‫‪ : Reset‬برای ریست کردن ماژول کد گذار‬
‫‪ : CLK‬کالک اصلی سخت افزار‬

‫‪ : Start‬برای شروع کار ماژول کد گذار بر روی تصویری که از قبل در ‪ blk memory‬قرار گرفته است‪.‬‬
‫ب ) خروجی ها‪:‬‬

‫‪ : Code‬کد خروجی تولید شده توسط ماژول کد گذار بعد از اتمام عملیات که به صورت ‪ UART‬به بیرون ارسال میگردد‪.‬‬
‫‪ : Done‬فرمان اتمام عملیات کد گذاری که پس از اتمام کد گذاری ‪ 1‬خواهد شد‪.‬‬
‫‪ : Error‬اعالم وجود یا عدم وجود مشکل و خطایی در هر یک از عملیات های پردازش تصویر که در صورت وقوع خطا ‪ 1‬خواهد شد‪.‬‬
‫‪ : Perimeter‬محیط تعیین شده برای تصویر داده شده بر اساس اندازه لبه هر پیکسل‬
‫‪ : Area‬مساحت تصویر داده شده (تعداد پیکسل های روشن تصویر)‬
‫‪ : Start pixel‬مختصات پیکسلی که به عنوان اولین لبه تصویر توسط ماژول تشخیص داده شده است‪.‬‬

‫تصاویر نمونه برای تشخیص صحت سخت افزار توصیف شده به شرح زیر میباشد‪.‬‬
‫تصویر شماره ‪: 1‬‬

‫تصویر شماره ‪: ۲‬‬

‫تصویر شماره ‪: 3‬‬


‫نکات مهم در توصیف سخت افزاری مدار ‪:‬‬

‫تصویر باینری داده شده بایستی ابتدا توسط نرم افزار و زبان های برنامه نویسی های مربوطه (مانند نرم افزار متلب و یا هر زبان برنامه‬
‫نویسی دلخواه) به مقادیر پیکسلی (‪ )raw format‬تبدیل گردد‪.‬‬
‫مقادیر پیکسلی تصویر میبایست ابتدا در یک فایل (طبق فرمت خاص) قرار گرفته و به هنگام توصیف سخت افزار همگی در یک‬
‫‪ ipcore‬از نوع ‪ ram‬قرار بگیرند‪ .‬لذا رعایت ترتیب ذخیره سازی پیکسل ها به هنگام خواندن از ‪ ipcore‬مهم خواهد بود‪.‬‬
‫داده های ورودی ماژول کد گذار نیز در هر لحظه با توجه به نیاز از ‪ ipcore‬خوانده میشوند‪.‬‬
‫در ابتدا ماژول کد گذ ار میبایست به تشخیص اولین پیکسل روشن ( اولین لبه تصویر) بپردازد و عملیات کد گذاری را از آنجا آغاز‬
‫کند‪.‬‬
‫جهت کد گذاری همانند مدل کالسیک ‪ ۸‬جهته با رعایت اولویت گفته شده و در خالف جهت عقربه های ساعت خواهد بود‪.‬‬
‫پس از پایان عملیات کدگذاری میبایست کد خروجی در قالب ارتباط سریال از نوع ‪ UART‬به سمت گیرنده ارسال گردد‪ .‬مشخصات‬
‫مورد نیاز برای ارتباط سریال از نوع ‪ UART‬به شرح زیر خواهد بود‪:‬‬
‫‪Clock frequency : 50 Mhz‬‬
‫‪Baud rate : 9600 Bps‬‬

‫تصویر ورودی ‪ 46×46‬پیکسل بوده و انتخاب تمامی عرض بیت های مورد نیاز ورودی و خروجی ماژول و نوع ‪ ipcore‬انتخاب شده‬
‫از جنس حافظه و عرض بیت های آن بر عهده دانشجو میباشد‪.‬‬
‫بهتر است توصیف سخت افزاری با توجه به رعایت ماشین حالت انجام شود با این حال تمامی توصیف های سخت افزاری صحیح بغیر‬
‫از ماشین حالت نیز نمره کامل را خواهند گرفت‪.‬‬
‫ب ) ضمن آشنایی با الگوریتم فشرده سازی ‪ chain code‬و مدل کالسیک معرفی شده آن و طراحی سخت افزاری کد گذار آن ‪،‬‬
‫سخت افزاری طراحی کنید که بر مبنای ‪ top_module‬زیر رفتار کند‪:‬‬

‫‪code‬‬ ‫‪pixels‬‬

‫‪reset‬‬ ‫‪done‬‬

‫‪CLK‬‬ ‫‪error‬‬

‫‪start‬‬
‫‪Chain code‬‬
‫‪perimeter‬‬
‫‪decoder‬‬
‫‪area‬‬

‫‪Start pixel_X‬‬

‫‪Start pixel-Y‬‬
‫جزئیات پورت های ورودی و خروجی به شرح زیر است‪:‬‬
‫الف ) ورودی ها ‪:‬‬
‫‪chain code‬‬ ‫‪ : code‬برای وارد کردن‬
‫‪ : Reset‬برای ریست کردن ماژول کد گشا‬
‫‪ : CLK‬کالک اصلی سخت افزار‬
‫‪ : Start‬برای شروع کار ماژول کد گشا بعد از آماده شدن کد و یا شروع مجدد ماژول کد گشا‬
‫‪ : Perimeter‬محیط تعیین شده برای تصویر داده شده بر اساس اندازه لبه هر پیکسل‬
‫‪ : Area‬مساحت تصویر داده شده (تعداد پیکسل های روشن تصویر)‬
‫‪ : Start pixel‬مختصات پیکسلی که به عنوان اولین لبه تصویر توسط ماژول تشخیص داده شده است‪.‬‬
‫ب ) خروجی ها‪:‬‬
‫‪ : pixels‬رسم تصویر اولیه از طریق ‪ 1‬کردن پیکسل هایی که روشن هستند (دو بعدی)‬
‫‪ : Done‬فرمان اتمام عملیات کد گشایی که پس از اتمام کد گزاری ‪ 1‬خواهد شد‪.‬‬
‫‪ : Error‬اعالم وجود یا عدم وجود مشکل و خطایی در هر یک از عملیات های پردازش تصویر که در صورت وقوع خطا ‪ 1‬خواهد شد‪.‬‬

‫نکات مهم در توصیف سخت افزاری مدار ‪:‬‬


‫‪UART‬‬ ‫‪ -1‬در ابتدا پس از دریافت کد و اولین پیکسل تشخیص داده شده لبه توسط ماژول کد گذار از طریق ارتباط سریال از نوع‬
‫میبایست این دو ورودی از هم تفکیک شده و به ورودی های ماژول کد گشا وارد شوند‪.‬‬
‫‪ -۲‬سپس عملیات کد گشایی با فرمان ‪ start‬شروع شده و به ترتیب با توجه به جهت حرکت طبق کد پیکسل های لبه روشن‬
‫میگردند‪.‬‬
‫‪ -3‬در نهایت با توجه به مقدار محیط و مساحت و بدست آمدن لبه تصویر اصلی سایر پیکسل های داخل لبه با فرض روشن بودن از‬
‫ابتدا ‪ ،‬روشن میگردند‬
‫‪ -6‬پس از اتمام کار خروجی ‪ ۲‬بعدی شامل تمامی درایه های پیکسلی تصویر و با در نظر گرفتن ‪ 1‬به عنوان پیکسل روشن در درایه‬
‫مربوطه مشخص میشود و عمال تصویر اولیه رسم خواهد شد‪.‬‬

‫‪ -5‬تصویر خروجی ‪ 46×46‬پیکسل بوده و انتخاب تمامی عرض بیت های مورد نیاز ورودی و خروجی ماژول و نوع ‪ ipcore‬انتخاب‬
‫شده از جنس حافظه و عرض بیت های آن بر عهده دانشجو میباشد‪.‬‬
‫بهتر است توصیف سخت افزاری با توجه به رعایت ماشین حالت انجام شود با این حال تمامی توصیف های سخت افزاری صحیح بغیر‬
‫از ماشین حالت نیز نمره کامل را خواهند گرفت‪.‬‬
‫نکات مهم در مورد گزارش پروژه ‪:‬‬

‫‪ -1‬با توجه به ساختار ‪ ، Top Down Design‬تمامی زیر ماژول های مناسب را پیاده سازی کنید‬

‫‪ -۲‬زیر ماژول های تعریف شده را تک تک طراحی کنید و صحت کار آن را از طریق شبیه سازی تست کنید‪.‬‬
‫‪ -3‬با استفاده از زیر ماژول ها پروژه کلی را پیاده سازی و شبیه سازی کنید‪.‬‬

‫موفق باشید‪.‬‬

You might also like