-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtbtemplate_throughput.txt
98 lines (76 loc) · 2.3 KB
/
tbtemplate_throughput.txt
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
module <TBMODULENAME>();
parameter T = <NUMBITS>;
parameter NUMINPUTVALS = <NUMINPUTVALS>;
parameter NUMOUTPUTVALS = <NUMOUTPUTVALS>;
parameter INFILENAME = "<INFILENAME>";
parameter EXPFILENAME = "<EXPFILENAME>";
logic clk, input_valid, input_ready, output_valid, output_ready, reset;
logic [T-1:0] input_data;
logic signed [T-1:0] output_data;
logic signed [T-1:0] inValues [NUMINPUTVALS-1:0];
logic signed [T-1:0] expValues [NUMOUTPUTVALS-1:0];
logic s;
initial clk=0;
always #5 clk = ~clk;
<DUTNAME> dut(clk, reset, input_valid, input_ready, input_data, output_valid, output_ready, output_data);
logic rb, rb2;
always begin
@(posedge clk);
#1;
s=std::randomize(rb, rb2);
end
logic [31:0] j;
always @* begin
if (input_valid == 1)
input_data = inValues[j];
else
input_data = 'x;
end
always @* begin
if ((j>=0) && (j<NUMINPUTVALS) && (rb==1'b1))
input_valid=1;
else
input_valid=1;
end
always @(posedge clk) begin
if (input_valid && input_ready)
j <= #1 j+1;
end
logic [31:0] i;
always @* begin
if ((i>=0) && (i<NUMOUTPUTVALS) && (rb2==1'b1))
output_ready = 1;
else
output_ready = 1;
end
integer errors = 0;
always @(posedge clk) begin
if (output_ready && output_valid) begin
if (output_data !== expValues[i]) begin
//$display($time,,"ERROR: y[%d] = %d; expected value = %d", i, output_data, expValues[i]);
errors = errors+1;
end
//else
//$display($time,,"SUCCESS: y[%d] = %d; ", i, output_data);
i=i+1;
end
end
////////////////////////////////////////////////////////////////////////////////
initial begin
$readmemb(INFILENAME, inValues);
$readmemb(EXPFILENAME, expValues);
j=0; i=0;
// Before first clock edge, initialize
output_ready = 0;
reset = 0;
// reset
@(posedge clk); #1; reset = 1;
@(posedge clk); #1; reset = 0;
wait(i==NUMOUTPUTVALS);
if(errors>0) begin
$display("ERROR_DETECTED %d", errors);
end
$display("Simulated %d outputs. Found %d errors.", NUMOUTPUTVALS, errors);
$finish;
end
endmodule