cs147dv/TESTBENCH/barrel_shifter_tb.v
2024-10-01 10:39:56 -07:00

81 lines
1.5 KiB
Verilog

// Name: barrel_shifter_tb.v
// Module: BARREL_SHIFTER32_TB
//
// Notes: - Testbench for shift module
//
// Revision History:
//
// Version Date Who email note
//------------------------------------------------------------------------------------------
// 1.0 Sep 10, 2014 Kaushik Patra kpatra@sjsu.edu Initial creation
//------------------------------------------------------------------------------------------
`include "../prj_definition.v"
module BARREL_SHIFTER32_TB;
reg [31:0] D;
reg [31:0] S;
reg LnR;
wire [31:0] Y;
integer reg_idx;
reg [`DATA_INDEX_LIMIT:0] result[0:63];
integer i, e;
integer no_of_test=0;
integer no_of_pass=0;
SHIFT32 shift_inst(.Y(Y), .D(D), .S(S), .LnR(LnR));
initial
begin
reg_idx=0;
D=32'ha5a5a5a5;
S=32'h00000000;
LnR=1'b1; // left shift
for(i=1; i<33; i=i+1)
begin
#5
no_of_test = no_of_test + 1;
S=i;
e = D << S;
#5
if (e !== Y)
begin
$write("[TEST %2d] (%8x << %8x) = %8x, got %8x ... FAILED\n", no_of_test, D, S, e, Y);
end
else
no_of_pass = no_of_pass + 1;
result[reg_idx] = Y; reg_idx=reg_idx+1;
end
#5 LnR=1'b0; // right shift
for(i=1; i<33; i=i+1)
begin
#5
no_of_test = no_of_test + 1;
S=i;
e = D >> S;
#5
if (e !== Y)
begin
$write("[TEST %2d] (%8x >> %8x) = %8x, got %8x ... FAILED\n", no_of_test, D, S, e, Y);
end
else
no_of_pass = no_of_pass + 1;
result[reg_idx] = Y; reg_idx=reg_idx+1;
end
$write("\n");
$write("\tTotal number of tests %d\n", no_of_test);
$write("\tTotal number of pass %d\n", no_of_pass);
$write("\n");
$writememh("./OUTPUT/barret_shifter_tb.out",result);
$stop;
end
endmodule