STM

STMモジュール
NameIn/OutWidthDescription
CLKIn1メインクロック
SETTINGSIn-
├─ REQ_RD_SEGMENTIn1要求読み込みセグメント
├─ CYCLE[]In16セグメントの周期
├─ FREQ_DIV[]In16セグメントの周波数分周比
├─ REP[]In16セグメントの繰り返し回数
├─ SOUND_SPEED[]In16セグメントの音速
├─ TRANSITION_MODEIn8遷移モード
└─ TRANSITION_VALUEIn64遷移値
SYS_TIMEIn57システム時刻
INTENSITYOut8強度
PHASEOut8位相
DOUT_VALIDOut1強度/位相データ有効フラグ
STM_BUSIn-位相フィルタ用メモリバス

本モジュールは, 強度/位相データを出力する.

Timer

このサブモジュールは, システム時刻, 周期, 周波数分周比から, 現在読み込むべきデータのインデックスを計算する. 変調データのインデックス として計算される. SYS_TIMEでカウントアップされため, データのサンプリング周波数 となり, はこの周波数でからまで周期的にカウントアップされる.

SYS_TIMEがすべてのデバイスで同期しているため, このインデックスも必然的にすべてのデバイスで同期する.

NOTE: SETTINGSで指定するCYCLEであることに注意する.

Swapchain

このサブモジュールはセグメントの切り替えを制御する.

セグメント切替時の挙動は以下の通りである.

  1. 要求されたセグメントが1の場合
    1. 第1セグメントの繰り返し回数が0xFFFFの場合, 直ちにセグメントを1に切り替え, 無限ループする.
      • 遷移モードがEXTの場合, セグメントないのデータを一周するたび, セグメントを自動的に切り替える.
    2. 第1セグメントの繰り返し回数が0xFFFF以外の場合, 遷移モードに従って, セグメントの切り替えを待機する. セグメント切り替え後, 指定回数の繰り返しが終わった後, STOPをアサートする.
      • 遷移モードがSYNC_IDXの場合, 第1セグメントのインデックスが0になったら, セグメントを1に切り替える.
      • 遷移モードがSYS_TIMEの場合, システム時間が遷移値で指定された値になったらセグメントを1に切り替え, インデックスを0に初期化.
      • 遷移モードがGPIOの場合, 遷移値で指定されたGPIO Inピンがアサートされたらセグメントを1に切り替え, インデックスを0に初期化
  2. 要求されたセグメントが0の場合も同様

NOTE: SETTINGSで指定するREPは繰り返し回数であることに注意する.

Gain

このモジュールは, 指定されたインデックスのデータを順次出力するだけである.

Focus

このモジュールはBRAMに書き込まれた焦点の位置データ列から適切な位相を計算して出力する.

焦点の位置データはデバイスにローカルな座標系で表現される. また, 位置データは符号あり固定小数点数で表現される. この単位はである.

このモジュールでは, 焦点位置データと, 振動子の位置データ, 及び, 音速 (SOUND_SPEED, ) から, 振動子の位相を計算する. ここで, 音速の単位は, である. また, 振動子のローカル座標における位置データはあらかじめ計算しておくことができるため, これを専用のBRAMに格納しておく.

NOTE: 振動子の位置データはtr.coeに格納されている.

まず, の間の距離を計算する. また, 音速から波長を計算すると, となる. よって, 位相 と計算できる.

NOTE: に対応することに注意.

NOTE: 音速の単位が複雑なのは以下の理由による. まず, 振動子-焦点間距離の計算において, 各座標の入力値が符号あり固定小数点数なので, その値の二乗値のビット幅はとなる. したがって, 距離の値のビット幅になる. 音速の単位を上記のようにしておくと, 位相の計算の際, 分母の計算が楽になり, その値をの範囲に収められる.

多焦点

Focusモジュールは上記の計算を同時8焦点分行い, 各焦点の位相から, 以下の計算により, 最終的な位相データを求める.

ここで, は焦点の数である.

の計算に関してはの有限値であるため, あらかじめ計算済みのテーブルを用いる. また, の計算も, 計算済みのテーブルを用いる. のテーブルはデータ量を削減するため, の平均値, の平均値に対して, をキーとしている.