// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2014 Clifford Wolf
// SPDX-License-Identifier: CC0-1.0

module t (
    input clk
);

  integer cyc = 0;

  wire [31:0] y;
  reg a;
  test004 sub (  /*AUTOINST*/
      // Outputs
      .y(y[31:0]),
      // Inputs
      .a(a)
  );

  // Test loop
  always @(posedge clk) begin
`ifdef TEST_VERBOSE
    $write("[%0t] cyc==%0d a=%x y=%x\n", $time, cyc, a, y);
`endif
    cyc <= cyc + 1;
    if (cyc == 0) begin
      a <= 0;
    end
    else if (cyc == 1) begin
      a <= 1;
      if (y != 32'h0) $stop;
    end
    else if (cyc == 2) begin
      if (y != 32'h010000ff) $stop;
    end
    else if (cyc == 99) begin
      $write("*-* All Finished *-*\n");
      $finish;
    end
  end

endmodule

module test004 (
    a,
    y
);
  input a;
  output [31:0] y;

  wire [7:0] y0;
  wire [7:0] y1;
  wire [7:0] y2;
  wire [7:0] y3;
  assign y = {y0, y1, y2, y3};

  localparam [7:0] V0 = +8'sd1 ** -8'sd2;  //'h01
  localparam [7:0] V1 = +8'sd2 ** -8'sd2;  //'h00
  localparam [7:0] V2 = -8'sd2 ** -8'sd3;  //'h00
  localparam [7:0] V3 = -8'sd1 ** -8'sd3;  //'hff
  localparam [7:0] ZERO = 0;

  initial $display("V0=%x V1=%x V2=%x V3=%x", V0, V1, V2, V3);

  assign y0 = a ? V0 : ZERO;
  assign y1 = a ? V1 : ZERO;
  assign y2 = a ? V2 : ZERO;
  assign y3 = a ? V3 : ZERO;
endmodule
