Sourcesウィンドウにて, 右クリック → 新規ファイル → Verilog Test Fixtureと選択すれば, テスト対象モジュールを指定することができます.
インスタンス名をuutとして, 自動的にテンプレートを作ってくれるので手を抜くには便利です.
とはいえ, テキストエディタで先にパターン作っていたので, 殆ど流用できずに終わりましたが...
テストを行うmodule宣言では, 引数の宣言は不要です.
ex.
module TST_BSC;
モジュールの入力に対しては regで変数を作成, 出力に対してはwireで変数を作成.
bidirectionalについては, reg/wireを作ってassign文でtri-stateを作っておきます(これでいいんだよなぁ?)
wire [15:0] D;
reg SH_OE ;
reg [15:0] SH_DATA_OUT ; // OUT means from test-module to FPGA
assign D = (SH_OE ? SH_DATA_OUT : 16'hZZZZ);
データシート(Rev.4.0 2008年3月27日, rjj09b0026_sh7144.pdf)を参照し,
26.3.4 バスタイミングのあたりを注視します.
ちなみに, どこぞのIF誌で外部SRAMのタイミング検討はアクセスサイクルが十分だからOKといった記述がありましたが,個人的には納得できません.
RD/WR信号とデータ・アドレスのアサートタイミング、セットアップ・ホールドタイムについての検討が説明されていないからです.
動作クロックφ(CK)との関連が示されていますが, このクロックに同期させればOKというわけではなさそうです.
最大遅延25nSecとか28nSecとか, すでに1クロック過ぎているじゃありませんが... どう考えても1waitは必須です.
詳細は割愛しますが, とりあえず 1wait必須, 場合によっては連続アクセスウェイトも入れてやる必要がありそうです.
CSアサートの遅延機能は使用せずにすみそうですね.
さて, コレを元にWRITE時の試験データを作りましょう.イロイロと考えてパターンをふるべきですが, とりあえずイチバンきつそうなWRアサート期間の短いものを作ってみましょう.
条件
- BUS wait cycle = 1
- CSアサート期間拡張機能無効
このとき, テストはこんな感じになるハズ.. と, datasheetと睨めっこしていると 少し疑問が.悪いほう悪いほうに考えて居れば良いだろうナ.
# 0 // CK upedgeとみなす.
SH_OE <= 0;
# 25
SH_ADR <= 22'h000088; // "t_AD" ADR fixed Max.25nSec from 1st CK-up
SH_DATA <= 16'h0008; // こっちはついで.
# 3 //+28 // "t_CSD1" CS assert Max. 28nSec from 1st CK-up
SH_nCS <= 0;
# 7 //+35 // (SH_CLK/2) + Max.25 // "t_WSD" WR assert Max. from 1st CK-down + 25nSec
SH_nWRH <= 0;
SH_nWRL <= 0;
# 5 //+40 // (SH_CLK/2) + Max.30 // "t_WDD" Data drive Max. from 1st CK-down + 30nSec
SH_OE <= 1;
# 10 //+50,75 // WR disassert "t_WSD2"<25 => (1.5+1)*20 +0/+25 = 50-75 from 1st CLK-up T2終了までにdisassertされるのが普通? 75だと+15..
SH_nWRH <= 1;
SH_nWRL <= 1;
# 5 //+55,80(Tidle挿入せよ) // "t_WR" >5 CS disassert (FPGAでサンプリングできない?ケース)
SH_nCS <= 1;
# 5 //+60, 3cycle終了
SH_OE <= 0; // T2終了時+0以上でdisassert
XSTのシミュレーションで確認すると, 下記のような結果を得ることができました.波形を出すまでに module群の修正を行っていたので, 結構な時間を要しました...
途中で別の記事(書評/AA作成/LIVE FORMULA鑑賞)なんぞを平行していたせいもありますが.
配置配線後のまっとうな(?)シミュレーションではないので, あくまでも記述上問題がないという確認だったはず.
配置配線後のシミュレーションをやっておかないと, SetUp/Hold timeの不足がある場合は不定にしてくれたはず...ろくすっぽmanualも見ずにかなり昔の記憶で触っているのが酷いかな. XC9500シリーズで遊んでいた頃まで遡るわけで.
時間も時間なので, ひとまずここまで. 本当に手ぶらで行くことになりそうだなぁ. それは非常に負けた感がするな.