گام آخر:
گام ششم: سنتز مدار
پس از حصول اطمينان از عملکرد صحيح مدار در فرايند شبيهسازي٬ نوبت به سنتز مدار و تبديل توصيفهاي سختافزاري به معادلهاي منطقي/ الکترونيکي خود ميرسد. در اين مرحله نيز ابزار هاي متعددي وجود دارند که با توجه به تکنولوژي که در نهايت مدار ديجيتال بايد بر روي آن پياده سازي شود٬ کد RTL توصيف کننده سختافزار را به مدارهاي منطقي معادل تبديل ميکنند.
در مثال طراحي شمارنده برنامه پذير پس از شبيه سازي با نرمافزار Modelsim از ابزار سنتز Leonardo Spectrum بهره برده شده است٬ اين برنامه به صورت کاملا خودکار کدهاي توصيف کننده سختافزار را بررسي کرده و مدار منطقي ديجيتالي معادل آن را توليد ميکند٬ در صورتي که کدهاي توصيف سختافزاري قابل سنتز نبوده يا در نوشتن آنها فاکتورهاي قابل سنتز بودن مدار در نظر گرفته نشده باشد ٬ اين برنامه خطاهاي متعددي جهت اصلاح کد گزارش ميکند.
در مرحله اول سنتز شمارنده برنامهپذير٬ نسخه ابتدايي کد Verilog توصيف کننده اين مدار به ابزار سنتز داده شد اما علارقم بهره گيري از عملگرها و توصيفات کاملا قابل سنتز در اين نسخه٬ ابزار سنتز خطا گزارش کرد٬ اين موضوع بيانگر آن است که حتي اگر از کد توصيف کننده سختافزار به ظاهر قابل ستنز باشد و عملکرد صحيحي در فرآيند شبيهسازي به همراه داشته باشد٬ بازهم در صورتي که طراح دقت لازم را نداشته باشد در ابزار سنتز با خطا مواجه خواهد شد.
نکته کليدي که کد اوليه شمارنده برنامهپذير را نيز در ابزار سنتز با خطا مواجه کرده بود٬ انتصاب دو درايور به ثبات CWR ميباشد که اين دو انتصاب هر يک در يک بلاک always از ديد طراح پنهان مانده و به صورت همزمان دو مقدار متفاوت را به CWR وارد ميکنند.
لذا با به کار گيري يک سيگنال داخلي به نام Disable_CWR اين هم پوشاني اين دو سيگنال در نسخه دوم کد توصيف کننده شمارنده برنامه پذير مرتفع گرديد.
علارقم اينکه نسخه دوم کد نگاشته شده به درستي توسط ابزار سنتز٬ سنتز شده و مدار منطقي معادل حاصل ميشود اما براي اينکه مدار منطقي معادل از نظر ظاهري با آنچه که در معماري تعريف کرديم مطابقت داشته باشد٬ اجزاي تشکيل دهنده آن را در نسخه سوم ٬ تفکيک کرديم٬ پس از سنتز نسخه سوم کد ٬ مدار منطقي حاصل در شکل 10 نشان داده شده است:
شکل 10: نماي کلي شمارنده برنامهپذير پس از سنتز
(براي بزرگ شدن تصوير روي آن کليک کنيک)
همانطور که در شکل 10 مشاهده ميکنيد٬ شمارنده برنامهپذير پس از سنتز به سه مدار CWR و Counter و Decoder شکسته شده است که در شکل 10 ساختار ارتباطي آنها نشان داده شده٬ در شکل 11 مدار منطقي تشکيل دهنده CWR را مشاهده ميکنيد :
شکل 11: مدار منطقي تشکيل دهنده CWR
(براي بزرگ شدن تصوير روي آن کليک کنيک)
همانطور که در شکل 11 مشاهده ميکنيد ابزار سنتز سه فليپفلاپ براي ثبات CWR و هشت فليپفلاپ براي ثبات latch_counter در نظر گرفته است. در شکل 12 اجزاي تشکيل دهنده مدار counter را مشاهده ميکنيد:
شکل 12: مدار منطقي تشکيل دهنده Counter
(براي بزرگ شدن تصوير روي آن کليک کنيک)
در شکل 12 نيز ابزار سنتز 8 فليپفلاپ براي ثبات counter و سه فليپفلاپ براي ثباتهاي پرچم flag_counter و flag_half_counter و disable_CWR در نظر گرفته است. در شکل 13 آخرين بخش شمارنده برنامه پذير٬ decoder را مشاهده ميکنيد:
شکل 13: مدار منطقي تشکيل دهنده Decoder
(براي بزرگ شدن تصوير روي آن کليک کنيک)
در اين شکل نيز ابزار سنتز با در نظر گرفتن يک مقايسه کننده٬ decoder توصيف شده در کد verilog را به درستي به مدار منطقي معادل خود سنتز کرده است.