Changes
Page history
Update extra
authored
Dec 02, 2021
by
Toru Koizumi
Hide whitespace changes
Inline
Side-by-side
extra.md
View page @
6be2bef3
...
...
@@ -13,15 +13,15 @@
*
難易度:1~4
プロセッサの性能を上げる最も簡単な方法はクロック周波数を上げることです。クロック周波数を上げる
ためには、回路が複雑でないことが要求されます。
Vivadoでクリティカルパス(レジスタからレジスタへの経路のうちで、最も長い遅延を生み出す経路)を
探しながらソースコードを書き換え
ていくことになります。
プロセッサの性能を上げる最も簡単な方法はクロック周波数を上げることです。
回路が複雑だと
クロック周波数を上げる
ことが困難なので、なるべく簡単になるよう、工夫したHDLコードを書く必要があります。どこが複雑になっているかをHDLコード上だけで判断するのは困難なので、基本的には、HDLコードの書き換えと
Vivadoで
合成して
クリティカルパス(レジスタからレジスタへの経路のうちで、最も長い遅延を生み出す経路)を
確認、というのを繰り返し
ていくことになります。
以下に、
大きな高速化ポイント
のヒントを示します。
以下に、
高速化
のヒントを示します。
**
RAM
が大量の分散RAMで構築されている場合、それをBlockRAMに置き換えてみる**
**
命令メモリやデータメモリ
が大量の分散RAMで構築されている場合、それをBlockRAMに置き換えてみる**
*
難易度:1
非常に効果が高いです。シングルサイクルプロセッサだと不可能そうに見えますが、
`negedge`
で駆動
することで可能です(本当は、素直にマルチサイクル化orパイプライン化するのが正しい)。
非常に効果が高いです。シングルサイクルプロセッサだと不可能そうに見えますが、
命令メモリとデータメモリを駆動するクロックタイミング(
`posedge`
や
`negedge`
)を異なるものに
することで可能です(本当は、素直にマルチサイクル化orパイプライン化するのが正しい
ですが
)。
**`always`文で書かれている組み合わせ論理回路を、条件演算子とfunctionに書き換えてみる**
...
...
@@ -36,7 +36,7 @@
Verilog HDL の記述として
`a + b`
などを複数個所に書いてしまうと、書いた数だけの加算器が合成されてしまいます。しかし、それらは同時に使われないことが多いのでもったいないです。加算器への入力を切り替える回路を追加することで、加算器自体は一つだけしか生成されないようにしましょう。
なお、比較演算や減算も加算器に合成されてしまいます。これらも上記唯一の加算器を使って実行できるようにしても面白い
カモ
れません。
なお、比較演算や減算も加算器に合成されてしまいます。これらも上記唯一の加算器を使って実行できるようにしても面白い
かもし
れません。
どこまで資源消費量が少ないプロセッサが書けるでしょうか?
...
...
@@ -51,6 +51,7 @@ Verilog HDL の記述として`a + b`などを複数個所に書いてしまう
*
難易度:4
FPGAの中身がどのような構成になっているかを勉強すると、FPGAが得意なことと不得意なことがあることが分かります。その知識を使って、限界まで周波数を上げてみましょう。
参考:
[
FPGAの詳しい中身
](
FPGAAbyss
)
### パイプライン化
...
...
...
...