非同期確認2
前回気になった以下の2点の確認。
- クロック変換するスレーブが複数いた場合クロック変換モジュールはスレーブごとに作られるのか、クロックドメインごとか
- クロック変換モジュールはQsysのコンポーネントとして作成することもできるが、暗黙的に生成されるものと差はあるか
前回と同じデザインを使い、今回は8個あるペリフェラルをIO用の低速クロックからプロセッサ用のクロックにつなぎかえてロジック数の変化を見る。
Handshake TypeはAutoで固定で、SDRAMとプロセッサクロックはまだ別のまま。
8個IO用クロック・0個プロセッサクロック
- Total logic elements 5,071 / 22,320 ( 23 % )
- Total combinational functions 3,683 / 22,320 ( 17 % )
- Dedicated logic registers 3,639 / 22,320 ( 16 % )
- Total registers 3708
- Total memory bits 412,672 / 608,256 ( 68 % )
7個IO用クロック・1個プロセッサクロック
- Total logic elements 5,030 / 22,320 ( 23 % )
- Total combinational functions 3,666 / 22,320 ( 17 % )
- Dedicated logic registers 3,585 / 22,320 ( 16 % )
- Total registers 3654
- Total memory bits 412,672 / 608,256 ( 68 % )
4個IO用クロック・4個プロセッサクロック
- Total logic elements 4,720 / 22,320 ( 21 % )
- Total combinational functions 3,526 / 22,320 ( 16 % )
- Dedicated logic registers 3,285 / 22,320 ( 15 % )
- Total registers 3553
- Total memory bits 412,672 / 608,256 ( 68 % )
1個IOクロック・7個プロセッサクロック
- Total logic elements 4,568 / 22,320 ( 20 % )
- Total combinational functions 3,448 / 22,320 ( 15 % )
- Dedicated logic registers 3,122 / 22,320 ( 14 % )
- Total registers 3191
- Total memory bits 412,672 / 608,256 ( 68 % )
8個IOクロック・0個プロセッサクロック(Avalon-MM Clock Crossing Bridgeをインスタンス化)
- Total logic elements 4,629 / 22,320 ( 21 % )
- Total combinational functions 3,515 / 22,320 ( 16 % )
- Dedicated logic registers 3,191 / 22,320 ( 14 % )
- Total registers 3260
- Total memory bits 412,868 / 608,256 ( 68 % )
わかったことは以下の通り。
- クロックドメインに参加するペリフェラルの数を減らした時のLE減少量がクロックドメイン自体をなくした時より少ない
- スレーブごとにではなくクロックドメインごとに同期制御回路が生成される
- スレーブ→マスタの同期用のデータFF(MUXシンクロナイザ)が挿入されるが、そのFFはスレーブごとに作られる?
- Avalon-MM Clock Crossing Bridgeはクロックの切り替え機能に加え、アドレスビット数を調整する機能がある
- 32bitアドレスを延々引き回すのではなく、必要な分だけのアドレスを振れる
- そのおかげか、ロジック量は減っている
- ブリッジ内にFIFOを持っているらしいが、こちらはFPGAのRAMで実装されているみたい(memory bitsが増えている)
- クロック載せ替えはQsysのGUIに任せるより、ブリッジをインスタンス化して最適な設定にした方が小さくなりそう
ということで、ペリフェラルはクロックを載せ替えるついでにアドレスビット数を少なくする(こっちがメイン?)べき。