FPGA

更新日: 2021-02-22

CPUとFPGAのバス接続

CPU-FPGA間のバス接続#

CPUからFPGAのレジスタを読み書きする場合を考える。

外部接続バス#

CPUの外部バスタイミングは下記の通り(RA6M3のデータシートから抜粋)。

Parameter Symbol Min Max Unit
Address delay tAD - 12.5 ns
CS delay tCSD - 12.5 ns
RDn delay tRSD - 12.5 ns
Read data setup time tRDS 12.5 - ns
Read data hold time tRDH 0 - ns
WRn delay tWRD - 12.5 ns
Write data delay tWDD - 12.5 ns
Write data hold time tWDH 0 - ns

見ての通り、CPUから出力される信号はクロックの立ち上がりと同期しているので、FPGA側の設計は簡単です。wrがhighになっているときにdataをclkでラッチしてあげれば良い。このタイミングだと2回ラッチすることになるが、問題にならないことが多いだろう。

...

FPGAへのリセット信号

リセット#

リセットには大きく分けて3種類ある。

  • 同期リセット
  • 非同期リセット
  • 同期非同期リセット (INTEL FPGAに推奨)

同期リセット#

完全に同期にリセットされる。リセットタイミングが同一になるので設計が簡単になる。デメリットはリセットのタイミングがclkに同期するので、リセットのタイミングが遅い事。リセットタイミングが遅くても良いのであれば、一番良い選択肢になりうる。

...

FPGA設計の基本

同期設計の基本#

同期設計 の基本は下記3点。

  • FFのCLK端子にはCLKのみを入れる

svg

  • CLK信号はFFのCLK端子のみに入れる

svg

  • 組み合わせ回路でループを作らない

svg

...

クロックの分周

クロックの分周#

よく源振クロックを分周して1/Nされたクロックを生成することがある。クロック生成の方法と注意点を見ていくことにする。

PLLを使用する#

これば最も推奨される方法となる。FPGAの内部にはPLLが内蔵されており、入力クロックから比較的自由にクロックを生成することが出来る。可能な限りこのクロックを使用するようにする。PLLで生成されたクロックは元のクロックと同期しているため、タイミング検証が容易である。

...

シンクロナイザ

シンクロナイザ#

非同期のクロック間のデータ転送にはある種のテクニックが必要となってくる。

非同期クロック間のデータ転送問題#

何も考えずにデータを転送した場合に発生する問題は大きく分けて二つある。互いに非同期なクロックclk_aからclk_bへ1bitの信号を転送する場合を考える。

...

開発環境(Quartus + VS Code)の構築

エディタ#

Quartus Primeの内蔵エディタではなく使い慣れたエディタを使う。下記はvs codeを使用する例。

"C:\Users\<username>\AppData\Local\Programs\Microsoft VS Code\Code.exe" --goto %f:%l

回路図エディタのフォント#

デフォルトのフォントだとゼロとオーの区別がつかないなど視認性に問題がある。このためフォントを変更する。

...