تارا فایل

مقاله زبان توصیف سخت افزار WHDL


زبان توصیف سخت افزارVHDL
VHDL زبان توصیف سخت افزاری برای طراحی مدارات دیجیتال می باشد. و مانند سایر زبانهای برنامه نویسی دارای دستورات خاص خود می باشد.
برای یادگیری زبان VHDL دانستن جبر بول و آشنایی با مدارات منطقی ضروری است. لذا ما فرض می کنیم که دوستان با دو مقوله فوق آشنایی کافی دارند.
و اما یادگیری VHDL چه مزایایی دارد. قبل از هرچیز باید گفت که هدف از یادگیری VHDL خصوصاْ در ایران طراحی مدارات دیجیتال و پیاده سازی در FPGA می باشد هرچند مدار طراحی شده را بصورت ASIC (آی سی خاص) نیز می توان پیاده سازی نمود اما غالباْ مدارات دیجیتال با هدف پیاده سازی در FPGA طراحی می شوند.
برای یادگیری VHDL در این مقطع نیاز به نرم افزاری برای شبیه سازی مدارات طراحی شده خواهیم داشت. نرم افزارهای زیادی برای این منظور وجود دارند اما بهترین و آسانترین انها Active-HDL می باشد که نتایج شبیه سازی را بصورت شکل موجهای گرافیکی نمایش می دهد. و در عین حال کار کردی آسان دارد.
تاریخچه
نام VHDL شامل دو بخش V و HDL به معنیVHSIC : Very High Speed Integrated Circuits
HDL : Hardware Description Language
استاندارد IEEE 1076-1987
استاندارد IEEE 1076-1993
Verilog و ABEL (Advanced Boolean Equation Language )
ویژگی ها
HDLها ذاتا موازی (همروند) هستند
* ترتیب دستورات مهم نیست
* مبتنی بر رخداد
* امکان استفاده از دستورات ترتیبی را نیز دارد
اهداف اساسی
* مستند سازی : نگهداری، ارائه، تبادل، استفاده مجدد
* شبیه سازی : بررسی نتایج و ارزیابی
* سنتز : با هدف پیاده سازی در FPGA یا بصورت ASIC
اجرا= شبیه سازی

نیازمندی ها
حداقل نیازمندی ها برای یادگیری زبان VHDL
* دانستن جبر بول و آشنایی با مدارات منطقی
* داشتن ابزار CAD مناسب
توصیف رفتاری و ساختاری
سه حوزه رفتاری، ساختاری و هندسی (فیزیکی) داریم
VHDL : امکان توصیف طرح بصورت رفتاری و ساختاری
نکته: توصیف رفتاری نسبت به توصیف ساختاری از سطح انتزاع بالاتری برخوردار است

توصیف رفتاری :
* رفتار سیستم چیست؟
* رابطه بین سیگنال های ورودی و خروجی
توصیف رفتاری :
* انتقال ثبات یا Data Flow (معمولا بر اساس جملات همروند)
* الگوریتمی Algorithmic(با استفاده از دستورات ترتیبی)
مثال ساده
مدار هشدار باز بودن کمربند و درب خودرو
Warning = Ignition_on AND (Door_open OR Seatbelt_off)
Ignition_on : سویچ در جایش قرار گرفته
Door_open : باز بودن درب خودرو
Seatbelt_off : کمربند بسته نشده
Warning : خروجی هشدار به سرنشین خودرو
توصیف ساختاری :
* مجموعه ای از مولفه ها (دروازه ها)
* و اتصالات بین آنها

توصیف ساختاری :
* مشابه شماتیک
* نزدیک به تحقق فیزیکی سیستم
ساختار کلی یک فایل VHDL
یک توصیف VHDL شامل
* Entity declaration
* Architecture body
تعریف entity در حقیقت معرفی سیگنالهای ورودی و خروجی است
architecture رابطه بین سیگنالهای ورودی و خروجی است
(عملکرد/ساختار)
بخش Entity
NAME_OF_ENTITY : یک شناسه اختیاری
signal_names : سیگنالهای ورودی یا خروجی
mode :یکی از موارد (in،out ،buffer ، Inout )
mode

In :سیگنال ورودی
out : سیگنال خروجی (فقط توسط یک entity دیگر قابل استفاده)
buffer : خروجی که می تواند در داخل entity نیز استفاده شود
Inout : سیگنا ل دوطرفه (ورودی / خروجی)
Type
نوع سیگنال را مشخص می کند ( استاندارد یا User Defined)
* Bit : می تواند مقدار صفر یا یک داشته باشد
* Bit_vector : برداری از مقادیر بیتی است
* Boolean : می تواند مقدار true یا false بگیرد.
* Integer : عدد صحیح
* Real : عدد حقیقی
* Character : هرکاراکتر قابل چاپ
* Time : برا ی نمایش زمان بکار می رود.
مثال Entity
تعریف entity برای یک نیم جمع کننده

بخش Architecture
توصیف سیستم بصورت رفتاری یا ساختاری است
قالب کلی تعریف Architecture به شکل زیر است

مدل رفتاری (Behavioral model)
مستقل از ساختار داخلی ارتباط بین ورودی ها و خروجی ها بصورت عملیاتی توصیف می شود .
مثال(1): AND دو ورودی

مدل رفتاری (Behavioral model)

مثال(1): XOR دو ورودی

هم روندی
یکی از خصوصیات زبانهای توصیف سخت افزار
دستورالعملهای انتساب سیگنال ( <= )
وقتی اجرا می شود که یک سیگنال در سمت راست جمله مقدارش تغییرکند
تغییر در مقدار یک سیگنال را یک رخداد می نامیم
VHDL یک زبان مبتنی بر رخداد
در مثال(2) ترتیب نوشتن جملات مهم نیست. یعنی می توان جملات x و y و z را بترتیب دلخواه جابجا کرد.
زمانبندی رخداد ها
مکانیزم ایجاد تاخیر در انتساب مقدار جدید به سیگنال سمت چپ
با استفاده از کلمه کلیدی after
مدل کردن تاخیر های یک مدار واقعی را مدل
این قابلیت شبیه سازی مدار را به واقعیت نزدیک تر می کند
مثال
توصیف رفتاری مدار Half Adder

طراحی سلسله مراتبی
در مدلسازی ساختاری
* هر Entity می تواند بعنوان یک مولفه در توصیف Entity دیگر بکار رود
* این امر می تواند در سطوح مختلف تکرار شود
طراحی سلسله مراتبی موجب کاهش پیچیدگی در طراحی مدارات بزرگ می شود
معمولا در طرح هایی که با تکرار قابل گسترش اند کاربرد دارد

جمع کننده چهار بیتی
sum = (A  B)  C
carry = AB + C(A  B)

چند نکته
استفاده از نام پورت مشترک برای Entity های متداخل مجاز است
چون Cout بصورت خروجی تعریف شده نمیتواند بعنوان ورودی استفاده شود
چون c(4) یک سیگنال داخلی است میتواند بعنوان ورودی استفاده شود.
میتواند بخشی از توصیف طرح ساختاری و بخشی رفتاری باشد مانند Cout و V در مثال قبل
کتابخانه و بسته ها
کتابخانه امکان استفاده مشترک از موارد از پیش تعریف شده را فراهم می کند. مانند
data type
component
Function
Procedure
هر کتابخانه شامل تعدادی بسته است
نوع std_logic در بسته ieee.std_logic_1164 در کتابخانه ieee تعریف شده است
library ieee;
use ieee.std_logic_1164.all;
عناصر گرامری زبان VHDL
شناسه ها
کلمات کلیدی (رزرو شده)
اعداد
کاراکترها رشته ها و رشته های بیتی
شناسه ها
کلماتی برای نام گذاری مولفه های مختلف مدل VHDL
* نام سیگنال های ورودی
* نام سیگنال های خروجی
* نام entity
* نامarchitecture
قوانین نامگذاری شناسه های اصلی
نام شناسه اختیاری است
فقط شامل حروف الفبا و ارقام (A..Z و a..z و0..9) و کاراکتر '_'
اولین کاراکتر حتما باید از حروف الفبا باشد
آخرین کاراکتر نباید '_' باشد
دو کاراکتر '_' دنبال هم غیر مجاز
به حروف بزرگ و کوچک حساس نیست And2) =AND2 = and2)
یک شناسه هر طولی می تواند داشته باشد
مثال شناسه صحیح:X10 ، x_10 ، My_gate1
مثال شناسه غلط: _X10 ، my_gate@input، gate-input
قوانین گسترش یافته تعریف شناسه های
بین دو عدد '' قرار می گیرند
به حروف بزرگ و کوچک حساس
کلمات رزرو شده و شناسه های اصلی در شناسه های گسترش مجاز و بعنوان یک شناسه متفاوت در نظر گرفته می شود
بین هر دو '' استفاده از هر کاراکتری و با هر ترتیبی مجاز است
شناسه ای بنام BUS:data را باید بنویسیم BUS:data
درنسخه VHDL-93 تعریف شده است ولی درنسخه VHDL-87 شناخته شده نیست
مثال صحیح: Input، Input ، input#1 ، Rstas
کلمات کلیدی (رزرو شده)
شناسه های که بوسیله سیستم برای کار خاص استفاده می شود
مثل in، out، or، and، port، map، end و غیره
در شناسه توسعه یافته مجاز است(end)
مراجعه کنید به جدول 4-1 (کلیه کلمات رزرو شده VHDL )
اعداد
اعداد صحیح : 12 10 256E3 12e+6
اعداد حقیقی: 1.2 256.24 3.14E-2
پیش فرض مبنای 10 است وگرنه به صورت base#number#
مثال: معادل عدد 18
در مبنای 2: 2#10010#
در مبنای 16: 16#12#
در مبنای 8: 8#22#

بمنظور خوانایی
2#1001_1101_1100_0010# 215_123
کاراکترها رشته ها و رشته های بیتی
کاراکترها (داخل یک جفت گیومه تکی )
'a' 'B' ','
رشته ( داخل یک جفت گیومه دوتایی (
"This is a string"
هر کاراکتر قابل چاپ مجاز است (حتی خود" )
"This is a ""String""."

رشته بیتی
یک رشته بیتی یک توالی از بیتها است
بمنظور تمایز از رشته کاراکتری در ابتدای آن B می گذارند
B"1001"
رشته بیتی در مبنای 16 یا 8 هم نوشته می شود
Binary: B"1100_1001", b"1001011"
Hexagonal: X"C9", X"4b"
Octal: O"311", o"113"
توجه کنید دو مقدار با طول نامساوی نامساویند
b"1001011" ≠ X"4b"
O"113" ≠ X"4b"
اشیاء داده ای Data objects
سیگنالها (توصیف سیم های ارتباطی مدار)
ثابت ها
متغیرها
فایل
ثابت (constant)
با توجه به نوع مقدار میگیرد و در طول شبیه سازی مقدارش عوض نمی شود
constant list_of_name_of_constant: type [:=initial value];
ثابت در ابتدای architecture تعریف شده و در داخل آن استفاده می شود.
یک ثابت که در داخل یک پردازه تعریف می شود فقط در همان پردازه نیز می تواند استفاده شود.
constant RISE_FALL_TME: time := 2 ns;
constant DELAY1: time := 4 ns;
constant RISE_TIME, FALL_TIME: time:= 1 ns;
constant DATA_BUS: integer:= 16;
تعریف ثابت
درهر یک از Entity یا Architecture یا Process
Declaring Constants
entity ent1 is
generic (…);
port (…);
constant loop_number:positive:=4;
begin

end entity ent1;
متغیر(Variable)
مقدارش می تواند با استفاده از جملات انتساب تغییر کند
تغییر به محض اجرای دستور انتساب بدون تاخیر انجام می شود
داخل یک پردازه تعریف می شود
variable list_of_variable_names: type [:= initial value];
variable CNTR_BIT: bit :=0;
variable VAR1: boolean :=FALSE;
variable SUM: integer range 0 to 256 :=16;
variable STS_BIT: bit_vector (7 downto 0);
دستور انتساب برای متغیرها
Variable_name := expression;
سیگنال (Signal)
signal list_of_signal_names: type [ := initial value];
signal SUM, CARRY: std_logic;
signal CLOCK: bit;
signal TRIGGER: integer :=0;
signal DATA_BUS: bit_vector (0 to 7);
signal VALUE: integer range 0 to 100;
با یک تاخیر مشخص پس از اجرای دستور انتساب به روز می شوند
SUM <= (A xor B) after 2 ns;
میتوان با یک توالی از مقادیر، یک شکل موج دلخواه ایجاد کرد
signal wavefrm : std_logic;
wavefrm <='0','1' after 5ns,'0' after 10ns,'1' after 20ns;
تفاوت متغیر و سیگنال
انتساب متغیر با ':=' و انتساب سیگنال با'<='
انتساب متغیر بدون تاخیر ولی انتساب سیگنال با تاخیر(دلتا)
انتساب متغیر ترتیبی و انتساب سیگنال همروند
دستور انتساب سیگنال همروند ساده
Target_signal <= expression;
انتساب موقع وقوع یک رخداد در یکی از سیگنالها عبارت
نوع target_signal باید با نوع عبارت یکسان باشد
دستور انتساب سیگنال شرطی
Target_signal <= expression when Boolean_condition else
expression when Boolean_condition else
:
expression when Boolean_condition else
expression;

مقدار اولین عبارتی که شرط آن درست است انتساب داده می شود
وقوع یک رخداد در یکی از سیگنالهای موجود در عبارات یا شرط ها باعث ارزشیابی مجدد شده و انتساب انجام می شود
دستور انتساب سیگنال انتخابی
with choice_expression select
target_name <= expression when choices,
target_name <= expression when choices,
:
target_name <= expression when choices;
target_name <= expression when others;
target یکی از مقادیر expression را دریافت می کند بر حسب اینکه عبارت choice_expression با کدام یک از choice ها برابر است
اولین choice که برابر باشد حساب است
Choice می تواند یک عبارت یا یک بازه باشد (مثل 4 to 9)
Choice ها نباید همپوشانی داشته باشند
تمام حالات choice_expression باید پوشش داده شود. مگر اینکه others داشته باشیم
توجه شود که others باید آخرین انتخاب باشد
مدلسازی رفتاری : دستورات ترتیبی
جملات همروند : مدل سازی جریان داده(data flow)
جملات ترتیبی : مدل سازی الگوریتمی
پردازه (process)
* یک ساختار )امکان استفاده از جملات ترتیبی(
* امکان مدلسازی سیستم های پیچیده
* داخل architecture
* معادل یک دستور همروند محسوب می شود
* جملات داخل آن بصورت ترتیبی اجرا می شوند
* اصولا برای توصیف مدارات ترتیبی گرچه می توان برای مدارات ترکیبی نیز استفاده نمود
دستورIF
دستور IF ترتیب اجرای دستورات ترتیبی را بر اساس شرط معین می کند
if condition then
sequential statements
[elsif condition then
sequential statements ]
[else
sequential statements ]
end if;
جمله elsif می تواند به تعداد بیشتری تکرار شود
دستور مربوطه به اولین شرط درست اجرا می شود
دستور IF را بصورت لانه ای (تودرتو) نیز می توان نوشت.
entity MUX_4_1a is
port (S1, S0, A, B, C, D: in std_logic;
Z: out std_logic);
end MUX_4_1a;
architecture behav_MUX41a of MUX_4_1a is
begin
P1: process (S1, S0, A, B, C, D)
begin
if (( not S1 and not S0 )= '1') then
Z <= A;
elsif (( not S1 and S0) = '1') then
Z <= B;
elsif ((S1 and not S0) = '1') then
Z <= C;
else
Z <= D;
end if;
end process P1;
end behav_MUX41a;

entity MUX_4_1a is
port (S1, S0, A, B, C, D: in std_logic;
Z: out std_logic);
end MUX_4_1a;
architecture behav_MUX41a of MUX_4_1a is
begin
P1: process (S1, S0, A, B, C, D)
begin
if S1='0' and S0='0' then
Z <= A;
elsif S1='0' and S0='1' then
Z <= B;
elsif S1='1' and S0='0' then
Z <= C;
elsif S1='1' and S0='1' then
Z <= D;
end if;end process P1;
end behav_MUX41a;
انواع عملگرها
اولویت از پایین به بالا و از راست به چپ
مگر اینکه از پرانتز استفاده شود
دستور Case
case expression is
when choices =>
sequential statements
when choices =>
sequential statements
— branches are allowed
[when others => sequential statements ]
end case;
دو انتخاب(choice) نباید با هم همپوشانی داشته باشند.
اگر "when others" ذکر نمی شود تمام مقادیر ممکن برای عبارت باید بوسیله مجموعه انتخابها پوشش داده شود.
مثال : مالتی پلکسر 4 به 1
entity MUX_4_1 is
port ( SEL: in std_logic_vector(2 downto 1);
A, B, C, D: in std_logic;
Z: out std_logic);
end MUX_4_1;
architecture behav_MUX41 of MUX_4_1 is
begin
PR_MUX: process (SEL, A, B, C, D)
begin
case SEL is
when "00" => Z <= A;
when "01" => Z <= B;
when "10" => Z <= C;
when "11" => Z <= D;
when others => Z <= 'X';
end case;
end process PR_MUX;
end behav_MUX41;
طراحی مدارات ترتیبی و ماشین حالت
مدارات ترتیبی شامل:
* سیگنالهای ورودی
* سیگنالهای خروجی
* سیگنال کلاک
* احیانا یکسری سیگنالهای کنترولی دیگر (مانند reset )
سیگنالهای کنترلی می توانند فعال صفر یا یک باشند
انتقال از یک وضعیت به وضعیت دیگر لبه سیگنال کلاک
* (clock'event and clock='1')
* (clock'event and clock='0')

مثال) آشکارساز توالی بیت (ماشین مور)
توصیف رفتاری یک ماشین حالت از نوع مور
هدف: تشخیص رشته ی بیتی "1110101101" است
هر آشکار ساز توالی n بیتی به روش مور n+1 حالت مورد نیاز دارد
چون 10 بیت داریم 11 حالت درنظر می گیریم
ENTITY seqdetector IS
PORT (clk, reset :IN STD_LOGIC;
input :IN STD_LOGIC;
output :OUT STD_LOGIC );
END seqdetector ;
ARCHITECTURE stat OF seqdetector IS
TYPE STATE_TYPE IS (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10);
SIGNAL state, next_state : STATE_TYPE;
BEGIN
state_register: PROCESS (clk, reset)
BEGIN
IF reset = '0' THEN
state <= s0;
output<='0';
ELSIF clk'EVENT AND clk = '1' THEN
state <= next_state;
END IF;
END PROCESS state_register;

فهرست مطالب
تاریخچه 1
ویژگی ها 2
نیازمندی ها 2
توصیف رفتاری : 3
توصیف ساختاری : 3
مدل رفتاری (Behavioral model) 6
هم روندی 7
زمانبندی رخداد ها 7
توصیف رفتاری مدار Half Adder 8
طراحی سلسله مراتبی 8
جمع کننده چهار بیتی 8
شناسه ها 10
قوانین نامگذاری شناسه های اصلی 10
قوانین گسترش یافته تعریف شناسه های 11
اشیاء داده ای Data objects 13
تعریف ثابت 13
متغیر(Variable) 14
سیگنال (Signal) 14
تفاوت متغیر و سیگنال 15
انواع عملگرها 19
طراحی مدارات ترتیبی و ماشین حالت 20

22


تعداد صفحات : 22 | فرمت فایل : word

بلافاصله بعد از پرداخت لینک دانلود فعال می شود