mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
471 lines
7.6 KiB
Systemverilog
471 lines
7.6 KiB
Systemverilog
//////////////////////////////////////////////////////////////////////////////////
|
|
// Company: MIET
|
|
// Engineer: Nikita Bulavin
|
|
|
|
// Module Name: tb_fulladder4
|
|
// Project Name: RISCV_practicum
|
|
// Target Devices: Nexys A7-100T
|
|
// Description: tb for 4-bit fulladder
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
|
module tb_fulladder4();
|
|
|
|
parameter TIME_OPERATION = 100;
|
|
parameter TEST_VALUES = 400;
|
|
|
|
wire [3:0] tb_a_i;
|
|
wire [3:0] tb_b_i;
|
|
wire tb_carry_i;
|
|
wire tb_carry_o;
|
|
wire [3:0] tb_sum_o;
|
|
|
|
fulladder4 DUT (
|
|
.a_i(tb_a_i),
|
|
.b_i(tb_b_i),
|
|
.sum_o(tb_sum_o),
|
|
.carry_i(tb_carry_i),
|
|
.carry_o(tb_carry_o)
|
|
);
|
|
|
|
integer i, err_count = 0;
|
|
reg [13:0] running_line;
|
|
reg [14*400:0] line_dump;
|
|
wire [3:0] sum_dump;
|
|
wire carry_o_dump;
|
|
|
|
assign tb_a_i = running_line[13:10];
|
|
assign tb_b_i = running_line[9:6];
|
|
assign tb_carry_i = running_line[5];
|
|
assign sum_dump = running_line[4:1];
|
|
assign carry_o_dump = running_line[0];
|
|
|
|
`ifdef __debug__
|
|
initial begin
|
|
$display( "\nStart test: \n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop();
|
|
for ( i = 0; i < TEST_VALUES; i = i + 1 )
|
|
begin
|
|
running_line = line_dump[i*14+:14];
|
|
#TIME_OPERATION;
|
|
if( (tb_carry_o !== carry_o_dump) || (tb_sum_o !== sum_dump) ) begin
|
|
$display("ERROR! carry_i = %b; (a)%h + (b)%h = ", tb_carry_i, tb_a_i, tb_b_i, "(carry_o)%b (sum_o)%h;", tb_carry_o, tb_sum_o, " carry_o_dump: %b, sum_dump: %h", carry_o_dump, sum_dump);
|
|
err_count = err_count + 1'b1;
|
|
end
|
|
end
|
|
$display("Number of errors: %d", err_count);
|
|
if( !err_count ) $display("\nfulladder4 SUCCESS!!!\n");
|
|
$finish();
|
|
end
|
|
`else
|
|
initial begin
|
|
for ( i = TEST_VALUES-1; i >=0 ; i = i - 1 )
|
|
begin
|
|
running_line = line_dump[i*14+:14];
|
|
#TIME_OPERATION;
|
|
end
|
|
$finish();
|
|
end
|
|
`endif
|
|
|
|
initial line_dump = {
|
|
14'h1787,
|
|
14'h1787,
|
|
14'h1f8b,
|
|
14'h0318,
|
|
14'h0c8a,
|
|
14'h0b1c,
|
|
14'h1110,
|
|
14'h0d0e,
|
|
14'h1914,
|
|
14'h0402,
|
|
14'h050a,
|
|
14'h1914,
|
|
14'h1008,
|
|
14'h0402,
|
|
14'h0108,
|
|
14'h050a,
|
|
14'h1218,
|
|
14'h1d16,
|
|
14'h090c,
|
|
14'h090c,
|
|
14'h1c0e,
|
|
14'h0804,
|
|
14'h0318,
|
|
14'h1008,
|
|
14'h1008,
|
|
14'h1a1c,
|
|
14'h1008,
|
|
14'h0e16,
|
|
14'h0210,
|
|
14'h1a1c,
|
|
14'h1a1c,
|
|
14'h0e16,
|
|
14'h0804,
|
|
14'h0612,
|
|
14'h0e16,
|
|
14'h180c,
|
|
14'h163c,
|
|
14'h0826,
|
|
14'h0c06,
|
|
14'h182e,
|
|
14'h102a,
|
|
14'h0804,
|
|
14'h1c0e,
|
|
14'h1008,
|
|
14'h0402,
|
|
14'h0c28,
|
|
14'h0022,
|
|
14'h0000,
|
|
14'h1c0e,
|
|
14'h142c,
|
|
14'h0846,
|
|
14'h0000,
|
|
14'h0064,
|
|
14'h0022,
|
|
14'h0064,
|
|
14'h0804,
|
|
14'h0022,
|
|
14'h0804,
|
|
14'h106c,
|
|
14'h0868,
|
|
14'h0826,
|
|
14'h0804,
|
|
14'h0804,
|
|
14'h180c,
|
|
14'h1008,
|
|
14'h180c,
|
|
14'h0000,
|
|
14'h0804,
|
|
14'h0000,
|
|
14'h00a6,
|
|
14'h1008,
|
|
14'h00c6,
|
|
14'h0022,
|
|
14'h0042,
|
|
14'h102a,
|
|
14'h0064,
|
|
14'h10ce,
|
|
14'h0000,
|
|
14'h104a,
|
|
14'h0022,
|
|
14'h00a6,
|
|
14'h01ae,
|
|
14'h1194,
|
|
14'h014a,
|
|
14'h00a6,
|
|
14'h014a,
|
|
14'h012a,
|
|
14'h0000,
|
|
14'h0064,
|
|
14'h0064,
|
|
14'h00c6,
|
|
14'h012a,
|
|
14'h0108,
|
|
14'h00e8,
|
|
14'h0042,
|
|
14'h014a,
|
|
14'h0318,
|
|
14'h0000,
|
|
14'h0022,
|
|
14'h039c,
|
|
14'h0294,
|
|
14'h033a,
|
|
14'h014a,
|
|
14'h018c,
|
|
14'h0294,
|
|
14'h0210,
|
|
14'h035a,
|
|
14'h0000,
|
|
14'h00c6,
|
|
14'h012a,
|
|
14'h073c,
|
|
14'h00a6,
|
|
14'h0042,
|
|
14'h014a,
|
|
14'h06fa,
|
|
14'h079e,
|
|
14'h0402,
|
|
14'h014a,
|
|
14'h06d8,
|
|
14'h052c,
|
|
14'h0210,
|
|
14'h0084,
|
|
14'h0444,
|
|
14'h0084,
|
|
14'h00a6,
|
|
14'h0108,
|
|
14'h04ea,
|
|
14'h0846,
|
|
14'h0210,
|
|
14'h07e3,
|
|
14'h05f2,
|
|
14'h0846,
|
|
14'h0ccc,
|
|
14'h0b3e,
|
|
14'h0e16,
|
|
14'h0c6a,
|
|
14'h052c,
|
|
14'h0804,
|
|
14'h0696,
|
|
14'h0612,
|
|
14'h1dfe,
|
|
14'h077e,
|
|
14'h018c,
|
|
14'h13a7,
|
|
14'h182e,
|
|
14'h1fad,
|
|
14'h1f49,
|
|
14'h1aa3,
|
|
14'h0b61,
|
|
14'h184e,
|
|
14'h00c6,
|
|
14'h11b6,
|
|
14'h14f2,
|
|
14'h0a78,
|
|
14'h0676,
|
|
14'h1323,
|
|
14'h1f29,
|
|
14'h1dfe,
|
|
14'h0ba3,
|
|
14'h1936,
|
|
14'h161a,
|
|
14'h0e16,
|
|
14'h0e58,
|
|
14'h0888,
|
|
14'h0db4,
|
|
14'h0970,
|
|
14'h058e,
|
|
14'h0990,
|
|
14'h19da,
|
|
14'h146e,
|
|
14'h04ea,
|
|
14'h165c,
|
|
14'h19da,
|
|
14'h033a,
|
|
14'h0210,
|
|
14'h0990,
|
|
14'h144c,
|
|
14'h0c06,
|
|
14'h0108,
|
|
14'h090c,
|
|
14'h039c,
|
|
14'h0b1c,
|
|
14'h0696,
|
|
14'h014a,
|
|
14'h1d58,
|
|
14'h0c48,
|
|
14'h0c48,
|
|
14'h1c50,
|
|
14'h02d6,
|
|
14'h1110,
|
|
14'h0108,
|
|
14'h0e9a,
|
|
14'h0804,
|
|
14'h1914,
|
|
14'h0084,
|
|
14'h0318,
|
|
14'h1c0e,
|
|
14'h1914,
|
|
14'h1110,
|
|
14'h1914,
|
|
14'h1e1e,
|
|
14'h1008,
|
|
14'h0084,
|
|
14'h1a81,
|
|
14'h050a,
|
|
14'h0a14,
|
|
14'h1c0e,
|
|
14'h1b05,
|
|
14'h1008,
|
|
14'h0c06,
|
|
14'h0210,
|
|
14'h071a,
|
|
14'h1e1e,
|
|
14'h1e1e,
|
|
14'h1e1e,
|
|
14'h090c,
|
|
14'h0108,
|
|
14'h0210,
|
|
14'h1c0e,
|
|
14'h0a14,
|
|
14'h0804,
|
|
14'h180c,
|
|
14'h1008,
|
|
14'h0612,
|
|
14'h180c,
|
|
14'h161a,
|
|
14'h0e16,
|
|
14'h1008,
|
|
14'h1e1e,
|
|
14'h0210,
|
|
14'h1a1c,
|
|
14'h140a,
|
|
14'h0634,
|
|
14'h0c06,
|
|
14'h0402,
|
|
14'h0804,
|
|
14'h0424,
|
|
14'h0c06,
|
|
14'h0424,
|
|
14'h0424,
|
|
14'h0826,
|
|
14'h0c06,
|
|
14'h102a,
|
|
14'h0402,
|
|
14'h180c,
|
|
14'h0804,
|
|
14'h0042,
|
|
14'h106c,
|
|
14'h0c48,
|
|
14'h1870,
|
|
14'h1008,
|
|
14'h0868,
|
|
14'h182e,
|
|
14'h0042,
|
|
14'h0042,
|
|
14'h1870,
|
|
14'h1008,
|
|
14'h102a,
|
|
14'h1008,
|
|
14'h102a,
|
|
14'h0022,
|
|
14'h00a6,
|
|
14'h1870,
|
|
14'h0868,
|
|
14'h10f0,
|
|
14'h00c6,
|
|
14'h104a,
|
|
14'h00e8,
|
|
14'h102a,
|
|
14'h108c,
|
|
14'h00a6,
|
|
14'h0064,
|
|
14'h0042,
|
|
14'h0000,
|
|
14'h0022,
|
|
14'h10ae,
|
|
14'h1194,
|
|
14'h102a,
|
|
14'h1132,
|
|
14'h012a,
|
|
14'h0022,
|
|
14'h0042,
|
|
14'h0000,
|
|
14'h00a6,
|
|
14'h00a6,
|
|
14'h01ae,
|
|
14'h0084,
|
|
14'h012a,
|
|
14'h0042,
|
|
14'h0042,
|
|
14'h0022,
|
|
14'h014a,
|
|
14'h0000,
|
|
14'h00a6,
|
|
14'h0000,
|
|
14'h0274,
|
|
14'h012a,
|
|
14'h0274,
|
|
14'h0022,
|
|
14'h00e8,
|
|
14'h014a,
|
|
14'h0000,
|
|
14'h0274,
|
|
14'h0232,
|
|
14'h00a6,
|
|
14'h012a,
|
|
14'h02f8,
|
|
14'h0042,
|
|
14'h079e,
|
|
14'h071a,
|
|
14'h06b8,
|
|
14'h0232,
|
|
14'h0612,
|
|
14'h05b0,
|
|
14'h014a,
|
|
14'h0232,
|
|
14'h0108,
|
|
14'h0084,
|
|
14'h01f0,
|
|
14'h012a,
|
|
14'h018c,
|
|
14'h0990,
|
|
14'h09b2,
|
|
14'h0612,
|
|
14'h0252,
|
|
14'h056e,
|
|
14'h0d72,
|
|
14'h0000,
|
|
14'h04c8,
|
|
14'h0c06,
|
|
14'h0c6a,
|
|
14'h0edc,
|
|
14'h09b2,
|
|
14'h0042,
|
|
14'h00a6,
|
|
14'h0e58,
|
|
14'h13c7,
|
|
14'h094e,
|
|
14'h165c,
|
|
14'h182e,
|
|
14'h0232,
|
|
14'h0dd4,
|
|
14'h0612,
|
|
14'h18b2,
|
|
14'h1f29,
|
|
14'h1a61,
|
|
14'h016c,
|
|
14'h0afc,
|
|
14'h140a,
|
|
14'h05d0,
|
|
14'h1110,
|
|
14'h06b8,
|
|
14'h05f2,
|
|
14'h1e1e,
|
|
14'h184e,
|
|
14'h1301,
|
|
14'h0e9a,
|
|
14'h1787,
|
|
14'h094e,
|
|
14'h02d6,
|
|
14'h08ca,
|
|
14'h11b6,
|
|
14'h06fa,
|
|
14'h0f21,
|
|
14'h0424,
|
|
14'h16e3,
|
|
14'h1aa3,
|
|
14'h039c,
|
|
14'h1194,
|
|
14'h073c,
|
|
14'h108c,
|
|
14'h108c,
|
|
14'h1b05,
|
|
14'h108c,
|
|
14'h1512,
|
|
14'h184e,
|
|
14'h0210,
|
|
14'h0b5e,
|
|
14'h0804,
|
|
14'h180c,
|
|
14'h090c,
|
|
14'h1fcd,
|
|
14'h148e,
|
|
14'h0dd4,
|
|
14'h129c,
|
|
14'h079e,
|
|
14'h0000,
|
|
14'h0888,
|
|
14'h108c,
|
|
14'h1194,
|
|
14'h1787,
|
|
14'h0b1c,
|
|
14'h0f83,
|
|
14'h1f07,
|
|
14'h0084,
|
|
14'h0402,
|
|
14'h0000,
|
|
14'h1110,
|
|
14'h108c,
|
|
14'h1512};
|
|
|
|
endmodule |