ویاچدیال - ویکیپدیا، دانشنامهٔ آزاد
پارادایم برنامهنویسی | concurrent, reactive |
---|---|
ظهوریافته در | 1980s |
وابستگی زیاد و کم به نوع | |
وبگاه | |
متأثر از | |
ایدا (زبان برنامهنویسی)، پاسکال (زبان برنامهنویسی) |
ویاچدیال (به انگلیسی VHDL) یک زبان توصیف سختافزار برای بیان مشخصات سختافزار است. زبان VHDL نخستین بار توسط وزارت دفاع آمریکا به منظور طراحی و توصیف مدارهای مجتمع سرعت بالا طراحی شد و مورد استفاده قرار گرفت. سپس در سال ۱۹۸۷ توسط انجمن IEEE (انجمن مهندسان برق و الکترونیک) در قالب استاندارد IEEE 1076-1987 ارائه گردید. پس از گذشت چند سال و انجام پارهای از تصحیحات، استاندارد دوم این زبان تحت عنوان IEEE 1076-1993 در اختیار عموم قرار گرفت. بهطور کلی میتوان مزایای زیر را در استفاده از زبان VHDL عنوان نمود:
- با توجه به این که VHDL یک زبان استاندارد میباشد، کد نوشته توسط آن را میتوان به روی سنتزکنندهها و تراشههای تولیدکنندگان مختلف پیادهسازی نمود و نیازی به تغییر کد وجود ندارد.
- شبیهسازها و کامپایلرهای این زبان در دسترس و ارزان قیمت میباشند.
- با استفاده از این زبان میتوان سیستمها را به صورت ساختاری یا رفتاری مدلسازی نمود. توصیف رفتاری نشان دهنده عملکرد سیستم و چگونگی تولید خروجیها بر اساس سیگنالهای ورودی میباشد. با استفاده از این توصیف میتوان عملکرد کلی سیستم را بیان کرد و از درگیر شدن با جزئیات بلوکهای سازنده سیستم که در طرحهای بزرگ به پیچیدگی توصیف سیستم منجر شود، اجتناب نمود. در مقابل مدل ساختاری نشان دهنده نحوه ارتباط بلوکهای سازنده سیستم است و بیانگر جزئیات بیشتری از سختافزار میباشد. به این ترتیب با استفاده از این زبان امکان توصیف سختافزار از سطح گیت تا سیستم فراهم میشود.
- با استفاده از توصیف سختافزاری میتوان سیستمهای پیچیده را توسط ارتباط بین بلوکهای سازنده آنها مدلسازی نمود؛ به این ترتیب پیادهسازی این سیستمها توسط زبان VHDL سادهتر از زبانهای برنامهنویسی از قبیل c میباشد.
- با بکارگیری کتابخانهها و componentها در زبان VHDL، میتوان از المانهای موجود و نوشته شده در سایر طراحیها استفاده نمود. در واقع عملکرد آنها شبیه DLLها و توابع در زبانهای برنامهنویسی نرمافزاری میباشد.
- سرعت طراحی و پیادهسازی سیستمهای پیچیده توسط این زبان بسیار بیشتر از طراحی شماتیک است زیرا چگونگی اتصال گیتها و بلوکها، توسط نرمافزار سنتزکننده تعیین میشود. به این ترتیب میتوان سیستمهای پیچیده را در مدت زمان کوتاهی پیادهسازی کرده، تغییرات و اصطلاحات مورد نیاز را در برنامه اعمال نمود.
- استفاده از این زبان بستر مناسبی برای شبیهسازی سیستم مورد توصیف ایجاد میکند و پس از اطمینان از صحت عملکرد کد نوشته شده در محیط شبیهساز، میتوان توصیف سیستم را به روی تراشه مورد نظر پیاده کرد.
مثالهایی از برنامه
[ویرایش]پیادهسازی گیت AND
[ویرایش]-- (this is a VHDL comment) -- import std_logic from the IEEE library library IEEE; use IEEE.std_logic_1164.all; -- this is the entity entity ANDGATE is port ( IN1 : in std_logic; IN2 : in std_logic; OUT1: out std_logic); end ANDGATE; architecture RTL of ANDGATE is begin OUT1 <= IN1 and IN2; end RTL;
پیادهسازی مالتی پلکسر
[ویرایش]-- template 1: X <= A when S = '1' else B; -- template 2: with S select X <= A when '1', B when others; -- template 3: process(A,B,S) begin case S is when '1' => X <= A; when others => X <= B; end case; end process; -- template 4: process(A,B,S) begin if S = '1' then X <= A; else X <= B; end if; end process; -- template 5 - 4:1 MUX, where S is a 2-bit std_logic_vector : process(A,B,C,D,S) begin case S is when "00" => X <= A; when "01" => X <= B; when "10" => X <= C; when others => X <= D; end case; end process;
-- simplest DFF template (not recommended) Q <= D when rising_edge(CLK); -- recommended DFF template: process(CLK) begin -- use falling_edge(CLK) to sample at the falling edge instead if rising_edge(CLK) then Q <= D; end if; end process; -- alternative DFF template: process begin wait until CLK='1'; Q <= D; end process; -- alternative template expands the ''rising_edge'' function above: process(CLK) begin if CLK = '1' and CLK'event then--use rising edge, use "if CLK = '0' and CLK'event" instead for falling edge Q <= D; end if; end process;
پیادهسازی شمارنده
[ویرایش]library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; -- for the unsigned type entity counter_example is generic ( WIDTH : integer := 32); port ( CLK, RESET, LOAD : in std_logic; DATA : in unsigned(WIDTH-1 downto 0); Q : out unsigned(WIDTH-1 downto 0)); end entity counter_example; architecture counter_example_a of counter_example is signal cnt : unsigned(WIDTH-1 downto 0); begin process(RESET, CLK) is begin if RESET = '1' then cnt <= (others => '0'); elsif rising_edge(CLK) then if LOAD = '1' then cnt <= DATA; else cnt <= cnt + 1; end if; end if; end process; Q <= cnt; end architecture counter_example_a;
پیوند مرتبط
[ویرایش]منابع
[ویرایش]- آشنایی با تراشههای FPGA و زبان VHDL - مؤلف: کاوه فارغی - ناشر: کامپیوتر پایتخت - چاپ اول ۱۳۸۶
- ویکیپدیای انگلیسی
- خود آموز ویاچدیال
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png)
در ویکیانبار پروندههایی دربارهٔ ویاچدیال موجود است.