非同期確認

動くかどうかは別として、非同期によるLEのロスを確認する。
現在は以下のクロックドメイン間でAvalonインターコネクトが接続されている。

  • プロセッサ・オンチップメモリ(160MHz)⇔SDRAMコントローラ(120MHz)
  • プロセッサ・オンチップメモリ⇔IOペリフェラル(10MHz)
  • プロセッサ・オンチップメモリ⇔terasic製IP(50MHz)

今回はSDRAMとプロセッサ間の接続を変化させてP&Rを行ってみる。
SDRAMコントローラをプロセッサクロックにつなぐか、SDRAMクロックにつなぐかで制御する。
実際にはSDRAMの動作限界を超えるので動作しないが、切り替えるポイントが1点なのでこちらを繋ぎかえることにした。

プロセッサとSDRAMコントローラが別クロック(Clock Crossing Adapter Type:Auto)

  • Total logic elements 5,079 / 22,320 ( 23 % )
    • Total combinational functions 3,684 / 22,320 ( 17 % )
    • Dedicated logic registers 3,641 / 22,320 ( 16 % )
  • Total registers 3710
  • Total memory bits 412,672 / 608,256 ( 68 % )

プロセッサとSDRAMコントローラが別クロック(Clock Crossing Adapter Type:Handshake)

  • Total logic elements 5,078 / 22,320 ( 23 % )
    • Total combinational functions 3,693 / 22,320 ( 17 % )
    • Dedicated logic registers 3,643 / 22,320 ( 16 % )
  • Total registers 3712
  • Total memory bits 412,672 / 608,256 ( 68 % )

プロセッサとSDRAMコントローラが別クロック(Clock Crossing Adapter Type:FIFO)

  • Total logic elements 9,813 / 22,320 ( 44 % )
    • Total combinational functions 6,590 / 22,320 ( 30 % )
    • Dedicated logic registers 7,800 / 22,320 ( 35 % )
  • Total registers 7869
  • Total memory bits 412,672 / 608,256 ( 68 % )

プロセッサとSDRAMコントローラが同じクロック(Clock Crossing Adapter Type:Auto)

  • Total logic elements 4,644 / 22,320 ( 21 % )
  • Total combinational functions 3,551 / 22,320 ( 16 % )
  • Dedicated logic registers 3,118 / 22,320 ( 14 % )
  • Total registers 3187
  • Total memory bits 412,672 / 608,256 ( 68 % )

プロセッサとSDRAMコントローラが同じクロック(Clock Crossing Adapter Type:Handshake)

  • Total logic elements 4,670 / 22,320 ( 21 % )
  • Total combinational functions 3,548 / 22,320 ( 16 % )
  • Dedicated logic registers 3,126 / 22,320 ( 14 % )
  • Total registers 3195
  • Total memory bits 412,672 / 608,256 ( 68 % )

プロセッサとSDRAMコントローラが同じクロック(Clock Crossing Adapter Type:FIFO)

  • Total logic elements 7,996 / 22,320 ( 36 % )
  • Total combinational functions 5,624 / 22,320 ( 25 % )
  • Dedicated logic registers 5,995 / 22,320 ( 27 % )
  • Total registers 6064
  • Total memory bits 412,672 / 608,256 ( 68 % )

P&Rはヒューリスティックな方式で行っているようで、Total memory bits以外のリソース数は同じ条件でも±10個ぐらいの変動があった。
アルゴリズムのシード値を固定して、同じ入力なら同じ結果になるような方法がXilinxではあった気がするが、Alteraは不明。
わかったことは、以下の通り。

  • Autoは負荷に応じてアルゴリズムを決める設定らしい、今回は全部Handshakeと判断された様子(FIFOが要るようなバースト転送するマスタが居ないから?)
  • FIFOのメモリはメモリブロックではなくLEのFFで行っている様子
  • Handshakeタイプは概算で400LE程度消費
  • FIFOタイプは概算で1800LE程度消費
  • FIFOは明らかに実装として重い

これを踏まえて、以下の改変を行う。

  • Clock Crossing Adapter TypeはAutoのまま
  • PLLのクロック系統を見直して、SDRAMとプロセッサは同じクロックで動くようにする

以下は追加で確認が必要。

  • クロック変換するスレーブが複数いた場合クロック変換モジュールはスレーブごとに作られるのか、クロックドメインごとか
  • クロック変換モジュールはQsysのコンポーネントとして作成することもできるが、暗黙的に生成されるものと差はあるか