وی‌اچ‌دی‌ال

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

وی‌اچ‌دی‌ال (به انگلیسی 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;

پیوند مرتبط[ویرایش]

منابع[ویرایش]