GPSDOを作るために周波数カウンタが必要なので、FPGAで実現しようとしています。マイコン内蔵のカウンターではビット数が足りなかったりするので、どうしてもFPGAで作りたいのです。
昨日までに、FPGA開発ツールの簡単な使い方がマスターできたので、次は、VHDLで回路を記述していきたいと思います。まぁしかし、VHDLの勉強をしたのは20年以上前のことなので、殆ど記憶が消去されています。かと言って、一からVHDLの教科書を読むのもかったるいので、ネットでカンニングしながら、簡単なところから記述して、試して行きたいと思います。
WINGONEERのCyclonII FPGAボードには、EEPROMの他、50MHzのクリスタルオシレータや3つのLEDおよび押しボタンスイッチが実装されています。これらのリソースを使って、周波数カウンターで必要となる1秒のゲート信号を作成するために、50MHzクロックから1Hz(正確に言うと0.5Hz)への分周回路を実験しました。
動作状態を確認するために、1秒毎にON/OFFを繰り返す信号をLED(PIN3)に出力します。カウンターのビット数は定義していませんが、rangeを指定することで、コンパイラーは何ビットのカウンターが必要なのか分かるんでしょうね。カウンターの出力が49999999になるのは一瞬(20ns)ですが、ちゃんと期待通りに動作しました。下手にif (CNT >= 49999999) thenなどと記述すると、コンパレータ以外の余分な回路が合成されたりするかもしれないと思って、わざと省略しています。
VHDLでの記述は次の通りです。
![](https://blogimg.goo.ne.jp/user_image/36/73/3ac8457278127fa79339dd662ea1864b.png)
Pin Plannerでのピンアサインは次の通りです。
![](https://blogimg.goo.ne.jp/user_image/73/1f/2411c38b11abb39b17ee2dc92b80c0d4.png)
※コメント投稿者のブログIDはブログ作成者のみに通知されます