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