VHDLとはテキストベースで回路(または機能)を表現するための言語(HDL)の1つです。  今後は回路図でなく言語での回路設計が主流になります。 

[▲上位階層] 2005/11/07 新規作成, 2007/06/03 変更

目次

  1. なぜVHDLか?
    1-1 これからはVHDLでディジタル設計をしよう
    1-2 理由 配線数・端子数の増大に対応するため
    1-3 理由 データの標準化
    1-4 Verilog 対 VHDL
  2. 開発フロー
    2-1 ツール
    2-2 ファイル
    2-3 ファイル構成
  3. VHDLの文法の基本要素
    3-1 予約語
    3-2 識別子
    3-3 コメント(注釈)
    3-3-1 最低限必要なコメント
    3-3-2 できればあったほうがいいコメント
    3-4 改行の扱い
    3-5 演算子
    演算子の優先順位
    3-6 ライブラリ宣言
    あらかじめ定義されているライブラリ
    3-7 デザインユニット
    3-7-1 エンティティの宣言
    ポートの宣言
    3-7-2 アーキテクチャの宣言
  4. ゲート回路の表現
    4-1 同時処理文 実行順序
    4-2 ANDゲート
    4-3 ORゲート
    4-4 NOTゲート
  5. まとめ
  6. サンプルソースファイル
  7. 用語説明
⇒なぜディジタル回路か?
⇒VHDL,Verilogの開発環境 ModelSim


⇒電子書籍を読んでみませんか?
私は電子書籍も書いています。[パブー]

なぜVHDLか?

これからはVHDLでディジタル設計をしよう

VHDLとはテキストベースで回路(または機能)を表現するための言語(HDL)の1つです。 以前はASIC,PLDの開発に回路図入力がよく使用されていましたが、 なぜそれが今はHDLを使用するようになったのでしょうか? 1つは開発効率をあげるため、そして標準化のためです。 

理由 配線数・端子数の増大に対応するため

ASIC,PLDの進歩は早く高集積度、高速になりました。 回路図入力を使用してゲートレベルで入力するよりもHDLを使用して、RTLレベルで入力する方が楽です。 回路図レベルでもソフトマクロを使用すれば抽象度をあげられますがこれらソフトマクロは標準化がされませんでした。 (ソフトマクロによって互換性がないので回路図の再利用ができない。) シュミレーションをする際もRTLレベルで行った方が高速。 実際に回路図ベースで大規模な回路入力をしてみるとわかるのですが、上の方の階層の方に行くにしたがってブロック(またはシンボル)の端子数が多くなるで入力するのが大変なばかりでなく一番大きな用紙を使用してもブロックが紙からはみ出てしまったり、印刷した場合に端子名があまりに小さくなってしまって紙(回路図)を目で見て読めなくなってしまったりします。 仕方がなく複数のページに分割するのですが今度はページ数が多くなりすぎてしまって端子名、信号名などを目で見て探すのが大変になってしまいます。 セルベースICでなくFPGAでも1000pinぐらいを使用する事が時々あります。 テキストベース(HDL)ならばどんなにピン数が多くなっても印刷して文字が見れなくなることがありません。 

理由 データの標準化

回路図ベースの場合はファイルが通常バイナリになっておりCAD固有のため互換性がありません。 ツールを変えたい場合、入力した回路図資産の継承に困りました。 HDLについてはVerilogとVHDLの2つにほぼ統一されました。 テキストベースであるためツールを変更した場合やPC←→ワークステーションのデータ交換も問題がありません。 (設計資産の再利用が可能) CADファイルの場合そのCADをインストールしてあるPCでないとそのデータを見ることができません。 HDLならばテキストベースなのでメールで送れば誰でも見ることが可能、かつ変更も可能です。 メーカの異なるPLDでも同じソースファイルが使用可能なのはVHDLの大きなメリットです。  回路図の方が見やすく感じるかもしれませんがそれはなれの問題です。  開発ツールには回路図入力もありますがそれは過去の遺物で新規設計には使わないようにしましょう。 

Verilog 対 VHDL

初めてHDLを学習する方にとってVerilogとVHDLのどちらを学習すればよいか迷うと思います。 結果から申し上げますと両方です。 Verilog、 VHDLどちらも特徴があります。 ソフト開発の経験が有る方ならばVerilogはC言語に近い、VHDLはAdaやPascalに近いといえばニュアンスはわかると思います。 
  1. Verilogはそれほど型にはうるさくなく、ソースの記述量もVHDLよりも少なくてすみます。  また、シュミレーション/テストベンチの時に便利な機能があります。 
  2. VHDLは型に厳密であるため型が違う場合、いちいち変換しなければなりません。 厳密であるのでソースファイルの不具合をコンパイラが自動検出してくれます。 IPを作るために便利な機能があります。 
実際に大規模なセルベースICを作成する場合は社内にある設計資産をかき集めたり、外部から購入してきたIPを組み合わせて使用します。 全てのブロックを新規設計するわけにはいかないのでVerilogだけまたはVHDLだけで構成するのは不可能です。 結局 VerilogとVHDL、回路図入力全ての知識が必要になる場合が多いです。 それぞれの使い分けですがテストベンチなどはVerilogでIPはVHDLで記述する場合が多いようです。 小規模なPLDを開発する場合はVHDL,Verilogのどちらでも大差はないと思います。 

開発フロー

開発フロー
[図] PLDの開発の流れ
Xilinx社の開発ツール ISEとModelSimを使用する場合について説明します。 

ツール

テキストエディタ(デザイン入力)
テキストエディタはソースファイルの作成のために使用します。  統合開発環境(ISE)に付属しているものを使用してもかまいませんが 普段使い慣れているものの方が効率がいいと思います。 
シミュレータ(シミュレーション)
設計した回路が正しく動作するかをコンピュータ上の 計算によって確認します。  RTLシミュレーションとゲートレベルシミュレーションがあります。 
コンパイラ(論理合成/デザイン合成)
ソースファイルからプリミティブ(またはセル)と配線のみで生成された 回路表現であるネットリストを出力します。  この状態では配線の遅延、プリミティブが実際にどこに配置されるか決まっていません。 
フィッタ(配置配線/デザインインプリメンテーション)
実際にプリミティブがPLDの中のどこに配置するかを決めます。  FPGAの場合は配線の仕方も決めます。 (回路の遅延が決定します。) 
STA(遅延の確認/スタッティックタイミング解析)
配置配線後の遅延が設計どうりにできたか確認します。 
コンフィグレーションハードウェア(ダウンロード)
ビットストリームをPLDデバイスに電気的に転送して 設計した回路が動作できる状態にします。 
実機(実機での動作確認)
システム全体を含めた状態 かつリアルタイムで動作させて 仕様どうりに動いているか確認します。 

ファイル

VHDLソースファイル
回路の動作、またはプリミティブの接続をテキストファイルで 表現します。 (設計者が入力するファイル)
その他の言語のソースファイル
小さいPLDの場合は1つの言語で設計できますが ゲート数の大きなPLD,ASICの場合は複数の言語を組み合わせて使用 します。 (本ページでは使用しません) 
制約ファイル
論理合成をする際の条件を指定します。  最低限必要な制約はピン配置の決定と最大動作クロック周波数です。  (設計者が入力するファイル) テキストファイルで指定することも できますしGUIで入力することも可能です。 
ネットリスト(EDIF)
対象とするPLD固有のプリミティブ(またはセル)と配線のみの回路表現です。  EDIFと呼ばれるファイル形式が業界標準で使用されています。 
遅延情報(SDF)
プリミティブと配線の遅延データです。  SDFと呼ばれるファイル形式が業界標準で使用されています。  ゲートレベルシミュレーションの場合に必要でRTLシミュレーションでは使用しません。 
各種レポートファイル、ログファイル
テキスト形式でSTAの結果などが出力されます。  (ほとんどのツールはレポートファイルまたはログファイルを出力します)  バグの無い回路を設計するためには面倒ぐさがらずログファイルを チェックすることが重要です。 
ビットストリーム
最終的にPLDに転送する 配置配線済みの回路が入ったデータ

ファイル構成

VHDL開発で設計者が入力するファイルはVHDLのソースファイル、制約ファイルです。  C言語で言うところのヘッダファイルに相当するものはありません。  VHDLのソースファイルは実際にロジック(回路)を生成するのに使用するものと ロジックをテストするために使用するテストベンチがあります。  大規模な回路を設計する場合にはロジックを生成することは できないが抽象的な機能を実現するシュミレーションモデルを作る場合もあります。  通常は1つのファイルに1つのエンティティと関連するアーキテクチャ1つを入れます。  (1つのファイルが1つのブロックに対応)  制約ファイルはVHDLの規格ではなく各PLDメーカ固有で互換性は無いようです。 

VHDLの文法の基本要素

マイコンなどでC言語を知っている方が多いと思いますので C言語との比較をしながら説明します。 

予約語

以下の予約語はアルファベッド順になっています。  Waitなどは端子名としてよく使われるので重複に注意する必要があります。 
abs
access
after
alias
all
and
architecture
array
assert
attribute
file
for
function
nand
new
next
nor
not
null
then
to
transport
type
begin
block
body
buffer
bus
generate
generic
group
guarded
of
on
open
or
others
out
unaffected
units
until
use
case
component
configuration
constant
if
impure
in
inertial
inout
is
package
port
postponed
procedure
pure
variable
disconnect
downto
label
library
linkage
literal
loop
range
record
register
reject
rem
report
return
rol
ror
wait
when
while
whith
else
elseif
end
entity
exit
map
mod
select
severity
shared
signal
sla
sll
sra
srl
subtype
xnor
xor

識別子

識別子とは信号名、端子名、ブロック名、ラベルなどに使用される名前です。  予約語と重複しないことが必要です。  先頭や最後に_を使用しないこと、 _を連続して2つ以上繰り返さないことなどの制約があります。  VHDLでは大文字と小文字を区別しませんが大文字と小文字の使い分け には何かルールを決めておくと見やすくなります。 

たとえば予約語は小文字を使用、識別子は大文字を使用など。 

コメント(注釈)

コメントはロジックの生成にはいっさい影響をあたえず自由な文章を挿入できます。  一般的にソースファイルの説明などを記入します。 VHDLのコメントは--で始まって行末で終了します。 C言語の /* */ のように複数行にわたって継続するコメントはありません。  コメントはまったくなくてもロジック(回路)を作ることができるのでおざなりにされやすいのですが重要な部分です。  私は以下のようにしています。 

最低限必要なコメント

タイトル(ファイル名)
ソースファイル先頭にブロックの名称(エンディティー)を入れます。 
-- ブロック名   日付 設計担当者
-- ブロックの簡単な説明  これはコメントのサンプルです。
設計担当者
大規模な回路設計の場合、すでに社内にある設計済みのソースファイルやIPをかき集めてきて、それで1機種の製品、(またはASIC)を作成します。  何か疑問点があってそのブロックに対する質問をしたい場合(社内で設計したソースファイルで古いソースファイルとか)にそのブロックは誰が設計したかわからなくて困る場合があります。  最近は日本でも人間の移動が活発になってきていますので、設計者が他の部署に移動していたり、派遣の人間が設計していて今は社内にいないとかがよくあります。  開発が終わって年月がたっても設計者がわかるようにしておくことが重要です。 
日付
ファイルは簡単にコピーできてしまうのであちこちのPC,ワークステーションに重要なファイルのコピーが存在したりします。  この際にどのファイル、バージョンが最新で信用できるものなのかわからなくなる場合があります。  ファイルのタイムスタンプも目安にはなりますが、ファイルの内容を変更していないで上書き保存する場合もあり確実ではありません。  ファイル先頭にコメントとして入れておくと管理ミスが発生しにくいです。 
外部ポートの部分の説明
エンティーティーの部分でそれぞれの端子の意味または機能の説明をいれます。  外部ポートはそのブロックの内部回路と外部とのインターフェースを定義する部分なので重要です。  それに対して内部回路を記述する部分の1行、1行の説明は重要ではありません。  ソースファイルの再利用の観点からすると評価済のロジック部分はできるだけ、変更をするべきではなく理解する必要もありません。  ロジック部分(アーキテクチャ内部)の記述部分を見始めてしまうと記述がきたなくて変更したくなるとか識別子のネーミングが気に入らないとか出てきてしまうと思います。 この業界は短納期で仕事をやらなければならない場合が多いので記述がきたなくても評価済で正常に動作することが保障されているのであればできるだけ見ない・さわなないようにすべきでしょう。 

できればあったほうがいいコメント

ロジック部分(アーキテクチャ内部)の1行毎のコメント
設計者が自分のためのメモ的な役割なのでそれほど重要ではありません。  保守性という意味ではコメントは多いほうがいいのですがコメントを多くしすぎるとそのコメントの作成に時間がかかってしまうのでそれらはバランス感覚になると思います。  小見出し的なものはいれると見やすくなります。 
そのブロックの機能の説明
再利用の観点から、ソースファイル全体を見ないでそのブロックのおよその動作がわかるような説明文があった方がいいと思います。 ただブロックの機能をわかりやすく文章で表現するのは難しいので省略されてしまう場合が多いと思います。  紙に整理されたきれいなドキュメント(またはワープロのファイル)はたしかに見やすいのですが作成するのに多大な工数がかかります。  それに紙に整理されたドキュメントの場合はソースファイルと1体ではないのでソースファイルを変更してドキュメントは修正されていないということがよくあります。  必要最低限の工数で保守可能な情報を残すという意味でファイル先頭での機能の説明は重要です。 

改行の扱い

単語の途中でないならば任意の場所で改行ができます。 コメント中の場合はそこでコメントが終了します。  1つの文を複数の行に分割して記述したり、1行の中に複数の文を記述することができます。(セミコロンで区切る) 

演算子

分類演算子説明
論理演算子and論理積
or論理和
not否定
xor排他的論理和
nand反転・論理積
nor反転・論理和
xnor反転・排他的論理和
算術演算子+加算
-減算
*乗算
/除算 (論理合成不可の場合が多いので注意)
modモジュロ
rem剰余
*その他に関係演算子、結合演算子、アブソリュート、指数がありますが割愛します。 
*乗算は巨大なロジックを生成する場合があるので論理合成する部分での 使用は必要最小限にし、bit幅も最小限にします。 

演算子の優先順位

C言語の場合は演算子の種類によって優先順位が決まっていて括弧が無くても コンパイルエラーにはなりません。  VHDLでは1つの文で複数の演算子を使用する場合、括弧をつけて優先順位を明確にする必要があります。  (コンパイラでチェックを受けます。)  andだけ、orだけの場合は演算順序を変えても結果が同じなのでエラーには なりません。 
[表] 演算子の優先順位 (上の方が優先順位が高い)
その他の演算子abs **
乗法演算子* / mod rem
加法演算子= - &
関係演算子= /= < <= > >=
論理演算子and or nand nor xor not
演算子の優先順位をうらおぼえで使用するとバグの原因になるのでできるだけ 括弧で明確にしましょう。 

ライブラリ宣言

簡略書式:
library ライブラリ名;
use ライブラリ名.パッケージ.all;
ライブラリとパッケージの概念
[図 ライブラリとパッケージの概念]

ライブラリ, パッケージの内容を見えるようにします。  C言語のインクルードファイルのようにそこに他のファイルが挿入されるわけではありません。  予約語allは全てを表します。 始めの頃はallのみの使用で問題はないでしょう。 

⇒AND_OR_NOT.vhdを別ウィンドウで表示

パッケージは複数のデザインユニットで共通に使用する関数、定数、エンティティなどの 宣言を共有するためのしくみです。  1つのパッケージは複数の宣言を格納することができます。  次第に自分独自のパッケージを作りたくなると思いますが始めの頃は標準で用意された パッケージを使えるようにする手段だとの理解で良いと思います。 

ライブラリとはコンパイル済の設計データ(パッケージ)を保存しておく場所です。  ライブラリは複数のパッケージを保存することが可能です。  通常は1つのライブラリとして同じ名称の1つのはディレクトリーが対応します。 1つのライブラリは0個以上のパッケージを格納することができます。  (使用するツールによってはディレクトリーに対応しな場合もある。) エンディティーやアーキテクチャのコンパイル結果は特に指定がない場合は"work"というデフォルトの名前のライブラリに保存されます。 


STD_LOGICは必ずと言っていいぐらい使用するので以下のライブラリは必須だと思ってよいでしょう。 

-- ファイル先頭でとなえるおまじない
-- STD_LOGIC, STD_LOGIC_VECTORを使用可能にする
library IEEE;
use IEEE.STD_LOGIC_1164.all;

これらがファイル先頭で宣言された場合、1つのエンティティ宣言とそれに関連するアーキテクチャまで有効です。  エンティティ宣言が2つ以上ある場合はあらためて宣言しなおします。 

あらかじめ定義されているライブラリ

STANDARDというライブラリは指定がなくても常に可視化されています。  CHARACTER, BOOLEAN, BIT, BIT_VECTER, INTEGERなど基本的なタイプが定義されています。  STDの中にはパッケージ STANDARD,TEXTIOが含まれていて  コンパイラにこれらのソースファイルは付属しているので詳細はそれを見るとわかります。 
-- 暗黙的に宣言されているライブラリ
library STD;
use STD.STANDARD.all;

デザインユニット

デザインユニットとはエンティティ、アーキテクチャ などのことです。 

エンティティの宣言

簡略書式:
entity エンティティ名  is  [ポート宣言]  end [エンティティ名];
[]は省略可能を表す。
AND_OR_NOTのエンティティ
[図] これから作成するAND_OR_NOTのエンティティ
エンティティとはブロックの内部回路と外部を接続するためのインターフェース(ブロック名、外部ポートなど)を定義します。 大きなシステムを設計する際にはまずインターフェース(エンティティ)の部分の仕様をはっきり決めてから内部回路(アーキテクチャ)をビヘービアで記述します。その状態でシュミレーションをして仕様自身に誤りがないかを確認します。  その後実際に論理合成が可能な回路でソースファイルを作成します。  このような場合インターフェース部分と内部回路部分が別になっていてその組み合わせを自由に変えられるようになっていると便利です。  このインターフェース部分を定義するのがエンティティです。 
ポートの宣言
簡略書式:
port  (  <信号名>  in | out | inout  :  <クラス>  ) ;
| はいずれか1つを選択することを表します。
そのブロックの外部ポートを宣言します。  in/outはそのポートの入出力の方向を現します。 
in:入力, out:出力, inout:入出力
その他にbufferというのがありますがこれはほとんど使用されません。  外部ポートの部分ではSTD_LOGIC, STD_LOGIC_VECTOR, SIGNED, UNSIGNEDのいずれかを使用します。  シュミレーションだけならばその他のクラスの利用可能ですが、しばらくは無条件で1本の信号の場合はSTD_LOGIC, 複数の信号(バス)の場合はSTD_LOGIC_VECTORと使うと覚えてください。 
[表] 信号のクラス
クラス意味・用途備考
BIT1本の信号線現在はほとんど使用しない
BITVECTORバス現在はほとんど使用しない
STD_LOGIC1本の信号線トライステートを表現できる
STD_LOGIC_VECTORバスバスに対して主にビット演算をする場合
SIGNEDバスバスを符号あり整数とみなして数値演算をする場合
UNSIGNEDバスバスを符号なし整数とみなして数値演算をする場合

OUTポートは書き込みだけで読み出しができないので注意してください。  OUTポートに対して読み書き両方したい場合は別途、信号線を用意します。 

BIT,BITVECTORはVHDLの言語使用で何もパッケージを指定しなくても使用可能ですが、が使われない理由は信号の状態が0と1しか表現できないからです。  (トライステートやプルアップを表現できない。)  STD_LOGIC , STD_LOGIC_VECTOR は以下の9つの状態を表現することができます。 

[表] STD_LOGICの値
説明備考
0'L'に強く駆動ゲートのL出力
1'H'に強く駆動ゲートのH出力
Z駆動されていない事を表すオープン(トライステートバッファOFF状態)
X不定を表すどのような状態になるかは保証されない
L弱く'L'に駆動プルダウン抵抗でGNDに接続されている状態
H弱く'H'に駆動プルアップ抵抗でVCCに接続されている状態
W弱い不定どのような状態になるかは保証されない
U初期値
-don't care

アーキテクチャの宣言

アーキテクチャとはブロックの内部がどのような機能を持っているか、またはどのような回路に なっているか定義をする部分です。  この章ではいちばん簡単な同時処理文を使ったアーキテクチャの書き方を説明します。 
簡略書式:
architecture アーキテクチャ名 of エンティティ名 is
    [アーキテクチャの中で使用する信号や定数、部品の定義]
begin
    [回路記述]
end [アーキテクチャ名] ;
[]は省略可能を表す。

ゲート回路の表現

AND,OR,NOTは全てのディジタル回路の基本構成要素になります。 つきつめていきますと全てのディジタル回路はAND,OR,NOTの3種類のゲートを利用して定義できます。  実際にHDLで回路を構成する場合は開発効率の点で直接 AND,OR,NOTを指定することは少ないです。  ただ最終的にASICまたはPLDに論理合成をした場合これらのゲートに変換されることを意識する必要があります。 動作速度を問題にする場合や同じPLDの中にできるだけたくさん回路を詰め込みたい場合など 実際に生成されるロジックはできるだけゲート数が小さくかつできるだけ 遅延が少なくなるように最適化を行います。 

実行順序 (同時処理文)

AND_OR_NOTの中の回路記述はデータフローのモデル(同時処理文)のみを使用しています。  同時処理文とはアーキテクチャの中のbegin〜endの中にある文が上の行から順番に実行されるのではなく全ての文が同時に実行される文を言います。 (正確に言いますと入力信号が変化したときにそのプロセスが起動して出力信号の値が計算されます。)  C言語では必ず上の文から実行されるのと対照的です。 

ANDゲート

ANDゲート
[図] ANDゲートの記述

論理積とも呼ばれます 全ての入力端子が'1'の場合 のみ出力端子が '1'になります。 それ以外は出力 は'0'です。 

入力と出力がSTD_LOGICの場合とSTD_LOGIC_VECTOR(バス)の場合と 記述方法はまったく同じです。  STD_LOGIC_VECTORの場合は同じビット位置同士の信号が演算されます。  STD_LOGICとSTD_LOGIC_VECTORを混在させての演算はできません。 

*<=は信号に対する代入を表します。  :=は変数に対する代入をあらわわします。 使い分けが必要なので注意してください。 

-- 2入力 ANDゲート (VHDL-同時処理文)
X <= A and B;
C言語と比較するとわかりやすいかもしれませんのでC言語での記述を示しておきます。 
/* 2入力 ANDゲート (C言語-参考) */
X = (A & B);

入力端子が2本以上の場合もありますが その場合も全ての入力端子が'1'の場合のみ出力端子 が '1'になることは同じです。  入力端子が3本の場合は以下のような記述になります。  ANDゲートと同様にバスでの演算もできます。 

-- 3入力 ANDゲート
X <= A and B and C;

ORゲート

ORゲート [図 3] ORゲートの記述

論理和とも呼ばれます。 1つ以上の入力端子が'1'の場合 出力端子が '1'になります。 それ以外は出力 は'0'です。 


-- 2入力 ORゲート (VHDL-同時処理文)
Y <= A or B;
/* 2入力 ORゲート (C言語-参考) */
Y = (A | B);

入力端子が2本以上の場合もありますが その場合も1つ以上の入力端子が'1'の場合出力端子 が '1'になることは同じです。  入力端子が4本の場合は以下のような記述になります。 

-- 4入力 ORゲート
Y <= A or B or C or D;

NOTゲート

NOTゲート
[図 4] NOTゲートの記述

否定/インバータとも呼ばれます。  入力が'1'の場合 出力は'0'になり、 入力が'0'の場合 出力は'1'になります。 


-- 2入力 NOTゲート (VHDL-同時処理文)
Z <= not A;
/* 2入力 NOTゲート (C言語-参考) */
Z = (~A);

メモ

これらのゲートはVHDL上では予約語の AND,OR,NOTで表現されますが、論理合成をして 実際のプリミティブ(またはセル)に変換された場合 プリミティブの名前はメーカによって、デバイスのシリーズ によって異なります。 

VHDLソースファイル

ソースファイルはタブサイズ4で見ると見やすいです。  文字コードはシフトJIS

基本中の基本(AND,OR,NOT)

RTL (AND_OR_NOT), テストベンチ(AND_OR_NOT_BENCH)

フリップフロップの記述

RTL (D_JK_T), テストベンチ(D_JK_T_BENCH)

これ以降は準備中

準備中...

まとめ

初めから難しい記述を使うと理解しにくくなるので 今回は最も簡単な回路をVHDLで記述することをして見ました。  難しい書き方はいくらでもできますがそれらはまず使い始めて から少しずつ覚えていけばいいと思います。  「VHDL,Verilogの開発環境 ModelSim 」に シミュレータの使い方がありますので実際にシミュレーション をして予想どうりの波形がでるか実習してみると良いと思います。 

用語説明

テキストベース
テキストファイルはPC、ワークステーションであつかうファイルの中でもっとも古くからあり、かつ互換性の高いデータです。 回路図入力などグラフィックスを使用した開発手法に対してテキストエディタをメインで使用する手法をテキストベースと言っています。 
ブロック
ASIC設計においてある意味を持った回路部分をブロックといいます。  1個のLSIの内部を無数のブロックに分割して各ブロック毎に設計します。 それに対して初めからメーカで準備されているAND,OR,NOTゲート,FF(フリップフロップ)などはセルと言います。 ごく小さなPLDを設計する場合はPLDの1個分を1つのブロックに対応させる場合もありますが、回路規模が大きくなるにしたがい1つのPLDの中を複数のブロックに分割させて、ブロック単位で設計、評価するのが一般的です。 
RTLレベル
本来はレジスタ(一般的にはフリップフロップ)のあるべき位置と数量を回路設計者が明示して、レジスタから次のレジスタまでの組み合わせ回路を開発ツールで自動生成するソースファイルの書き方です。 それに対してセルベースICのセルまたはPLDのプリミティブを意識したソースファイルの書き方をゲートレベルといいます。 通常の開発ツールの場合、RTLならば論理合成が可能なので、論理合成が可能なソースファイルをRTLと言う人もいます。 
ソフトマクロ
回路図入力で設計する場合、主にベンダーから提供される設計済みのブロックをソフトマクロと言っていました。 
テストベンチ
ASIC, PLDなどをシュミレーションで評価する場合に入力信号を生成したり、出力が期待どうりに変化しているか確認するため回路、またはソースファイル
IP(知的財産Intellectual Property)
ASICの業界ではVHDLなどで設計された再利用する事を前提とした回路をさす場合が多いです。 内部回路がわからないようなファイルで供給される場合もあります。 ハードだけでなくソフトとの組み合わせの場合もあります。 (TCP/IPのIPではありません。)

本ページから直接リンクされているVHDLのソースファイルについては 無料でコピー・配布をして結構です。 (特に許可も必要ありません。)  それ以外の本webデータに対して許可のない 複製・譲渡はお断りします。  本webにリンクを張る場合 許可は必要ありません。 

--- Copyright N.Kojima 2005/2007 ---

[ ホーム(総目次) ] → [ 言語 ] → [ VHDL ]
言語によるディジタル回路の設計 〜 VHDL