SPI(マスタ側)対向モデルの記述例
対向モデルのSPI(マスタ側)の記述例です。
このモデルもUART同様、モデル内のACパラメータ(real)とタスクを実行する構成となっています。
タイミング
先にタイミング図を示します。
このSPIは、CSがネゲート時、CK(シリアルクロック)はLowとなり発振しません。
データもMSBファーストで通信します。
tsCS
SPIデータシートによくあるAC特性だと思います。
後述の記述例では、10nsとしています。
thCS
SPIデータシートによくあるAC特性だと思います。
後述の記述例では、10nsとしています。
tcCK
SPIデータシートのクロック周波数やHigh幅+Low幅となります。
MOSIの確定周期と同等となります。
tsMO
SPIデータシートのデータセットアップ時間に当ります。
これは、tpCKまたはtnCKと同等となります。
tpCK
CK周期の変化からCKが立ち上がり時間となります。
tnCK
CK周期の変化からCKが立ち下がり時間となります。
tlMI
CK周期の変化からMISOのデータを取り込むタイミングを時間で指定します。
考え方
データの変化点から tsMO分遅延してCKが変化する考え方になります。
記述例
以下に記述例を示します。
8行目から17行目までが上位階層で変更可能な設定値となります。
また、22行目のP_SPI_BITは1回(CS↓からCS↑)の転送ビット数となります。
CS動作
CSアサートがLowの時、16行目をHigh(現在の値)にします。
アサート論理がHighの場合は、Lowにしてください。
これは、CSの初期状態を設定するもので、33行目と50行目で反転させます。
CK動作
初期状態は17行目で設定します。これは、CSがネゲート状態時の論理となります。
動作中は、36~42行目のfork join文内で実行されます。
Low → High → Lowと動く場合の例となり、High → Low → Highとなる場合は、17行目のHighに設定し、tpCKとtnCKを逆の設定にすることで逆になります。
MOSI動作
初期値は不定値です。
動作中は、36~42行目のfork join文内で実行されます。
タスクAcSPIの引数TxDataをMSBファーストで出力します。
不定値やHi-ZなどもTxDataに代入しておくことでそのまま出力します。
MISO動作
本対向モデルの入力値になります。
tlMIのタイミングでRxDataに代入します。
タスクAcSPIを呼び出し時、引数RxDataの必要なビットを上位階層で使用できるようにタスク内では処理はしていません。
最後に
forkjoin文を使うことにより、自由にCKのエッジを変更しています。
タスクも準備しておき、上位階層(呼び出し元)で自由に使用できるようにしています。