32 第5章 SpaceWire搭載機器への実装
5.3 実装した機能 33 まず、配信されたTime-CodeからTIを生成する流れは、以下の通りである。
(1) TICounterModuleはTime-Codeが0 (ゼロ) のタイミングで1カウントアップする時刻カウンタ
「TIME DATA」を生成する。
(2) カウントアップしたら、すぐにTIRegisterModuleの「次のTIME DATA用レジスタ」にTIME DATAを書きこむ。書き込みは内部バス経由で行う。
(3) TIRegisterModuleはTime-Codeが3のタイミング*4 で「今のTIME DATA用レジスタ」に「次
のTIME DATA用レジスタ」の値をコピーする。
一方で、高分解能の時刻をつけるために、下記の二つの機能を実装した。
(4) (1)〜(3)の間も、LocalTimeを生成している。
(5) Time-Codeが0 (ゼロ) のときTI (TIME DATA + Time-Code)とLocalTimeをラッチ*5し、外 部バスを経由してSDRAMに書き込む。
また、イベントへの時刻付けとして、下記の機能を実装した。
(6) CMOSInから信号を受けると、その時のLocalTimeをラッチして、外部バス経由でSDRAMに記
録する。
User NodeのSpaceWire FPGAとUser FPGAの両者に外部バス(External Bus)が備わっており、
両者の間のデータはバス経由でやりとりされる。User FPGAの各モジュール間のデータは内部バス経由 でやりとりされる。User FPGAのロジックは、日本SpaceWireユーザー会によるUserFPGATemplate をもとに作成した。SpaceWire FPGAは、シマフジ製IPコア*6とSDRAMコントローラ(SDRAMC) のコードに加えて、外部入出力(aux)からTime-Code (Tickと6 bitの時刻情報部) をUser FPGAに 出力する機能を追加した。これによってTime-CodeをUser FPGAで参照できるようにした。
*4 このタイミングを選んだ理由は、TIME DATAレジスタと時刻照合表の書込みタイミングをずらすためである。
Time-Codeが3で「次」から「今」に書き換えるのは、ASTRO-Hと同じ仕様でもある。
*5 ある瞬間のレジスタなどの値をコピーしておくこと。バス経由でメモリ領域に書込みをするとき、その瞬間の値を記録し たい場合は、カウンタなどの値が書込み時間中に変化してしまう可能性があるので、ラッチした値を書き込むようにする。
*6http://www.shimafuji.co.jp/を参照
34 第5章 SpaceWire搭載機器への実装
2010/2/18 1
U se r N o d e
RMAP IP coreExt. Bus SDRAM Controller
SpaceWire IP core
External Bus I/FTICounterModule TIRegisterModule LocalCounterModule TimeLatchModule
SpaceWireFPGAUser FPGA
Sp Wc h1
EventTrigger (CMOSIn)
TickOut TimeOut(6) (aux) Bus Arbiter Bus Arbiter
iBus_BusI/F EventTimeModule EventTimeRegister
TILatchRegister(32)
LTLatchRegister(32)
LocalTimeCounter(32)
TINextRegister(26) TIPresentRegister(26) TIME_DATA Counter(26) (Latch Signal : when Time-Code=3)
(count-upwhen Time-Code=0) Latch
La tc h
(LatchSignal)
La tc h
SDRAM 16 MBytes
(Latch signal:when Time-Code=0) (to SDRAM across Bus) (to SDRAM across Bus)
(to TINextRegisteracross Bus)
TimeCode64HzSendModuleSpaceWireFPGAUser FPGA
Sp Wc h1
GPS 10MHz (CMOSIn)
TickIn_OutSpaceWire IP core
T im e M a st e r
Time Counter(6) TimeIn_Out(6)Sp ac eW ire Lin k
iBus_BusI/F iBus_BusI/F iBus_BusI/F iBus_BusI/F
La tc h
iBus_BusI/F
・・・TI register ・・・LocalTimeregister
図5.6 SpaceWire Digital I/O boardのSpaceWire FPGAとUser FPGAに実装したモジュー ルのブロック・ダイアグラム。矢印の緑はFPGA の内部のバスに関する信号および信号線、赤は FPGAの外部との入出力やインターフェースからの入出力を示す。水色の四角はTIに関するレジス タ、オレンジの四角はLocalTimeに関するレジスタを示す。