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

Memory

このモジュールは BRAM を集めたモジュールである.

CPU から見たアドレス () の内, 上位 (BRAM_SELECT, params.svh の bram_select_t) で領域を区別する. 残りの下位 が各領域内のアドレスになる. ただし, Modulation / Emission BRAM は上位 だけで選択され, 下位 が BRAM 内のアドレスになる.

上位 8 bit 領域 備考
0x00 Controller Main BRAM 制御フラグ・各種設定値
0x01 Phase Correction BRAM 振動子毎の位相補正値
0x02 Output Mask BRAM 振動子毎の出力マスク
0x03 Flash レジスタ コンフィグレーション用 SPI フラッシュの操作 (FPGA OTA)
0x04-0x05 Flash バッファ フラッシュへの書き込みデータ (1024 byte)
0x06 Pulse Width Encoder Table BRAM 強度 → パルス幅の変換テーブル
0x07 CPU ウォッチドッグ レジスタ 後述
0x08 同期位相ロック レジスタ 0x00 の bit 0 が細調整の有効フラグ (既定 1). Synchronizer 参照
0x40-0x7F Modulation BRAM ページ拡張あり
0x80-0xBF (未使用)
0xC0-0xFF Emission BRAM ページ拡張あり

Modulation / Emission BRAM はそのままだと書き込みアドレスが足りないので, Controller Main BRAM 内の特定のアドレス (ADDR_MOD_MEM_WR_PAGE (0x21), ADDR_PATTERN_MEM_WR_PAGE (0x51)) に書き込まれたページ番号をアドレスの上位に付加することでアドレスを拡張している. また, Modulation / Emission BRAM は, 書き込むバンクの選択も Controller Main BRAM 内の特定のアドレス (ADDR_MOD_MEM_WR_BANK (0x20), ADDR_PATTERN_MEM_WR_BANK (0x50)) に書き込まれたバンク番号により行う.

BRAM 書き込み幅 読み出し幅 バンク 備考
Controller Main 16 16 - 256 語
Phase Correction 16 8 - 書き込み側 128 語
Output Mask 16 256 - 16 語 (256 bit) の単一領域. バンクによらない
Modulation 16 8 2 ページ 1 bit. バンク毎に書き込み側 32768 語
Pulse Width Encoder Table 16 16 - 256 語. 下位 9 bit を使用
Emission 16 64 2 ページ 4 bit. バンク毎に書き込み側 262144 語

CPU から読み出せるのは Controller Main BRAM, Flash レジスタ, CPU ウォッチドッグ レジスタ, 同期位相ロック レジスタだけである.

CPU のメインループの停止 (ハング, リセット中, デバッガによる停止など) を検知して, 出力を止める機能である (watchdog/cpu_watchdog.sv).

アドレス 名前 意味
0x00 KICK 書き込むと経過時間を 0 に戻す
0x01 TIMEOUT タイムアウト (ms). 0 で無効 (既定)
0x02 RELEASE 書き込むと発火状態を解除する
0x03 STATE 読み出し専用. bit 0 が発火中, bit 8-15 が発火回数 (255 で飽和)

TIMEOUT が 0 でなく, 最後の KICK から TIMEOUT ms 経過すると発火する. 経過時間はメインクロックで数える (CPU が止まると CPU_CKIO も止まり得るため). 発火中は, Controller の FAILSAFE ビットと同様に, すべての振動子の強度を 0 にする (Emission の Output Mask を参照).