Testbench

1. Clock logic

为方便对时钟进行修改,已经后续代码中的应用,定义为parameter或者`define更为方便,如下所示:

//-------------------------------

//clock units

parameter PERIOD = 20; //20ns,50MHz

always

#(PERIOD/2) clk = !clk;

2. Asynchronous reset

意在设计一个异步复位的信号,故可在clk下降沿复位,同时也在clk下降沿释放。因此在testbench中我们要设计一段“释放→复位→释放”的代码。“event”是在testbench中能被触发,同时也能被监视的事件,过程如下:

1) 释放

2) 在某一时刻reset_trigger 触发事件

3) 等待clk下降沿,复位

4) 等待下一个下降沿,释放

5) 触发reset_done_trigger事件(可在其他testbench中应用)

代码如下所示:

//-------------------------------

//asynchronous reset event(low valid)

event reset_trigger;

event reset_done_trigger;

initial

begin

forever

begin

@(reset_trigger);

@(negedge clk);

rst_n = 0;

@(negedge clk);

rst_n = 1;

-> reset_done_trigger;

end

end

//-------------------------------

//asynchronous reset

initial

#50 -> reset_trigger;

posted @ 2015-01-13 10:26  ffpp  阅读(565)  评论(0编辑  收藏  举报