ویاچدیال
از ویکیپدیا، دانشنامهٔ آزاد
ویاچدیال (به انگلیسی VHDL) یکی از زبان های توصیف سخت افزاری است . زبان VHDL نخستین بار توسط وزارت دفاع آمریکا به منظور طراحی و توصیف مدارهای مجتمع سرعت بالا طراحی شد و مورد استفاده قرار گرفت . سپس در سال 1987 توسط انجمن 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;
پیاده سازی فلیپ فلاپ نوع D [ویرایش]
-- 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 ها
منابع [ویرایش]
- آشنایی با تراشه های FPGA و زبان VHDL - مولف : کاوه فارغی - ناشر : کامپیوتر پایتخت - چاپ اول ۱۳۸۶
- ویکیپدیای انگلیسی
- خود آموز ویاچدیال
| در ویکیانبار پروندههایی دربارهٔ ویاچدیال موجود است. |