[SystemVerilog] ナウでヤングなクロック生成

こんな記述を見かけたのさー

 1|module testbench;
 2|
 3|  reg CLK=0;
 4|
 5|  parameter CLK_PERIOD=100;
 6|
 7|  always #(CLK_PERIOD/2) begin
 8|  ¦ CLK <= ~CLK;
 9|  ¦ #(CLK_PERIOD - (CLK_PERIOD/2));
10|  ¦ CLK <= ~CLK;
11|  end
12|
13|  initial begin
14|  ¦ #10000;
15|  ¦ $finish(1);
16|  end
17|
18|endmodule
  • A君
    parameterを使っているということは、
    「CLK」の周期を変えたい時があるということかな?

  • Bさん
    でもその時って、defparamとかでやっちゃうのかな?
    それって再度コンパイルするの?
    やだー!!!ダサい!!!

さてさて、どうしましょう!?
どうやら今時はこんな記述らしい!
※今時かは知らないです。

 1|module testbench;
 2|
 3|  reg CLK=0;
 4|  int v_period;
 5|
 6|  initial begin
 7|  ¦ if ($value$plusargs("CLK_PERIOD=%d", v_period))
 8|  ¦ ¦ $display("CLK_PERIOD set %d", v_period);
 9|  ¦ else
10|  ¦ ¦ v_period = 100;
11|
12|  ¦ forever begin
13|  ¦ ¦ #(v_period/2);
14|  ¦ ¦ CLK <= ~CLK;
15|  ¦ ¦ #(v_period - (v_period/2));
16|  ¦ ¦ CLK <= ~CLK;
17|  ¦ end
18|  end
19|
20|  initial begin
21|  ¦ #10000;
22|  ¦ $finish(1);
23|  end
24|
25|endmodule  

「CLK」の周期を変える時は、実行時の引数で指定すれば コンパイル不要だよ-☆

:
# vsim +CLK_PERIOD=20 -L work -do {run -all; quit} -c testbench 
# Loading sv_std.std
# Loading work.testbench
# run -all 
# CLK_PERIOD set          20
# ** Note: $finish    : sample2.sv(22)
#    Time: 10 ns  Iteration: 0  Instance: /testbench

ってことで終わり。

プロフィール

Kocha

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

カレンダー
12 | 2016/01 | 02
- - - - - 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
31 - - - - - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数