forked from Github_Repos/cvw
79 lines
1.8 KiB
Systemverilog
79 lines
1.8 KiB
Systemverilog
|
// testbench
|
||
|
module tb ();
|
||
|
|
||
|
logic [63:0] op1;
|
||
|
logic [63:0] op2;
|
||
|
logic [1:0] rm;
|
||
|
logic [2:0] op_type;
|
||
|
logic P;
|
||
|
logic OvEn;
|
||
|
logic UnEn;
|
||
|
|
||
|
logic [63:0] result;
|
||
|
logic [4:0] Flags;
|
||
|
logic Denorm;
|
||
|
|
||
|
logic clk;
|
||
|
logic [63:0] yexpected;
|
||
|
logic reset;
|
||
|
logic [63:0] vectornum, errors; // bookkeeping variables
|
||
|
logic [199:0] testvectors[50000:0]; // array of testvectors
|
||
|
logic [7:0] flags_expected;
|
||
|
|
||
|
integer handle3;
|
||
|
integer desc3;
|
||
|
|
||
|
// instantiate device under test
|
||
|
fpadd dut (result, Flags, Denorm, op1, op2, rm, op_type, P, OvEn, UnEn);
|
||
|
|
||
|
always
|
||
|
begin
|
||
|
clk = 1; #5; clk = 0; #5;
|
||
|
end
|
||
|
|
||
|
initial
|
||
|
begin
|
||
|
handle3 = $fopen("f64_sub_rd.out");
|
||
|
$readmemh("f64_sub_rd.tv", testvectors);
|
||
|
vectornum = 0; errors = 0;
|
||
|
reset = 1; #27; reset = 0;
|
||
|
end
|
||
|
|
||
|
always @(posedge clk)
|
||
|
begin
|
||
|
desc3 = handle3;
|
||
|
#0 op_type = 3'b001;
|
||
|
#0 P = 1'b0;
|
||
|
#0 rm = 2'b11;
|
||
|
#0 OvEn = 1'b0;
|
||
|
#0 UnEn = 1'b0;
|
||
|
#1; {op1, op2, yexpected, flags_expected} = testvectors[vectornum];
|
||
|
#5 $fdisplay(desc3, "%h_%h_%h_%b", op1, op2, result, Flags);
|
||
|
end
|
||
|
|
||
|
// check results on falling edge of clk
|
||
|
always @(negedge clk)
|
||
|
if (~reset)
|
||
|
begin // skip during reset
|
||
|
if (result !== yexpected) begin
|
||
|
$display("Error: inputs = %h %h", op1, op2);
|
||
|
$display(" outputs = %h (%h expected)", result, yexpected);
|
||
|
errors = errors + 1;
|
||
|
end
|
||
|
//else
|
||
|
//begin
|
||
|
//$display("Good");
|
||
|
// end
|
||
|
|
||
|
vectornum = vectornum + 1;
|
||
|
if (testvectors[vectornum] === 56'bx)
|
||
|
begin
|
||
|
$display("%d tests completed with %d errors",
|
||
|
vectornum, errors);
|
||
|
end
|
||
|
end // if (~reset)
|
||
|
|
||
|
endmodule // tb
|
||
|
|
||
|
|