VOOZH about

URL: https://qiita.com/Shi05yu/items/09d07f0d8dd2e3e6a7ad

⇱ 【SystemVerilog】テストベンチのタイムスケールについてのメモ #Verilog - Qiita


👁 Image
1

Go to list of users who liked

0

Share on X(Twitter)

Share on Facebook

Add to Hatena Bookmark

More than 1 year has passed since last update.

@Shi05yu

【SystemVerilog】テストベンチのタイムスケールについてのメモ

1
Posted at

モジュールとテストベンチ

systemverilogで状態遷移するモジュールとそのテストベンチを書いたので、書き方(主にタイムスケールについて)を記録しておきます。
以下のリポジトリで自作CPUを作成してます。
https://github.com/rei0515reten/Re_RISCV

stat.sv
typedef enum logic [1:0] {FETCH, DECODE, MEMORY, WRITEBACK} state_type;

module stat(input logic clk,
 input logic reset,
 output state_type out);
 state_type next_state, state;

 //組み合わせ回路
 //状態を遷移する
 always_comb begin
 case (state)
 FETCH: next_state = DECODE;
 DECODE: next_state = MEMORY;
 MEMORY: next_state = WRITEBACK;
 WRITEBACK: next_state = FETCH;
 endcase
 end

 //順序回路
 //always_ff @の()内はセンシティビティリストで@はイベントを意味する
 //非同期リセット付きフリップフロップを意味する
 //センシティビティリストにresetがないフリップフロップは同期リセット付きフリップフロップ
 always_ff @(posedge clk, posedge reset)
 if(reset) state <= FETCH;
 else state <= next_state;
 
 assign out = state;

endmodule
stat_test.sv
//タイムスケールの設定
`timescale 1ns/1ps

module stat_test();
 logic Clk,reset;
 logic[1:0] s;

 stat _stat(Clk,reset,s);
 always #5 Clk = ~Clk; //5nsごとにクロックを切り替える

 initial begin
 reset = 1;
 Clk = 0;
 #20 //20ns後にresetを0にする
 reset = 0;
 #500 //500nsでシミュレーションが終了
 $finish;
 end

 initial begin
 $monitor("state=%d",s);
 $dumpfile("state.vcd");
 $dumpvars(0, stat_test);
 end


endmodule

タイムスケールについて

以下を参照。
http://zakii.la.coocan.jp/hdl/52_timescale.htm

以下の行がテストベンチ内のタイムスケールを設定している。
設定しないとデフォルトのタイムスケールが設定される。
タイムスケールはシミュレーション用に存在するものでテストベンチで使用される。

`timescale 1ns/1ps // 単位/精度
1

Go to list of users who liked

0
0

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1

Go to list of users who liked

0