* 6 REGISTER DETAILED DESCRIPTIONS FOR MAGNETOMETER
5.2.4 ハードウェア情報入力用 DSL
5.2.4.1 ハードウェア部品 DSL
’ p r o t o c o l ’ na m e = Q u a l i f i e d N a m e ’ { ’ o p e r a t i o n s += D s l O p e r a t i o n *
’ } ’;
D s l O p e r a t i o n :
( t y p e = D s l T y p e ) ? na m e = ID’ ( ’( p a r a m T y p e += D s l T y p e p a r a m n a m e +=
ID (’ , ’
p a r a m T y p e += D s l T y p e p a r a m n a m e += ID ) *) ?’ ) ’;
D s l C o m p o n e n t :
D s l M c u | D s l D e v i c e ;
D s l M c u :
’ mcu ’ n a m e = ID’ { ’
’ p i n s ␣ { ’ p i n s += D s l P i n (’ , ’ p i n s += D s l P i n ) * ’ } ’ p o r t s += D s l P o r t *
p e r i p h e r a l s += D s l P e r i p h e r a l * (’ sf r s ␣ { ’
sfr += D s l R e g i s t e r (’ , ’sfr += D s l R e g i s t e r ) *
’ } ’) ?
p a c k a g e s += D s l P a c k a g e *
’ } ’;
D s l D e v i c e :
’ d e v i c e ’ n a m e = ID ’ { ’
’ p i n s ␣ { ’ p i n s += D s l P i n (’ , ’ p i n s += D s l P i n ) * ’ } ’ p o r t s += D s l P o r t *
f u n c t i o n s += D s l F u n c t i o n * p a c k a g e s += D s l P a c k a g e * (’ r e g i s t e r s ’ ’ { ’
r e g i s t e r s += D s l R e g i s t e r (’ , ’ r e g i s t e r s += D s l R e g i s t e r ) *
’ } ’) ?
’ } ’;
Name
datasheet { Import }
Component MCU
Device component:
datasheet:
3 4
図
5.6:
ハードウェア部品DSL
の定義Code5.1
をグラフ化したものを図5.6
に示す.(図形式では簡略化のため接頭語Dsl
を除去している.)図では記載していないが,ルートの要素としてModel
を定 義している.Model
ではdatasheet
またはProtocol
である.Protocol
はMCU
とデ バイス間の接続プロトコルのインタフェース定義を行うためのもので,プロトコ ル名とそのプロトコルの持つメソッドの列挙を定義する.定義
datasheet
では,データシート自体を示す定義を行い,内部にImport
また は,Component
を含む.Import
文は別ファイルで定義したProtocol
を参照する ために用いる.Component
は,MCU
またはDevice
で定義される.これにより,MCU
とデバイスの両方のデータシートを扱うようにしている.3 MCU:
Name
mcu {
} Port Peripheral
Package
pins { }
, Pin
sfrs { }
, Register
図
5.7:
ハードウェア部品DSL(MCU)の定義(一部抜粋)
図
5.6
より,MCUをより掘り下げたDSL
定義を図5.7
に示す.5.2.3で示したよ うにMCU
データシートの項目としてIO,メモリ・レジスタ,周辺機能,パッケー
(メモリ・レジスタ),
Package
(パッケージ)の定義を行っている.またPort
は 周辺機能が用いるPin
のセットを示すためのものである.Pin
の定義は,MCU
の論理的なピン名の列挙を行う.一方Package
では,パ ッケージのピン名とピン番号と割当てられている論理ピン名を記述する.例え ば,Atmega328
のMLF
パッケージでは,1
番ピンのピン名がPD3
,割当てとしてPCINT19, OC2B, INT1
が指定されている.この場合,Pin
にはPD3, PCINT19, OC2B, INT1
を列挙し,PackagePin
には,ピン名としてPD3
,ピン番号1
,他割り当 てとしてPCINT19, OC2B, INT1
を記述する(表記はPD3(1) { PCINT19,OC2B,INT
1}
となる).Port
はPort
名と,そのPort
に属するPin
を列挙する.Registerはレジスタ名と 割当てられているアドレスを記述する.Peripheral
の表記は多少複雑である.Peripheralとして周辺機能名を記述し,そ の周辺機能の持つ機能をOperation
として複数記述していく.Peripheralの定義で はその周辺機能の提供するプロトコルを指定している.関係としてはJava
で例える とプロトコルがインタフェースでPeripheral
がそれを実装するクラス,Operation
がインタフェースの持つメソッドを実装したものとなる.Operation
内には,その機能を利用するための操作手順を,レジスタの操作として記述する.操作手順はプログラム言語のような表記を行うため,レジスタ操作 の記法に加えて簡易な算術演算や制御構文を記述できるようにしている.このよ うな拡張は
Xtext
の言語拡張ライブラリであるXbase
を用いて行っている.MCUデータシー ト
・ MCU名
・ IO情報
・ 周辺機能
・ メモ リ ・ レジ スタ 情報
・ パッケー ジ 情報 3
図
5.8:
ハードウェア部品DSL
(MCU
)の入力例図
5.6
より,Device
をより掘り下げたDSL
定義を図5.7
に示す.MCU
とデバイ スは同じDSL
記法で記すが,入力項目は若干異なる.Pin, Port, Register, Package
はMCU
と同様の表記を行う.Peripheral
は,デバイスではソフトウェアからは明 示的に利用することはないため除外している.DeviceFunction
ではデバイス機能の定義を行う.粒度としてはメソッドの定義にあたる.内部の表記法は上記の
Peripheral
のOperation
と同じものであるが,Oper-ation
がレジスタの操作を記述していたのに対して,DeviceFunction
ではProtocol
で定義されているメソッド呼び出しの形で操作を記述する.DSLのAST
Model Hardware Model
Hardware Modelに対応
する要 素のみを変換 マップ に基 づき 1 :1 変換
( 変換マップは付録 参照 )
<<DslDatasheet>>
Atmega64/128 datasheet
<<DslMCU>>
Atmega328
<<DslPin>>
P1
<<DslPort>>
PortB
<<Datasheet>>
Atmega64/128 datasheet
<<HwMCU>>
Atmega328
<<HwPin>>
P1
<<HwPort>>
PortB 3
図
5.9:
ハードウェア部品DSL(MCU)の DSL
からハードウェア部品モデルへの 変換4 Device:
Name
device {
} Port devicefunction
Package
pins { }
, Pin
sfrs { }
, Register
図
5.10:
ハードウェア部品DSL
(デバイス)の定義(一部抜粋)4
デバイス データシー ト
・ デバイス 名
・ IO情報
・ デバイス機能
・ パッケー ジ情報
・ メモ リ ・ レジ スタ 情報
図
5.11:
ハードウェア部品DSL
(デバイス)の入力例4
DSLのAST
Model Hardware Model
Hardware Modelに対応
する要 素のみを変換 マップ に基 づき 1 :1 変換
( 変換マップは付録 参照 )
<<DslDatasheet>>
KXP84 datasheet
<<DslDevice>>
KXP84
<<DslPin>>
P1
<<DslPort>>
PortB
<<Datasheet>>
KXP84 datasheet
<<HwDevice>>
KXP84
<<HwPin>>
P1
<<HwPort>>
PortB
・E・E・E ・E・E・E
図
5.12:
ハードウェア部品DSL(デバイス)の DSL
からハードウェア部品モデルへの変換