コンテンツにスキップ
これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.9.x を参照.

Emission

Emission モジュール
Name In/Out Width Description
CLK In 1 メインクロック
PATTERN_SETTINGS In -
├─ UPDATE In 1 設定更新フラグ
├─ REQ_RD_BANK In 1 要求読み込みバンク
├─ MODE[n] In 1 第 n バンクの出力タイプ
├─ CYCLE[n] In 16 第 n バンクの周期 - 1
├─ FREQ_DIV[n] In 16 第 n バンクの周波数分周比
├─ REP[n] In 16 第 n バンクの繰り返し回数 - 1
├─ SOUND_SPEED[n] In 16 第 n バンクの音速
├─ NUM_FOCI[n] In 8 第 n バンクの焦点数
├─ TRANSITION_MODE In 8 遷移モード
└─ TRANSITION_VALUE In 64 遷移値
SYS_TIME In 57 システム時刻
UPDATE In 1 超音波周期トリガ
GPIO_IN In 4 GPIO 入力
INTENSITY Out 8 強度
PHASE Out 8 位相
DOUT_VALID Out 1 強度/位相データ有効フラグ
EMISSION_BUS In - Emission データメモリバス
OUTPUT_MASK_BUS In - Output Mask データメモリバス

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

出力タイプ (MODE) はバンク毎に 2 種類ある.

  • EMISSION_TYPE_RAW: 振動子毎の強度/位相をそのまま BRAM から読み出す
  • EMISSION_TYPE_FOCI: 焦点の位置データから位相を計算する

UPDATE (超音波周期トリガ) を起点に, Swapchain が決めたバンクとインデックスのデータを 1 周期分読み出し, 249 振動子分の強度/位相を順次出力する.

このサブモジュールは, システム時刻, 周期 , 周波数分周比 から, 現在読み込むべきデータのインデックスを計算する. インデックス は

として計算される. SYS_TIME は でカウントアップされるため, データのサンプリング周波数 は

となり, はこの周波数で から まで周期的にカウントアップされる.

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

このサブモジュールはバンクの切り替えを制御する. 挙動は Modulation の Swapchain と同一である.

STOP がアサートされている間, Emission はバンク及びインデックスを更新せず, 最後にサンプルしたデータを出力し続ける.

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

なお, Emission BRAM は後述のFocusサブモジュールのために読み出し側が 幅となっている点に注意.

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

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

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

まず, と の間の距離を計算する.

また, 音速 から波長 を計算すると,

となる. よって, 位相 は

と計算できる.

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

ここで, は焦点の数 (NUM_FOCI) である.

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

出力する強度は第 0 焦点のデータに含まれる強度フィールドである. 第 1 焦点以降の同フィールドは強度ではなく, その焦点に加算する位相オフセットとして扱われる.

Output Mask サブモジュールは Raw, または, Focus サブモジュールからの出力を, マスクデータに基づいて, 超音波を出力するか否か (強度を 0 にするか否か) を制御する. マスクデータは (振動子毎に 1 bit) の単一領域であり, バンクによらず同じマスクが適用される.

Raw は振動子毎に強度を設定できるため, 基本的に Focus サブモジュールからの出力を制御する目的で使用される.