You are on page 1of 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