#! /usr/bin/env vvp -v :vpi_time_precision + 0; :vpi_module "system"; S_test .scope module, "test"; V_test.val1 .var "val1", 3, 0; V_test.val2 .var "val2", 3, 0; V_test._L0 .net "_L0", 1, 0, C<0>, C<1>; V_test._L3 .net "_L3", 0, 0, C<0>; V_test._L4 .net "_L4", 0, 0, L_test._L5; L_test._L5/L0C0 .functor XNOR, V_test.val1[0], C<0>, C<0>, C<0>; L_test._L5/L0C1 .functor XNOR, V_test.val1[1], C<1>, C<0>, C<0>; L_test._L5/L0C2 .functor XNOR, V_test.val1[2], C<0>, C<0>, C<0>; L_test._L5/L0C3 .functor XNOR, V_test.val1[3], C<0>, C<0>, C<0>; L_test._L5 .functor AND, L_test._L5/L0C0, L_test._L5/L0C1, L_test._L5/L0C2, L_test._L5/L0C3; fofu .force V_test.val2, L_test._L5, C<0>, C<0>, C<0>; .scope S_test; T_0 ; %set V_test.val2[0], 0; %set V_test.val2[1], 0; %set V_test.val2[2], 0; %set V_test.val2[3], 0; %set V_test.val1[0], 0; %set V_test.val1[1], 1; %set V_test.val1[2], 0; %set V_test.val1[3], 0; %delay 50; %load 8, V_test.val2[0]; %load 9, V_test.val2[1]; %load 10, V_test.val2[2]; %load 11, V_test.val2[3]; %mov 12, 1, 1; %mov 13, 0, 3; %cmp/u 8, 12, 4; %inv 6, 1; %mov 8, 6, 1; %jmp/0xz T_0.0, 8; %vpi_call "$display", "force FAILED"; %jmp T_0.1; T_0.0 ; %vpi_call "$display", "force PASSED"; T_0.1 ; %delay 50; %load 8, V_test.val2[0]; %load 9, V_test.val2[1]; %load 10, V_test.val2[2]; %load 11, V_test.val2[3]; %mov 12, 1, 1; %mov 13, 0, 3; %cmp/u 8, 12, 4; %inv 6, 1; %mov 8, 6, 1; %jmp/0xz T_0.2, 8; %vpi_call "$display", "release PASSED"; %jmp T_0.3; T_0.2 ; %vpi_call "$display", "release FAILED"; T_0.3 ; %end; .thread T_0; .scope S_test; T_1 ; %delay 20; %force fofu[0], 4; %delay 40; %release V_test.val2[0]; %release V_test.val2[1]; %release V_test.val2[2]; %release V_test.val2[3]; %end; .thread T_1;