DSD_Assignment_3.pdf

‫به نام خدا‬
‫نیم سال دوم ‪3141-49‬‬
‫مدرس ‪ :‬حسینی‬
‫دستیار آموزشی ‪ :‬جهاندار‬
‫مهلت تحویل ‪3149/3/31 :‬‬
‫طراحی سیستمهای دیجیتال‬
‫تمرین سری سوم‬
‫توصیف در سطح رفتاری‬
‫دانشگاه صنعتی شریف‬
‫دانشکده مهندسی کامپیوتر‬
‫سؤال ‪1‬‬
‫الف) تراشه ‪ 47HC467‬یک شیفت رجیستر ‪ 8‬بیتی با ورودی سریال و خروجی موازی است‪ .‬در این تمرین شما میبایست‬
‫تراشه فوق را به زبان توصیف سختافزار ‪ Verilog‬مدل نمایید‪ .‬برای آشنایی با نحوه عملکرد این تراشه میتوانید از کاتالوگ‬
‫آن کمک بگیرید‪،‬این کاتالوگ در وبسایت درس آپلود شده است‪ .‬برای توصیف این تراشه‪ ،‬طبق شکل صفحه ‪ 1‬کاتالوگ‪،‬‬
‫ابتدا ماجول های فیلیپ فالپ با مشخصات مندرج در شکل را نوشته‪ ،‬سپس با اتصال آنها به یکدیگر تراشه فوق را مدل‬
‫نمایید‪ .‬برای نام گزاری پایههای ورودی و خروجی ماجول‪ ،‬دقیقاً از عبارات مندرج در کاتالوگ استفاده نمایید‪.‬‬
‫برای ماجول طراحیشده یک ‪ Testbench‬به زبان ‪ Verilog‬نوشته و ماجول ساختهشده را دقیقاً آزمایش نمایید‪ .‬برای آزمایش‬
‫مدار‪ 3 ،‬رقم آخر شماره دانشجویی خود را بهصورت یک عدد عالمتدار ‪ 8‬بیتی وارد شیفت رجیستر نمایید‪.‬‬
‫ب) توسط ماجول ساختهشده در بخش الف‪ ،‬یک شیفت رجیستر ‪ 13‬بیتی بسازید و توسط یک ‪ Testbench‬آن را آزمایش‬
‫نمایید‪ .‬برای آزمایش مدار شماره دانشجویی خود را بهصورت یک عدد ‪ 13‬بیتی عالمتدار وارد رجیستر نمایید‪.‬‬
‫‪ ‬فایلهایی که میبایست تحویل داده شوند ‪ :‬فایل توصیف شیفت رجیستر به زبان ‪ Verilog‬و فایل های‬
‫‪Testbench‬‬
‫‪ ‬مواردی که میبایست در گزارش قید شود ‪ :‬جدول عملکرد شیفت رجیستر‪ ،‬تصاویر پنجره ‪ Wave‬نرم افزار‬
‫‪ Modelsim‬برای هر دو ‪ ( Testbench‬در پنجره ‪ Wave‬برای خروجی ها از ‪ Radix‬های ‪ Unsigned‬و ‪Signed‬‬
‫استفاده نمایید ) ( برای تنظیم ‪ Radix‬بر روی پورت ها کلیک راست نموده و از منوی ‪ Radix‬پایه مناسب را‬
‫انتخاب نمایید)‬
‫سؤال ‪2‬‬
‫( دارای تحویل حضوری )‬
‫الف) یک شمارنده باال‪/‬پایین ‪ 13‬بیتی باقابلیت بارگذاری موازی و تنظیم مقدار افزایش و کاهش طراحی نمایید‪ .‬این شمارنده‬
‫میبایست دارای پایه ‪ CLK ، RESET‬و ‪ COUNT_ENABLE‬باشد‪ .‬طرح شما باید دارای ورودی و خروجیهایی به شرح‬
‫زیر باشد ‪:‬‬
‫(‪module updown_46bit_counter‬‬
‫‪input‬‬
‫‪I_CLK,‬‬
‫‪input‬‬
‫‪I_COUNT_ENABLE,‬‬
‫‪input‬‬
‫‪I_RST,‬‬
‫‪input‬‬
‫‪I_INC_DEC,‬‬
‫‪input [46:0] I_PAR_LOAD,‬‬
‫‪input‬‬
‫‪I_PAR_LOAD_ENABLE,‬‬
‫‪input [51:0] I_STEP,‬‬
‫‪output [46:0] O_COUNT,‬‬
‫‪output‬‬
‫‪O_OVF_UVF,‬‬
‫;)‬
‫پالس ساعت ورودی‬
‫ورودی فعالسازی شمارش ‪ /‬فعال باال (‪)Active High‬‬
‫ورودی بازنشانی غیر همزمان (‪)Asynchronous Reset‬‬
‫ورودی جهت شمارش ‪ – 3 ،‬باال ‪ - 0 /‬پایین‬
‫ورودی بارگذاری موازی‬
‫ورودی فعالسازی بارگذاری موازی ‪ -3 ،‬بارگذاری موازی ‪ -0 /‬عملکرد عادی‬
‫مقدار افزایش و کاهش در هر پالس ساعت ‪ /‬عدد ‪ 31‬بیتی بدون عالمت‬
‫مقدار خروجی شمارنده‬
‫نشانگر وجود ‪ Overflow‬و یا ‪Underflow‬‬
‫‪I_CLK‬‬
‫‪I_COUNT_ENABLE‬‬
‫‪I_RST‬‬
‫‪I_INC_DEC‬‬
‫‪I_PAR_LOAD‬‬
‫‪I_PAR_LOAD_ENABLE‬‬
‫‪I_STEP‬‬
‫‪O_COUNT‬‬
‫‪O_OVF_UVF‬‬
‫این شمارنده در هر پالس ساعت‪ ،‬بسته به جهت شمارش انتخابشده عدد دادهشده به ورودی ‪ I_STEP‬را به‪ /‬از مقدار داخلی‬
‫شمارنده اضافه‪/‬کم میکند‪ .‬همچنین افزایش و یا کاهش مقدار شمارنده با پایین آمدن سیگنال ‪I_COUNT_ENABLE‬‬
‫متوقف میشود‪ .‬ورودی ‪ I_RST‬بهصورت آسنکرون عمل میکند‪ ،‬بدین معنی که بدون در نظر گرفتن پالس ساعت عملیات‬
‫بازنشانی تا هر زمانی که ورودی ‪ I_RST‬باال باشد ادامه مییابد‪ .‬برای ورودی یک عدد بهصورت موازی به رجیستر داخلی‬
‫شمارنده‪ ،‬ابتدا مقدار درخواستی بر روی ورودی ‪ I_PAR_LOAD‬قرارگرفته و ورودی ‪ I_PAR_LOAD_ENABLE‬یک‬
‫میشود‪ .‬ورود یک مقدار جدید توسط ‪ I_PAR_LOAD‬باید بهصورت سنکرون با پالس ساعت ورودی انجام پذیرد‪،‬‬
‫بدینصورت که در لبه باالرونده پالس ساعت‪ ،‬ابتدا ‪ 3‬بودن ورودی ‪ I_PAR_LOAD_ENABLE‬برسی شده و در صورت ‪3‬‬
‫بودن عملیات بارگذاری موازی انجام میشود و در صورت ‪ 0‬بودن آن شمارنده عملکرد عادی خود را خواهد داشت‪.‬‬
‫بارگذاری آسنکرون موازی در این شمارنده امکانپذیر نیست‪.‬‬
‫همچنین درصورتیکه مقدار شمارنده داخلی در حالت افزایش از بیشترین مقدار قابلنمایش یک عدد ‪ 19‬بیتی بیشتر شد‬
‫(سرریز – ‪ )Overflow‬و یا در هنگام کاهش از کمترین مقدار یعنی ‪ 0‬کمتر شد (زیر ریز ‪ )Underflow -‬پورت خروجی‬
‫‪ O_OVF_UVF‬یک شده و تا زمان بازنشانی بعدی یک میماند‪.‬‬
‫ب) در گزارش خود توضیح دهید چرا امکان بارگذاری موازی آسنکرون در این شمارنده وجود ندارد‪.‬‬
‫ج) برای ماجول طراحیشده یک ‪ Testbench‬به زبان ‪ Verilog‬نوشته و ماجول ساختهشده را دقیقاً آزمایش نمایید‪ .‬برای‬
‫آزمایش مدار‪ ،‬مراحل زیر را طی نمایید‪.‬‬
‫‪ ‬ابتدا توسط سیگنال ‪ I_RST‬شمارنده خود را بازنشانی نمایید‪.‬‬
‫‪ ‬توسط سیگنال ‪ I_INC_DEC‬شمارنده را در حالت صعودی تنظیم نموده و مقدار ‪ I_STEP‬را برابر ‪ 1‬قرار دهید‪.‬‬
‫‪ ‬توسط سیگنال ‪ I_COUNT_ENABLE‬شروع شمارش را به شمارنده اعالم کنید‪.‬‬
‫‪ ‬پس از رسیدن مقدار شمارنده به یک عدد ‪ 9‬رقمی‪ ،‬شمارنده را در حالت نزولی قرار داده و مقدار کاهش در هر‬
‫پالس ساعت را برابر ‪ 30‬قرار دهید‪.‬‬
‫‪ ‬حال صبر کنید تا شمارنده دچار زیر ریز شود‪ .‬بدینصورت عملکرد سیگنال ‪ O_OVF_UVF‬را برسی کنید‪.‬‬
‫‪ ‬شمارنده را دوباره بازنشانی کرده‪ ،‬در این حالت سیگنال ‪ O_OVF_UVF‬که در مرحله قبل ‪ 3‬شده باید دوباره ‪0‬‬
‫شود‪.‬‬
‫‪‬‬
‫شماره دانشجویی خود را بهصورت یک بدون عالمت ‪ 19‬بیتی وارد شمارنده نمایید‪.‬‬
‫‪ ‬مقدار ‪ I_STEP‬را برابر ‪ 30‬قرار داده و شمارنده را به حالت نزولی ببرید‪.‬‬
‫‪ ‬حال در فواصل زمانی کوتاه توسط سیگنال ‪ I_COUNT_ENABLE‬شمارنده را متوقف و دوباره فعال کنید‪.‬‬
‫‪ ‬با ورود یک عدد بزرگ دلخواه‪ ،‬عملکرد شمارنده پس از ‪ Overflow‬را برسی کنید‬
‫برای هریک از زیر بندهای این قسمت یک یا چند عکس از پنجره ‪ Wave‬تهیه نمایید‪ .‬در تهیه عکس از پنجره ‪ Wave‬به‬
‫میزان ‪ Zoom‬توجه نمایید‪ ،‬اعداد باید قابل خواندن باشند‪ .‬در صورت نیاز برای یک بند می توانید چندین عکس با ‪Zoom‬‬
‫های مختلف در مکان های مختلف زمانی تهیه نمایید‪ .‬برای نمایش صحیح اعداد در پنجره ‪ Wave‬نرمافزار ‪ Modelsim‬از‬
‫‪ Radix‬اعداد بدون عالمت (‪ )Unsigned‬استفاده نمایید‪ .‬برای تنظیم ‪ Radix‬بر روی پورتها کلیک راست نموده و از منوی‬
‫‪ Radix‬پایه مناسب را انتخاب نمایید‪.‬‬
‫‪ ‬فایلهایی که میبایست تحویل داده شوند ‪ :‬فایل توصیف شمارنده به زبان ‪ Verilog‬و فایل ‪Testbench‬‬
‫‪ ‬مواردی که میبایست در گزارش قید شود ‪ :‬جدول عملکرد شمارنده‪ ،‬تصاویر پنجره ‪ Wave‬نرم افزار‬
‫‪ Modelsim‬برای کلیه زیر بند های بند ج‬
‫سؤال ‪3‬‬
‫( دارای تحویل حضوری )‬
‫الف) یک بلوک ‪ Variable Frequency Divider‬به همراه ‪ Phase Shifter‬داخلی طراحی کنید‪ . .‬طرح شما باید دارای‬
‫ورودی و خروجیهایی به شرح زیر باشد ‪:‬‬
‫(‪module variable_freq_divider‬‬
‫‪input‬‬
‫‪I_RST,‬‬
‫‪input‬‬
‫‪I_CLK_50M,‬‬
‫‪input [6:0] I_CLK_DIVIDER,‬‬
‫‪input‬‬
‫‪I_SET_NEW_DIV,‬‬
‫‪output‬‬
‫‪O_CLK_DIVIDED_SHIFT0,‬‬
‫‪output‬‬
‫‪O_CLK_DIVIDED_SHIFT61,‬‬
‫‪output‬‬
‫‪O_CLK_DIVIDED_SHIFT00,‬‬
‫‪output‬‬
‫‪O_CLK_DIVIDED_SHIFT561,‬‬
‫‪output‬‬
‫‪O_CLK_DIVIDED_SHIFT500‬‬
‫;)‬
‫این بلوک با دریافت یک پالس ساعت با فرکانس ‪ 30‬مگاهرتز و همچنین دریافت میزان تقسیم فرکانس‪ ،‬یک پالس ساعت با‬
‫فرکانس پایینتر و شیفت فازهای ‪ 0‬درجه (بهعنوان مرجع خروجی)‪ 94 ،‬درجه‪ 40 ،‬درجه‪ 314 ،‬درجه و ‪ 380‬درجه تولید‬
‫میکند‪ .‬میزان تقسیم فرکانس توسط ورودی ‪ I_CLK_DIVIDER‬مشخص میشود‪ .‬ورودی ‪ I_SET_NEW_DIV‬بهعنوان‬
‫‪ ENABLE‬برای دریافت مقدار جدید تقسیمکننده از ورودی ‪ I_CLK_DIVIDER‬مورداستفاده قرار میگیرد‪ .‬مقدار داخلی‬
‫مقسم در لبه باالرونده پالس ساعت ورودی و در صورت یک بودن ورودی ‪ I_SET_NEW_DIV‬از ورودی‬
‫‪ I_CLK_DIVIDER‬خواندهشده و بر روی رجیستر داخلی مقسم قرار میگیرد‪.‬‬
‫مقدار فرکانس خروجی در این بلوک میبایست متناسب با فرمول زیر باشد ‪:‬‬
‫‪4‬‬
‫‪4‬‬
‫‪46‬‬
‫‪ N‬مقدار عدد قرار دادهشده بر روی ورودی ‪ I_CLK_DIVIDER‬است‪ .‬برای مثال درصورتیکه نیاز به فرکانس خروجی ‪31‬‬
‫برابر کوچکتر از فرکانس ورودی باشد از ‪ N=0‬استفاده میشود‪ .‬درواقع بزرگترین فرکانس قابل تولید توسط این بلوک ‪31‬‬
‫برابر کوچکتر از فرکانس ورودی می باشد‪.‬‬
‫یک ‪ Phase shifter‬در ادامه و پس از مقسم فرکانس قرارگرفته و سیگنالهای ساعت با شیفت فازهای ‪ 314 ،40 ،94 ،0‬و‬
‫‪ 380‬درجهای تولید مینماید‪ .‬برای مدلسازی این شیفت دهنده فاز نمیتوانید از المانهای درونی ‪ FPGA‬مانند ‪ DCM‬و ‪PLL‬‬
‫و یا از تأخیرها استفاده نمایید‪( .‬راهنمایی ‪ :‬برای شیفت دهنده فاز باید از یک شمارنده استفاده نمایید و از یک سیگنال ساعت‬
‫با فرکانس باالتر یک یا چند سیگنال شیفت دادهشده با فرکانس پایینتر تولید نمایید‪ ،‬درواقع می توانید بخشی از تقسیم‬
‫فرکانس را با استفاده از مدار شیفت دهنده فاز انجام دهید )‪.‬‬
‫شکل ‪ - 3‬خروجی مدار شیف دهنده فاز‬
‫ب) بلوک ساختهشده در بخش الف را توسط یک ‪ Testbench‬آزمایش نمایید‪ .‬آزمایش شما باید شامل حالتهای مختلف‬
‫تقسیم فرکانس باشد‪ .‬برای تهیه عکس از پنجره ‪ Wave‬به میزان ‪ Zoom‬و مشخص بودن سیگنالها توجه نمایید و در صورت‬
‫نیاز چندین عکس از پنجره ‪ Wave‬قرار دهید‪ .‬همچنین‪ ،‬کلیه خروجیهای میبایست در پنجره مشخص باشند‪.‬‬
‫‪ ‬فایلهایی که میبایست تحویل داده شوند ‪ :‬فایل توصیف بلوک مقسم فرکانس و ‪ Testbench‬مربوط به آن‬
‫‪ ‬مواردی که میبایست در گزارش قید شود ‪ :‬تصویر پنجره ‪ Wave‬نرم افزار ‪ Modelsim‬در حالت تقسیم‬
‫فرکانس با مقادیر ‪ N‬مختلف و مشخص بودن شیفت فاز خروجی ها‬
‫نکات‬
‫‪ .3‬کلیه گزارشها باید در قالب تعیینشده تحویل داده شوند‪ .‬فایل ‪ Word‬نمونه قالب تحویل تمرینها در وبسایت درس موجود‬
‫است‪ .‬عدم رعایت این نکته موجب کسر نمره خواهد شد‪.‬‬
‫‪ .3‬مهلت ارسال پاسخها تا قبل از برگزاری کالس حل تمرین است و پسازآن با توجه به حل تمرینها در کالس حل تمرین‪،‬‬
‫تمرین تحویل گرفته نمیشود‪.‬‬
‫‪ .1‬پاسخهای خواستهشده را بهصورت یک فایل فشرده با فرمت ‪ zip‬و یا ‪ rar‬درآورده و به آدرس ایمیل اعالمشده ارسال نمایید‪.‬‬
‫‪ .9‬پس از تهیه فایل فشرده حاوی گزارش و برنامههای خواستهشده‪ ،‬فایل فشردهشده را با درج شماره دانشجویی در عنوان ایمیل‬
‫به آدرس ‪ [email protected]‬ارسال نمایید‪.‬‬
‫‪ .4‬در صورت مشاهده کپیبرداری‪ ،‬نمره فرد کپی گیرنده و کپی دهنده ‪ -300‬در نظر گرفته خواهد شد‪.‬‬
‫‪ .1‬در تحویل تمرینها دقت نمایید دقیقاً موارد خواستهشده را تحویل دهید و از تحویل فایلهای خواسته نشده بپرهیزید‪.‬‬
‫‪ .7‬کالس حل تمرین‪ ،‬روزهای یکشنبه ساعت ‪ 33‬تا ‪ 31‬در ساختمان ابنسینا کالس ‪ 4‬برگزار خواهد شد‪ .‬کالسها بهصورت‬
‫یک هفته در میان به رفع اشکاالت و حل تمرینها اختصاص خواهند یافت‪ .‬بدینصورت که هفته اول پس از آپلود تمرین‬
‫مختص رفع اشکال‪ ،‬و هفته دوم مختص حل تمرینها است‪.‬‬
‫‪ .8‬تمرینها هر دو هفته یکبار بر روی وبسایت درس قرار خواهند گرفت‪ ،‬و مهلت انجام هرکدام ‪ 3‬هفته است‪.‬‬
‫‪ .4‬در صورت وجود هرگونه ابهام در صورت تمرین‪ ،‬موضوع را از طریق آدرس ‪ [email protected]‬به اطالع استاد‬
‫حل تمرین برسانید‪.‬‬
‫‪ .30‬جهت روشن شدن روند تصحیح پاسخها ‪ ،‬گزارشها و فایل های تحویلی کلیه دانشجویان‪ ،‬پس از برگزاری کالس رفع اشکال‬
‫و حل تمرین بر روی وبسایت درس آپلود و توسط دیگران قابلدسترس خواهد بود‪.‬‬
‫‪ .11‬پل ارتباطی میان شما و استاد حل تمرین؛ وبسایت درس و آدرس ایمیل واردشده در سامانه ‪ edu‬است‪ .‬لطفاً از صحت‬
‫آدرس ایمیل خود در سامانه ‪ edu‬مطمئن شوید‪ .‬اطالعیههای مهم در رابطه باکالس حل تمرین از طریق ایمیل به اطالع شما‬
‫خواهد رسید‪.‬‬