インテルのみ表示可能 — GUID: mwh1409959612125
Ixiasoft
1.4.1.1. 同期メモリーブロックの使用
1.4.1.2. サポートされないリセットおよびコントロール条件の回避
1.4.1.3. Read-During-Write動作の確認
1.4.1.4. RAMの推論と実装の制御
1.4.1.5. シングルクロック同期RAM (古いデータでのRead-During-Write動作)
1.4.1.6. シングルクロック同期RAM (新しいデータでのRead-During-Write動作)
1.4.1.7. シンプル・デュアルポート、デュアルクロック同期RAM
1.4.1.8. トゥルー・デュアルポート同期RAM
1.4.1.9. 混合幅デュアルポートRAM
1.4.1.10. バイト・イネーブル信号を備えるRAM
1.4.1.11. 電源投入時の初期のメモリーコンテンツの指定
インテルのみ表示可能 — GUID: mwh1409959612125
Ixiasoft
1.6.4.2.1. Verilog-2001のステートマシン・コーディング例
次のモジュール verilog_fsm は、一般的なVerilog HDLステートマシンの実装例です。 このステートマシンには5つのステートがあります。
非同期リセットにより、変数 state を state_0 に設定します。in_1 と in_2 の合計は、state_1 および state_2 のステートマシンの出力です。これらの差 (in_1 – in_2) もまた、state_1 および state_2 で使用されます。一時変数の tmp_out_0 および tmp_out_1 では、in_1 と in_2 の和および差を格納します。これらの一時変数をステートマシンのさまざまな状態で使用することで、相互に排他的な状態の間で適切なリソース共有を保証します。
Verilog-2001のステートマシン
module verilog_fsm (clk, reset, in_1, in_2, out); input clk, reset; input [3:0] in_1, in_2; output [4:0] out; parameter state_0 = 3'b000; parameter state_1 = 3'b001; parameter state_2 = 3'b010; parameter state_3 = 3'b011; parameter state_4 = 3'b100; reg [4:0] tmp_out_0, tmp_out_1, tmp_out_2; reg [2:0] state, next_state; always @ (posedge clk or posedge reset) begin if (reset) state <= state_0; else state <= next_state; end always @ (*) begin tmp_out_0 = in_1 + in_2; tmp_out_1 = in_1 - in_2; case (state) state_0: begin tmp_out_2 = in_1 + 5'b00001; next_state = state_1; end state_1: begin if (in_1 < in_2) begin next_state = state_2; tmp_out_2 = tmp_out_0; end else begin next_state = state_3; tmp_out_2 = tmp_out_1; end end state_2: begin tmp_out_2 = tmp_out_0 - 5'b00001; next_state = state_3; end state_3: begin tmp_out_2 = tmp_out_1 + 5'b00001; next_state = state_0; end state_4:begin tmp_out_2 = in_2 + 5'b00001; next_state = state_0; end default:begin tmp_out_2 = 5'b00000; next_state = state_0; end endcase end assign out = tmp_out_2; endmodule
このステートマシンと同等の実装を実現するには、parameter データ型の代わりに ‘define を使用します。次に例を示します。
‘define state_0 3'b000 ‘define state_1 3'b001 ‘define state_2 3'b010 ‘define state_3 3'b011 ‘define state_4 3'b100この場合、state_x の代わりに `state_x を state および next_state に割り当てます。次のようになります。
next_state <= ‘state_3;
注: インテルでは 'define コンストラクトをサポートしていますが、parameter データ型を使用し、合成時に状態名を保持することを推奨しています。