(筆記) 如何以絕對時間指定testbench波形? (SOC) (Verilog)

Abstract
一般指定testbench波形,用的是相對時間,若想用絕對時間呢?

Introduction
一般指定testbench波形,用的是相對時間,如下所是:(此範例原為(筆記) 如何設計邊緣檢測電路? (SOC) (Verilog)的testbench)

1 /* 
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3 
4 Filename    : posedge_detection_tb.v
5 Compiler    : ModelSim-Altera 6.1g
6 Description : testbench of posedge_detection.v
7 Release     : 07/09/2008 1.0
8 */
9 
10 `timescale 1ns/10ps
11 module posedge_detection_tb;
12 
13 reg  clk;
14 reg  rst_n;
15 reg  i_data_in;
16 wire o_rising_edge;
17 
18 posedge_detection u0 (
19   .clk(clk),
20   .rst_n(rst_n),
21   .i_data_in(i_data_in),
22   .o_rising_edge(o_rising_edge)
23 );
24 
25 parameter clkper = 100;
26 initial begin
27   clk = 1'b0;
28 end
29 
30 always begin
31   #(clkper / 2) clk = ~clk;
32 end
33 
34 initial begin
35   rst_n = 1'b1;
36   i_data_in = 1'b0;
37  
38   #75;
39   i_data_in = 1'b1;
40  
41   #100;
42   i_data_in = 1'b0;
43  
44   #125;
45   i_data_in = 1'b1;
46  
47   #75;
48   i_data_in = 1'b0;
49  
50   #175;
51   i_data_in = 1'b1;
52  
53   #25;
54   i_data_in = 1'b0;
55 end
56 
57 endmodule


34行到55行

initial begin
  rst_n
= 1'b1;
  i_data_in = 1'b0;
 
  #
75;
  i_data_in
= 1'b1;
 
  #
100;
  i_data_in
= 1'b0;
 
  #
125;
  i_data_in
= 1'b1;
 
  #
75;
  i_data_in
= 1'b0;
 
  #
175;
  i_data_in
= 1'b1;
 
  #
25;
  i_data_in
= 1'b0;
end


這種方式的優點是都在一個initial block,但有時候你可能已經很清楚絕對時間該產生什麼波形,為了這種寫法你必須去算相對時間。

使用絕對時間指定波形

1 /* 
2 (C) OOMusou 2008 http://oomusou.cnblogs.com
3 
4 Filename    : posedge_detection_tb2.v
5 Compiler    : ModelSim-Altera 6.1g
6 Description : testbench of posedge_detection.v
7 Release     : 07/09/2008 1.0
8 */
9 
10 `timescale 1ns/10ps
11 module posedge_detection_tb2;
12 
13 reg  clk;
14 reg  rst_n;
15 reg  i_data_in;
16 wire o_rising_edge;
17 
18 posedge_detection u0 (
19   .clk(clk),
20   .rst_n(rst_n),
21   .i_data_in(i_data_in),
22   .o_rising_edge(o_rising_edge)
23 );
24 
25 parameter clkper = 100;
26 initial begin
27   clk = 1'b0;
28 end
29 
30 always begin
31   #(clkper / 2) clk = ~clk;
32 end
33 
34 initial begin
35   rst_n = 1'b1;
36   i_data_in = 1'b0;
37 end
38  
39 initial #75 i_data_in = 1'b1;
40 initial #175 i_data_in = 1'b0;
41 initial #300 i_data_in = 1'b1;
42 initial #375 i_data_in = 1'b0;
43 initial #550 i_data_in = 1'b1;
44 initial #575 i_data_in = 1'b0;
45  
46 endmodule


39到45行

initial #75 i_data_in = 1'b1;
initial #175 i_data_in = 1'b0;
initial #300 i_data_in = 1'b1;
initial #375 i_data_in = 1'b0;
initial #550 i_data_in = 1'b1;
initial #575 i_data_in = 1'b0;


乍看之下,會覺得這種方是蠻笨的,他靠的是每個initial都是在#0執行的特色,所以能使用絕對時間。請參考(筆記) initial的幾個特色 (SOC) (Verilog)

See Also
(筆記) 如何設計邊緣檢測電路? (SOC) (Verilog)
(筆記) initial的幾個特色 (SOC) (Verilog)

posted on 2008-07-13 20:59  真 OO无双  阅读(10948)  评论(1编辑  收藏  举报

导航