VHDL (زبان توصیف سختافزار VHSIC) یک زبان توصیف سختافزار قدرتمند و چندمنظوره است که برای طراحی، شبیهسازی و سنتز سیستمهای الکترونیکی دیجیتال استفاده میشود. این زبان در دهه 1980 برای برنامه مدارهای مجتمع با سرعت بسیار بالا (VHSIC) وزارت دفاع ایالات متحده توسعه یافت و به مهندسان این امکان را میدهد که مدلهای انتزاعی از رفتار و ساختار سختافزار ایجاد کنند. قابلیت آن در توصیف سیستمهای پیچیده، آن را در صنایع مختلف، به ویژه برای طراحیهای FPGA (آرایه دروازه قابل برنامهریزی میدانی) و ASIC (مدار مجتمع خاص کاربرد) ضروری کرده است.
VHDL در اوایل دهه 1980 به عنوان بخشی از تلاشی برای استانداردسازی طراحی مدارهای دیجیتال ایجاد شد. این زبان توسط تیمی به رهبری پیتر آشنیدن در وزارت دفاع ایالات متحده توسعه یافت تا نیاز به یک روش منسجم برای توصیف سختافزار را برطرف کند. هدف اولیه تسهیل مستندسازی طراحیهای موجود برای برنامه VHSIC بود، اما به زودی به یک زبان کامل برای توصیف سختافزار تبدیل شد.
در سال 1987، VHDL توسط IEEE به عنوان IEEE 1076 استاندارد شد. از آن زمان، این زبان بهروزرسانیهای مختلفی را تجربه کرده است که IEEE 1076-1993 و IEEE 1076-2002 از جمله اصلاحات مهم آن هستند. این زبان به گونهای گسترش یافته است که شامل ساختارهایی برای پشتیبانی از تأیید طراحی، محدودیتهای سنتز و قابلیتهای شبیهسازی باشد.
امروزه، VHDL به طور گستردهای در دانشگاهها و صنعت برای طراحی سیستمهای الکتریکی پیچیده استفاده میشود. نحو و رفتار آن تحت تأثیر زبانهای برنامهنویسی مانند آدا، پاسکال و C قرار دارد. ابزارهای مختلفی برای شبیهسازی و سنتز وجود دارد که میتوانند کد VHDL را تفسیر کنند و معمولاً در کنار سایر زبانهای توصیف سختافزار، به ویژه ورilog، استفاده میشود.
VHDL یک زبان نوعدهی قوی است، به این معنی که هر متغیر باید قبل از استفاده با یک نوع خاص اعلام شود. این امر از بروز بسیاری از خطاهای رایج جلوگیری میکند.
signal CLK : std_logic; -- اعلام یک سیگنال از نوع std_logic
VHDL از اجرای همزمان عبارات پشتیبانی میکند. چندین فرآیند میتوانند به طور همزمان اجرا شوند که برای مدلسازی رفتار سختافزار ضروری است.
process (CLK)
begin
if rising_edge(CLK) then
-- وظیفهای که باید انجام شود
end if;
end process;
VHDL از یک مدل موجودیت-معماری استفاده میکند که در آن موجودیت رابط یک مؤلفه سختافزاری را توصیف میکند، در حالی که معماری رفتار داخلی آن را توصیف میکند.
entity AND_Gate is
Port ( A, B : in std_logic;
Y : out std_logic);
end AND_Gate;
architecture Behavior of AND_Gate is
begin
Y <= A and B;
end Behavior;
VHDL چندین نوع داده داخلی دارد، از جمله مقیاسپذیر (مانند عدد صحیح، بیت)، ترکیبی (مانند آرایه، رکورد) و انواع دسترسی.
type MyArray is array (0 to 9) of integer; -- اعلام آرایه
انتساب سیگنالها به طور همزمان در VHDL انجام میشود. میتوانید سیگنالها را با استفاده از انتسابهایی که هر زمان یک رویداد رخ میدهد، بهروز کنید.
signal C : std_logic;
C <= A and B; -- C زمانی بهروز میشود که A یا B تغییر کند
VHDL از بستهها پشتیبانی میکند که به کاربران اجازه میدهد مؤلفهها و انواع قابل استفاده مجدد را تعریف کنند. بستهها به سازماندهی کد و ترویج استفاده مجدد کمک میکنند.
package MyLib is
type MyType is array (0 to 7) of std_logic_vector(3 downto 0);
end MyLib;
VHDL اجازه میدهد پیکربندیها در سطح بالاتری تنظیم شوند و انتخاب معماریهای مختلف برای موجودیتها را ممکن میسازد.
configuration MyConfig of AND_Gate is
for Behavior
end for;
end MyConfig;
VHDL ایجاد بنچ تست برای شبیهسازی طراحیهای سختافزاری را تسهیل میکند. یک بنچ تست شامل نمونههایی از طراحی تحت آزمایش و اعمال محرکها است.
entity TB_AND_Gate is
end TB_AND_Gate;
architecture sim of TB_AND_Gate is
signal A, B : std_logic;
signal Y : std_logic;
begin
uut: entity work.AND_Gate port map (A, B, Y);
-- فرآیند محرک در اینجا
end sim;
تأییدیهها میتوانند برای بررسی ویژگیها در حین شبیهسازی و کمک به اشکالزدایی طراحیها استفاده شوند.
assert (A = '1') report "A is not high" severity error;
عمومیها اجازه میدهند طراحیها پارامترگذاری شوند و آنها را انعطافپذیر و قابل استفاده مجدد بدون تغییر منطق اصلی میسازند.
entity Counter is
generic (N : integer := 4);
port (CLK : in std_logic;
COUNT : out std_logic_vector(N-1 downto 0));
end Counter;
چندین محیط توسعه یکپارچه (IDE) و ابزار از توسعه VHDL پشتیبانی میکنند، از جمله:
برای ساخت یک پروژه VHDL، طراحان معمولاً کد VHDL خود را در فایلهای .vhdl
یا .vhd
مینویسند، یک بنچ تست برای شبیهسازی ایجاد میکنند و از یک ابزار مناسب برای سنتز طراحی به سختافزار هدف استفاده میکنند. این فرآیند معمولاً شامل مراحل زیر است:
VHDL عمدتاً در طراحی سیستمهای دیجیتال که نیاز به زمانبندی و عملکرد دقیق دارند، استفاده میشود. کاربردهای آن شامل:
VHDL میتواند با چندین زبان برنامهنویسی دیگر مقایسه شود که هر کدام ویژگیها و کاربردهای خاص خود را دارند:
C و C++ زبانهای برنامهنویسی عمومی هستند که اجازه برنامهنویسی رویهای و شیگرا را میدهند. در مقابل، VHDL به طور خاص برای توصیف سختافزار طراحی شده و بر اجرای همزمان به جای ترتیبی تمرکز دارد.
Verilog یک زبان توصیف سختافزار دیگر است که شباهتهایی با VHDL دارد اما به طور کلی کمترVerbose است. Verilog از نحو مختصرتر استفاده میکند و معمولاً برای طراحی در سطح سیستم ترجیح داده میشود.
Python یک زبان اسکریپتنویسی سطح بالا است که در توسعه سریع برنامهها عالی است اما برای توصیف مستقیم سختافزار طراحی نشده است. با این حال، کتابخانههایی مانند MyHDL اجازه میدهند کد Python به VHDL تبدیل شود.
MATLAB برای محاسبات عددی و توسعه الگوریتمها استفاده میشود اما میتواند با VHDL برای پیادهسازی سختافزار از طریق HDL Coder و Simulink ادغام شود.
Rust و Ada ویژگیهایی دارند که ایمنی حافظه و برنامهنویسی همزمان را ترویج میدهند اما برای توصیف سختافزار تخصصی نیستند. تأکید VHDL بر انتزاع سختافزار در میان این زبانها منحصر به فرد است.
ترجمه کد منبع از زبانهای دیگر به VHDL معمولاً نیاز به توجه ویژه به همزمانی و زمانبندی دارد که در طراحی سختافزار ذاتی است.
چندین ابزار ترجمه منبع به منبع برای کمک به تبدیل کد در دسترس است:
در نتیجه، VHDL به عنوان ابزاری حیاتی در طراحی دیجیتال عمل میکند و ویژگیهای قوی، تاریخچه غنی و کاربردهای متنوعی در الکترونیک و محاسبات ارائه میدهد. قابلیتهای منحصر به فرد آن در توصیف سختافزار آن را از بسیاری از زبانهای برنامهنویسی پرکاربرد متمایز میکند.