VHDL

VHDL
パラダイム ハードウェア記述言語(HDL: Hardware Description Language)
登場時期 1981年 (1981)
最新リリース IEEE 1076-2019/ 2019年12月23日 (4年前) (2019-12-23)
型付け 静的型付け
影響を受けた言語 Ada
影響を与えた言語 Verilog-HDL
ライセンス IEEE/IEC Standard
ウェブサイト http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=4772740
テンプレートを表示

VHDLは、デジタル回路設計用の、ハードウェア記述言語(HDL: Hardware Description Language)の一種である。標準化は(現在は)IEEE/IECによる。主として論理回路の設計に、特にFPGAASICなどの設計で使う。IEEEIECで同一規格IEEE 1076-2008 VHDL Language Reference Manual/IEC 61691-1-1:2011 Behavioural languages - Part 1-1: VHDL Language Reference Manual を発行している。名前の由来は英語のVHSIC HDLの略で、VHSICは、very high speed integrated circuits(超高速集積回路)で、米国国防総省が主導したプロジェクトの一環をなす研究プログラムの名称である。このプログラムによってVHDLは生み出された。

歴史

米国国防総省は、業者の納品する機器の電子回路に搭載されているASICの動作の文書記述のためにVHDLを開発した。すなわち、分厚く複雑になりがちな紙のマニュアルの代替を目指したのが始まりである。

全般に、同じく米国防総省のプログラミング言語であるAdaの影響が大きく、その構文は(Adaと同じく)いわゆる「ALGOL系」である。規格では、ケース・インセンシティブ(大文字、小文字の区別をしない)としている。

この文書作成用言語で書いた仕様がそのまま実行できたら便利であろうとのアイデアにより、論理(シミュレータ)が実装され、さらにゲートレベルの回路を生成する論理合成ツール(ソフトウェア)が実装された。合成ツールを用いれば、他のHDLと同様、同じVHDL記述から設計者の指定する条件で別の回路を合成することもできる。費用を優先するか、性能を優先するか、その他各種の複合条件を指定して生成することができる。

VHDLの最初のバージョンはIEEE 1076-1987として規格化された。整数実数、論理値、文字、時間およびそれらの配列としてbit_vectorstring(文字列)など広範囲なデータ型がある。

しかしこのバージョンでは多値論理を定義していない。信号のドライブ能力や不定値を考慮した9値のstd_logicを定め、IEEE 1164として規格化された。

その後、IEEE 1076-1993[1]、IEEE 1076-2000[2]、IEEE 1076-2002[3]、IEEE 1076-2008[4] 、IEEE 1076-2019[5]と改定し、IECが同一規格を発行するようになった。WTO/TBT協定で、国際取引の技術基準は国際規格を尊重することになっているため、IECの規格文書として発行することに合意したものである。

コード例

ここではVHDL-93に準拠したコードを示す。

Hello World

Hello Worldプログラム例:

-- VHDL example programme: hello.vhd

use std.textio.all;

entity hello is
end entity hello;

architecture Wiki of hello is

    constant message : string := "hello world";

begin

    process is
        variable L: line;
    begin
        write(L, message);
        writeline(output, L);
        wait;
    end process;

end architecture Wiki;

メッセージはシミュレータのデフォルト出力ウインドウに出力される。

フィボナッチ数列

次の例はもう少し実用的なものである:

-- Fib.vhd
--
-- Fibonacci number sequence generator

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity Fibonacci is
port
(
    Reset       : in    std_logic;
    Clock       : in    std_logic;
    Number      : out   unsigned(31 downto 0)
);
end entity Fibonacci;

architecture Rcingham of Fibonacci is

    signal  Previous    : natural;
    signal  Current     : natural;
    signal  Next_Fib    : natural;

begin

    Adder:
    Next_Fib <= Current + Previous;

    Registers:
    process (Clock, Reset) is
    begin
        if Reset = '1' then
            Previous <= 1;
            Current  <= 1;
        elsif Clock'event and Clock = '1' then
            Previous <= Current;
            Current  <= Next_Fib;
        end if;
    end process Registers;

    Number <= to_unsigned(Previous, 32);

end architecture Rcingham;

シミュレーションを行うとNext_Fibがオーバーフローするまで、フィボナッチ数列を生成する。

参照

  1. ^ 1076-1993 IEEE Standard VHDL Language Reference Manual
  2. ^ 1076-2000 IEEE Standard VHDL Language Reference Manual
  3. ^ 1076-2002 IEEE Standard VHDL Language Reference Manual
  4. ^ 1076-2008 IEEE Standard VHDL Language Reference Manual
  5. ^ 1076-2019 - IEEE Standard for VHDL Language Reference Manual”. IEEE. 2023年3月23日閲覧。

外部リンク