1.39k likes | 1.53k Views
فصل چهارم. زبان توصيف سخت افزار VHDL. ترم بهاره 85-84 دانشگاه کاشان Lec note 4. مقدمه (تاريخچه). نام VHDL شامل دو بخش V و HDL به معنی VHSIC : V ery H igh Speed I ntegrated C ircuits HDL : H ardware D escription L anguage استاندارد IEEE 1076-1987 استاندارد IEEE 1076-1993
E N D
فصل چهارم زبان توصيف سخت افزارVHDL ترم بهاره 85-84 دانشگاه کاشان Lec note 4
مقدمه(تاريخچه) • نام 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 : امکان توصیف طرح بصورت رفتاری و ساختاری توصیف رفتاری و ساختاری
توصیف رفتاری • نکته: توصیف رفتاری نسبت به توصیف ساختاری از سطح انتزاع بالاتری برخوردار است • توصیف رفتاری : • رفتار سیستم چیست؟ • رابطه بین سیگنال های ورودی و خروجی • توصیف رفتاری : • انتقال ثبات یا DataFlow (معمولا بر اساس جملات همروند) • الگوریتمی 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 : سيگنا ل دوطرفه (ورودي / خروجي) in out buffer Inout in in out
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 • مدل كردن تاخیر های یک مدار واقعی را مدل • اين قابليت شبيه سازي مدار را به واقعيت نزدیک تر مي كند
مثال(3) • توصيف رفتاري مدار Half Adder
توصيف ساختاري نکته: تعریف کامل تمام مولفه ها در ابتدا الزامی است ---------------------------------------------- Entity halfadder is port ( x, y : in bit; S, CO: out bit); end halfadder; ---------------------------------------------- architecture structural of halfadder is -- Declarations component AND2 port (in1, in2: in std_logic; out1: out std_logic); end component; component XOR2 port (in1, in2: in std_logic; out1: out std_logic); end component; ---------------------------------------------- begin -- Component instantiations statements U0: XOR2 port map (x, y, s); U1: AND2 port map (x, y, co); end structural; ---------------------------------------------- std_logic
توصيف ساختاري entity BUZZER is port (DOOR, IGNITION, SBELT: in std_logic; WARNING: out std_logic); end BUZZER; architecture structural of BUZZER is -- Declarations component AND2 port (in1, in2: in std_logic; out1: out std_logic); end component; component OR2 port (in1, in2: in std_logic; out1: out std_logic); end component; component NOT1 port (in1: in std_logic; out1: out std_logic); end component; -- declaration of signals used to interconnect gates signal DOOR_NOT, SBELT_NOT, B1, B2: std_logic; begin -- Component instantiations statements U0: NOT1 port map (DOOR, DOOR_NOT); U1: NOT1 port map (SBELT, SBELT_NOT); U2: AND2 port map (IGNITION, DOOR_NOT, B1); U3: AND2 port map (IGNITION, SBELT_NOT, B2); U4: OR2 port map (B1, B2, WARNING); end structural;
طراحي سلسله مراتبي • در مدلسازي ساختاري • هر Entity می تواند بعنوان يك مولفه در توصيف Entity ديگر بكار رود • اين امر مي تواند در سطوح مختلف تكرار شود • طراحي سلسله مراتبي موجب كاهش پيچيدگي در طراحي مدارات بزرگ مي شود • معمولا در طرح هايی که با تکرار قابل گسترش اند كاربرد دارد
جمع كننده چهار بيتي sum = (A B) C carry = AB + C(A B)
توصيف تمام جمع كننده ----------------------------------------------------- library ieee; use ieee.std_logic_1164.all; ----------------------------------------------------- entity FULLADDER is port (a, b, c: in std_logic; sum, carry: out std_logic); end FULLADDER; ----------------------------------------------------- architecture fulladder_behav of FULLADDER is begin sum <= (a xor b) xor c ; carry <= (a and b) or (c and (a xor b)); end fulladder_behav; -----------------------------------------------------
جمع كننده چهار بيتي(Entity) library ieee; use ieee.std_logic_1164.all; ----------------------------------------------------- entity FOURBITADD is port (a, b : in std_logic_vector(3 downto 0); Cin : in std_logic; Sum : out std_logic_vector (3 downto 0); Cout,V : out std_logic); end FOURBITADD; -----------------------------------------------------
جمع كننده چهار بيتي( Architecture ) architecture fouradder_structure of FOURBITADD is signal c: std_logic_vector (4 downto 0); component FULLADDER port(a, b, c: in std_logic; sum, carry: out std_logic); end component; begin FA0: FULLADDER port map (a(0), b(0), Cin, sum(0), c(1)); FA1: FULLADDER port map (a(1), b(1), C(1), sum(1), c(2)); FA2: FULLADDER port map (a(2), b(2), C(2), sum(2), c(3)); FA3: FULLADDER port map (a(3), b(3), C(3), sum(3), c(4)); V <= c(3) xor c(4); Cout <= c(4); end fouradder_structure;
چند نکته • استفاده از نام پورت مشترک برای 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\ ، \Rst\\as\
كلمات كليدي (رزرو شده) • شناسه هاي كه بوسيله سيستم براي کار خاص استفاده می شود • مثل 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 • مثال: معادل عدد 29 • در مبناي 2:2#11101# • در مبناي 16:16#1D# • در مبناي 8:8#35#
كاراكترها رشته ها و رشته هاي بيتي • كاراكترها (داخل يك جفت گيومه تكي) '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;
تعریف ثابت Architecture ent1_arch of Ent1 is CONSTANT t_propagation:time:=10ns; Begin ... End architecture ent1_arch; ------------------------------------------ Declaring Constants p1:process (A,B) constant t_hold:time:=5ns; begin ... end process p1;
متغير(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;
تفاوت متغير و سيگنال • انتساب متغیر با ':=' و انتساب سیگنال با'<=' • انتساب متغیر بدون تاخیر ولی انتساب سیگنال با تاخیر(دلتا) • انتساب متغیر ترتیبی و انتساب سیگنال همروند دو مثال بعد این موضوع را روشن می کند
---------------------------------------------------- Example of a process using Variables ---------------------------------------------------- architecture VAR of EXAMPLE is signal TRIGGER, RESULT: integer := 0; begin process variable variable1: integer :=1; variable variable2: integer :=2; variable variable3: integer :=3; begin wait on TRIGGER; variable1 := variable2; variable2 := variable1 + variable3; variable3 := variable2; RESULT <= variable1 + variable2 + variable3; end process; end VAR ---------------- RESULT=2+5+5=12-------------------
--------------------------------------------------- Example of a process using Signals --------------------------------------------------- architecture SIGN of EXAMPLE is signal TRIGGER, RESULT: integer := 0; signal signal1: integer :=1; signal signal2: integer :=2; signal signal3: integer :=3; begin process begin wait on TRIGGER; signal1 <= signal2; --2 signal2 <= signal1 + signal3; --1+3=4 signal3 <= signal2; --2 RESULT <= signal1 + signal2 + signal3; end process; end SIGN; ----------------- RESULT=1+2+3=6------------------
انواع داده • VHDL یک زبان بشدت نوع گرا است • مثلا انتساب یک مقدار integer به یک نوع bit غیر مجاز است • انواع تعریف شده Boolean Integer Character Bit Time Std_ulogic Std_logic Array Vectors Records
Boolean Type Architecture rtl of ex is Begin Process(…) Variable alpha: Boolean; Begin alpha := a<b; If alpha then... ... End process; End;
Integer Type • محدوده آن به تعریف بستگی دارد • اکثر ابزارهای CAD تا 32 بيت پشتیانی می کنند Constant loop_number: integer:=365; Signal my_int: integer range 0 to 255;
Bit Type • فقط مقدار 0 یا 1 به خود می گیرد signal A: bit :=1;
Std_ulogic یک نوع شمارشی است با مقادیر 'U' Un-initialized 'X' Forcing Unknown '0' Forcing 0 '1' Forcing 1 'Z' High Impedance 'W' Weak Unknown 'L' Weak 0 'H' Weak 1 '-' Don't care