OpenCores
URL https://opencores.org/ocsvn/nlprg/nlprg/trunk

Subversion Repositories nlprg

[/] [nlprg/] [trunk/] [tb/] [nlprg8_tb.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 fra93
module prng8_tb ();
2
 
3
reg ck;
4
reg rst;
5
wire o0;
6
wire o1;
7
wire o2;
8
wire o3;
9
wire o4;
10
wire o5;
11
wire o6;
12
wire o7;
13
 
14
 
15
nlprg8 nlprg8_u (
16
  .ck(ck),
17
  .rst(rst),
18
  .o0(o0),
19
  .o1(o1),
20
  .o2(o2),
21
  .o3(o3),
22
  .o4(o4),
23
  .o5(o5),
24
  .o6(o6),
25
  .o7(o7)
26
);
27
 
28
// dump variables
29
 
30
initial begin
31
 
32
        $dumpfile( "./wave/prng8_tb.vcd");
33
        $dumpvars( 0, prng8_tb );
34
 
35
end
36
 
37
parameter N = 8;
38
 
39
wire [N-1:0] o = {o0,o1,o2,o3,o4,o5,o6,o7};
40
 
41
integer f = -1 ; // file handler
42
 
43
// generate clocks and reset
44
 
45
initial begin
46
 
47
        f = $fopen("./log/nlprg8_tb.log","w+");
48
 
49
        rst = 1'b1     ;
50
        #5 rst = ~ rst ;
51
                #5 rst = ~ rst ;
52
                #5 rst = ~ rst ;
53
        ck  = 1'b1     ;
54
forever #5 ck  = ~ ck  ;
55
 
56
end
57
 
58
// generate counter
59
 
60
reg [N-1:0] cnt;
61
 
62
always@ ( posedge ck or posedge rst ) begin : cnt_process
63
 
64
  if ( rst ) cnt <= {N{1'b0}}  ;
65
  else       cnt <= cnt + 1'b1 ;
66
 
67
end
68
 
69
// delay reset
70
 
71
reg rst_d0;
72
reg rst_d1;
73
 
74
always@ ( posedge ck or posedge rst ) begin : reset_delay_process
75
 
76
  if ( rst ) begin
77
 
78
    rst_d0 <= 1'b1   ;
79
    rst_d1 <= 1'b1   ;
80
 
81
  end else begin
82
 
83
    rst_d0 <= 1'b0   ;
84
    rst_d1 <= rst_d0 ;
85
 
86
  end
87
 
88
end
89
 
90
// generate endsim
91
 
92
reg endsim;
93
reg pass;
94
 
95
wire prng_start_state = ( o   == {N{1'b0}});
96
wire cnt_start_state  = ( cnt == {N{1'b0}});
97
 
98
 
99
always@ ( posedge ck or posedge rst ) begin : end_sim_process
100
 
101
  if      ( rst                                                   ) begin
102
    endsim <= 1'b0 ;
103
    pass   <= 1'b0 ;
104
 
105
  end else if ( prng_start_state & ( ! rst_d1 )                   ) begin
106
    endsim <= 1'b1 ;
107
    pass   <= 1'b0 ;
108
 
109
  end else if ( cnt_start_state  & prng_start_state & ( ! rst_d1 ) ) begin
110
    endsim <= 1'b1 ;
111
    pass   <= 1'b1 ;
112
 
113
  end else if ( cnt_start_state  & ( ! rst_d1 )                    ) begin
114
    endsim <= 1'b1 ;
115
    pass   <= 1'b0 ;
116
  end
117
 
118
end
119
 
120
 
121
// display and finish
122
 
123
always@ ( posedge ck or posedge rst ) begin : display_process
124
 
125
  if          (( ! endsim ) && ( ! rst ))  begin
126
    $fdisplay(f,"%10d %10b", cnt , o) ;
127
  end else if ( endsim                  )  begin
128
    $fclose(f);
129
    $finish ;
130
  end
131
 
132
end
133
 
134
endmodule
135
 

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.