Menu
Coddy logo textTech

レジスタアレイによる記憶

CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 22/38。

アンパック配列は、ハードウェアストレージのワードをモデル化できます。クロック付き書き込みは選択された1つのワードを更新し、連続読み出しは読み出しクロックなしでワードを選択します。合成では、小規模な配列がレジスタで実装されたり、サポートされているパターンに対してメモリリソースが推論されたりすることがあります。書き込まれていないワードがゼロで始まるとは決して仮定しないでください。

関連する抜粋です。周辺の宣言と接続は課題内で提供されています。

reg [7:0] mem [0:3];
always @(posedge clk)
    if(we) mem[waddr] <= data;
assign q = mem[raddr];

書き込みはエッジトリガー方式で行われ、読み出しは選択された格納ワードに従います。

書き込みイネーブルと読み出しタイミングを明示的に定義し、未指定のinitialメモリ内容に依存しないでください。

challenge icon

チャレンジ

中級

8ビットワードを4つ実装してください。立ち上がりエッジで、weがデータをmem[waddr]に書き込みます。qはmem[raddr]を非同期的に組み合わせ読み出しします。メモリにはリセットもinitialの内容もありません。テストベンチは、読み出す前に観測対象となる各アドレスへ書き込みを行います。観測はエッジの後に行われるため、同じアドレスへの書き込みはqに反映されます。出力列:q。各立ち上がりクロックエッジの前に、すべての制御信号とデータは安定しています。結果はその後に観測されます。

design.vを完成させ、モジュール名とポートを保持してください。ロックされたtestbench.vは入力を変更し、値が安定した後に出力を表示します。+CASE=1のようなシミュレータ引数を使用してシナリオを選択します。標準入力は必要ありません。設計に表示、遅延、またはシミュレーション終了処理を追加しないでください。期待される出力は、観測ごとに10進値を1行に並べたもので、値は1つのスペースで区切り、最後を改行で終えます。

自分で試してみよう

module dut (input clk, input we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
    // このプレースホルダーを自分の設計に置き換えてください。
    assign q = 0;
endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

RTL設計と検証のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ