iverilog/ivtest/ivltests/test_timebase.v

86 lines
2.6 KiB
Verilog

/***************************************************************
** Author: Oswaldo Cadenas (oswaldo.cadenas@gmail.com)
** Date: September 26 2011
**
** Test: Intended to test parametric counter in timebase.vhd
** the counter has parameters: N for counter length and
VALUE to flag when the count reaches this value
**
** Four counter instances are created here:
** duv1 with counter default parameters for N and VALUE
** duv2 with N1, V1 for parameter N, VALUE respectively
** duv3 with N2, V2 for parameters N, VALUE respectively
** duv4 with N2 replacing N and VALUE left as default
**
** The test for a long time making sure each of the four counter flags TICK become one
**************************************************************************************/
module test;
parameter integer T = 25;
parameter integer N1 = 8;
parameter integer N2 = 17;
parameter integer V1 = 200;
parameter integer V2 = 17'h16C8A;
bit clk = 0, reset = 0;
wire [11:0] count1;
wire [N1-1:0] count2;
wire [N2-1:0] count3;
wire [N2-1:0] count4;
wire tick1, tick2, tick3, tick4;
reg tick1_reg, tick2_reg, tick3_reg, tick4_reg;
initial forever #(T) clk = !clk;
initial begin
@(negedge clk);
reset = 1'b1;
repeat(6) @(negedge clk);
reset = 1'b0;
end
// duv1 switch
always @(posedge clk, posedge reset)
if (reset) tick1_reg <= 1'b0;
else if (tick1) tick1_reg <= 1'b1;
// duv2 switch
always @(posedge clk, posedge reset)
if (reset) tick2_reg <= 1'b0;
else if (tick2) tick2_reg <= 1'b1;
// duv3 switch
always @(posedge clk, posedge reset)
if (reset) tick3_reg <= 1'b0;
else if (tick3) tick3_reg <= 1'b1;
// duv4 switch
always @(posedge clk, posedge reset)
if (reset) tick4_reg <= 1'b0;
else if (tick4) tick4_reg <= 1'b1;
initial begin
#(V2*2*T + 1000);
if (tick1_reg != 1 || tick2_reg != 1 || tick3_reg != 1 || tick4_reg != 1) begin
$display ("Counting FAILED");
$finish;
end
else begin
$display ("PASSED");
#20;
$finish;
end
end
timebase duv1 (.clock(clk), .reset(reset), .enable(1'b1), .tick(tick1), .count_value(count1) ); // default parameters
timebase #(.n(N1), .value(V1))
duv2 (.clock(clk), .reset(reset), .enable(1'b1), .tick(tick2), .count_value(count2) ); // N1, V1 parameters
timebase #(N2, V2)
duv3 (.clock(clk), .reset(reset), .enable(1'b1), .tick(tick3), .count_value(count3) ); // N2, V2 parameters
timebase #(.n(N2))
duv4 (.clock(clk), .reset(reset), .enable(1'b1), .tick(tick4), .count_value(count4) ); // only one parameter modified
endmodule