ویاچدیال
ظاهر
پارادایم برنامهنویسی | 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 - مؤلف: کاوه فارغی - ناشر: کامپیوتر پایتخت - چاپ اول ۱۳۸۶
- ویکیپدیای انگلیسی
- خود آموز ویاچدیال
در ویکیانبار پروندههایی دربارهٔ ویاچدیال موجود است.