Posts Issued in August, 2022

posted by sakurai on August 18, 2022 #497

チャネルとコードの対応

表497.1 音データ、コードとサウンドチャネルの関係
サウンドの説明 CODE番号 サウンドチャネル
ON OFF
自機弾発射音 1 自機音チャネル(#0)
自機爆発音 2
自機増加音 9
インベーダ爆発音 3 インベーダ音チャネル(#1)
インベーダ歩行音1 4 インベーダ音チャネル(#2)
インベーダ歩行音2 5
インベーダ歩行音3 6
インベーダ歩行音4 7
UFO爆発音 8 UFO音チャネル(#3)
UFO飛行音 10 10+16

チャネル起動条件

それぞれのサウンドチャネルは別のFSMにより駆動されます。それらの起動条件を上げると、

  • チャネル0(FSM0) ---- (CODE1_ON || CODE2_ON || CODE9_ON) && !empty
  • チャネル1(FSM1) ---- CODE3_ON && !empty
  • チャネル2(FSM2) ---- (CODE4_ON || CODE5_ON || CODE6_ON || CODE7_ON) && !empty
  • チャネル3(FSM3) ---- (CODE8_ON || CODE10_ON || CODE10_OFF) && !empty
  • チャネル0においてはCODE9_ONの場合、プリエンプション禁止のためfNO9フラグを立てます。
  • 同様にチャネル3においてはCODE10_ONの場合、OFFが来るまで演奏し続けるようにfUFOのフラグを立てます。

チャネル終了条件

それぞれのサウンドチャネルは演奏を終了することがあります。カウンタが0になる場合またはプリエンプションです。具体的な終了条件を上げると、

  • カウンタが0になる (または以下のプリエンプション)
  • チャネル0(FSM0) ---- ((CODE1_ON || CODE2_ON || CODE9_ON) && !empty) && !fNO9
  • チャネル0(FSM0) ---- CODE9_ONの場合はプリエンプション禁止のため、fNO9フラグを見て終了しないようにします。
  • チャネル1(FSM1) ---- CODE3_ON && !empty
  • チャネル2(FSM2) ---- (CODE4_ON || CODE5_ON || CODE6_ON || CODE7_ON) && !empty
  • チャネル3(FSM3) ---- (CODE8_ON || CODE10_OFF) && !empty
  • チャネル3(FSM3) ---- カウントが0で終了した場合、fUFOがTrueの場合はFormat解析等をスキップしてUFOデータの先頭にポインタをセットして再度演奏開始します。
  • 全チャネル(FSM0~3) --- コードがある場合はキューから取り出し先頭に戻ります。

左矢前のブログ 次のブログ右矢

posted by sakurai on August 17, 2022 #496

設計方針

前回のBSVによるサウンドFSMの設計においては、ステートベース設計手法により設計しました。ステートベース設計とは、ここでは一連のフローを、クロックサイクルで定義されるステートに分解し、ステートのルールを一つずつ書いていく手法を指します。ただ、Verilogでも同じ手法で設計するため工数は同じであり、高級言語のご利益はありません。

前回は勉強のために階層化ルールを用いて階層化ステートマシンをステート毎に設計しましたが、今回はシーケンスベースで設計しようと思います。シーケンスベース設計とは、ここではシナリオを人手でステートに分解せずに、BSVに任せることを指します。

使用コンパイラ

ところが、2021年末にアップグレードのため、bscを再コンパイルしたところ(build 9a7d5e05)、Verilog出力が正しくできなくなりました。具体的にはスタックオーバーフローというエラーが出ます。フォーラムで聞いたところソースを送って欲しいとのことでした。

ソースを送って調べてもらいましたが、スタックを広げるコマンドを実行してもエラーが出るらしく、ソースを改善せよとのことです。ソースは巨大なFSMから構成されるため、FSMを分離したいのはやまやまなのですが、教えられた通り実施しても、bscが一個のFSMにまとめようとするためうまく行きませんでした。やむなく、以前のコンパイラ(build 38534dc)を使い続けることにします。

処理フロー

図54.2は以前の記事に示したもので、FSMはこれをデコードし、音声を出力するものです。

図54.2
図54.2 waveフォーマット例

従って、基本的なフローはこのフォーマットどおりのステートベース設計のものを踏襲します。

  • コード待ち ---- FSM0~3に応じたコードを受け付ける)
  • 例外フラグ ---- UFOの場合はONからOFFまでサウンドをならし続ける等の例外への対処
  • コードに応じてROMの先頭+16にポインタを移す
  • フォーマットサイズを取得し、ポインタをフォーマット長分だけ増加
  • "data"をスキップ
  • データサイズを取得しカウンタにセット
  • ポインタをデータの先頭に移す
  • 終了条件でなければループ
  •  音声データを取り出す
  •  データを出力
  •  ポインタを進める
  •  カウンタを1減らす
  • ループ終端

ここで前回は、上記ループ内部において、インターポレーションのため4クロックからなるサウンド出力を4回繰り返していました。が、出力はループ内では変わらないので、16サイクルに1回出力すれば良いことになります。よって上記のループは16サイクルになるように設計します。


左矢前のブログ 次のブログ右矢

posted by sakurai on August 12, 2022 #495

製造(PCBA)費用が安いため、JLCPCBにUltra96toPMODボードを再オーダーしました。グリーン基板はなぜかセットアップやステンシル費用がパープル基板より安いのですが、パープル基板でも他社よりも安いのに加え、今回はクーポン10 USDの割引が使用できるため、今回はパープル基板で製造しました。

図%%.1
図495.1 Ultra96toPMODV10 (表)

図%%.2
図495.2 Ultra96toPMODV10 (裏)

パープル基板とグリーン基板を10枚実装した場合の費用の内訳を示します。グリーン基板のほうが半額近い費用です。

表495.1 Ultra96toPMOD Jlcpcbの費用構成
10枚製造時費用内訳 基板色[USD]
パープル グリーン
PCB Price 5.00
Components(TXS0108EPWR --- 20個) 12.05
Extended Components 0.00 2.93
SMT Assembly 0.68
Setup fee 25.00 8.00
Stencil 8.46 1.50
Feeders Loading 1.35 0.00
合計 53.05 30.16
送料(格安:7~12日) 7.68
合計 60.22 37.84
割引 ▲10.00
総計 50.22 27.84

価格表に示すとおり、SMD部品を2個ずつ実装してもらっても1枚5ドル程度でした。


左矢前のブログ 次のブログ右矢

RAMS 2023 (2)

posted by sakurai on August 3, 2022 #494

記事#482の続きです。

RAMS 2023のプログラムが発表されました。弊社の投稿した論文の枠は、E01(Reliability Modeling 1, グリーンで表示), 2023/1/23の10:15からとのことです。

図%%.1
図494.1 RAMS 2023プログラムマトリクス


左矢前のブログ 次のブログ右矢