LatticeXP2入門 その5 EBRメモリーを手動で設定する
myDDSでEBRを使う。 myDDS:out=100KHz
1.EBRメモリーを手動で設定する 私のmyDDS、verilogHDL記述では、romデータのEBRメモリーへの配置を、ispLEVERが自動設定してくれたのですが 必ずしも、自動設定してくれる訳ではありませんので ここは、ひとつ、EBRメメモリーを手動で設定してみましょう。 |
2.先ず、PLLの設定から IPexpressを使って、PLLを設定します。 ここで、Import LPC to ispLEVER projectに、チェックを入れておきます。 3.EBRを設定する これも、IPexpressを使います。 10bit address 20bit dataを設定 同じく、Import LPC to ispLEVER projectに、チェックを入れておきます。 そうしますと、projectに、ispLEVERが自動配置してくれます。 4.DDSのverilogHDLを記述する まあ、私の場合、こんな風な記述になりました。 regの初期値なんですが、 reg cy_out=0; なんて、記述が可能です。(今まで、 inital begin ...... end内に記述していたのですが、こっちのほうが便利ですね。) |
5.sin_romを読むタイミングの設定 「わかる VerilgHDL入門 木村先生 CQ出版」で、少し、勉強しました。 印象に残ったのは、シーケンサの場合 ミーリータイプの場合、出力信号が、非同期に変化することがある。(ムーアータイプでは、同期に変化する) と、言う事です。 romを読む場合、そんなに難しい設定には、なりませんでした。 先ず、LitticeXP2のhandbookで、romを読むタイミングを調べましょう。 これを見ますと OutClockEnは、データを読み出している間は、ずっと 1の値。 Addressの設定は、OutClockEnを1に設定しておいて、クロックの neg edgeで行う。 読み出すデータは、address設定後、 次の neg edge で読み出せる。 と、まあ、予測しました。 で、これを、ACtive-HDLで確かめました。 クロックの neg edgeで、addressを設定すると、次の neg edge で、rom dataを読み出す事ができます。 それ故、この部分の verilogHLD記述は、以下のように、なったのです。 尚、テストベンチは、以下のような記述(例によって、ispLEVERのtemplate作成機能の、お世話になった。) 注意点は、Active-HDLを使う時 PUR PUR_INST(.PUR(1'b1)); GSR GSR_INST(.GSR(1'b1)); なる、おまじないが必要な事です。 これは、PowerOn時の、set/reset等に関係する事らしいです。 |
以上の設定で、myDDSは、機能しました。
尚、projectをbuildする場合、ispLEVERのDesign
Plannerで、設定を確かめておきましょう。
尚、Lattice純正download
cableを使って、ispVMで書き込むと
この規模の記述で、約14秒要した。
6.ispLEVERのReportで確かめる
ERROR: Un-supproted
device!と、出ると、心臓に悪いですが、影響ないようです、ホッ。
なんとか、いけてるようですね (^_^)
H.21.6.1