スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SystemVerilog:always_combとステートマシン記述

SystemVerilog:always_combとalways @*/@(*)」と似たような話。
すっかりステートマシンとか書いてなくて、少し思い出した。
SystemVerilogの「always_comb」はなかなか素晴らしい。

サンプルコード


 1|typedef enum {WAIT, LOAD, STORE, EXE} state_t;
 2|
 3|// SystemVerilog test_module
 4|module hoge(
 5|  input  logic clk,
 6|  input  logic rstx,
 7|  output state_t state
 8|  );
 9|
10|  state_t next_state;
11|
12|  always @(posedge clk or negedge rstx) begin
13|    if(!rstx) state <= WAIT;
14|    else      state <= next_state;
15|  end
16|
17|`ifdef ALCOMB
18|  always_comb begin
19|`else
20|  always @(state) begin
21|`endif
22|    case(state)
23|      WAIT : next_state = LOAD;
24|      LOAD : next_state = EXE;
25|      EXE  : next_state = STORE;
26|      STORE: next_state = WAIT;
27|    endcase
28|  end
29|
30|endmodule
31|
32|// TestBench
33|module testbench();
34|
35|  logic clk =0;
36|  logic rstx=0;
37|  state_t state;
38|
39|  hoge DUT(.*);
40|
41|  // show task
42|  task show(state_t in);
43|    case(in)
44|      WAIT : $display("--- state = WAIT  ---");
45|      LOAD : $display("--- state = LOAD  ---");
46|      EXE  : $display("--- state = EXE   ---");
47|      STORE: $display("--- state = STORE ---");
48|    endcase
49|  endtask
50|
51|  always #5 clk <= ~clk;
52|
53|  initial begin
54|    #20  rstx = 1;
55|    #100;
56|    $finish();
57|  end
58|
59|  always @(posedge clk) begin
60|    show(state);
61|  end
62|
63|endmodule

always@(state) 実行結果


# run -all 
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---

always_comb 実行結果


# run -all 
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = WAIT ---
# --- state = LOAD ---
# --- state = EXE ---
# --- state = STORE ---
# --- state = WAIT ---
# --- state = LOAD ---
# --- state = EXE ---
# --- state = STORE ---
# --- state = WAIT ---
# --- state = LOAD ---
書いてみて一瞬???ってなってしまった。。。
やっぱり、今後は SystemVerilogで設計したいな。
関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。