وی‌اچ‌دی‌ال

وی‌اچ‌دی‌ال (به انگلیسی VHDL) یک زبان توصیف سخت افزار برای بیان مشخصات سخت افزار است. زبان VHDL نخستین بار توسط وزارت دفاع آمریکا به منظور طراحی و توصیف مدارهای مجتمع سرعت بالا طراحی شد و مورد استفاده قرار گرفت. سپس در سال 1987 توسط انجمن IEEE (انجمن مهندسان برق و الکترونیک) در قالب استاندارد IEEE 1076-1987 ارائه گردید. پس از گذشت چند سال و انجام پاره‌ای ار تصحیحات، استاندارد دوم این زبان تحت عنوان IEEE 1076-1993 در اختیار عموم قرار گرفت. به‌طور کلی می‌توان مزایای زیر را در استفاده از زبان VHDL عنوان نمود:

  • با توجه به این که VHDL یک زبان استاندارد می‌باشد، کد نوشته توسط آن را می‌توان به روی سنتزکننده‌ها و تراشههای تولید کنندگان مختلف پیاده‌سازی نمود و نیازی به تغییر کد وجود ندارد.
  • شبیه سازها و کامپایلرهای این زبان در دسترس و ارزان قیمت می‌باشند.
  • با استفاده از این زبان می‌توان سیستم‌ها را به صورت ساختاری یا رفتاری مدل سازی نمود. توصیف رفتاری نشان دهنده عملکرد سیستم و چگونگی تولید خروجی‌ها بر اساس سیگنال‌های ورودی می‌باشد. با استفاده از این توصیف می‌توان عملکرد کلی سیستم را بیان کرد و از درگیر شدن با جزئیات بلوک‌های سازنده سیستم که در طرح‌های بزرگ به پیچیدگی توصیف سیستم منجر شود اجتناب نمود. در مقابل مدل ساختاری نشان دهنده نحوه ارتباط بلوک‌های سازنده سیستم است و بیانگر جزئیات بیشتری از سخت افزار می‌باشد. به این ترتیب با استفاده از این زبان امکان توصیف سخت افزار از سطح گیت تا سیستم فراهم می‌شود .
  • با استفاده از توصیف سخت افزاری می‌توان سیستم‌های پیچیده را توسط ارتباط بین بلوک‌های سازنده آن‌ها مدل‌سازی نمود، به این ترتیب پیاده‌سازی این سیستم‌ها توسط زبان VHDL ساده‌تر از زبان‌های برنامه نویسی از قبیل c می‌باشد .
  • با بکارگیری کتابخانه‌ها و componentها در زبان VHDL، می‌توان از المان‌های موجود و نوشته شده در سایر طراحی‌ها استفاده نمود. در واقع عملکرد آن‌ها شبیه DLLها و توابع در زبان‌های برنامه‌نویسی نرم‌افزاری می‌باشد.
  • سرعت طراحی و پیاده‌سازی سیستم‌های پیچیده توسط این زبان بسیار بیشتر از طراحی شماتیک است زیرا چگونگی اتصال گیتها و بلوک ها، توسط نرم‌افزار سنتزکننده تعیین می‌شود. به این ترتیب می‌توان سیستم‌های پیچیده را در مدت زمان کوتاهی پیاده‌سازی کرده، تغییرات و اصطلاحات مورد نیاز را در برنامه اعمال نمود.
  • استفاده از این زبان بستر مناسبی برای شبیه‌سازی سیستم مورد توصیف ایجاد می‌کند و پس از اطمینان از صحت عملکرد کد نوشته شده در محیط شبیه ساز، می‌توان توصیف سیستم را به روی تراشه مورد نظر پیاده کرد.
وی‌اچ‌دی‌ال
الگو برنامه‌نویسیconcurrent, reactive
ظهوریافته در1980s
وابستگی زیاد و کم به نوع
وبگاه
متأثر از
ایدا (زبان برنامه‌نویسی)، پاسکال (زبان برنامه‌نویسی)

مثال‌هایی از برنامه

پیاده‌سازی گیت 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 ها

منابع

    در ویکی‌انبار پرونده‌هایی دربارهٔ وی‌اچ‌دی‌ال موجود است.
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.