VHDL

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

テンプレート:Infobox プログラミング言語 VHDL[1]は、デジタル回路設計用の、ハードウェア記述言語の一種である。EDA分野における標準の一つで、主として論理回路の設計に、特にFPGAASICなどの設計で使われる。規格が存在し、IEEE 1076-2008 である。

歴史

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

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

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

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

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

その後、IEEE 1076-1993[2]、IEEE 1076-2000[3]、IEEE 1076-2002[4]、IEEE 1076-2008[5] と改定していった。

コード例

ここでは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. 名前の由来は英語の「テンプレート:Lang-en-short」である。
  2. 1076-1993 IEEE Standard VHDL Language Reference Manual
  3. 1076-2000 IEEE Standard VHDL Language Reference Manual
  4. 1076-2002 IEEE Standard VHDL Language Reference Manual
  5. 1076-2008 IEEE Standard VHDL Language Reference Manual

外部リンク