جزوه مباحث ويژه در الكترونيك
Download
Report
Transcript جزوه مباحث ويژه در الكترونيك
مباحث ویژه در
الکترونیک
آرایه های دروازه ای قابل
برنامه ریزی میدانی
)Field Programmable Gate Arrays (FPGAs
مدرس:
مسلمی
دکتر محمدرضا
[email protected]
مقدمه
ASICچیست؟
مخفف کلمات Application Specific Integrated ICاست.
این واژه معموال به مدارهای مجتمعی که صرفا برای کاربردهای خاص ساخته می ش
از این نوع مدارهای مجتمع در ساخت انواع میکروپروسسورها ،انواع
حافظه های خواندنی-نوشتنی ( )RAMو فقط خواندنی ( )ROMاستفاده می
مزا
شود.
یا در صورتی که مدارهای با کاربرد خاص به صورت مدار مجتمع در آیند ،کاهش
اندازه مدار خواهیم داشت.
توجهی در
قابل
اندازه مدار
کاهش
با
(1یکپارچگی سیگنال ها در مدار افزایش می یابد.
(2سرعت مدار افزایش می یابد.
معایب
معموال از زمان طراحی
این مدار تا تولید آن توسط کارخانجات سازنده آی
سی زمان نسبتا طوالنی نیاز است.
به دلیل آن که تولید توسط کارخانجات تولید آی سی و در یک فرآیند خارج
از روال آن انجام می شود ،هزینه تمام شده باالیی دارند.
معموال برای تولید انبوه استفاده می شوند و برای تعداد کم مقرون به صرفه
نمی باشند.
FPGAچیست؟
مخفف کلمات Field Programmable Gate Arrayاست.
این واژه معموال به مدارهای مجتمعی که برای پیاده سازی مدارهای دیجیتال قا
از این نوع مدارهای مجتمع در ساخت انواع میکروپروسسورها ،انواع
حافظه ها ،مدارات ورودی-خروجی و پردازش تصویر استفاده می شود.
مزا
یا در صورتی که مدارهای دیجیتال در یک FPGAقرار گیرد ،کاهش قابل توجهی
خواهیم داشت.
اندازه
مدار مدار
اندازه
در کاهش
با
(1یکپارچگی سیگنال ها در مدار افزایش می یابد.
(2سرعت مدار افزایش می یابد.
ظرفیت باالی فشرده سازی دارند.
قیمت تمام شده آنها بسیار پایین می باشد
زمان عرضه این آی سی ها به بازار بسیار کم می باشد.
امنیت مدار باال رفته و امکان کپی کردن آن از بین می رود.
معایب
سطح سیلیکون FPGAبه صورت بهینه مورد استفاده قرار نمی گیرد.
تاخیر و توان مصرفی آنها نسبت به مدارات ASICبیشتر است.
کاربر
دها اگرچه نمی توان محدوده خاصی برای کاربرد این مدارها تعیین کرد با این
وجود برخی از کاربردهای آنها عبارتند از:
کارتهای ورودی-خروجی ،فیلترهای دیجیتال ،میکروکنترلر و میکروپروسسورهای
خاص ،پردازش سیگنال و تصویر ،سیستم های مخابراتی و ابزار دقیق و سیستم
شرکت های
سازندهترین شرکت های سازنده
مهم
Xilinx, Altera, Lattice, Actel
FPGAعباتند از:
مهم ترین سهم شرکت های
تاریخچه آی سی های دو شرکت
سازنده از بازار FPGA
درباره زایلینکس
)Xilinxشرکت در سال 1984تاسیس گردید.
( این
بیش از 2600کارمند دارد.
بیش از نیمی از محصوالت FPGAمورد نیاز را
در دنیا تامین می کند.
با سازندگان مهمی چون UMC ،IBMو Seiko
مشارکت دارد.
درباره آلترا
مهمترین نرم افزارهای شبیه سازی:
)Altera
شرکت در سال 1983تاسیس گردید.
( این
ISI, Fandation
در سال 1992ساختار جدول جستجو ( Look Up
)Tableرا معرفی نمود.
دومین شرکت تولید کننده آی سی های FPGAدر
دنیا است.
با شرکت TSMCمشارکت دارد.
ساختار داخلی FPGA
چگونه می توان مدارهای دیجیتالی مختلف را درون یک
FPGAپیاده سازی کرد؟
همانطور که می دانیم برای هر مدار دیجیتال با هر تعداد ورودی و خروجی می
توان یک جدول درستی ( )Truth tableرسم نمود.
در جدول درستی تمامی حالت های ممکن ورودی به تصویر درآمده و به ازای هر
یک از این حاالت خروجی تعیین می گردد.
فرض کنید مدار مورد نظر 4ورودی و 1خروجی دارد.
در این حالت می توان این مدار را با یک RAMبا 4بیت ورودی آدرس و 1بیت خروج
RAMمورد نظر دارای 16آدرس مختلف ،معادل 16حالت ورودی جدول درستی است که در هر
آدرس خروجی تابع مورد نظر نوشته می شود.
بسته به این که ورود مدار چه باشد داده ذخیره شده در یکی از خانه های RAMدر
خروجی ذخیره می شود.
برای پیاده سازی مدارهای بزرگتر می توان از مجموعه ای از این بلوک های حافظه
استفاده نمود.
در این مدارها به دلیل استفاده از ،RAMمدار ذخیره شده در FPGAفرار بوده و
پس از قطع برق از بین می رود.
الزم است
PROMمجدد
پیکربندی
برق،
پس از
کنند .تا پس از وصل برق ،مجددا
کپی می
درون یک
قطع را
برنامه
بنابراین کل
معموال
بارگذاری شود.
درون FPGA
گردد .یعنی هر زمان که
انعطاف پذیری می
استفاده از RAMباعث افزایش
بخواهیم می توانیم با پیکر بندی مجدد ،مدار داخلی را عوض کنیم.
چهار بلوک زیر می تواند در ساختار داخلی FPGAبه عنوان بلوک های پایه مورد
استفاده قرار گیرد.
سازندگان دنیای ،FPGAبه کوچکترین واحد تشکیل دهنده
(یعنی هر یک از حافظه های مورد استفاده) اصطالحا
)LUT (Look Up Table
می گویند.
) PROM (Anti fuse
EEPROM
FLASH
RAM
یک مدار منطقی
ثابت
مثالی از روش پیاده سازی یک
منطق برنامه پذیر با 3ورودی
و یک خروجی با استفاده از
آنتی فیوز
چگونه می توان مدارهای ترتیبی را درون یک FPGA
کرد؟( )Sequentialنیز می توانند درون یک FPGAپیاده سازی
ترتیبی
مدارهای
سازی
پیاده
شوند.
،FPGAخروجی هر LUTبه صورت مستقیم و همچنین از طریق یک فلیپ فالپ
در
به یک مالتی پلکسر وارد می شود.
بسته به ورودی کنترل ،MUXمدار ترکیبی یا ترتیبی خواهد بود.
از ترکیب دو سلول منطقی ( )Logic Cellیک
Sliceبه وجود می آید
واحد پایه در FPGA
LC – Logic Cell
LE – Logic Element
Xilinx:
Altera:
در Sliceمداری برای انتقال رقم
از ترکیب 2عدد Sliceیک
نقلی نیز وجود دارد.
Slice 0
)Configurable Logic Block (CLB
تشکیل می گردد.
PRE
D
CE
Q
Carry
LUT
CLR
CLBدر واقع اصلی ترین بخش
از هر FPGAاست که توابع
منطقی را پیاده سازی می
کند.
در سری Stratix IIخانواده Altera
D PRE
Q
CE
Carry
LUT
CLR
اصطالحا
)ALM (Adaptive Logic Module
نامیده می شود.
یک Sliceکه از ترکیب دو LC
شده است.
دارای 4خروجی می
تشکیل Slice
هر
باشد.
جمع بندی
• Look Up Table
• شامل یک RAMبا 4ورودی و یک خروجی می باشد.
LUT
• Logic Cell
• شامل 2عدد LUTبه همراه 2عدد F.F.می باشد.
LC
• از ترکیب 2عدد LCتشکیل می شود.
Slice
• Configurable Logic Block
• از ترکیب 2عدد Sliceتشکیل می گردد.
CLB
• Field Programmable Gate Array
• از کنار هم قرار گرفتن CLBها تشکیل می شود.
FPGA
ساختار داخلی یک FPGAمعمول
در اغلب FPGAهای جدید عالوه بر تعداد زیاد ،CLBبرخی امکانات دیگر
نیز برای تسهیل در پیاده سازی مدارهای دیجیتال پیچیده تر وجود دارد.
یکی از مهم ترین این امکانات RAMداخلی غیر از نمونه های کوچک موجود
در LUTها
است .بخواهیم مداری با تعداد زیاد ورودی را پیاده سازی
صورتی که
در
نماییم ،به جای استفاده از تعداد زیاد CLBاز بخشی از همین حافظه
کنیم.
مثال،می
استفاده
داخلی
اسپارتان 2از شرکت زایلینکس ،دارای بلوک های هر
مدل
عنوان
به
کدام با ظرفیت 4096بیت است.
جدول
نحوه
استفاده
داخلی اسپارتان 2
از
حافظه
ضرب کننده
در بعضی محصوالت جدید شرکت های Xilix, Alteraبلوک های ضرب کننده وجود
دارد.
عمل ضرب در این محصوالت را می توان توسط ضرب کننده های داخلی 18بیتی
داخلیانجام داد.
میکروپروسسورباالتر
نیز با سرعت
این ضرب کننده ها معموال در کارهای پردازش سیگنال کاربرد دارند.
در بعضی محصوالت جدید شرکت های Xilix, Alteraمثل Virtex-II Pro
یک
میکروپروسسور داخلی وجود دارد.
این FPGAکامال تخصصی است و برای کاربردهای تخصصی استفاده می شود.
PowerPCدر واقع یک میکروپروسسور داخلی است که توسط شرکت IBMداخل
FPGAقرار داده شده است.
مراحل
FPGA
طراحی ابتدایی
طراحی ابتدایی
•
در این مرحله باید مدار مورد نظر خود
را طراحی نماییم.
•
مختلف
ساخت
یک
روش
معمول
پیاده
برای
سازی
مدار
شبیه سازی
استفاده از برنامه های سطح باال برای
سنتز و بهینه سازی مدار
برنامه ریزی مدار است.
•
البته
در
بسیاری
از
نرم
افزارهای
شبیه ساز ،امکان این که شماتیک مدار
را رسم کرد نیز وجود دارد.
•
این نرم افزارها قادرند خروجی متنی
برنامه
را
تولید کنند.
نیز
به
زبان
های
مرسوم
پیاده سازی مدار بر روی تراشه
دو زبان اصلی برنامه نویسی FPGAعبارتند از:
VHDL, Verilog
برخالف برنامه های مرسوم که معموال به صورت خط به خط اجرا می شوند،
این برنامه ها بر اساس رخدادها ( )Cuncurrentاجرا می شوند .به همین
دلیل معموال از کلمه ((کد)) به جای ((برنامه)) استفاده می شود.
VHDL: Very High Speed Description Language
زبان توصیفی با سرعت خیلی باال
در این مرحله ،معموال کد VHDLرا در یک فایل با پسوند .vhdذخیره می
کنند.
از آنجای که هر طرح پیاده شده با کد VHDLرا بعدا می توان به صورت
پکیج آماده در سایر طرح ها نیز استفاده کرد ،معموال نام فایل را همان
موجودیت ( )entityمورد استفاده در کد قرار می دهیم.
شبیه سازی
برنامه هایی وجود دارند که کد مورد نظر ما را گرفته و عملکرد مدار
را برای ما شبیه سازی می کنند.
به این ترتیب که ما شکل ورودی های مدار را برای آنها تعیین کرده و
این نرم افزارها ،خروجی های مختلف را به ما می دهند.
به وسیله این نرم افزارها می توانیم از عملکرد مدار خود به ازای
حالت های مختلف ورودی ،قبل از پیاده سازی آن بر روی FPGAمطمئن شویم.
دو نرم افزار معروف برای شبیه سازی عملکرد کدهای VHDLو Verilog
عبارتند از:
• ModelSimاز شرکت Model Technology
• LDVاز شرکت Cadence
برای شبیه سازی عملکرد مدار ،معموال الزم است که غیر از برنامه اصلی
یک برنامه دیگر نوشته شود.
این برنامه که صرفا برای تست مدار می باشد( test fixture ،برای برنامه
)Verilogو ( test benchبرای برنامه )VHDLنامیده می شود.
معموال برنامه تست به این صورت است که شکل موج های مختلف که حاوی
تمام حاالت ممکن ورودی می باشد تولید می شود.
معموال در نوشتن برنامه ،test benchطراح به بسیاری از نکات منفی و حالت
هایی که در طراحی مدار اصلی از آن غافل شده است پی می برد.
سنتز
مهم ترین مرحله در ساخت آی سی منطقی که از زبان توصیف سخت افزار
برای طراحی آن استفاده شده است ،مر حله سنتز ( )Synthesisاست.
در این مرحله کد HDLتبدیل به مجموعه ای از گیت های مناسب می شود.
نرم افزارهای FPGA Express, FPGA Compiler II, Leonardo Spectrum,
Simplifyاز جمله نرم افزارهای تخصصی سنتز می باشند.
پیاده سازی
آخرین مرحله انجام یک پروژه مرحله ای است که فایل سنتز شده دریافت و
مدار مربوط به آن بر روی FPGAپیاده می شود.
در مرحله پیاده سازی 4گام اصلی وجود دارد.
:Translationتمام اطالعاتی که برای مراحل بعد الزم است در این مرحله
ساخته می شود.
:Mappingاین که مدار منطقی مورد نظر ما باید چه ترکیبی از کوچکترین
عناصر سازنده FPGAیعنی LUTها بافرها ،بلوک های رم و ...باشد در این
مرحله تعیین می گردد.
:Placementدر این مرحله برای هر کدام از عناصر موجود در فایل تولید
شده در مرحله قبل ،یک محل مخصوص در نظر گرفته می شود.
:Routingآخرین مرحله می باشد .در این مرحله ،عناصر روی FPGAبا سیم
شوند.معروف قادرند تمامی مراحل
افزارهای
برخیبهازهمنرم
routingکه
ذکر است
الزمو به
وصل می
موجود
منابع
ها
از ورود کد های مورد نظر تا مرحله پیاده سازی را انجام دهند.
از مهم ترین این نرم افزارها می توان به Quartus IIو Xilinx ISE Design
اشاره نمود.
ساختار یک برنامه VHDL
هر کد VHDLدارای سه بخش اصلی زیر می باشد.
-1معرفی کتابخانه ها ( :)Library Declerationدر این بخش تمامی کتابخانه
های استفاده شده در کد معرفی می گردند.
-2موجودیت ( :)Entityپین ها (پورتهای) ورودی و خروجی مدار را مشخص می
کند.
-3معماری ( :)Architectueنحوه عملکرد مدار را مشخص می کند.
کتابخانه
معموال قطعات پر استفاده و معمول را در کتابخانه قرار می دهند تا
بتوان از قابلیت های استفاده مجدد و اشتراک گذاری آنها در سایر
استفاده
نمود.حداقل 3بسته ( )Packageمتعلق به 3کتابخانه
VHDLبه
نیزهر کد
برنامه در
معموال
نیاز داریم.
ieee مربوط به کتابخانهstd_logic_1164 بسته
•
std مربوط به کتابخانهstandard بسته
•
work متعلق به کتابخانهwork بسته
•
:برای اعالن کتابخانه به دو خط کد نیاز داریم
LIBRARY library_name;
Use library_name.package_name.package_parts;
مثال
LIBRARY ieee;
Use ieee.std_logic_1164.all;
به حروف بزرگ و کوچک حساسVHDL
.نمی باشد
LIBRARY std;
Use std.standard.all;
موجودیت ()Entity
•
موجودیت در کد به صورت زیر تعریف می شود.
ENTITY entity_name IS
( PORT
;port_name: signal_mode signal_type
;port_name: signal_mode signal_type
;)…
;END entity_name
پارامتر modeشامل یکی از مقادیر زیر است.
In, out, inout, buffer
نوع بافر زمانی استفاده می شود که بخواهیم از یک
سیگنال خروجی به صورت داخلی استفاده نماییم.
پارامتر typeشامل یکی از مقادیر زیر است.
Bit, integer, std_logic
معماری ()Architecture
•
معماری دو بخش دارد.
-1بخش اعالن (اختیاری و در صورت لزوم) :سیگنال ها و متغیرها و ثوابت
تعریف می شوند.
-2بخش کد که عملکرد مدار را توصیف می کند.
ARCHITECTURE architecture_name of entity_name IS
][Decleration
BEGIN
)(code
;END architecture_name
سادهNAND طراحی یک گیت:مثال
ENTITY nand_gate IS
ENTITY nand_gate IS
PORT (a, b: IN BIT;
-- inputs
x: OUT BIT);
PORT (a, b: IN BIT;
-- outputs
x: OUT BIT);
END nand_gate;
END nand_gate;
ARCHITECTURE my_arch of nand_gate IS
ARCHITECTURE my_arch of nand_gate IS
Signal
int: std_logic;
-- internal
signalسیگنال
decleration تعریف
توان از
میint
داخلی
BEGIN
به جای
BEGIN
x <= a NAND b;
. استفاده کردNAND عملگر
int <= a and b;
END my_arch ;
x <= NOT int;
END my_arch ;
استاندارد
در
زیر
منطقی
عملگرهای
.اند
تعریف شدهVHDL
NOT, AND, NAND, OR, NOR, XOR,
XNOR
طراحی یک نیم جمع کننده:مثال
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Half_adder_mine is
Port ( X : in STD_LOGIC;
Y : in STD_LOGIC;
S : out STD_LOGIC;
C : out STD_LOGIC);
end Half_adder_mine;
architecture Behavioral of Half_adder_mine is
begin
S <= X xor Y;
C <= X and Y;
end Behavioral;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Three_input_gates is
Port ( IN0, IN1, IN2 : in STD_LOGIC;
OUT0, OUT1, OUT2, OUT3, OUT4, OUT5 : out STD_LOGIC);
end Three_input_gates;
architecture Behavioral of Three_input_gates is
begin
OUT0 <= IN0 and IN1 and IN2;
OUT1 <= IN0 or IN1 or IN2;
OUT2 <= not (IN0 and IN1 and IN2);
OUT3 <= not (IN0 or IN1 or IN2);
OUT4 <= IN0 xor IN1 xor IN2;
OUT5 <= IN0 xnor IN1 xnor IN2;
end Behavioral;
انواع داده
داده های از قبل تعریف
•
شده
شده
تعریف
های
داده
داده های از قبل تعریف شده
توسط کاربر
BIT, BIT_VERCTOR
STD_LOGIC, STD_LOGIC_VECTOR
STD_ULOGIC, STD_ULOGIC_VECTRO
BOOLEAN
INTEGER
NATURAL
REAL
SIGNED, UNSIGNED
داده های تعریف شده توسط کاربر
INTEGER
ENUMERATED
•
داده های از قبل تعریف شده
و در کتابخانه ها و بسته های زیر تعریفIEEE1164 وIEEE1076 این داده ها در استانداردهای
انواع داده
نام بسته
نام
کتابخانه
BIT, BOOLEAN, INTEGRE, REAL
STANDARD
STD
STD_LOGIC, STD_ULOGIC
STD_LOGIC_1164
IEEE
SIGNRD, UNSIGNED
STD_LOGIC_ARITH
IEEE
STD_LOGIC_VECTOR
STD_LOGIC_SIGNED
IEEE
STD_LOGIC_VECTOR
STD_LOGIC_UNSIGNED
IEEE
نوع BITو BIT_VECTOR
(دو سطح منطقی ’ ‘0و ’ ‘1را دارند)
انواع STD_LOGICو STD_LOGIC_VECTOR
• یک سیستم منطقی 8مقداره متعلق به استاندارد ieee1164است که بیشتر این مقادیر
فقط برای شبیه سازی استفاده می شوند.
• فقط مقادیر ’ ‘0’, ‘1’, ‘Zقابل سنتز هستند.
• حالت های «ضعیف» و «قوی» به این دلیل استفاده شده اند که اگر دو سیگنال از
این نوع به یک گره متصل باشند مقادیر نوع قوی تعیین کننده نهایی خواهند بود.
انواع STD_ULOGICو STD_ULOGIC_VECTOR
• یک سیستم منطقی 9مقداره است.
• عالوه بر مقادیر قبلی مقدار ’ )Unresolved( ‘Uنیز اضافه شده است.
• در این حالت بر خالف حالت قبلی نمی توان سیم های با مقادیر مختلف را به هم
متصل نمود .برای نشان دادن خطای مربوطه از این مقدار استفاده می شود.
حداکثر مقدار
حداقل مقدار
نوع داده
TRUE
FALSE
Boolean
2147483647
-2147483647
INTEGER
2147483647
0
NATURAL
1.0E38
-1.0E38
REAL
SIGNED
نوع :Booleanشامل مقادیر TRUEو FALSEاست.
نوع :INTEGERشامل اعداد صحیح از -2147483647تا 2147483647است.
نوع :NATURALشامل اعداد صحیح نامنفی از 0تا 2147483647است.
نوع :REALشامل اعداد حقیقی از -1.0E38تا 1.0E38است( .این نوع داده قابل سنتز
نیست.
داده های تعریف شده توسط کاربر :کاربر امکان تعریف دو نوع داده را دارد.
نوع INTEGER
نوع ENUMERATED
نحوه تعریف نوع جدید داده
TYPE type_name IS ARRAY (specification) OF data_type;
SIGNAL signal_name: type_name [:=initial_value];
TYPE row IS ARRAY (7 downto 0) OF std_logic;
-- 1D Array
TYPE matrix IS ARRAY (0 to 3) OF row; -- 1D * 1D
SIGNAL x: matrix;
نحوه استفاده
1D*1D نحوه تعریف یک آرایه:مثال
نحوه تعریف یک آرایه:مثال
TYPE matrix2D IS ARRAY (0 to 3, 7 downto 0) of std_logic; -- 2D2D
Array
. عالمت & به معنی پیوند دهی بین داده ها است:پیوند دهی داده ها
ARCHITECTURE rtl OF exIS
SIGNAL a:std_logic_vetor (5 DOWNTO 0);
SIGNAL b, c, d : std_logic_vector(2 DOWNTO 0);
BEGIN
If
c = “011”,
d = “101” ===> B = “011”
B <= ‘0’ & c(1) & d(2);
END generic_decoder;
IF c & d = “001100” THEN
یک نمونه دیگر از کاربرد این دستور
کتابخانه ها
وقتی یک عنصر در VHDLتعریف می شود به صورت اتوماتیک در کتابخانه WORKذخیره می شود.
کابخانه نام یک فولدر در کامپیوتر نیست .بلکه نام اشاره گری است که در هنگام راه اندا
کتابخانه های std, workهمیشه در دسترس هستند و نیازی به تعریف مجدد آنها نیست.
در صورت استفاده از کتابخانه دیگر باید در ابتدای برنامه تعریف شوند.
در مورد طرح های بزرگ ،امکان استفاده از توابع ،مقادیر ثابت ،انواع داده و ...در بلو
مقدار ثابت به عنوان مثال می تواند پهنای باس داده باشد.
هر موقع درون بسته این عدد ثابت تغییر کند در کلیه زیر بخش های پروژه به صورت همزمان
بسته ()Package
یک بسته ( )Packageمی تواند شامل functionها procedure ،ها ،انواع داده ،ثابت ها و نشانگر
یک بسته از دو بخش زیر تشکیل شده است.
• اعالم بسته
• بدنه بسته
آن، باید قبل از تعریف موجودیت، از یک داده جدید استفاده کنیم،اگر بخواهیم درون موجودیت
LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------------------------------------------PACKAGE my_data_types IS
TYPE vector_array IS ARRAY (natural range <>) of
std_logic_vector (7 downto 0);
END my_data_types;
--------------------------------------------------------------------------- به صورت زیر از آن در برنامه اصلی استفاده می،بعد از ذخیره کردن این بسته در مسیر جاری
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE work.my_data_types.all;
-- User-defined package
---------------------------------------------------------------------------entity MUX is
port(I:in vector_array (3 downto 0); S vector_array (1 downto 0); Y: out bit);
end MUX;
ثابت های مورد، هاprocedure ،هاfunction
شامل،بخش اعالم بسته شامل عالوه بر معرفی داده ها
.بخش بدنه بسته بیان کننده رفتار زیر برنامه هایی است که در بخش اعالم معرفی شده اند
PACKAGE my_pack IS
FUNCTION minimum (a, b: IN std_logic_vector)
RETURN std_logic_vector;
CONSTANT max_int: integer := 16#FFFF#;
TYPE arithmetic_mode_type IS (signed, unsigned)
END my_pack;
-------------------------------------------------------------------------------PACKAGE BODY my_pack IS
FUNCTION minimum (a, b: IN std_logic_vector)
RETURN std_logic_vector;
BEGIN
IF a < b THEN
RETURN a;
ELSE
RETURN b;
END IF;
END minimum;
END my_pack;
عملگرها
• تخصیص
برای تخصیص مقادیر به سیگنال ها ،متغیرها و توابع استفاده می شود.
• منطقی
-1عملگر => برای تخصیص مقدار به سیگنال به کار می رود.
• ریاضی
-2عملگر = :برای دادن مقدار اولیه به یک ثابت یا متغیر به کار می رود.
• رابطه ای -3عملگر <= برای تخصیص مقدار به تک تک المان های یک بردار و همراه OTHERS
• شیفت
• تجمیع
• عملگرهای منطقی
برای انجام عملیات منطقی روی داده های از نوع STD_LOGIC ،BITو TD_ULOGIC
عملگرهای منطقی:
NOT, AND, OR, NAND, NOR, XOR, XNOR
مثال:
)-- (a’.b
;Y <= NOT a AND b
’)-- (a.b
;)Y <= NOT(a AND b
’)-- (a.b
;Y <= a NAND b
• عملگرهای ریاضی
برای انجام عملیات ریاضی روی داده های از نوع UNSIGNED ،SIGNED ،INTEGER
عملگرهای منطقی:
),توان( ** ),تقسیم( ), /ضرب( * ),تفریق( ), -جمع( +
)قدرمطلق( ), ABSباقیمانده( ), REMخارج قسمت( MOD
• عملگرهای رابطه ای یا مقایسه ای
برای انجام مقایسه بین دو مقدار داده استفاده می شود.
عملگرهای منطقی:
)بزرگتر یا مساوی( => ),کوچکتر یا مساوی( =< ),بزرگتر( > ),کوچکتر( < ),مخالف( =), /مساوی( =
• عملگرهای شیفت
برای انجام شیفت استفاده می شود.
:sllمکانهای سمت راست با صفر پر می شوند.
:srlمکانهای سمت چپ با صفر پر می شوند.
مقدار دهی چند گانه
ARCHITECTURE rtl2 OF ex3 IS
BEGIN
BEGIN
;”q1 <= “001
;”q2 <= “010
;”q3 <= “111
;END rtl
ARCHITECTURE rtl OF ex3 IS
BEGIN
BEGIN
;’q1 <= ‘0
;’q2 <= ‘0
;’q3 <= ‘0
;END rtl
VHDL انواع ساختارها در
ساختارهای متوالی
•
•
•
•
•
•
•
If then else
Case statement
Variable declaration
Loop statement
Return statement
Null statement
Wait statement
ساختارهای موازی
•
•
•
•
•
Process
When else
With select
Signal declaration
Block statement
IF عبارت
یکی از، شامل یک یا چند عبارت داخلی است که بسته به برقراری شروطIF یک دستور
.عبارت ها اجرا می شود
IF SEL = ‘0’ THEN
C <= A;
ELSE
C <= B;
END IF;
ENTITY ex_if IS
PORT (a, b : IN INTEGER;
c : OUT BOOLEAN);
END;
ARCHITECTURE rtl OF ex_if IS
BEGIN
PROCESS (a,b)
BEGIN
IF a > b THEN
c <= TRUE;
ELSE
c <= FALSE;
END IF;
END PROCESS;
END rtl;
نیز به صورت موازیVHDL کد،مجددا تاکید می گردد که همانند یک سخت افزار که ذاتا موازی است
.اجرا می شود
ARCHITECTURE example of ex IS
BEGIN
a <= b;
b <= c;
END my_arch ;
معنیVHDL در نتیجه ترتیب خطوط در
ARCHITECTURE example of ex.ندارد
IS
BEGIN
b <= c;
a <= b;
END my_arch ;
در سمت راست قرارC تمام خطوطی که، تغییر می کندc مثال فوق به این معنا است که وقتی که
ENTITY ex IS
PORT (a, b, c: IN std_logic;
data: IN std_logic_vector (1 downto 0);
q:
OUT std_logic);
END ex;
----------------------------------ARCHITECTURE rtl OF ex IS
BEGIN
q <=
a WHEN data = "00" else
b WHEN data = "11" else
c;
END rtl;
.دارد به طور همزمان اجرا می شوند
عبارت
WHEN
a
b
c
Data [1 0]
ex
q
طراحی یک مدار مقایسه کننده
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Compare_mine is
Port ( A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
Y0 : out STD_LOGIC;
Y1 : out STD_LOGIC;
Y2 : out STD_LOGIC;
Y3 : out STD_LOGIC;
Y4 : out STD_LOGIC;
Y5 : out STD_LOGIC);
end Compare_mine;
architecture Behavioral of Compare_mine is
begin
Y0 <= '1' when A = B else '0';
Y1 <= '1' when A /= B else '0';
Y2 <= '1' when A < B else '0';
Y3 <= '1' when A <= B else '0';
Y4 <= '1' when A > B else '0';
Y5 <= '1' when A >= B else '0';
end Behavioral;
3*8 طراحی یک دیکودر
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Decoder3_8_mine is
Port ( D : in STD_LOGIC_VECTOR (2 downto 0);
Y : out STD_LOGIC_VECTOR (7 downto 0));
end Decoder3_8_mine;
architecture Behavioral of Decoder3_8_mine is
begin
Y <= "00000001" when D = "000" else
"00000010" when D = "001" else
"00000100" when D = "010" else
"00001000" when D = "011" else
"00010000" when D = "100" else
"00100000" when D = "101" else
"01000000" when D = "110" else
"10000000" when D = "111" else
"00000000" ;
end Behavioral;
8*1 طراحی یک مالتی پلکسر
architecture Behavioral of MUX81_mine is
begin
Y <=
D(0) when A = "000" else
D(1) when A = "001" else
D(2) when A = "010" else
D(3) when A = "011" else
D(4) when A = "100" else
D(5) when A = "101" else
library IEEE;
D(6) when A = "110" else
use IEEE.STD_LOGIC_1164.ALL;
D(7) when A = "111" else
entity MUX81_mine is
'Z' ;
Port ( D : in STD_LOGIC_VECTOR (7 downto 0); end Behavioral;
A : in STD_LOGIC_VECTOR (2 downto 0);
Y : out STD_LOGIC);
end MUX81_mine;
WITH عبارت
پیاداه سازیWHEN
ELSE در صورتی که در برنامه مجبور باشیم حالتهای زیادی را با استفاده از
. استفاده کنیمWITH نماییم می توانیم برای راحتی از
ENTITY ex IS
PORT (a, b, c: IN std_logic; . می نویسیمWITH همان مثال قبل را این بار با استفاده از دستور
data: IN std_logic;
q:
OUT std_logic);
END ex;
----------------------------------ARCHITECTURE rtl OF ex IS
BEGIN
WITH data SELECT
q <= a WHEN "00“,
b WHEN "11“,
c WHEN OTHERS;
END rtl;
CASE عبارت
ENTITY case_mux IS
PORT (a, b, sel : IN BIT;
میBIT);
استفاده از این دستور در اغلب موارد به درک بهتر برنامه کمک
c .کند
: OUT
END;
ARCHITECTURE rtl OF case_mux IS
BEGIN
ENTITY case_ex2 IS
case sel IS
PORT (a : IN
INTEGER RANGE 0 to 30;
WHEN ‘0’ => c <= a;
c : OUT INTEGER RANGE 0 to 6);
WHEN ‘1’ => c <= b;
END;
END case;
ARCHITECTURE rtl OF ex_case2 IS
END rtl;
BEGIN
case a IS
WHEN 0
=>
b <= 3;
WHEN 1 | 2
=>
b <= 2;
دارای مقادیر و حالتcase اگر متغیر
WHEN OTHERS’ =>
b <= 0;
END case;
معین کردن هر،های بسیاری باشد
END rtl;
در این.حالت کار دشواری خواهد بود
“ استفاده میOTHERS” حالت از کلمه
.کنیم
FOR LOOP (WHILE LOOP) حلقه
ENTITY ex IS
PORT (a, b, c:
IN std_logic_vector (4 downto 0);
q
:
OUT std_logic_vector (4 downto 0));
END ex;
ARCHITECTURE rtl OF ex IS
BEGIN
for I in 0 to 4 LOOP
-- (WHILE I <= 4 LOOP)
IF a(i) = ‘1’ THEN
q(i) <= b(i);
ELSE
q(i) <= c(i);
END IF;
END LOOP;
END;
. بوده و برای تکرار استفاده می شودFor معادل دستور ترتیبیGenerate
دستور همزمان
OK: For I In Range 0 to 7 GENERATE
.باشد
output(i) <= ‘1’ WHEN (a(i) AND b(i))=‘1’ ELSE
‘0’; خط شامل این دستور باید برچسب داشته
END GENERATE;
خاصیت های داده ها :جهت آگاهی از خواص داده ها می توان به صورت زیر عمل نمود
:d‘LOWمقدار پایینی اندیس ارایه را بر می گرداند.
:d‘HIGHمقدار باالیی اندیس ارایه را بر می گرداند.
:d‘LEFTسمت چپ ترین اندیس ارایه را بر می گرداند.
:d‘RIGHTسمت راست ترین اندیس ارایه را بر می گرداند.
:d‘LENGTHاندازه یا طول بردار را بر می گرداند.
:d‘RANGEمحدوده بردار را برمی گرداند.
:d‘REVERSE_RANGEمحدوده بردار را به صورت معکوس برمی گرداند.
خاصیت های سیگنال ها :جهت آگاهی از خواص سیگنال ها می توان به صورت زیر عمل نمود( .فقط د
:s‘EVENTهرگاه سیگنال sتغییر کند (رویدادی داشته باشد) این خاصیت ’ ‘1می شود.
:s‘STABLEهرگاه سیگنال sتغییر نکند (رویدادی نداشته باشد) این خاصیت ’ ‘1می شود.
:s‘ACTIVEهرگاه ’ s = ‘1باشد مقدار درست را بر می گرداند.
:s‘LAST_EVENTمقدار زمان سپری شده از آخرین تغییر سیگنال sرا بر می گرداند.
:s‘LAST_ACTIVEمقدار زمان سپری شده از آخرین دفعه ای که ’ s = ‘1بوده را بر می گرداند.
:s‘LAST_VALUEآخرین مقدار sقبل از آخرین تغییر را برمی گرداند.
C <= ‘1’,
‘0’ AFTER 10 ns,
;b AFTER 20 ns
این امکان نیز وجود دارد که چندین مقدار را به
یک سیگنال بدهیم.
(تاخیرها باید به ترتیب صعودی باشند)
انواع تاخیرها در VHDL
.1تاخیر درونی
.2تاخیر انتقالی
مقدار
زمان
’‘1
0
’‘0
10
مقدار -- b
سیگنال
b
20
در تاخیر درونی اگر پس از زمان تعیین شده ،هنوز سیگنال وجود داشت آن سیگنال در خروجی ظاهر
می شود( .برای حذف جهش های نویزی کاربرد دارد)
در تاخیر انتقالی ،سیگنال مورد نظر پس از تاخیر تعیین شده به خروجی منتقل می شود.
B
A
;b1 <= a AFTER 10 ns
A
ns
60
50
40
30
20
10
B1
B2
;b2 < a TRANSPORT AFTER 10 ns
عبارت فرآیند ()Process
فرآیند ،یک مجموعه دستور با قالب مشخصی است که دارای یک لیست حساسیت بوده و
دستورات مذکور فقط زمانی اجرا می شود که یکی از سیگنال های موجود در لیست حساسیت
تغییر کند.
در صورتی که در فرآیند از دستور WAITاستفاده شود نیازی به لیست حساسیت نبوده و در
اجرا می شود.
مثال:
’wait until clk = ‘1
اگر در بدنه یک کد ،چندین پروسس تعریف شود همه آنها به صورت همزمان اجرا می شوند.
یک پروسس می تواند در حالت اجرا یا انتظار باشد.
Waiting
پروسس بعد از هر بار اجرا مجددا به حالت انتظار می رود.
Sync_process: PROCESS
BEGIN
;’WAIT UNTIL clk = ‘0
;)c_out <= NOT (a_in AND b_in
;d_out <= NOT b_in AFTER 10 ns
;END PROCESS sync_process
در VHDLدو نوع پروسس وجود دارد.
-1پروسس ترکیبی
-2پروسس ترتیبی (پالسی)
پروسس ترکیبی
در یک پروسس ترکیبی تمام سیگنال های ورودی (یعنی آنهایی که در سمت راست عالمت
((
=<
))
یا
سیگنال
هایی
که
داخل
عالمت if/caseقرار دارند) باید در لیست حساسیت پروسس وارد شوند.
در داخل پرانتز ،لیست سیگنال هایی که پروسس
با آنها شروع می شود قرار دارد.
اگر مثال a_inاز لیست حذف شود c_out ،مقدار
قبلی خودش را حفظ می کند و تا زمانی که b_in
تغییر نکند ،مقدار جدید به خودش نمی گیرد.
)Sync_process: PROCESS (a_in, b_in
BEGIN
;)c_out <= NOT (a_in AND b_in
;d_out <= NOT b_in AFTER 10 ns
;END PROCESS sync_process
پروسس ترتیبی (پالسی)
پروسس های پالسی همزمان هستند و می توان چند تا از این پروسس ها را با یک
پالس ساعت یکسان به هم متصل کرد.
example: PROCESS
BEGIN
;’WAIT UNTIL clk = ‘1
;d_out <= d_in
;END PROCESS example
چنانچه در یک پروسس پالسی مقدار دهی به سیگنال انجام نشود مقدار قبلی خود را
حفظ می کند.
PROCESS
BEGIN
;’WAIT UNTIL clk = ‘1
IF en = ‘1’ THEN
;q <= d
;END IF
;END PROCESS
wait عبارت
.چهار روش گوناگون برای بیان لیست حساسیت ها در یک فرآیند وجود دارد
1. Process (a,b)
2. Wait until a=1;
3. Wait on a,b;
4. Wait for 10 ns;
موارد اول و سوم یکی، در انتهای پروسس آورده شودwait on a,b در صورتی که عبارت
PROCESS (a)
BEGIN
c1 <= NOT a;
END PROCESS;
.می شوند
PROCESS
BEGIN
c2 <= NOT a;
WAIT ON a;
END PROCESS;
PROCESS
BEGIN
WAIT UNTIL a = ‘1’; PROCESS
BEGIN
c4 <= NOT a;
c5 <= NOT a;
END PROCESS;
WAIT UNTIL a = ‘1’ FOR 10 ns;
END PROCESS;
-------------------------------------------LIBRARY ieee;
USE ieee.std_logic_1164.all;
-------------------------------------------ENTITY dff IS
port(d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END dff;
-------------------------------------------ARCHITECTURE behavior OF dff IS
BEGIN
sve: PROCESS(rst,clk)
BEGIN
IF (rst='1') THEN
q <= '0';
ELSIF (clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS sve;
END behavior;
--------------------------------------------
با ورودی ریست سنکرونDFF یک:مثال
ENTITY example IS
PORT (a, b, clk : IN BIT;
q: OUT BIT);
END example ;
ARCHITECTURE example of example IS
SIGNAL temp : BIT;
BEGIN
temp <= a nand b;
PROCESS (clk)
BEGIN
IF (clk ‘EVENT and clk = ‘1’) then q <= temp;
END IF;
END PROCESS;
END example ;
همراه
به
DFF
یک
طراحی
:مثال
NAND گیت
هیچ گونه تاخیری برای،در مثال های قبل
.اجزای مدار وجود ندارد
ARCHITECTURE my_arch of nand_gate IS
برای ایجادAFTER حال می خواهیم از دستور
.تاخیر استفاده کنیم
BEGIN
x <= a NAND b AFTER 10 ns;
END my_arch ;
-- Component Delay = 10 ns
مثالی
از
مدل
رفتاری
یک
Multiplexerکه در برنامه مجبور باشیم حالتهای زیادی را با استفاده از ELSE
در صورتی
WHENپیاداه سازی
نماییم می توانیم برای راحتی از WITHاستفاده کنیم.
ENTITY mux2 IS
همان مثال قبل را این بار با استفاده از دستور WITHمی نویسیم.
;PORT (sel_0, a, b: IN std_logic
q:
;)OUT std_logic
;END mux2
----------------------------------ARCHITECTURE mux2_with OF mux2 IS
BEGIN
WITH sel_0 SELECT
c <= a AFTER 10 ns WHEN ‘0’,
;b AFTER 10 ns WHEN OTHERS
;END mux2_with
پارامترهای عمومی ()generic
این پارامترها معموال برای تعریف پارامترهایی که در
بخش
های
مختلف
برنامه
استفاده
می
شود
کاربرد
دارند.
در بخش موجودیت و قبل از تعریف پورت ها تعریف می
شوند.
ENTITY nand_gate IS
;)GENERIC (delay: time:=10ns
;PORT (a, b: IN BIT
;)x: OUT BIT
;END nand_gate
ARCHITECTURE my_arch of nand_gate IS
BEGIN
;x <= a NAND b AFTER delay
; END my_arch
LIBRARY ieee;
USE ieee.std_logic_1164.all;
------------------------------------------------------- طراحی یک دیکودر:مثال
ENTITY decoder IS
PORT( ena : IN std_logic;
sel : IN std_logic_vector (2 downto 0);
x : OUT std_logic_vector (7 downto 0));
END decoder;
-------------------------------------------------------ARCHITECTURE generic_decoder OF decoder IS
BEGIN
PROCESS (ena, sel)
VARIABLE temp1: std_logic_vector (x'HIGH downto 0);
VARIABLE temp2: integer RANGE 0 to x'HIGH;
BEGIN
temp1 := (OTHERS => '1');
temp2 := 0;
IF (ena='1') then
FOR i in sel'RANGE LOOP -- sel range is 2 downto 0
IF (sel(i)='1') THEN -- bin to integer conversion
temp2 := 2*temp2+1;
ELSE
ena
Sel
temp2 := 2*temp2;
0
00
END IF;
END LOOP;
1
00
temp1(temp2) := '0';
01
END IF;
x <= temp1;
10
END Process;
11
END generic_decoder;
x
1111
1110
1101
1011
0111
LIBRARY ieee;
USE ieee.std_logic_1164.all;
RAM پیاده سازی یک:مثال
-------------------------------------------------------GENERIC ( bits
: INTEGER := 8;
words : INTEGER := 16);
ENTITY ram IS
PORT( wr_ena, clk: IN std_logic;
addr:
IN INTEGER RANGE 0 to words-1;
data_in: IN std_logic_vector (bits-1 downto 0));
data_out: OUT std_logic_vector (bits-1 downto 0));
END ram;
-------------------------------------------------------ARCHITECTURE ram OF ram IS
TYPE vector_array IS ARRAY (0 TO words-1) OF std_logic_vector (bits-1 downto 0);
SIGNAL memory: vector_array;
BEGIN
PROCESS (clk, wr_ena)
BEGIN
IF (wr_ena='1') then
IF (clk’EVENT AND clk = ‘1’) THEN
memory(addr) <= data_in;
END IF;
ELSEIF (wr_ena=‘0') then
IF (clk’EVENT AND clk = ‘1’) THEN
data_out<= memory(addr);
END IF;
END IF;
END Process;
END ram;
توصیف ساختاری یک سخت افزار
در روش توصیف ساختاری ،ابتدا اجزای آن سیستم لیست شده و سپس اتصاالت بین آنها مشخص می ش
این روش معرفی چون به سخت افزار واقعی نزدیک تر است ،فهم آن راحت تر می باشد.
برای توصیف این روش از یک مثال استفاده می کنیم.
می خواهیم یک مقایسه کننده یک بیتی بسازیم .این مقایسه کننده دو بیت ورودی را
با هم مقایسه کرده و بسته به پایه های کنترل یکی از 3پایه خروجی را یک می کند.
A Comparator
B
A>B
A=B
A<B
>
=
<
ابتدا می خواهیم گیت های NANDی که در این طرح به کار رفته است را تعریف کنیم.
البته این گیتها می توانند داخل طرح ما تعریف شده و یا یکی از قطعات موجود در کتابخانه
بعد از تعریف گیتهای مورد نیاز به شیوه ای مشابه همان که ترانزیستورها را در
مدارات به هم وصل می کنیم اتصاالت این گیتها را در برنامه برقرار می کنیم.
مدل معکوس
کننده
عناصر مورد استفاده
در این مدل
Entity name
o1
Bidirectional
Buffer port
port
Input port Output port
inv
i1
برای اینVHDL کد
ENTITY inv IS
PORT ( I1 : IN BIT; O1 : OUT BIT);
معکوس کننده
یک نوع داده از پیش تعریف شده استTIME
END inv;
ARCHTECTURE single_delay OF inv IS
) ثانیه10-15( فمتو ثانیه1 و حداقل آن
BEGIN
.می باشد
o1 <= NOT I1 AFTER 4 ns;
END single_delay;
دوNAND مدل گیت
ورودی
برای اینVHDL کد
ENTITY nand2 IS
PORT ( I1, I2 : IN BIT; O1 : OUT BIT);
END inv;
ARCHTECTURE single_delay OF nand2 IS
i1
i2
BEGIN
nand2
o1
o1 <= I1 nand I2 AFTER 5 ns;
END single_delay;
معکوس کننده
مدل گیت NANDسه
ورودی
کد VHDLبرای این
معکوس کننده
ENTITY nand3 IS
;)PORT ( I1, I2 : IN BIT; O1 : OUT BIT
;END inv
ARCHTECTURE single_delay OF nand3 IS
BEGIN
nand3
;o1 <= NOT (I1 and I2 and I3) AFTER 5 ns
;END single_delay
o1
i1
i2
i3
برقراری اتصال میان
گیت ها
در VHDLمی توان عملکرد یک مدار را به وسیله اتصال اجزای کوچکتر آن توصیف
کرد.
ابتدا به معرفی مجدد منطق مداری که می خواهیم طراحی کنیم می پردازیم.
این مدار دو ورودی اصلی و سه ورودی کنترل دارد.
خروجی A>Bزمانی یک است که یا Aبزرگتر از Bباشد یا Aمساوی Bبوده و ورودی
کنترل > یک باشد.
خروجی A=Bزمانی یک است که Aمساوی Bبوده و ورودی = یک باشد.
مداراست
این اول
برایحالت
جبری عکس
خروجی A<B
به .صورت زیر است.
تابع
‘a_gt_b = a.gt + b’.gt + a.b
a_eq_b = a.b.eq + a’.b’.eq
a_lt_b = a’.lt + b.lt + a’.b
a
i1
i2
nand
2 o1
nand
i1
2 o1
i2
b
i1
inv
o1
i1
i2
gt
i1
i2
i3
eq
i1
i2
i3
lt
a_gt_b
i1
i2
i3
i1
o1
اجزای کوچکتر خود ساخته
o1
.می شود
nand
2 o1
برای
تکراری
• اسامی
ورودی و خروجی های این
nand3
a_eq_b
o1
i1
i2
nand3
nand
2 o1
.مدار به کار رفته است
Bit_comparator
o1
a
nand
i1
2 o1
i2
inv
nand3
• این مدار با استفاده از
i1
i2
nand
2 o1
i1
i2
nand
2 o1
a_lt_b
i1
i2
i3
nand3
o1
b
gt
eq
lt
a_gt_b
a_eq_b
a_lt_b
ENTITY bit_comparator IS
PORt ( a, b,
ARCHITECTURE gate_level OF bit_comparator IS
COMPONENT n1 PORT (i1 : IN BIT; o1 : OUT BIT); END COMPONENT;
gt,
COMPONENT n2 PORT (i1 , i2 : IN BIT; o1 : OUT BIT); END COMPONENT;
eq,
COMPONENT n3 PORT (i1 , i2 , i3 : IN BIT; o1 : OUT BIT); END COMPONENT;
lt : IN BIT;
FOR ALL: n1 USE ENTITY WORK.inv (single_delay);
a_gt_b,
FOR ALL: n2 USE ENTITY WORK.nand2 (single_delay);
a_eq_b,
FOR ALL: n3 USE ENTITY WORK.nand3 (single_delay);
a_lt_b : OUT BIT);
-- Intermediate signals
END bit_comparator
SIGNAL im1, im2, im3, im4, im5, im6, im7, im8, im9, im10: BIT;
BEGIN
-- a_gt_b output
G0: n1 PORT Map (a, im1);
G1: n1 PORT Map (b, im2);
G2: n2 PORT Map (a, im2, im3);
G3: n2 PORT Map (a, gt, im4);
G4: n2 PORT Map (im2, gt, im5);
G5: n3 PORT Map (im3, im4, im5, a_gt_b);
ادامه از صفحه قبل
-- a_eq_b output
;)G6: n3 PORT Map (im1, im2, eq, im6
;)G7: n3 PORT Map (a, b, eq, im7
;)G8: n2 PORT Map (im6, im7, a_eq_b
-- a_lt_b
;)G9: n2 PORT Map (im1, b, im8
;)G10: n2 PORT Map (im1, lt, im9
;)G11: n2 PORT Map (b, lt, im10
;)G12: n3 PORT Map (im8, im9, im10, a_lt_b
;END gate_level
این روش برای طرح های بزرگ و هنگامی که طراحان مختلف بر روی یک طرح کار
می کنند مناسب تر است.
در این روش (معماری ساختاری قطعه) ،ابتدا اجزای مورد استفاده را معرفی
می کنیم.
سپس با مشخص کردن مرجع ،در واقع محل تعریف این جزء را برای VHDLمشخص می
Test Bench
بعد از نوشتن یک کد VHDLو قبل از پیاده سازی آن بر روی FPGAمعموال الزم است تا
از صحت عملکرد آن در شرایط مختلف ورودی اطمینان حاصل کنیم.
یکی از روش های تایید درستی طرح ،نوشتن برنامه یک مدل آزمایشی برای تست و بررسی
خروجی های ناشی از کد مورد نظر است.
این کار به معنای طراحی یک محیط آزمایشی است که هم سیگنال های ورودی را در
اختیار می گذارد و هم سیگنال های خروجی طرح را مورد آزمایش قرار می دهد.
بررسی وضعیت ورودی و خروجی ها در یک نرم افزار شبیه ساز انجام می شود .یکی از
معروفترین نرم افزار های شبیه سازی ModelSimمی باشد.
مزایای شبیه سازی:
.1محرک های اجزای ترکیبی توسط مدل هایی که بیانگر سیگنال های
حقیقی هستند تولید می شوند.
.2نیازی به تکنولوژی و اجزای جانبی دیگری ندارد.
.3سرعت شبیه سازی باالست
معایب شبیه سازی:
.1به هر حال کار اضافی است و زمانبر است.
.2چون خود نوشتن این برنامه تست هم توسط خود طراح نوشته می شود ممکن است
مشابهی تکرار
اشتباهات
شود.دو بخش تشکیل می شود.
آزمایش از
کلی ،محیط
در حالت
.1بخش تولید سیگنال های ورودی و ارتباط آن به مدار مورد نظر‘1’ AFTER 5 ns,
.2چک کردن سیگنال های خارج شده از سیستم
بخش :1چگونگی تولید سیگنال های ورودی
=< In_model
‘0’ AFTER 100 ns,
‘1’ AFTER 200 ns,
;‘0’ AFTER 300 ns + 4 ns
در این مثال ،سیگنال clkبعد از هر 50نانو ثانیه عکس می شود.
;Clk <= NOT clk AFTER 50 ns
اگر در تعریف این سیگنال از نوع std_logicاستفاده شود ممکن است مشکلی به صورت
کلیه آید.
VHDLوجود
زیر به
سیگنال ها دارای مقدار اولیه پیش فرضی معادل سمت چپ ترین ارزش
در
در تعریف نوع داده اند.
در حالت Bitمقدار اولیه صفر و لی در حالت std_logicمقدار اولیه ’ ‘Uخواهد بود.
’SIGNAL clk: STD_LOGIC := ‘0
برای حل این مشکل باید در تعریف سیگنال مقدار اولیه مورد نظر را نیز اعمال
کنیم.
“00” AFTER 5 ns,
=< In_vect
“01” AFTER 100 ns,
“10” AFTER 200 ns,
PROCESS
;“11” AFTER 300 ns + 4 ns
BEGIN
;’in_s1 <= ‘1
چنانچه المان تست شونده ترتیبی باشد ،از دستور
waitبرای نسبت دادن سیگنال ها به ورودی استفاده
می شود.
;’in_s2 <= ‘0
;’WAIT UNTIL reset = ‘1
;’WAIT UNTIL clk= ‘1
;’in_s1 <= ‘0
;’in_s2 <= ‘1
یک روش دیگر برای انتظار لبه پالس ساعت ،تولید زمان دوره تناوب آن است .با این
ندارد.
سیگنال
نیازی به
رفتاری دیگر
روش
Clkپالس
چندین
اندازه
انتظار به
مدل امکان
البته
ساعت هم وجود دارد.
;CONSTANT period : TIME := 50 ns
;WAIT FOR period
;WAIT FOR 2 * period
محیط های آزمایش به سه کالس تقسیم بندی می شوند.
در کالس اول که ساده ترین کالس است ،تنها سیگنال های ورودی مدل تولید می شوند و
سیگنال های خروجی به صورت دستی و در محیط شبیه ساز مورد بررسی قرار می گیرند.
این روش ساده و در عین حال برای مدارهای ساده بسیار مفید است.
البته در مدارهای با تعداد زیاد ورودی و خروجی عمال کاربردی ندارد.
در کالس 2نه تنها سیگنال های ورودی تولید می شوند بلکه درستی ارزش سیگنال های
Test_My_comp
شوند.
خروجی هم بررسی می
;LIBRARY ieee
;USE ieee.std_logic_1164.ALL
تحلیل زمانی هم در برنامه صورت می گیرد.
در کالس 3
My_comp
ENTITY test_my_comp IS
;PORT (d_out, en, overflow : OUT std_logic
q:
;))OUT std_logic_vector (2 DOWNTO 0
clk
;END
D_out
ARCHITECTURE testbench OF test_my_comp IS
resetn
en
COMPONENT my_comp
D_in
overflow
PORT (clk, resetn, d_in :
;IN std_logic
a
a, b:
;)IN std_logic_vector (2 DOENTO 0
q
d_out, en:
;OUT std_logic
b
overflow:
;OUT std_logic
q:
;)OUT std_logic_vector (2 DOWNTO 0
;END component
SIGNAL clk:
std_logic:= ‘0’;
SIGNAL resetn:
std_logic:= ‘0’;
SIGNAL d_in:
std_logic:= ‘0’;
SIGNAL a, b:
std_logic_vector (2 DOENTO 0);
FOR U1: my_comp USE ENTITY work.my_comp (rtl);
BEGIN
U1: my_comp PORT MAP (clk, resetn, d_in, a, b, d_out, en, overflow, q);
clk <= NOT clk AFTER 50 ns;
resetn <= ‘1’ AFTER 125 ns;
a <=
“000”,
“010” AFTER 125 ns,
“100” AFTER 175 ns;
b <=
“000”,
“100” AFTER 125 ns,
“011” AFTER 175 ns;
PROCESS
BEGIN
d_in <= ‘0’;
WAIT UNTIL resetn = ‘1’;
d_in <= ‘1’;
WAIT UNTIL clk = ‘1’;
d_in <= ‘0’ AFTER 10 ns;
WAIT;
END PROCESS;
END;
تمرین :1یک جمع کننده 4بیتی بسازید .این جمع کننده باید دو عدد چهار بیتی
دودویی را به عنوان ورودی دریافت کرده و حاص جمع آن را در خروجی نمایش دهد.
تمرین :2ماژولی بسازید که 8ورودی و 3خروجی دارد .مدار مورد نظر باید تعداد
صفرهای داده ورودی را بشمارد و تعداد صفرها را به صورت دودویی در خروجی خود نشان
دهد.
تمرین :3یک شیفت رجیستر 4بیتی شامل ورودی ریست آسنکرون طراحی کنید.
تمرین :4یک مدار شمارنده BCDبا لبه های باال رونده و پایین رونده کالک طراحی
کنید .این مدار 1 ،ورودی کالک و 4خروجی برای شمردن دارد .با هر بار لبه باال
رونده یا پایین رونده کالک ،خروجی یک واحد افزایش می یابد.