初めてでも使えるVHDL文法ガイド ―― 文法ガイド編
tag: 半導体 ディジタル・デザイン
技術解説 2009年8月10日
7. アーキテクチャ
● アーキテクチャ本体
architecture < アーキテクチャ名 > of < エンティティ名 > is
[ < ブロック宣言アイテム > ]
begin
[ < 同時処理文 > ]
end { < アーキテクチャ名 > } ;
《 記述例 》 architecture RTL of dec2to4 is begin process ( d ) begin case d is when " 00 " = > q < = " 0001 " ; when " 01 " = > q < = " 0010 " ; when " 10 " = > q < = " 0100 " ; when " 11 " = > q < = " 1000 " ; when others = > q < = " XXXX " ; end case end process; end RTL ; |
● ブロック宣言アイテム
< サブプログラム宣言 >
< サブプログラム本体 >
< タイプ宣言 >
< サブタイプ宣言 >
< 定数宣言 >
< 信号宣言 >
< 変数宣言 >
< ファイル宣言 >
< コンポーネント宣言 >
8. 文
● 同時処理文
< プロシージャ呼び出し >
< 同時処理信号代入文 >
< コンポーネント呼び出し >
● process文
{ < ラベル名 > : }
process { ( < センシティビティ・リスト > ) }
[ < プロセス宣言アイテム > ]
begin
[ < 順次処理文 > ]
end process { < ラベル名 > } ;
《 記述例 》 process ( ck , res ) begin if res = ' 1 ' then Q < = ' 0 ' ; elsif ck'event and ck = ' 1 ' then Q < = D ; end if ; end process ; |
● センシティビティ・リスト
< 信号名 > , < 信号名 > , …
● プロセス宣言アイテム
< サブプログラム宣言 >
< サブプログラム本体 >
< タイプ宣言 >
< サブタイプ宣 >
< 定数宣言 >
< 変数宣言 >
< ファイル宣言 >
● プロシージャ呼び出し
< プロシージャ名 > { ( < 結合リスト > ) } ;
《 記述例 》 write_reg ( CMD_REG , " 00000001 " ) ; |
● 同時処理代入文
{ < ラベル名 > : } < ターゲット > < = { guarded } { transport }
[ < 波形 > when < 条件式 > else ] < 波形 > ;
{ < ラベル名 > : } with < 式 > select < ターゲット > < = { guarded } { transport }
[ < 波形 > when < 選択 > , ] < 波形 > when < 選択 > ;
● コンポーネント呼び出し
< インスタンス名 > :
< コンポーネント名 >
{ generic map (< 結合リスト > ) }
{ port map ( < 結合リスト > ) } ;
《 記述例 》 U1 : counter port map ( CK = > clk1 , RES = > sysres , Q = > blkcnt ) ; |
● generate文
< ラベル名 > :
< ジェネレーション方式 > generate
[ < 同時処理文 > ]
end generate { < 名まえ > } ;
● ジェネレーション方式
for < 名まえ > in < 離散レンジ >
if < 条件式 >
● 順次処理文
< 信号代入文 >
< 変数代入文 >
< プロシージャ呼び出し >
● wait文
wait { on < センシティビティ・リスト > } { until < 条件式 > } { for < 式 > } ;
《 記述例 》 - クロック・エッジからの相対遅延 wait until CLK'event and CLK = ' 1 ' ; wait for 10 ns ; DATA < = din ; wait for 10 ns ; WEB < = ' 0 ' ; wait for 25 ns ; WEB < = ' 1 ' ; wait until CLK ' event and CLK = ' 1 ' ; |
● assert文
assert < 条件式 >
{ report < 式 > }
{ severity < 式 > } ;
《 記述例 》 |
● 信号代入文
< ターゲット > < = { transport } < 波形 > ;
《 記述例 》 |
● ターゲット
< 名まえ > | < 集合体 >
● 波形
< 波形要素 > , < 波形要素 > , …
《 記述例 》 |
● 波形要素
< 式 > { after < 式 > }
null { after < 式 > }
● 変数代入文
< ターゲット > : = < 式 > ;
● if文
if < 条件式 > then
< 順次処理文 >
{ elsif < 条件式 > then
< 順次処理文 > }
{ else
< 順次処理文 > }
end if ;
《 記述例 》 if din ( 3 ) = ' 1 ' then dout < = " 11 " ; elsif din ( 2 ) = ' 1 ' then dout < = " 10 " ; elsif din ( 1 ) = ' 1 ' then dout < = " 01 " ; else dout < = " 00 " ; end if ; |
● case文
case < 式 > is
[when < 選択 > | < 選択 > | … = > < 順次処理文 > ]
end case ;
《 記述例 》 case din is when " 00 " = > dout < = " 0001 " ; when " 01 " = > dout < = " 0010 " ; when " 10 " = > dout < = " 0100 " ; when "11 " = > dout < = " 1000 " ; when others = > dout < = "XXXX" ; end case |
● 選択
< 単純式 > | < 離散レンジ > | < 名まえ > | others
● loop文
{ < ラベル名 > : }
{ < 繰り返し方法 > } loop
[ < 順次処理文 > ]
end loop { < ラベル名 > } ;
《 記述例 》 for I in 0 to 255 loop - 1クロックごとにdin入力を変化 wait for 100 ns ; din < = mem end loop ; |
● 繰り返し方法
while < 条件式 >
for < 名まえ > in < 離散レンジ >
● next文
next { < ラベル名 > } { when < 条件式 > } ;
● exit文
exit { < ラベル名 > } { when < 条件式 > } ;
《 記述例 》 |
● return文
return { < 式 > } ;
● null文
null ;