... | @@ -4,7 +4,15 @@ RAM の書き方 |
... | @@ -4,7 +4,15 @@ RAM の書き方 |
|
Verilog HDL で順序回路を書いてシミュレーションが成功しても、必ずしもそれが FPGA で実現できるとは限りません。
|
|
Verilog HDL で順序回路を書いてシミュレーションが成功しても、必ずしもそれが FPGA で実現できるとは限りません。
|
|
FPGA で実現できる順序回路を書くためには、(Verilog HDLで許される文法より狭い範囲である)特定の書き方をする必要があります。
|
|
FPGA で実現できる順序回路を書くためには、(Verilog HDLで許される文法より狭い範囲である)特定の書き方をする必要があります。
|
|
|
|
|
|
以下の書き方をするように心がけてください。
|
|
合成ツールがわかるような"合言葉"を使わないといけないということです。
|
|
|
|
Verilog HDL の記述方法として許されていたとしても、独自の書き方をするのではなく、以下の書き方をするように心がけてください。
|
|
|
|
|
|
|
|
## いつ RAM が使えるのか・いつ RAM を使うべきか
|
|
|
|
|
|
|
|
配列(同じ型のデータが複数エントリ含まれるようなデータ構造)で、**全エントリが同時に読み出されることはない**もの(実際には、**ごく少数の**エントリしか同時に読み出されることはないようなもの)は、RAM にできれば FPGA 上の資源を節約することができます。
|
|
|
|
実験で制作するような CPU であれば、命令メモリ・データメモリ・レジスタファイル、の三つがこれに該当するでしょう。
|
|
|
|
|
|
|
|
似て非なる例として、プログラムカウンタ(PC, 32bit)を保持するレジスタなどが挙げられます。1bitのデータが32個並んでいるようにも見えますが、全エントリ(=全ビット)が同時に読み出されるので、RAM にはできません。こういったものはフリップフロップで作るしかありません。
|
|
|
|
|
|
## RAM の種類
|
|
## RAM の種類
|
|
|
|
|
... | @@ -63,9 +71,10 @@ FPGA 上で RAM を構成する方法には、フリップフロップ、分散R |
... | @@ -63,9 +71,10 @@ FPGA 上で RAM を構成する方法には、フリップフロップ、分散R |
|
|
|
|
|
port 数の増やし方は、分散RAM の時と同様ですが、2つまでしか増やせません。
|
|
port 数の増やし方は、分散RAM の時と同様ですが、2つまでしか増やせません。
|
|
|
|
|
|
### バイトマスク付きライト
|
|
## バイトマスク付きライト
|
|
|
|
|
|
ブロックRAMは、一部の要素のみ書き込むという使い方もできます。サブワード書き込み命令の実装に利用できます。
|
|
一部の要素のみ書き込むという使い方もできます。サブワード書き込み命令の実装に利用できます。
|
|
|
|
以下は、バイトマスク付きライト機能が追加されたブロックRAMの書き方です。
|
|
|
|
|
|
```verilog
|
|
```verilog
|
|
module ram(clk, we, r_addr, r_data, w_addr, w_data);
|
|
module ram(clk, we, r_addr, r_data, w_addr, w_data);
|
... | | ... | |