OSQZSS

オープンソース準天頂衛星(QZSS)受信機

MMCMの追加

2023-11-06 11:37:50 | FPGA
Namuru-Nanoでは、IF信号をサンプリングするクロックを6逓倍して
システムクロックとし、サンプリングクロックはenable信号にするという
少しトリッキーな実装をしています。

これは、オリジナルのNamaruのコードをできるだけ変更しないための
苦肉の策ですが、とりあえずこのままポートします。

Namuru-Nanoでは、システムクロックの生成にNios IIのPLLを使っていましたが、
ZynqではClocking Wizardを使って、MMCMを追加します。



クロック入力の周波数は、とりあえずNamuru-Nanoと同じ16.368MHzとし、
それを6逓倍した90.208MHzのシステムクロックと、そのままのenable信号を
出力します。







生成されたIPコアは、トップモジュールに組み込みます。
フロントエンドから供給されるサンプリング信号s_clkを入力とし、
システムクロックのclkと、enable信号のsample_clkを出力します。
MMCMのlocked信号も、basebandモジュールのリセット信号に追加しています。



次は、basebandモジュールをIP化して、AXIバスに繋げよう。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Namuru-NanoのIPコア

2023-11-05 08:52:45 | FPGA
Namuru-NanoのbasebandのHDLをVivadoで合成してみると、当然、
AlteraのIPであるlpm_counterとlpm_shiftregが未定義とエラーが出ます。



lpm_counterは、Xilinx LogiCORE IPのbinary counterに置き換えられそうでしたので、
VivadoのIPカタログからbinary counterを開き、各種パラメータを設定します。

VivadoでのIPコアの使いかたは、こちらを参考にしました。
ACRi:FPGA をもっと活用するために IP コアを使ってみよう (2)

Binary CounterのComponent Nameは、Altera IPと同じlpm_counterにします。
Output Widthは24ビット、Loadableを有効にし、Count ModeはDOWNです。
Synchronous Clearも有効にします。





設定ダイアログのOKをクリックして閉じると、Generate Output Productsの
ダイアログが開きます。GenerateをクリックしてIPコアを合成します。



IPコアのモジュールが準備できたら、SourcesペインのIP Sourcesタブから、
テンプレートファイル(.veo)を開きます。



このインスタンス生成のテンプレートを、もとのソースコードにコピーして、
入出力ポートの信号を接続します。



一方、lpm_shiftregは、ちょうど置き換えれるようなIPが見当たりません。
そのため、こちらはモジュールのHDLコードを追加します。



これで、Run Synthesisを実行すると、errorもwarningもなしで、合成が完了します。



P.S. Binary Counterの設定画面を見ると、Final Count Valueが1からFFFFFEまでしか選べません。
0までカウントダウンしてくれないのでしょうか?それとも、Restrict Countを有効にしなければ、
0またはFFFFFFがFinal Count Valueになるのでしょうか?別途、テストベンチを組んで確かめよう。

P.P.S. 8ビットのBinary Counterを作成して、テストベンチで動作を確認してみました。
lpm_counterと同様に、loadされた値から0までカウントダウンしてくれるようです。





コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Namuru-Nanoの移植

2023-11-04 13:45:33 | FPGA
10年以上も前に、NamuruのHDLコードをAlteraのDE0-Nano+MAX2771の
組み合わせに移植しています。

https://blog.goo.ne.jp/osqzss/e/e088b635bc33084117b7e9606316a569

すっかり放置しており、細かなところを忘れていますが、HDLに関しては
ほぼこのままZynqベースのPocketGNSSに移植できるかと思います。

CPUがソフトコアのNios IIから、Zynq内蔵のARMに変わりますので、
バス回りは調整が必要です。FPGAに実装される相関器が汎用的に使えるよう、
相関器とCPUとのインターフェイスはSPIなどにした方が良いかもしれません。

オリジナルのNamuru-NanoのソースコードをGoogle Driveにソースコードを
アップしましたので、興味のある方は開発に参加してもらえると嬉しいです。

https://drive.google.com/drive/folders/141BSfAa7lHga43nRK0nXX9STol0DK0OE?usp=sharing
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする