1.はじめに
PLDやFPGA等のプログラムを回路図で記述すると、レジスタが視認できるので信号の時間的流れが判り易いのですが、HDL等のテキストによる記述は、信号と時間の関係(波形)が表現し難いので、時間軸に対する動作が判り難いという欠点があります。
回路規模が大きくなり、ファイルを複数に分割するようになると、信号波形はその信号出力源が記述されたファイルで確認しなければならないので、回路を追うのが困難になります。
ASIAN記法(Attributed SIgnAl Naming 俗称エイジァン記法)は、信号名の最初の数文字で波形を表現するようにしたものです。
本記法によると、非同期信号の同期化のし忘れ、ホールド信号のリセット条件の漏れ等の基本的な凡ミスもし難くなります。
「ASIAN記法」はいわば、ソフトウェアにおける変数名記述法である「ハンガリ記法」のHDL版と呼べるものです。
一例として、vhdlソースファイルの中で「signal_on」という名前の信号が出て来た場合に、それがどの様な信号かはソースファイルの最初の信号定義を参照しないと判りません。
一方、ASIAN記法に従って「spv_」を付加した「spv_signal_on」という信号名であれば、システムクロックに同期したベクタ信号で、
システムクロックの1周期幅のパルス状信号である事が信号名だけで判り、大きなソースファイルでは回路の流れが大幅に理解し易くなり、同時に設計ミスも少なくなります。
感覚的には読み易さ10倍、設計ミス1/10という感じです。
2.ASIAN記法の詳細
ASIAN記法は極めて単純明快で、信号名の先頭に各HDLで使用を許された文字で、下記の接頭語分類表に沿った信号属性を示す接頭語を付けるだけです。
●接頭語分類表
接 頭 語 |
説 明 |
s_
|
s(ynchronous)
システムクロックに同期した信号(レジスタ出力)。 |
a_
|
a(synchronous)
非同期信号 |
c_
|
c(ombinatorial)
レジスタ等でシステムクロックに同期させた信号をAND,OR,XOR等の組み合わせ回路で論理合成した信号。
次段のレジスタのセットアップタイムを満足しない可能性やハザードを含む可能性がある信号である
次段のセットアップタイムを満足しない場合は、組み合わせ回路を分割し間にレジスタを入れてパイプライン化して解決できる場合がある。
|
.h_
|
h(olded)
レジスタでホールド(ラッチ)された信号。
(セット信号とリセット信号を要す)
s, c, aと組み合わせて sh_, ch _ , ah_の様に表わす。
|
.p_
|
p(ulsed)
1システムクロック幅にパルス化された信号。
s, cと組み合わせて sp_, cp_の様に表わす。
(状態変化検出信号としてラッチイネーブル信号、クロックイネーブル信号等に使用される場合が多い) |
.i_ |
i(nteger)
integer である事を示す。
s, aと組み合わせて si_, ai_ の様に表わす。
|
f_
|
f(ixed)
定数、条件設定用スイッチ入力等の、スタティックな信号。 |
m_
|
m(etastable)
メタステーブル状態になる可能性を含む信号。
(非同期信号をレジスタで最初にラッチした信号) |
.r_ |
システムクロック立ち上がり(rise)に同期を明示する場合に付加 |
.f_ |
システムクロック立ち下がり(fall)に同期を明示する場合に付加 |
.n_
|
システムクロックが複数ある場合は clkn に同期した信号は n を付して s1_, s2_, sp1_, c3_ 等の様に表わす。 |
x.._
|
内部信号を示す。
(xを外せばそのまま入出力信号名 .._ に編集できる) |
.v_ |
ベクタタイプの信号を示す。 |
.a_ |
配列(array)の信号を示す。
s、a等と組み合わせて sva_、aa_ の様に表す。
信号名の先頭に付加する非同期信号 a(synchronous)は異なるので要注意。
|
●接頭語と回路図の対応
説明の為に、接頭語分類表の接頭語と回路図の対応を以下の例で示します。
クリックで拡大
3.ASIAN記法の具体例
ASIAN記法を用いてVHDLで記述したソースファイルの具体例としては下記を参照して下さい。
ASIAN記法のメリットを理解して頂ける事と思います。
●カウンタによるクロック監視回路(その2)
●カウンタによるクロック監視回路(その1)
(改訂F 2018/11/29)
−−−−− 本ページはここまで −−−−−
|