100% found this document useful (1 vote)
41 views57 pages

FPGA

Uploaded by

lamiwrl02
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
100% found this document useful (1 vote)
41 views57 pages

FPGA

Uploaded by

lamiwrl02
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/ 57

‫ی‬

‫دستور کار آزما ش گاه معماری کامپیورت‬

‫‪FPGA‬‬

‫تن‬
‫تهیه و ظیم‪ :‬سارا السادات زمانی‬

‫‪9911‬‬

‫‪1‬‬
‫فهرست مطالب‬

‫مقدمه ‪3 ...................................................................................................................‬‬

‫فصل اول ‪ :‬آشنایی با زبان توصیف سختافزار ‪5...................................................................Verilog‬‬

‫‪ -1-1‬مقدمه ‪5 ..........................................................................................................‬‬
‫‪ -2-1‬مفاهیم اولیه ‪5 ....................................................................................................‬‬
‫‪ -3-1‬قراردادهای نحوی ‪6 ............................................................................................‬‬
‫‪ -4-1‬ماجول‪9 ..........................................................................................................‬‬
‫‪ -5-1‬پورت ‪9 ..........................................................................................................‬‬
‫‪ -6-1‬مدلسازی در سطح گیت ‪11 ..................................................................................‬‬
‫‪ -7-1‬مدلسازی در سطح جریان داده ‪12 ...........................................................................‬‬
‫‪ -8-1‬مدلسازی در سطح رفتاری ‪15 ................................................................................‬‬

‫فصل دوم ‪ :‬آشنایی با نرمافزار ‪22 ................................................................................ QuartusII‬‬

‫‪ -1-2‬مقدمه ‪22 ........................................................................................................‬‬


‫‪ -2-2‬وارد کردن طرح )‪23 ................................................................... (Design Entry‬‬
‫‪ -3-2‬کمپایل کردن )‪37 ........................................................................ (Compilation‬‬
‫‪ -4-2‬شبیهسازی )‪40 .............................................................................. (Simulation‬‬
‫‪ -5-2‬برنامه ریزی )‪48 ........................................................................ (Programming‬‬

‫‪2‬‬
‫مقدمه‬

‫تراشههای ‪ Field Programmable Gate Arrays‬یا همان ‪ FPGA‬برای توسعه سختافزارهای دیجیتالی پیچیده و‬
‫اجتناب از ساخت بردهایی با تراشههای گسسته به وجود آمدهاند‪ .‬با استفاده از تراشههای ‪ ،FPGA‬بردهایی که قبال با‬
‫تعداد زیادی از تراشههای دیجیتال ساخته میشدند‪ ،‬در یک تراشه ‪ FPGA‬با سرعت باالتر و از همه مهمتر با امکان‬
‫بهروز رسانی سختافزار‪ ،‬پیادهسازی میشوند‪.‬‬

‫استفاده از ‪FPGA‬این امکان را میدهد تا طرحهای سختافزاری در ابعاد کوچکتر و با قیمت پایینتر ساخته شوند‪.‬‬
‫عیبیابی طرح دیجیتالی که در داخل ‪ FPGA‬پیادهسازی شده به دلیل وجود نرمافزارهای شبیهسازی قدرتمند‪ ،‬بسیار‬
‫سادهتر است‪ .‬بسیاری از قطعاتی که در پروژههای دیجیتال مورد استفاده قرار میگیرند (مانند ‪DSP ،Dual port ram‬‬

‫‪ FIFO ،Digital Synthesizer،Module‬و انواع کدرها و دیکدرها‪ FFT Module ،Ethernet Core ،‬و …) به‬
‫صورت ‪ Soft Core‬در داخل ‪ FPGA‬به راحتی قابل پیادهسازی بوده و در داخل کتابخانه استاندارد نرمافزار ‪ISE‬‬

‫وجود دارند‪ .‬استفاده از‪ Soft Core‬پردازندههایی نظیر ‪ ARM‬در داخل ‪،FPGA‬این تراشه را به ابزاری قدرتمند برای‬
‫پیادهسازی انواع طرحهای پردازش سیگنال (که نیاز به پردازش سریال دارند) تبدیل کردهاست‪ .‬امروزه بسیاری از‬
‫شرکتهای بزرگ سازنده تراشه ‪ ،ASIC‬طرحهای خود را بر روی ‪ FPGA‬تست و‪ Verify‬میکنند زیرا امکان سنتز‬
‫مدار تا سطح ترانزیستور در تراشههای ‪ FPGA‬وجود دارد‪.‬‬

‫با استفاده از زبان توصیف سختافزار ( ‪ Verilog‬یا ‪ ) VHDL‬میتوان طرح وایده سختافزاری خود را بسته به نیاز و‬
‫تبحر در سختافزار‪ ،‬در یکی از سطوح توصیف رفتاری (توصیف سیستمیبا ساختاری شبیه زبان ‪ ،) C‬سطح‬
‫‪ Register Transfer Level‬یا همان ‪ RTL‬با استفاده از گیتها و فیلیپفالپها و یا حتی در سطح ترانزیستور‬
‫پیادهسازی نمود و یااینکه در محیط شماتیکی مدار مورد نظر را ترسیم و سنتز کرد‪.‬‬

‫مقایسه ‪ FPGA‬و میکروکنترلر‬

‫میکروکنترلرها دارای ‪ CPU‬و حافظههای جانبی و … هستند‪ ،‬میکروکنترلرها برای کاربرد مشخصی ساخته نشدهاند‬
‫و هر طراح میتواند برنامه دلخواه خود را درون آنها برنامهریزی کند‪ .‬منابع و دستورالعملهای اجرایی یک‬
‫میکروکنترلر مشخص‪ ،‬همواره ثابت است درحالی که میتواند هزاران برنامه مختلف را روی خود جای دهد‪ .‬اما در‬

‫‪3‬‬
‫مورد ‪FPGA‬ها چنین نیست‪ ،‬در یک ‪ FPGA‬هیچ ‪ CPU‬پیشفرضی وجود ندارد‪ ،‬بلکه باید بلوکهای مختلف را در‬
‫داخل ‪ FPGA‬پیادهسازی کرد و در نهایت از آنها برای رسیدن به نتیجه دلخواه استفاده نمود‪ .‬به عنوان مثال برایاینکه‬
‫بتوان در ‪ FPGA‬چند عدد را جمع کرد باید بوسیلهی گیتها یک بلوک جمعکننده طراحی نمود‪ ،‬سپس میتوان در‬
‫سایر بلوکها از آن استفاده نمود‪.‬‬

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

‫از ‪ FPGA‬اغلب برای ساخت دستگاههای مخابراتی پرسرعت‪ ،‬دستگاههای صنعتی و تجاری خیلی حساس و سریع‪،‬‬
‫دستگاههای نظامیو مصارفاین چنین بهره میبرند‪FPGA .‬ها دارای چند هزار تا چند میلیون گیت در داخل خود‬
‫هستند‪ ،‬که تعداد گیتهای یک ‪ FPGA‬بر قیمت آن تاثیر اساسی میگذارد‪ .‬در هر پروژهای شما باید بدانید از چه‬
‫تراشهای و با چه تعداد گیت استفاده کنید تا بهینهترین حالت ممکن را بوجود آورید‪ .‬شرکتهای مختلفی تراشههای‬
‫‪ FPGA‬را تولید میکنند که شرکت ‪ Xilinx‬و ‪ Altera‬درایران بیشتر شناخته شدهاند‪.‬‬

‫آرایه گیتهای برنامهپذیر براساس معماری داخلی‪ ،‬پیچیدگی و تعداد گیتها به دستههای مختلفی مانند‬
‫‪ PAL,PLA,CPLD,FPGA‬و … تقسیم میشوند که هرکدام ازاین دستهها برای مصارف خاصی مورد استفاده قرار‬
‫میگیرد‪ .‬برخی از ‪FPGA‬های پیشرفته امروزی عالوه بر گیتهای منطقی دارای منابع داخلی دیگری مانند ‪،RAM‬‬
‫مبدل آنالوگ به دیجیتال ‪ ADC‬و مبدل دیجیتال به آنالوگ ‪ DAC‬نیز هستند که به کاربر کمک میکند تا در‬
‫پروژههایی که بهاین امکانات نیاز دارد‪ ،‬ازاین منابع داخلی استفاده نماید و یک سیستم کامل را در داخل تراشه‬
‫پیادهسازی نماید که به افزایش کارایی‪ ،‬سرعت و دقت ‪FPGA‬ها کمک میکند‪.‬‬

‫‪4‬‬
‫فصل اول‬

‫آشنایی با زبان توصیف سختافزار ‪Verilog‬‬

‫‪ -1-1‬مقدمه‬

‫‪ Verilog‬یکی از زبانهای برنامه نویسی سختافزاری است که در آن گیتها و مدارات منطقی سختافزاری را توسط‬
‫برنامهنویسی تعریف میکنیم و بعد از شبیهسازی و تست ماژول‪ ،‬میتوانیم آن را پیادهسازی کنیم‪.‬‬
‫برای این زبان برنامههای نرمافزاری مختلفی وجود دارد مانند ‪،ISE ،SynaptiCad ،Quartus II ،Model Sim‬‬
‫‪ Active-HDL ،Vivado‬و ‪...‬‬

‫‪ -2-1‬مفاهیم اولیه‬

‫ماجول ‪ :‬ماجول بلوک پایه ‪ Verilog‬است‪ .‬یک ماجول میتواند یک عنصر یا مجموعهای از بلوکهای سطح پایینتر‬
‫باشد‪ .‬بنابرین ماجول عملکرد مورد نظر را برای بلوکهای سطح باالتر فراهم میکند‪ .‬اما پیادهسازی داخل آن را پنهان میکند‪.‬‬
‫شکل ‪ 1-1‬نحوه تعریف ماجول را با یک مثال نشان میدهد‪ .‬در زبان ‪ Verilog‬میتوانیم یک ماجول را در چهار سطح مختلف‬
‫تجرید بیان کنیم‪:‬‬

‫‪ ‬سطح گیت ‪ :‬دراین سطح ماجول به صورت گیتهای منطقی واتصاالت بین آنها بیان میشود‪.‬‬
‫‪ ‬سطح جریان داده )‪ : (Dataflow‬درای ن سطح ماجول بوسیله مشخص کردن نحوه جریان اطالعات بین رجیسترها‬
‫ونوع پردازشی که روی آنها صورت میگیرد‪ ،‬بیان میشود‪.‬‬
‫‪ ‬سطح رفتاری )‪ : (Behavioral‬دراین سطح ماجول بر حسب الگوریتم طراحی میشود‪ ،‬بدوناینکه جزئیات طراحی‬
‫پیادهسازی سختافزاری در نظر گرفته شود‪.‬‬
‫‪ ‬سطح سوئیچ ‪ :‬دراین سطح ماجول به صورت سوئچها و اتصاالت بین آنها بیان میشود‪.‬‬

‫‪5‬‬
‫شکل ‪ 1-1‬نحوه تعریف ماجول‬

‫نمونه ‪ :‬یک ماجول الگویی ازیک عنصر واقعی میسازد‪ ،‬هنگامیکه ازاین ماجول استفاده میشود‪ Verilog ،‬یک نمونه‬
‫ازاین الگو میسازد‪ .‬هر عنصر دارای نام‪ ،‬متغیرها و پارامترهای خاص خود است‪ .‬پروسهایجاد یک نمونه از الگوی یک ماجول‬
‫را اصطالحاً ‪ Instantiation‬یا نمونه سازی واین عنصر را ‪ Instance‬یا نمونه مینامند‪ .‬بعنوان مثال در شکل ‪ 2-1‬نحوه ساخت‬
‫یک نمونه از ماجول دیکدر را میبینیم‪.‬‬

‫شکل ‪2-1‬‬

‫‪ -3-1‬قراردادهای نحوی‬

‫قراردادهای نحوی که بوسیله ‪ Verilog‬استفاده میشود‪ ،‬بسیار شبیه زبان برنامه نویسی ‪ C‬است‪ .‬هر توکن میتواند توضیح‪،‬‬
‫جدا کننده‪ ،‬عدد‪ ،‬رشته‪ ،‬شناسه ویا کلمه کلیدی باشد‪ Verilog .‬یک زبان حساس به متن است وتمام کلمات کلیدی آن با‬
‫حروف کوچک نوشته میشوند‪.‬‬

‫‪6‬‬
‫حروف فاصله‪ :‬حروف فاصله در ‪ Verilog‬عبارتند از‪ :‬فاصله )‪ (\t) tab ،(\b‬و )‪. (\n‬این حروف توسط ‪ Verilog‬نادیده‬
‫گرفته میشوند‪ ،‬مگراینکه بعنوان جداکننده توکنها استفاده شوند ویا در یک رشته استفاده شوند‪.‬‬

‫اپراتورها‪ :‬اپراتورها به سه دسته یگانی‪ ،‬دوتایی وسه تایی تقسیم میشوند وبه ترتیب دارای یک‪ ،‬دو و سه اپرند هستند‪.‬‬

‫مشخصات اعداد‪ :‬در ‪ Verilog‬اعداد به دو صورت زیر نوشته میشوند‪:‬‬

‫‪ ‬اعداداندازه دار‪ :‬دراین حالت ‪ Verilog‬را مقید میکنیم یک عدد را با هماناندازه مورد نظر ما بکار ببرد‪ .‬شکل‬
‫اعداداندازه دار بصورت<‪ < size ><radix<<number‬است‪ < size > .‬به دسیمال نوشته شده و تعداد‬
‫بیتهای عدد را مشخص میکند‪ < radix > .‬مبنای عدد را مشخص میکند‪.‬‬
‫‪ ‬اعداد بیاندازه‪ :‬شکل کلی عدد بدوناندازه بصورت <‪ <radix<<number‬است‪ .‬دراین حالت طول عدد به نوع‬
‫پیادهسازی بستگی دارد ولی حداقل ‪ 32‬بیت است‪.‬‬
‫شناسه وکلمه کلیدی‪ :‬کلمات کلیدی شناسههایی هستند که از پیش برای تعریف ساختار زبان استفاده شدهاندو کلمات کلیدی‬
‫با حروف کوچک نوشته میشوند‪ .‬شناسه میتواند از کاراکترهای حرفی‪ _ ،‬و‪ $‬تشکیل شود وحتماً باید با یک کاراکتر حرفی‬
‫شروع شود‪ .‬شناسهها حساس به متن هستند‪.‬‬

‫رشته‪ :‬مجموعهای است از کاراکترها که بوسیله "" محصور شدهاند‪.‬‬

‫انواع دادهها‪:‬‬

‫‪ ‬مجموعه مقادیر‪ Verilog :‬برای مدلسازی عملکرد سختافزارهای واقعی از ‪ 4‬مقدار و‪ 8‬سطح قدرت استفاده‬
‫میکند‪ .‬مجموعه مقادیر در جدول ‪ 1-1‬و سطوح قدرت در جدول ‪ 2-1‬آمده است‪.‬‬
‫جدول ‪ 1-1‬مجموعه مقادیر‬

‫‪7‬‬
‫جدول‪ 2-1‬سطوح قدرت‬

‫‪ :Net ‬برای برقرار کردن ارتباط بین اجزا سختافزاری بکار میرود‪ .‬درست مانند مدارهای واقعی‪ net ،‬در ‪Verilog‬‬
‫توسط کلمه کلیدی ‪ wire‬تعریف میشود و مقدار پیش فرض آن ‪ z‬است‪.‬‬
‫‪ :Register ‬برای ذخیره اطالعات بکار میرود‪ .‬رجیستر تا وقتی مقدار جدیدی روی آن نوشته نشده مقدار خود را‬
‫نگه میدارد‪ .‬برخالف ‪ register ،net‬به درایور نیاز ندارد‪ Register .‬در ‪ Verilog‬توسط کلمه کلیدی ‪reg‬‬
‫تعریف میشود ومقدار پیش فرض آن ‪ x‬است‪.‬‬
‫‪ :Vector ‬انواع دادهای ‪ reg‬و ‪ wire‬میتوانند بصورت بردار تعریف شوند‪ .‬شکل کلی تعریف بردار بصورت زیر‬
‫است‪:‬‬
‫>‪<vector_type> [MSB: LSB] <vector_name‬‬
‫‪ ‬داده صحیح ‪ :‬نوع دادهای صحیح توسط کلمه کلیدی ‪ integer‬تعریف میشود وطول آن بستگی به پیادهسازی دارد‬
‫ولی حداقل ‪ 32‬بیت در نظر گرفته میشود‪.‬‬
‫‪ ‬زمان‪ :‬در ‪ Verilog‬یک نوع دادهای خاص برای ذخیره کردن زمان شبیهسازی استفاده میشود‪ .‬نوع دادهای زمان‬
‫بوسیله کلمه کلیدی ‪ time‬تعریف میشود‪.‬‬
‫آرایه ‪ :‬در ‪ Verilog‬میتوان آرایهای از نوعهای دادهای ‪ time ،integer ،reg‬ویا آرایهای از بردارهایی ازاین نوعها‬
‫تعریف کرد‪ .‬شکل کلی تعریف آرایه عبارتست از ‪:‬‬

‫]‪<array_type> <array_name> [#first_element:#last_element‬‬


‫حافظه‪ :‬در ‪ Verilog‬حافظه را به صورت آرایهای از رجیسترها تعریف میکنند‪.‬‬

‫پارامتر‪ :‬میتوان در یک ماجول اعداد ثابتی را به صورت پارامتر تعریف نمود و از آنها استفاده کرد‪.‬این امر توسط کلمه کلیدی‬
‫‪ parameter‬انجام میشود‪.‬‬

‫راهنمای کامپایلر‪ :‬در ‪ Verilog‬راهنمای کامپایلر دارای شکل کلی >‪ <key word‬است‪ .‬دو نوع راهنمای کامپایلر که مورد‬
‫استفاده بیشتری دارند‪ ،‬عبارتند از ‪:‬‬

‫‪8‬‬
‫‪‘define‬که برای تعریف ماکرو بکار میرود‪.‬‬ ‫‪‬‬
‫‪ 'include ‬که برای الحاق یک فایل ‪ Verilog‬به فایل جاری بکار میرود‪.‬‬

‫‪ -4-1‬ماجول‬

‫قبالً نحوه تعریف ونمونه سازی ماجول را دیدیم‪ ،‬دراینجا بصورت دقیقتر اجزا ماجول را مورد بررسی قرار میدهیم‪ .‬در شکل‬
‫‪ 3-1‬اجزا ماجول مشخص شده است‪.‬قسمتهایی که بصورت زیر خط دار نوشته شدهاند‪ ،‬در تعریف ماجول ضروری وسایر‬
‫قسمتها اختیاری است‪ .‬قسمتهایی که بدنه ماجول را تشکیل میدهند‪ ،‬میتوانند با هر ترتیبی در تعریف ماجول استفاده شوند‪.‬‬

‫شکل‪3-1‬‬

‫‪ -5-1‬پورت‬

‫پورتهای یک ماجول‪ ،‬واسط ارتباطی ماجول با دنیای بیرون است‪.‬‬

‫لیست پورتها ‪ :‬به هنگام تعریف ماجول دیدیم که لیست پورتها (در صورت وجود) در جلوی نام ماجول معرفی شوند‪.‬‬
‫بعنوان مثال در شکل ‪ 4-1‬یک جمع کننده ‪4‬بیتی ونحوه تعریف پورتهای آن نشان داده شده است‪.‬‬

‫‪9‬‬
‫شکل‪4-1‬‬

‫تمام پورتهای یک ماجول باید تعریف شوند‪.‬این تعریف طبق جدول ‪ 3-1‬صورت میگیرد‪.‬‬

‫جدول ‪3-1‬‬

‫بعنوان مثال تعریف پورتها در مورد جمع کننده شکل ‪ 4-1‬بصورت زیر است ‪:‬‬

‫قوانین اتصال پورتها ‪:‬‬

‫به هنگام اتصال پورتهای یک ماجول به جهان خارج باید به نکاتی توجه داشت ‪:‬‬

‫‪ ‬پورتهای ورودی ماجول باید از نوع ‪ net‬باشند واین پورتها میتوانند به متغیرهایی از نوع ‪ reg‬و یا ‪ net‬در‬
‫جهان خارج متصل شوند‪.‬‬
‫‪ ‬پورتهای خروجی ماجول میتوانند از نوع ‪ reg‬ویا ‪ net‬باشند واین پورتها باید به متغیرهایی از نوع ‪ net‬درجهان‬
‫خارج متصل شوند‪.‬‬

‫‪11‬‬
‫‪ ‬پورتهای دو سویه ماجول باید از نوع ‪ net‬باشند واین پورتها میتوانند به متغیرهایی از نوع ‪ net‬ویا ‪ reg‬در جهان‬
‫خارج متصل شوند‪.‬‬
‫‪ ‬پورتهای ماجول ومتغیرهای خارجی متصل به آنها باید از نظر طول منطبق باشند‪.‬‬
‫در ‪ Verilog‬به دو صورت میتوان ارتباط پورتها را با جهان خارج برقرار نمود ‪:‬‬

‫‪ .1‬اتصال ترتیبی ‪ :‬دراین روش به هنگام نمونه سازی از یک ماجول‪ ،‬متغییرهای متصل به پورتها را دقیقاً به همان ترتیبی‬
‫که در تعریف ماجول آمدهاند‪ ،‬بیاوریم‪ .‬دراین روش اگر بخواهیم یک پورت خروجی به جایی متصل نباشد کافیست‬
‫جای آن را در لیست خالی بگذاریم‪.‬‬
‫‪ .2‬اتصال از طریق نام ‪ :‬دراین روش برای اتصال هر پورت از قالب زیر استفاده میکنیم ‪:‬‬
‫)‪Port_name (external_signal_name‬‬
‫ازاین روش وقتی استفاده میکنیم که تعداد پورتها زیاد باشد وبخاطر سپردن ترتیب آنها دشوار باشد‪ .‬دراین روش‬
‫اگر بخواهیم یک پورت خروجی به جایی متصل نباشد کافیست نام آن رانیاوریم‪.‬‬
‫در شکل ‪ 5-1‬قوانین اتصال پورتها نمایش داده شده است‪.‬‬

‫شکل ‪ 5-1‬قوانین اتصال پورتها‬

‫‪ -6-1‬مدلسازی در سطح گیت‬

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

‫بعنوان مثال طرح شماتیک مدار یک مالتی پلکسر ‪ 4‬به ‪ 1‬و کد ‪ Verilog‬مربوط به آن در شکل ‪ 6-1‬آمده است‪.‬‬

‫‪11‬‬
‫شکل ‪6-1‬‬

‫تاخیر گیتها ‪ :‬تاکنون گیتهایی که در نظر گرفتیم حالتایده آل داشتهاند‪ ،‬یعنی به محض تغییر ورودی بدون هیچ‬
‫تاخیری خروجی تغییر پیدا میکرد‪ .‬ولی در مدارهای عملی وضعیت بهاین صورت نیست‪ .‬تعیین تاخیر برای گیتها اجازه‬
‫میدهد شبیهسازی مدارها حالت واقعی تری به خود بگیرد‪ .‬مقادیر تاخیر در ‪ Verilog‬با عالمت ‪ #‬شروع میشود‪.‬‬

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

‫‪ -7-4‬مدلسازی در سطح جریان داده‬

‫در مدلسازی در سطح جریان داده به نحوه انتقال ازاطالعات بین ثباتها و پردازش اطالعات اهمیت میدهیم‪ .‬دراین قسمت‬
‫به چگونگی مدلسازی در سطح جریان داده در زبان ‪ Verilog‬و مزایای آن میپردازیم‪.‬‬

‫‪ :Continuous Assignment‬توسطاین دستور میتوان یک مقدار را روی یک ‪ net‬درایو کرد‪ .‬شکل کلیاین دستور‬
‫به صورت زیر است‪:‬‬

‫‪12‬‬
‫;‪Assign<signal_strength> <delay> assignment_lists‬‬

‫‪ : Implicit Continuous Assignment‬دراین روش بجایاینکه یک متغیر را از جنس ‪ net‬تعریف کنیم و سپس‬
‫توسط دستور ‪ assign‬یک مقدار را روی آن درایو کنیم‪ ،‬میتوانیماین عمل را در هنگام تعریف متغیر ‪ net‬انجام دهیم‪.‬‬

‫تاخیر ‪ :‬همانطور که در سطح گیت دیدیم تاخیرها برایاین استفاده میشوند که عملکرد مدار به واقعیت نزدیکتر باشد‪ .‬در‬
‫سطح جریان داده نیز میتوان برای ‪assignment‬ها تاخیر مشخص نمود‪.‬‬

‫تاخیر با قاعده ‪ :‬دراین حالت یک تاخیر را پس از ‪ assign‬و قبل از ‪ net‬میآوریم‪ .‬هر تغییری که در یکی از سیگنالهای‬
‫سمت راست رخ دهد‪ ،‬باعث می شود پس از گذشت زمان تاخیر‪ ،‬عبارت سمت راست مجدداً ارزیابی شود وسپس در متغیر‬
‫سمت چپ قرار گیرد‪ .‬بهاین ترتیب تاخیری که دراینجا داریم‪ ،‬از نوع ‪ Inertial‬است واین امر باعث میشود که پالسهایی‬
‫با عرض کمتر از مقدار تاخیر مشخص شده به خروجی منتشر نشود‪.‬این تاخیر در شکل‪ 7-1‬نشان داده شده است‪.‬‬

‫شکل‪7-1‬‬

‫تاخیر ضمنی ‪ :‬دراین حالت تاخیر و ‪ assignment‬روی یک ‪ net‬به هنگام تعریف آن ‪ net‬مشخص میشود‪.‬‬

‫‪13‬‬
‫تاخیر به هنگام تعریف ‪ : net‬دراین حالت به هنگام تعریف ‪ net‬تاخیر مورد نظر را برای آن مشخص میکنیم‪ .‬ازاین پس‬
‫هر تغییری که رویاین ‪ net‬انجام شود‪ ،‬با تاخیر مشخص شده اعمال میشود‪ .‬باید توجه داشت کهاین امر در مورد مدلسازی‬
‫در سطح گیت نیز قابل استفاده است‪.‬‬

‫عبارات‪ ،‬اپراتورها و اپرندها ‪:‬‬

‫‪ ‬یک عبارت از ترکیب اپرندها و اپراتورها ساخته میشود‪.‬‬


‫‪ ‬یک اپرند میتواند یکی از انواع دادهای باشد ‪.‬‬
‫‪ ‬اپراتورها روی اپرندها عملیاتی را انجام میدهند تا نتیجه مطلوب بدستاید‪.‬‬
‫لیست اپراتورهای موجود در ‪ Verilog‬در جدول ‪ 4-1‬آمده است‪.‬‬

‫جدول‪4-1‬‬

‫‪14‬‬
‫‪ -8-1‬مدلسازی در سطح رفتاری‬

‫بلوکهای ساخت یافته‪ :‬در ‪ Verilog‬دو بلوک ساخت یافته وجود دارند‪ initial ،‬و ‪ .always‬این دستورات‪ ،‬پایه‬
‫مدلسازی در سطح رفتاری هستند وتمام قسمتهای توصیف رفتاری مدار دراین بلوکهای ساخت یافته قرار میگیرند‪.‬این‬
‫بلوکها دارای ساختار ترتیبی هستند‪.‬‬

‫بلوک ‪ :initial‬این بلوک در زمان ‪ 0‬شروع شده وفقط یکبار در شروع شبیهسازی اجرا میشود‪ .‬چنانچه بخواهیم درون‬
‫بلوک ‪ initial‬چندین دستور داشته باشیم‪ ،‬باید بوسیله ‪ begin end‬آنها را بلوک کنیم‪ .‬چنانچه چندین بلوک ‪ initial‬داشته‬
‫باشیم‪ ،‬تمام بلوکها در زمان ‪ 0‬بصورت همزمان اجرا میشوند وهر بلوک مستقل از سایر بلوکها خاتمه مییابد‪ .‬اگر قبل از‬
‫یک دستور تاخیری مشخص شود‪ ،‬آن دستور پس از تاخیر مشخص شده از زمان فعلی شبیهسازی اجرا میشود‪.‬‬

‫بلوک ‪: always‬این بلوک در زمان ‪ 0‬شروع میشود وتمام دستورات درون آن بطور پیوسته اجرا میشوند (مانند یک‬
‫حلقه)‪.‬این دستورات برای مدلسازی یک بلوک از اعمال که متوالیاً در یک مدار انجام میشوند‪ ،‬بکار میرود‪.‬‬

‫‪15‬‬
‫‪ :Procedural Assignment‬این دستور مقدار یک متغیر ‪ ،reg‬صحیح‪ ،‬حقیقی ویا زمان راتغییر میدهد‪ .‬مقدار جدید‬
‫در متغیر باقی میماند تا هنگامیکه یک دستور دیگر مقدار آن راتغیر دهد‪ .‬سمت چپاین عبارت میتواند یکی از موارد زیر‬
‫باشد ‪:‬‬

‫‪ ‬یک متغیر ‪ ،reg‬صحیح‪ ،‬حقیقی‪ ،‬زمان یا عناصر حافظه‬


‫‪ ‬یک ‪ Bit-Select‬ازاین متغیرها‬
‫‪ ‬یک ‪ Part-Select‬ازاین متغیرها‬
‫‪ ‬الحاقی از موارد فوق‬

‫‪ :Blocking Assignment‬این دستورات به همان ترتیبی که مشخص شدهاند اجرا میشوند‪ ،‬یعنی بدون کامل شدن اجرای‬
‫یک دستور‪ ،‬دستور بعدی اجرا نمیشود‪ .‬اپراتوری که برایاین امر بکار میرود = است‪.‬‬

‫‪ :Nonblocking Assignment‬دراین روش کلیه دستورات برای اجرا زمانبندی میشوند‪ ،‬بدوناینکه منتظر کامل شدن‬
‫اجرای یک دستور باشیم‪ .‬اپراتوری که برایاین امر بکار میرود =< است‪.‬‬

‫‪16‬‬
‫کنترل زمان ‪ :‬در ‪ Verilog‬چنانچه دستورات کنترل زمان موجود نباشد‪ ،‬شبیهسازی انجام نمیشود‪ .‬در ‪ Verilog‬سه نوع‬
‫کنترل زمان وجود دارد ‪:‬‬

‫‪ ‬کنترل زمان مبتنی بر تاخیر‪ :‬دراین روش یک عبارت‪ ،‬فاصله زمانی بین رسیدن به یک دستور تا اجرای آن را مشخص‬
‫میکند‪ .‬دو نوع کنترل زمان مبتنی بر تاخیر موجود است‪:‬‬
‫‪ .1‬کنترل تاخیر با قاعده‪ :‬یک تاخیر غیر صفر در سمت چپ دستور آورده میشود‪ .‬دراین حالت عبارت‬
‫سمت راست پس از گذشت زمان تاخیر‪ ،‬محاسبه شده درون عبارت سمت چپ قرار میگیرد‪.‬‬
‫‪ .2‬کنترل تاخیر درون دستور‪ :‬یک تاخیر غیر صفر در سمت راست اپراتور ‪ assignment‬آورده میشود‪.‬‬
‫دراین حالت عبارت سمت راست در زمان فعلی محاسبه شده‪ ،‬پس از گذشت زمان تاخیر‪ ،‬درون عبارت‬
‫سمت چپ قرار میگیرد‪.‬‬
‫‪ ‬کنترل زمان مبتنی بر رویداد‪ :‬یک رویداد به معنای تغییر مقدار یک ‪ reg‬یا ‪ net‬است‪ .‬سه نوع کنترل زمان مبتنی بر‬
‫رویداد وجود دارد‪.‬‬
‫‪ .1‬کنترل رویداد با قاعده‪ :‬عالمت @ برای مشخص کردن کنترل رویداد استفاده میشود‪ .‬دستورات میتوانند‬
‫با تغییر مقدار یک سیگنال‪ ،‬با لبة باالرونده یا پایین روندة یک سیگنال اجرا شوند‪.‬‬
‫‪ .2‬کنترل رویداد با نام‪ Verilog :‬این امکان را برای ما فراهم ساخته است که یک رویداد را تعریف‬
‫کنیم و در موقع لزوم آنرا تریگر کنیم ‪.‬تعریف رویداد با کلمة کلیدی ‪ event‬وتریگر کردن آن با >‪-‬‬
‫انجام میشود‪.‬‬

‫‪17‬‬
‫‪ .3‬کنترل چند رویداد‪ :‬گاهی اوقات چند سیگنال داریم که تغییر در یکی از آنها سبب تریگر شدن اجرای‬
‫یک مجموعه از دستورات می شود‪.‬این امر توسط ‪ or‬کردن رویدادها یا سیگنالها انجام میشود‪ .‬لیست‬
‫رویدادا یا سیگنالها به ‪ Sensitivity List‬مشهور است‪.‬‬
‫‪ ‬کنترل حساس به سطح‪ Verilog :‬دارایای ن قابلیت است که اجرای یک دستور را تا تحقق یک شرط خاص به‬
‫تعویق بیاندازیم‪،‬این امر توسط دستور ‪ wait‬انجام میشود‪.‬‬

‫دستور شرطی‬

‫دستور ‪case‬‬

‫حلقهها‬

‫‪18‬‬
‫‪Tasks and Functions‬‬
‫‪ Task‬و توابع دارای تفاوتهایی هستند که در جدول ‪ 5-4‬نشان داده شده است‪.‬‬

‫جدول ‪5-4‬‬

‫‪Task‬‬
‫بوسیله ‪ task … endtask‬مشخص میشود ‪.‬معموال در موارد زیر استفاده میشود‪.‬‬

‫در پروسیجر تاخیر‪ ،‬زمانبندی و یا کنترل زمان وجود داشته باشد‪.‬‬ ‫‪‬‬
‫‪ ‬پروسیجر پارامتر خروجی نداشته باشد و یا بیش از یک پارامتر خروجی داشته باشد‪.‬‬
‫‪ ‬پروسیجر هیچ پارامتر ورودی نداشته باشد‪.‬‬

‫‪19‬‬
‫‪Function‬‬
‫بوسیله ‪ function … endfunction‬مشخص میشود ‪.‬معموال در موارد زیر استفاده میشود‪.‬‬

‫‪ ‬در پروسیجر تاخیر‪ ،‬زمانبندی و یا کنترل زمان وجود نداشته باشد‪.‬‬


‫‪ ‬پروسیجر یک پارامتر خروجی داشته باشد‪.‬‬
‫‪ ‬پروسیجر حداقل یک پارامتر ورودی داشته باشد‪.‬‬

‫طراحی مدارهای ترکیبی در سطح رفتاری‬

‫برای طراحی مدارهای ترکیبی در سطح رفتاری‪ ،‬باید تمام ورودیهای مدار را در لیست حساس بدنه ی ‪ always‬ذکر کرد‪.‬‬
‫به هنگام توصیف مدار باید توجه داشت که تمام شرطهای ‪ if‬باید دارای ‪ else‬باشند تا ازایجاد مدار ترتیبی جلوگیری شود‪.‬‬

‫مثال ‪ :‬یک مالتی پلکسر ‪ 4‬به ‪ 1‬طراحی کنید‪.‬‬

‫‪21‬‬
‫طراحی مدارهای ترتیبی در سطح رفتاری‬

‫طراحی مدارهای ترتیبی را با استفاده از مثال بیان میکنیم‪.‬‬

‫مثال ‪ :‬یک ‪ D-FF‬حساس به لبه باالرونده با ‪ reset‬سنکرون طراحی کنید‪.‬‬

‫‪21‬‬
‫فصل دوم‬

‫آشنایی با نرمافزار ‪QuartusII‬‬

‫‪ -1-2‬مقدمه‬

‫طراحی وساخت مدارهای دیجیتال با دو روش زیر انجام می شود‪:‬‬

‫‪ )1‬گسسته )‪ : (discrete‬دراین روش‪ ،‬ابتدا مدارتوسط ‪IC‬های تجاری موجود طرح می شود‪ .‬سپس فیبرمدارچاپی‬
‫مربوطه تهیه می گردد و پس از نصب قطعات بر روی آن‪ ،‬عملیات تست و نهایت ًا بسته بندی انجام می شود‪.‬‬
‫برخی معایب این روش عبارت است از ‪ :‬مساحت و فضای زیاد‪ ،‬وزن زیاد‪ ،‬توان مصرفی باال‪ ،‬قابلیت کم گسترش‬
‫طرح‪ ،‬محدود شدن طرح به ‪IC‬های موجود‪... ،‬‬

‫‪ )2‬مجتمع )‪ : (integrated‬دراین روش کل طرح بصورت یکپارچه درون یک ‪ IC‬پیاده میشود‪.‬این کار با دو‬
‫روش قابل انجام است‪:‬‬

‫‪ : Full custom .1‬که درآن‪،‬کلیة مراحل ساخت ‪ IC‬در کارخانة سازنده به سفارش مشتری انجام می‬
‫شود‪.‬هزینة باال بویژه در تولید غیر انبوه از معایب این روش بشمار می آید‪.‬‬
‫‪ : Semi custom .2‬که درآن‪ ،‬مدار طرح شده توسط کاربر روی ادوات منطقی قابل برنامه ریزی‬
‫)‪ (PLD:Programmable Logic Device‬پیاده می شود‪ .‬این کار‪ ،‬توسط سختافزار برنامه ریز‬
‫)‪ (programmer‬به کمک یک نرمافزار از طریق کامپیوتر اجرا می گردد‪ .‬برخی ادوات منطقی قابل‬
‫برنامه ریزی عبارتاند از‪... ،ROM،FPGA،PLA،PAL :‬‬

‫طراحی با ادوات منطقی قابل برنامه ریز‪ ،‬چهار مرحله دارد‪:‬‬

‫‪ )1‬وارد کردن طرح )‪(Design Entry‬‬


‫‪ )2‬کمپایل کردن )‪(Compilation‬‬
‫‪ )3‬شبیهسازی )‪(Simulation‬‬
‫‪ )4‬برنامه ریزی )‪(Programming‬‬

‫‪22‬‬
‫تمامی مراحل فوق را می توان با نرمافزار ‪ QuartusII‬انجام داد‪.‬‬

‫‪ -2-2‬وارد کردن طرح )‪(Design Entry‬‬

‫به دو روش کلی می توان طرح را به نرمافزار وارد نمود‪:‬‬

‫‪ )1‬بصورت بلوکی ) ‪( Block Design‬‬


‫‪ )2‬توسط زبانهای توصیف کنندة سختافزاری )‪ (Hardware Description Language‬مانند ‪Verilog‬یا‬
‫‪.VHDL‬‬

‫‪ ‬ایجاد فایل طراحی بلوکی )‪(.bdf‬‬

‫‪ .1‬نرمافزار ‪ QuartusII‬را اجرا کنید‪.‬‬

‫‪23‬‬
‫‪ New Project Wizard .2‬را از گزینة ‪ File‬انتخاب کنید‪.‬‬

‫‪ .3‬با کلیک کردن ‪ Next‬صفحة ‪ 1‬از ‪ 5‬باز می شود‪ .‬در پنجرة اول آن‪ ،‬آدرس مورد نظر را جهت ذخیره‬
‫کردن پروژه وارد نمایید مثال ‪ .d:\alter\quartus60\test‬در پنجرة دوم‪ ،‬نام پروژه را تایپ کنید‬
‫مثال ‪ .adder‬در پنجرة سوم‪ ،‬نام طرح را تایپ کنید‪ .‬برای مثال ‪ .fulladder‬بطور پیش فرض هنگام‬
‫تایپ نام پروژه‪ ،‬همین نام برای طرح انتخاب می شود‪ .‬ولی در صورت نیاز می توان آن را تغییر داد‪.‬‬

‫‪24‬‬
‫‪ .4‬پس از کلیک کردن ‪ Next‬در صورت موجود نبودن آدرس تایپ شدة قبل‪ ،‬پیغامی جهتایجاد‬
‫‪ Folder‬یاد شده داده می شود که با کلیک کردن ‪ Yes‬صفحه ‪ 2‬از ‪ 5‬باز میگردد‪.‬‬

‫‪25‬‬
‫‪ .5‬در این صفحه در صورت نیاز‪ ،‬فایلهای طراحی اضافی دیگر را وارد کنید‪ .‬در غیر این صورت‪ ،‬روی‬
‫‪ Next‬کلیک نمایید تا صفحة ‪ 3‬از ‪ 5‬باز گردد‪.‬‬

‫‪26‬‬
‫‪ .6‬در این صفحه‪ ،‬نوع قطعة قابل برنامه ریزی را مشخص میکنیم‪ .‬برای این منظور‪ ،‬ابتدا در پنجرة اول‬
‫خانواده ‪ IC‬قابل برنامه ریزی را مشخص میکنیم‪ .‬سپس در صورت کلیک در دایرة کنار ‪Auto‬‬
‫‪ device‬شماره تراشه به طور خودکار انتخاب میشود‪ .‬ولی در صورت کلیک در دایرة کنار‬
‫‪ Specific device‬باید شماره تراشه را در لیست موجود در پنجره انتخاب نماییم‪ .‬با کلیک کردن‬
‫‪ Next‬صفحة ‪ 4‬از ‪ 5‬باز میشود‪.‬‬

‫‪ .7‬در این صفحه ابزارهای شبیه سازی‪ ،‬تحلیل‪ ،‬وسنتز دیگر به غیر از ‪ QuartusII‬که در پروژه استفاده‬
‫خواهید کرد را انتخاب میکنید‪ .‬در غیر این صورت‪ ،‬روی ‪ Next‬کلیک نمایید تا آخرین صفحه باز‬
‫گردد‪.‬‬

‫‪27‬‬
‫‪ .8‬در این صفحه خالصة انتخابهای بعمل آمده تا اینجا نمایش یافته است ‪ .‬برای تایید تنظیمات فوق‪،‬‬
‫روی ‪ Finish‬کلیک کنید تا صفحة اصلی ‪ QuartusII‬باز شود‪.‬‬
‫‪ .9‬اکنون گزینة ‪ NEW‬را از ‪ FILE‬اجرا کنید و از پنجرة حاصله‪ ،‬گزینه ‪Block Diagram‬‬
‫‪ /Schematic File‬را انتخاب نمایید‪ .‬با کلیک ‪ OK‬یک فضای خالی جهت کشیدن طرح بوجود‬
‫میآید‪.‬‬

‫‪28‬‬
‫‪ .11‬قبل از ادامة کار‪ ،‬با اجرای ‪ Save As‬از ‪ File‬نام فایل مورد نظر را تایپ کنید تا فایلی با پسوند ‪.bdf‬‬
‫ساخته شود‪ .‬بصورت پیش فرض‪ ،‬نام طرح وارد شده در مرحلة ‪ 3‬برای این فایل انتخاب میگردد‪.‬‬

‫‪29‬‬
‫‪ .11‬در فضای خالی طرح کلیک راست کرده و از ‪ Insert‬گزینة ‪ Symbol‬را انتخاب کنید‪ .‬نام گیت‬
‫مورد نظر را تایپ کرده و ‪ OK‬را کلیک کنید ( مثال ‪ and2‬برای گیت ‪ and‬دو ورودی)‪ .‬عالوه بر‬
‫گیت‪ ،‬بلوکهای از قبل طراحی شده نیز در کتابخانة این نرمافزار موجود است‪.‬‬

‫‪ .12‬گیت انتخاب شده را در محل مناسب قرار دهید و کلیک چپ کنید‪ .‬مرحله ‪ 11‬را برای سایر گیتها‬
‫نیز انجام دهید‪.‬‬

‫‪ .13‬برای دسترسی به ورودیها و خروجیهای مدار‪ ،‬باید ‪Pin‬هایی در ورودی و خروجی تعریف نمود‪.‬‬
‫برای این منظور‪ ،‬مرحلة ‪ 11‬را با تایپ ‪ input‬سپس با تایپ ‪ output‬تکرار کنید‪Pin .‬های ‪input‬‬
‫برای اعمال سیگنال به مدار و ‪Pin‬های ‪ output‬برای مشاهدة خروجی مدار استفاده میشوند‪.‬‬

‫‪31‬‬
‫‪ .14‬با دو بار کلیک روی ‪Pin‬های ورودی و خروجی‪ ،‬نام آنها را تایپ کنید‪ .‬این کار را می توان برای‬
‫گیتها نیز انجام داد‪.‬‬

‫‪ .15‬اکنون اتصال )‪ (connection‬بین قطعا ت را بوجود می آوریم‪ .‬برای این کار‪ ،‬با حرکت دادن‬
‫نشانگر موس در نزدیکی نقطة انتهایی هر نماد‪ ،‬نشانگر بطور خودکار به عالمت ‪ +‬تبدیل می شود‪.‬‬
‫روی آن کلیک کنید و کلیک چپ را نگه دارید و موس را به سمت مقصد حرکت دهید‪ .‬با رسیدن‬
‫نشانگر ‪ +‬به مقصد و تبدیل شدن آن به یک مربع‪ ،‬کلیک چپ را رها کنید‪.‬‬

‫‪31‬‬
‫‪ .16‬پس از اتمام اتصاالت‪ ،‬فایل را ذخیره کنید‪.‬‬

‫‪ ‬ایجاد فایل ‪(.vhd)VHDL‬‬

‫‪ .1‬مراحل ‪ 1‬تا ‪ 8‬از قسمت قبل را تکرار کنید‪.‬‬

‫‪ .2‬اکنون گزینة ‪ NEW‬را از ‪ FILE‬اجرا کنید و از پنجرة حاصله‪ ،‬گزینه ‪ VHDL File‬را انتخاب نمایید‪ .‬با‬
‫کلیک ‪ OK‬یک فضای خالی جهت وارد نمودن کدهای ‪ VHDL‬بوجود می آید‪.‬‬

‫‪ .3‬قبل از ادامة کار‪ ،‬با اجرای ‪ Save As‬از ‪ File‬نام فایل مورد نظر را تایپ کنید تا فایلی با پسوند ‪ .vhd‬ساخته‬
‫شود‪ .‬بصورت پیش فرض‪ ،‬نام طرح وارد شده در مرحلة ‪ 3‬قسمت قبل برای این فایل انتخاب میگردد‪.‬‬

‫‪32‬‬
‫‪ .4‬در فضای خالی ایجاد شده‪ ،‬کدهای ‪ VHDL‬را تایپ کنید و فایل را ‪ Save‬نمایید‪.‬‬

‫‪33‬‬
‫‪ ‬ایجاد فایل ‪(.v)Verilog‬‬

‫‪ .1‬مراحل ‪ 1‬تا ‪ 8‬از قسمت اول را تکرار کنید‪.‬‬

‫‪ .2‬اکنون گزینة ‪ NEW‬را از ‪ FILE‬اجرا کنید و از پنجرة حاصله‪ ،‬گزینه ‪ Verilog HDL File‬را انتخاب‬
‫نمایید‪ .‬با کلیک ‪ OK‬یک فضای خالی جهت وارد نمودن کدهای ‪ Verilog‬بوجود می آید‪.‬‬

‫‪ .3‬قبل از ادامة کار‪ ،‬با اجرای ‪ Save As‬از ‪ File‬نام فایل مورد نظر را تایپ کنید تا فایلی با پسوند ‪ .v‬ساخته‬
‫شود‪ .‬بصورت پیش فرض‪ ،‬نام طرح وارد شده در مرحلة ‪ 3‬قسمت اول برای این فایل انتخاب میگردد‪.‬‬

‫‪34‬‬
‫‪ .4‬در فضای خالی ایجاد شده‪ ،‬کدهای ‪ Verilog‬را تایپ کنید و فایل را ‪ Save‬نمایید‪.‬‬

‫‪35‬‬
‫‪ ‬باز کردن فایلهای طراحی‬

‫اگر بخواهیم از فایلهای ایجاد شدة قبلی استفاده کنیم‪ ،‬پس از اجرای نرمافزار ‪ QuartusII‬گزینه ‪Open‬‬
‫‪ Project‬را انتخاب می کنیم‪ .‬سپس در آدرس مربوطه‪ ،‬روی فایل مورد نظر دو بار کلیک مینماییم‪ .‬اگر فایل‬
‫انتخاب شده از نوع ‪ Quartus II Project File‬باشد‪ ،‬تمامی فایلهای پروژه باز میگردد‪.‬‬

‫پس از وارد کردن طرح بصورت شماتیک یا زبان توصیف کنندة سختافزاری ویا باز کردن‬
‫پروژههای قبلی‪ ،‬به دومین بخش یعنی کمپایل کردن می پردازیم‪.‬‬

‫‪36‬‬
‫‪ -3-2‬کمپایل کردن )‪(Compilation‬‬

‫برای آنالیز و سنتز مدار وارد شده در بخش اول‪ ،‬عملیات کمپایل کردن را از طریق اجرای ‪ Processing‬و انتخاب گزینة‬
‫‪ Start Compilation‬انجام دهید‪.‬‬

‫در صورت وجود اشکال در تولید فایل طراحی‪ ،‬پیغام خطا شامل تعداد خطاها و تعداد هشدارها ظاهر می شود‪ .‬محل و نوع‬
‫خطا در پنجرة ‪ Message‬نمایان می گردد تا بتوان اشکال مدار را بر طرف کرد‪ .‬در صورت عدم خطا‪ ،‬پنجره ای با‬
‫مضمون موفقیت در کمپایل کردن ایجاد می شود که با کلیک کردن ‪ OK‬آن‪ ،‬میتوان به مراحل بعد پرداخت‪.‬‬

‫‪37‬‬
‫خالصه ای از نتایج کمپایل کردن در گزارش کمپایل کردن )‪ (Compilation Report‬درج می گردد‪ .‬از جملة این‬
‫نتایج‪ ،‬تاخیر مدار پیاده شده با ‪ IC‬مورد نظر است‪ .‬که در قسمت ‪ tpd‬درون‪ Folder‬تحلیل کنندة زمانی ‪(Timing‬‬
‫)‪ Aynalyzer‬دیده می شود‪.‬‬

‫در صورتیکه از فایلهای ‪ HDL‬برای ورود طرح استفاده شده باشد‪ ،‬می توان شماتیک طرح را در این مرحله مشاهده نمود‪.‬‬
‫برای این کار‪ ،‬از قسمت ‪ Tools‬گزینة ‪ Netlist Viewers‬را انتخاب کنید و سپس ‪ RTL Viewer‬را اجرا نمایید‪.‬‬

‫‪38‬‬
39
‫‪ -4-2‬شبیهسازی )‪(Simulation‬‬

‫‪ .1‬پیش از شروع شبیه سازی باید فایل شکل موج برداری )‪ (Vector Waveform File‬ساخته شود‪ .‬در این‬
‫فایل‪ ،‬شکل موجهای الزم برای تحریک ورودیهای مدار تولید می شود و شکل موجهای خروجی حاصله از‬
‫شبیه سازی نمایش داده می شود‪ .‬برای ایجاد این فایل‪ ،‬گزینة ‪ New‬را از قسمت ‪ File‬انتخاب کنید و از قسمت‬
‫‪Other Files‬گزینه ‪ Vector Waveform File‬را اجرا کنید‪.‬‬

‫‪ .2‬قبل از ادامه کار با اجرای ‪ save as‬از ‪ File‬نام فایل مورد نظر را تایپ کنید‪ ،‬تا فایلی با پسوند ‪ .vwf‬ساخته شود‪.‬‬

‫‪41‬‬
‫‪ .3‬زمان انتهایی )‪ (End Time‬و فاصلههای مدرج )‪ (Grid Size‬روی شکل موجها را مشخص کنید‪ .‬برای ابن‬
‫منظور‪ ،‬از قسمت ‪ Edit‬استفاده کنید‪ .‬مثال برای زمان انتهایی ‪ 20‬میکروثانیه و فاصلة مدرج ‪ 1‬میکروثانیه‪ ،‬مراحل‬
‫زیر را دنبال کنید ‪:‬‬
‫‪Edit > End Time > 20 > μs > OK‬‬
‫‪Edit > Grid Size > Period > 1 > μs > OK‬‬

‫‪ .4‬برای دیدن کل فاصلة زمانی صفر تا زمان انتهایی‪ ،‬گزینة ‪ Fit in Window‬را از قسمت ‪ View‬اجرا کنید‪.‬‬

‫‪41‬‬
‫‪ .5‬در این مرحله‪ ،‬ورودیها و خروجیهای مورد نمایش را اضافه می کنیم‪ .‬این کار را با دو روش می توان انجام‬
‫داد‪.‬‬

‫روش اول ‪ :‬در پنجره زیر ‪ Name Value‬را در سمت چپ فایل ‪ vwf‬کیلیک راست کنید‪ .‬و گزینه ‪Insert‬‬
‫…‪ Node or Bus‬را انتخاب نموده و روی …‪ Node Finder‬کلیک کنید‪ .‬در پنجرة باز شده‪ ،‬گزینة ‪List‬‬
‫را اجرا کنید‪ .‬با این کار‪ ،‬فهرستی از تمامی پایهها در پنجرة سمت چپ ظاهر می شود‪ .‬حال با دو بار کلیک‬
‫روی هر پایة ورودی یا خروجی‪ ،‬آن پایه به پنجرة سمت راست منتقل می گردد‪ .‬همین کار را می توان با یکبار‬
‫کلیک روی هر پایة ورودی یا خروجی و انتخاب گزینة <نیز انجام داد‪ .‬با انتخاب >> می توانید تمام پایهها را‬
‫به پنجرة سمت راست انتقال دهید‪ .‬اکنون گزینة ‪ OK‬را کلیک کنید و در پنجرة باز شده نیز مجددا ‪ OK‬را‬
‫کلیک کنید‪.‬‬

‫‪42‬‬
43
‫روش دوم ‪ :‬پنجره ‪ Node Finder‬را بصورت زیر باز کنید ‪:‬‬
‫‪View > Utility Windows > Node Finder‬‬
‫با آمدن پنجره ‪ Node Finder‬در قسمت ‪ Filter‬گزینه ‪ Pins:all‬را انتخاب کنید و روی ‪ List‬کلیک کنید تا‬
‫فهرست تمام پایهها ظاهر شود‪ .‬در صورت نیاز به رسم شکل موجهای گرههای میانی مدار‪ ،‬در قسمت ‪Filter‬‬
‫گزینه )‪ Design Entry(all names‬را انتخاب کنید‪.‬‬

‫‪44‬‬
‫حال توسط موس‪ ،‬ورودیها و خروجیها را از پنجرة ‪ Node Finder‬به پنجره فایل ‪ vwf‬درگ کنید‪ .‬می‬
‫توانید ورودیها و خروجیها را جداگانه‪ ،‬و یا با همدیگر به فایل شکل موج برداری منتقل کنید‪.‬‬

‫‪45‬‬
‫‪ .6‬با کلیک روی هر ورودی دلخواه‪ ،‬می توانید شکل موج آن را ایجاد نمایید‪ .‬پس از کلیک روی ورودی‪ ،‬از‬
‫طریق ‪ Edit‬و سپس ‪ Value‬می توانید مقادیر ‪ 0‬یا ‪ 1‬یا بی تفاوت یا ‪ ...‬را به ورودی اعمال کنید‪ .‬یکی از‬
‫قابلیتهای موجود در ‪ Edit > Value‬گزینه ‪ clock‬است که توسط آن‪ ،‬شکل موج دیجیتال متناوبی به‬
‫ورودی متصل می گردد‪ .‬مقادیر دورة تناوب و دیوتی سایکل این شکل موج‪ ،‬قابل تنظیم است‪ .‬مثال برای‬
‫داشتن تمامی حالتهای ممکن ‪ 3‬ورودی در فاصلة زمانی ‪ 0‬تا ‪ 8‬میکرو ثانیه‪ ،‬دورة تناوب آنها را به ترتیب ‪8‬‬
‫میکرو ثانیه‪ 4 ،‬میکرو ثانیه و ‪ 2‬میکرو ثانیه انتخاب می کنیم‪.‬‬

‫‪46‬‬
‫‪ .7‬پس از تعریف شکل موجهای ورودی‪ ،‬فایل را ذخیره کنید‪.‬‬
‫‪ .8‬اکنون از قسمت ‪ Processing‬گزینه ‪ Start Simulation‬را اجرا کنید‪ .‬پس از پیغام اتمام شبیه سازی با‬
‫موفقیت ‪ OK‬را کلیک کنید‪.‬‬

‫‪47‬‬
‫‪ -5-2‬برنامه ریزی )‪(Programming‬‬

‫پس از وارد کردن طرح‪،‬کمپایل کردن و شبیه سازی اکنون مرحلة آخر یعنی برنامه ریزی را انجام می دهیم‪.‬‬

‫‪ .1‬برای برنامه ریزی‪ ،‬باید نوع قطعه و شمارة تراشة مورد نظر را انتخاب کرده باشید‪ .‬در صورتیکه این کار انجام‬
‫نشده باشد‪ ،‬گزینة ‪ Device‬را از قسمت ‪ Assignment‬اجرا کنید‪ .‬در پنجرة روبروی ‪ Family‬خانواده ‪IC‬‬
‫قابل برنامه ریزی را انتخاب کنید (مثال ‪ .)CycloneII‬سپس با کلیک در دایرة کنار ‪ Specific device‬شماره‬
‫تراشه را در لیست موجود در پنجره انتخاب نمایید (مثال ‪ .)EP2C20Q240C8‬اکنون گزینة ‪ OK‬را کلیک‬
‫کنید‪.‬‬

‫‪48‬‬
‫‪ .2‬در این مرحله به هر ورودی و خروجی مدار‪ ،‬یک شمارة پایه نسبت می دهیم‪ .‬برای این منظور گزینه‬
‫‪ Assignment Editor‬را از قسمت ‪ Assignment‬اجرا نمایید‪ .‬روی ‪ Pin‬در مقابل پنجره ‪Category:‬‬
‫کلیک کنید ‪.‬با دو بار کلیک روی >>‪ <<new‬آبی در زیرستون ‪ to‬ورودی یا خروجی مورد نظر را انتخاب‬
‫نمایید‪.‬این کار را برای >>‪ <<new‬باز شدة جدید در مورد ورودی یا خروجی دیگر تکرار کنید‪ .‬البته این‬
‫کار را با یکبار کلیک روی >>‪ <<new‬آبی و تایپ نام ورودی یا خروجی نیز می توان انجام داد‪ .‬همچنین با‬
‫اجرای گزینة ‪ Show All Known Pin Names‬از قسمت ‪ View‬نیز میتوان ورودیها و خروجیها را به‬
‫‪ Assignment Editor‬انتقال داد‪.‬‬

‫‪49‬‬
51
51
‫‪ .3‬در زیر ستون ‪ Location‬و در مقابل هر ورودی و یا خروجی‪ ،‬دو بار کلیک کنید و شماره پایة مورد نظر را‬
‫انتخاب نمایید‪ .‬این کار را می توان با یکبار کلیک در مقابل هر ورودی و یا خروجی در زیر ستون ‪ Location‬و‬
‫تایپ شماره پایة مورد نظر نیز انجام داد‪.‬‬

‫‪52‬‬
‫‪ .4‬قبل از ادامة کار‪ ،‬باید شماره پایههای نسبت داده شده را ذخیره کنید‪.‬‬
‫‪ .5‬اکنون با بازکردن فایل ‪ .bdf‬شماره پایههای ورودی و خروجی روی طرح شماتیک نمایان میگردد‪.‬‬

‫‪ .6‬حال باید طرح را دوباره کمپایل کنید تا مدار با شماره پایههای تخصیص یافته سنتز شود‪ .‬همانطور که در قبال‬
‫دیدیم‪ ،‬عملیات کمپایل کردن از طریق اجرای ‪ Processing‬و انتخاب گزینه ‪ Start Compilation‬انجام‬
‫میگیرد‪.‬‬
‫‪ .7‬برای دیدن آرایش پایههای تراشة قابل برنامه ریزی و نحوة قرار گرفتن طرح روی آن‪ ،‬گزینة ‪ Pin Planner‬را‬
‫از قسمت ‪ Assignment‬اجرا نمایید‪.‬‬

‫‪53‬‬
54
‫‪ .8‬در این مرحله‪ ،‬نرمافزار ‪ MDA-ASIC2‬را اجرا کنید و در قسمت ‪ FPGA / CPLD‬در دایرههای کناری‬
‫‪ JTAG Load‬و ‪ Altra‬کلیک کنید‪.‬‬

‫‪ .9‬برای برنامه ریزی ‪ IC‬گزینه ‪ Programmer‬را از قسمت ‪ tools‬اجرا کنید‪ .‬گزینه ‪ Hardware Setup‬را اجرا‬
‫نمایید‪ .‬گزینه ‪ Add Hardware‬را انتخاب کنید‪ .‬در پنجره مقابل ‪ Hardware type:‬گزینه‬
‫‪ ByteBlasterMV or ByteBlasterII‬و در پنجره مقابل ‪ Port:‬گزینه ‪ LPT1‬را انتخاب کنید‪.‬این مرحله‬
‫را باید فقط یکبار اجرا نمود تا سختافزار برای کامپیوتر معرفی شود‪.‬‬

‫‪55‬‬
‫‪ .11‬برای برنامه ریزی ‪ IC‬گزینه ‪ Programmer‬را از قسمت ‪ tools‬اجرا کنید‪ .‬در پنجره مقابل ‪ Mode:‬گزینه‬
‫‪ JTAG‬را انتخاب کنید‪ .‬در مربع زیر ستون ‪ Program / Configure‬کلیک کنید‪ .‬اکنون با کلیک روی‬
‫‪ start‬برنامه ریزی شروع میشود‪ .‬با نمایش ‪ ٪100‬د ر پنجره ‪ Progress‬برنامه ریزی به پایان می رسد و مدار‬
‫پیاده شده روی ‪ FPGA‬آماده تست میباشد‪.‬‬

‫‪56‬‬
57

You might also like