複数のプログラムファイルでvelirog HDL

DE0-nanoに内蔵されている発振器をつかって1秒ごとにLEDを点消灯させるプログラムを作りました。

くっそ簡単なことなのですが、自分にとってはこれだけで苦労して取り組みました。悲しいです。

 

Quartus ii でFPGAプログラム作成はいままでやってきましたが複数ファイルでの論理合成というかプロセスのコンポーネント化ができなかったので出来るようになって一安心です。これができないとプログラムの流用もできないので。(コピペすれば良いですがスマートじゃないので)

 

詰まったポイントを以下に

 

  • 宣言のミス
  • top-level entityの設定
  • ピンアサイン

 

 

まず、構成の仕方としては以下のイメージですね。

信号反転のプログラムの中で1Hz信号生成のモジュールを呼び出し、処理結果を戻してLEDに反映させるという流れです。

 

f:id:ksy3939:20160728124705p:plain

ONOFFとCNT1HZというVelirogを作成しました。ここで注意したいのは外部モジュールとの接続です。Cで言うところのプロトタイプ宣言でしょうか。この感覚がセンスなさそうですが。外部モジュール内で使う信号はwireを使って宣言するようです。また、ONOFF中で定義したinput,output信号は宣言無しで使っています。

 

ここで詰まったというかコンパイルが引っ掛かったポイントがありました。

  • 宣言のミス

ONOFF内で扱う信号paraの宣言をwireにしていました。このあたりの扱いがまだ拙いですが、どうやらwireはモジュール間の接続だけに使うようです。

 

f:id:ksy3939:20160728125340p:plain

次に

  • top-level entityの設定

 

ですが、階層の上位中で下位の階層モジュールを接続するという感じなのでtop-level entityを定義する必要があるようです。以下のようにentityを選択できます。

f:id:ksy3939:20160728130314p:plain

最後に

  • ピンアサイン

ですが、これはCLKはどこにつなげれば良いのか考えましたが公式リファレンスに書いてありました。R8みたいですね。

 

以上。Quartus iiの初歩の初歩の初歩でした。