cvw/wally-pipelined/src/fpu/fpadd/tb_f64_sub_rd.sv

79 lines
1.8 KiB
Systemverilog
Raw Normal View History

2021-05-26 14:12:37 +00:00
// 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