module tb_calculations # (
  parameter DATA_LEN = 8
);
  // Declare variables that need to be connected to the design instance
  // These variables are assigned some values that in turn gets transferred to
  // the design as inputs because they are connected with the ports in the design
  logic [DATA_LEN-1:0] a_tb, b_tb;
  logic [DATA_LEN-1:0] sum_tb, sub_tb, mult_tb, div_tb;

  // Instantiate the design module and connect the variables declared above
  // with the ports in the design
  adder # (
    .DATA_LEN (DATA_LEN)
  ) my_adder (
    .a (a_tb),
    .b (b_tb),
    .y (sum_tb));
  sub # (
    .DATA_LEN (DATA_LEN)
  ) my_sub (
    .a (a_tb),
    .b (b_tb),
    .y (sub_tb));
  mult # (
    .DATA_LEN (DATA_LEN)
  ) my_mult (
    .a (a_tb),
    .b (b_tb),
    .y (mult_tb));
  div # (
    .DATA_LEN (DATA_LEN)
  ) my_div (
    .a (a_tb),
    .b (b_tb),
    .y (div_tb));
  
// Develop rest of the testbench and write stimulus that can be driven
//  to the design
  initial begin
    a_tb = 0;
    b_tb = 0;
    #10
    a_tb = 5;
    b_tb = 2;
    #10
    a_tb = 15;
    b_tb = 10;
    #10
    a_tb = 255;
    b_tb = 255;
    #10
    $stop;
  end
endmodule