// DESCRIPTION: Verilator: Verilog Test module // // This file ONLY is placed into the Public Domain, for any use, // without warranty, 2005 by Wilson Snyder. `ifdef VERILATOR `define checkh(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got='h%x exp='h%x\n", `__FILE__,`__LINE__, (gotv), (expv)); $stop; end while(0) `else `define checkh(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got='h%x exp='h%x\n", `__FILE__,`__LINE__, (gotv), (expv)); end while(0) `endif module t (/*AUTOARG*/ // Inputs clk ); input clk; reg [60:0] p; reg [60:0] a; reg [20:0] b; reg [60:0] shifted; always @* begin p = a[60:0] ** b[20:0]; shifted = 2 ** b[20:0]; end integer cyc; initial cyc=1; always @ (posedge clk) begin if (cyc!=0) begin cyc <= cyc + 1; `ifdef TEST_VERBOSE $write("%0x %x %x\n", cyc, p, shifted); `endif // Constant versions `checkh(61'h1 ** 21'h31, 61'h1); `checkh(61'h2 ** 21'h10, 61'h10000); `checkh(61'd10 ** 21'h3, 61'h3e8); `checkh(61'h3 ** 21'h7, 61'h88b); `ifndef VCS `checkh(61'h7ab3811219 ** 21'ha6e30, 61'h01ea58c703687e81); `endif if (cyc==1) begin a <= 61'h0; b <= 21'h0; end if (cyc==2) begin a <= 61'h0; b <= 21'h3; end if (cyc==3) begin a <= 61'h1; b <= 21'h31; end if (cyc==4) begin a <= 61'h2; b <= 21'h10; end if (cyc==5) begin a <= 61'd10; b <= 21'd3; end if (cyc==6) begin a <= 61'd3; b <= 21'd7; end if (cyc==7) begin a <= 61'h7ab3811219; b <= 21'ha6e30; end if (cyc==9) begin $write("*-* All Finished *-*\n"); $finish; end end case (cyc) 32'd00: ; 32'd01: ; 32'd02: ; // 0^x is indeterminate 32'd03: ; // 0^x is indeterminate 32'd04: `checkh(p, 61'h1); 32'd05: `checkh(p, 61'h10000); 32'd06: `checkh(p, 61'h3e8); 32'd07: `checkh(p, 61'h88b); 32'd08: `checkh(p, 61'h01ea58c703687e81); 32'd09: `checkh(p, 61'h01ea58c703687e81); default: $stop; endcase case (cyc) 32'd00: ; 32'd01: ; 32'd02: `checkh(shifted, 61'h0000000000000001); 32'd03: `checkh(shifted, 61'h0000000000000008); 32'd04: `checkh(shifted, 61'h0002000000000000); 32'd05: `checkh(shifted, 61'h0000000000010000); 32'd06: `checkh(shifted, 61'h0000000000000008); 32'd07: `checkh(shifted, 61'h0000000000000080); 32'd08: `checkh(shifted, 61'h0000000000000000); 32'd09: `checkh(shifted, 61'h0000000000000000); default: $stop; endcase end endmodule