#! /usr/bin/vvp :ivl_version "0.9.7 " "(v0_9_7)"; :vpi_time_precision + 0; :vpi_module "system"; :vpi_module "v2005_math"; :vpi_module "va_math"; S_0x13ba1a0 .scope module, "mul16" "mul16" 2 93; .timescale 0 0; P_0x13b6d78 .param/l "MAX_TRIALS" 2 115, +C4<01010>; v0x13d3ad0_0 .var "a", 15 0; v0x13d3ba0_0 .var "b", 15 0; v0x13d3c50_0 .var "clk", 0 0; v0x13d3d00_0 .net "done", 0 0, v0x13d3440_0; 1 drivers v0x13d3de0_0 .var/i "num_errors", 31 0; v0x13d3e60_0 .var "resetb", 0 0; v0x13d3ee0_0 .var "start", 0 0; v0x13d3f90_0 .net "y", 31 0, v0x13d36b0_0; 1 drivers S_0x13d3750 .scope task, "test_multiply" "test_multiply" 2 144, 2 144, S_0x13ba1a0; .timescale 0 0; v0x13d38d0_0 .var "aarg", 15 0; v0x13d3990_0 .var "barg", 15 0; v0x13d3a30_0 .var/i "expected_answer", 31 0; E_0x13d3370 .event posedge, v0x13d3440_0; E_0x13d3880 .event negedge, v0x13d33a0_0; TD_mul16.test_multiply ; %load/v 8, v0x13d3d00_0, 1; %inv 8, 1; %jmp/0xz T_0.0, 8; %vpi_call 2 152 "$display", "Multiplier is Busy!!"; %jmp T_0.1; T_0.0 ; %wait E_0x13d3880; %set/v v0x13d3ee0_0, 1, 1; %load/v 8, v0x13d38d0_0, 16; %set/v v0x13d3ad0_0, 8, 16; %load/v 8, v0x13d3990_0, 16; %set/v v0x13d3ba0_0, 8, 16; %wait E_0x13d3880; %set/v v0x13d3ee0_0, 0, 1; %wait E_0x13d3370; %load/v 8, v0x13d3ad0_0, 16; %movi 24, 0, 16; %load/v 40, v0x13d3ba0_0, 16; %movi 56, 0, 16; %mul 8, 40, 32; %set/v v0x13d3a30_0, 8, 32; %vpi_call 2 162 "$display", "%0d * %0d = %0h, Reality = %0h", v0x13d3ad0_0, v0x13d3ba0_0, v0x13d3f90_0, v0x13d3a30_0; %load/v 8, v0x13d3f90_0, 32; %load/v 40, v0x13d3a30_0, 32; %cmp/u 8, 40, 32; %inv 6, 1; %jmp/0xz T_0.2, 6; %vpi_call 2 164 "$display", " FAILURE!"; %load/v 8, v0x13d3de0_0, 32; %mov 40, 39, 1; %addi 8, 1, 33; %set/v v0x13d3de0_0, 8, 32; T_0.2 ; T_0.1 ; %end; S_0x13ba290 .scope module, "mult16inst" "mult16" 2 100, 2 33, S_0x13ba1a0; .timescale 0 0; P_0x13b6f48 .param/l "N" 2 34, +C4<010000>; v0x13ba380_0 .var "a", 31 0; v0x13d31b0_0 .net "ain", 15 0, v0x13d3ad0_0; 1 drivers v0x13d3250_0 .var "b", 15 0; v0x13d32f0_0 .net "bin", 15 0, v0x13d3ba0_0; 1 drivers v0x13d33a0_0 .net "clk", 0 0, v0x13d3c50_0; 1 drivers v0x13d3440_0 .var "done", 0 0; v0x13d3520_0 .net "resetb", 0 0, v0x13d3e60_0; 1 drivers v0x13d35c0_0 .net "start", 0 0, v0x13d3ee0_0; 1 drivers v0x13d36b0_0 .var "yout", 31 0; E_0x13a84c0/0 .event negedge, v0x13d3520_0; E_0x13a84c0/1 .event posedge, v0x13d33a0_0; E_0x13a84c0 .event/or E_0x13a84c0/0, E_0x13a84c0/1; .scope S_0x13ba290; T_1 ; %wait E_0x13a84c0; %load/v 8, v0x13d3520_0, 1; %inv 8, 1; %jmp/0xz T_1.0, 8; %ix/load 0, 32, 0; %assign/v0 v0x13ba380_0, 0, 0; %ix/load 0, 16, 0; %assign/v0 v0x13d3250_0, 0, 0; %ix/load 0, 32, 0; %assign/v0 v0x13d36b0_0, 0, 0; %ix/load 0, 1, 0; %assign/v0 v0x13d3440_0, 0, 1; %jmp T_1.1; T_1.0 ; %load/v 8, v0x13d35c0_0, 1; %jmp/0xz T_1.2, 8; %load/v 8, v0x13d31b0_0, 16; %mov 24, 0, 16; %ix/load 0, 32, 0; %assign/v0 v0x13ba380_0, 0, 8; %load/v 8, v0x13d32f0_0, 16; %ix/load 0, 16, 0; %assign/v0 v0x13d3250_0, 0, 8; %ix/load 0, 32, 0; %assign/v0 v0x13d36b0_0, 0, 0; %ix/load 0, 1, 0; %assign/v0 v0x13d3440_0, 0, 0; %jmp T_1.3; T_1.2 ; %load/v 8, v0x13d3440_0, 1; %inv 8, 1; %jmp/0xz T_1.4, 8; %load/v 8, v0x13d3250_0, 16; %mov 24, 0, 1; %cmpi/u 8, 0, 17; %inv 4, 1; %jmp/0xz T_1.6, 4; %load/v 8, v0x13d3250_0, 1; Only need 1 of 16 bits ; Save base=8 wid=1 in lookaside. %jmp/0xz T_1.8, 8; %load/v 8, v0x13d36b0_0, 32; %load/v 40, v0x13ba380_0, 32; %add 8, 40, 32; %ix/load 0, 32, 0; %assign/v0 v0x13d36b0_0, 0, 8; T_1.8 ; %load/v 8, v0x13d3250_0, 16; %ix/load 0, 1, 0; %mov 4, 0, 1; %shiftr/i0 8, 16; %ix/load 0, 16, 0; %assign/v0 v0x13d3250_0, 0, 8; %load/v 8, v0x13ba380_0, 32; %ix/load 0, 1, 0; %mov 4, 0, 1; %shiftl/i0 8, 32; %ix/load 0, 32, 0; %assign/v0 v0x13ba380_0, 0, 8; %vpi_call 2 81 "$display", "a = %h, b = %h, yout = %h", v0x13ba380_0, v0x13d3250_0, v0x13d36b0_0; %jmp T_1.7; T_1.6 ; %ix/load 0, 1, 0; %assign/v0 v0x13d3440_0, 0, 1; T_1.7 ; T_1.4 ; T_1.3 ; T_1.1 ; %jmp T_1; .thread T_1; .scope S_0x13ba1a0; T_2 ; %set/v v0x13d3c50_0, 0, 1; T_2.0 ; %delay 10, 0; %load/v 8, v0x13d3c50_0, 1; %inv 8, 1; %set/v v0x13d3c50_0, 8, 1; %jmp T_2.0; %end; .thread T_2; .scope S_0x13ba1a0; T_3 ; %set/v v0x13d3e60_0, 0, 1; %delay 30, 0; %set/v v0x13d3e60_0, 1, 1; %end; .thread T_3; .scope S_0x13ba1a0; T_4 ; %set/v v0x13d3de0_0, 0, 32; %delay 100, 0; %movi 8, 10, 5; T_4.0 %cmp/s 0, 8, 5; %jmp/0xz T_4.1, 5; %add 8, 1, 5; %vpi_func 2 130 "$random", 13, 32; %set/v v0x13d38d0_0, 13, 16; %vpi_func 2 130 "$random", 13, 32; %set/v v0x13d3990_0, 13, 16; %fork TD_mul16.test_multiply, S_0x13d3750; %join; %jmp T_4.0; T_4.1 ; %vpi_func 2 134 "$random", 8, 32; %set/v v0x13d38d0_0, 8, 16; %movi 8, 1, 16; %set/v v0x13d3990_0, 8, 16; %fork TD_mul16.test_multiply, S_0x13d3750; %join; %movi 8, 1, 16; %set/v v0x13d38d0_0, 8, 16; %vpi_func 2 135 "$random", 8, 32; %set/v v0x13d3990_0, 8, 16; %fork TD_mul16.test_multiply, S_0x13d3750; %join; %vpi_func 2 136 "$random", 8, 32; %set/v v0x13d38d0_0, 8, 16; %set/v v0x13d3990_0, 0, 16; %fork TD_mul16.test_multiply, S_0x13d3750; %join; %set/v v0x13d38d0_0, 0, 16; %vpi_func 2 137 "$random", 8, 32; %set/v v0x13d3990_0, 8, 16; %fork TD_mul16.test_multiply, S_0x13d3750; %join; %vpi_call 2 139 "$display", "Done. %0d Errors", v0x13d3de0_0; %delay 800, 0; %vpi_call 2 141 "$finish"; %end; .thread T_4; # The file index is used to find the file name in the following table. :file_names 3; "N/A"; ""; "ivtest-master/ivltests/mult16.v";