Questasim question

Hi guys!
When I compile vmm-1.1 under questasim 6.4c.
I fix all the warning but the following fatal error occur.
There isn’t any more message.
So who can tell me What’s the meaning of “Fatal: Unexpected signal: 11.”.
and how to fix this fatal error.
Thanks

QuestaSim vlog 6.4c Compiler 2008.12 Dec 8 2008

** Fatal: Unexpected signal: 11.

** Error: Verilog Compiler exiting

C:/questasim_6.4c/win32/vlog failed.

vmm_opts.sv
154
From

function vmm_opts_info vmm_opts::get_opts_by_name(string name);
string vname = {“vmm_”, name};
string format;
vmm_opts_info oinfo;
int idx[$];

if (!opts_extracted)
void’(extract_opts_info());

if (opts_info.exists(name)) begin
oinfo = opts_info[name];
end
else begin
oinfo = new(name);
opts_info[name] = oinfo;
end

if (!oinfo.expected && $test$plusargs(vname)) begin
string sarg, format;
oinfo.opt_specified = 1;
format = `vmm_sformatf(“vmm_%s=%%s”, name);
if ($value$plusargs(format, sarg)) begin
oinfo.sarg = sarg;
oinfo.arg_specified = 1;
end
end
oinfo.expected = 1;

return oinfo;
endfunction

To

function vmm_opts_info vmm_opts::get_opts_by_name(string name=“”);
string vname = {“vmm_”, name};
string format;
vmm_opts_info oinfo;
vmm_opts_info oinfob;
int idx[$];
oinfob = new(name);

if (!opts_extracted)
void’(extract_opts_info());

if (opts_info.exists(name)) begin
oinfo = opts_info[name];
end
else begin
oinfo = oinfob;
opts_info[name] = oinfo;
end

if (!oinfo.expected && $test$plusargs(vname)) begin
string sarg, format;
oinfo.opt_specified = 1;
format = `vmm_sformatf(“vmm_%s=%%s”, name);
if ($value$plusargs(format, sarg)) begin
oinfo.sarg = sarg;
oinfo.arg_specified = 1;
end
end
oinfo.expected = 1;

return oinfo;
endfunction

I have already run vmm1.1 under questasim 6.4c.
I run the test case ethernet well.
but still a little problem.
This error does not affect simulation.

** Error: (vsim-8385) …/…/…/…/sv/std_lib/vmm_xactor.sv(23): fork…join_none statements in function ‘new’ only allowed if the calling process originates in an initial or always block.

vmm_ms_scenario_gen.sv
line 460
From:

function int vmm_ms_scenario_gen::get_ms_scenario_index(vmm_ms_scenario scenario);
get_ms_scenario_index = -1;
foreach(this.scenario_set[i]) begin
if(this.scenario_set[i] == scenario) begin
return (get_ms_scenario_index = i);
end
end
if(get_ms_scenario_index == -1) begin
vmm_warning(this.log, vmm_sformatf(“Cannot find the index for the ms scenario”));
end
endfunction: get_ms_scenario_index

TO:

function int vmm_ms_scenario_gen::get_ms_scenario_index(vmm_ms_scenario scenario);
get_ms_scenario_index = -1;
foreach(this.scenario_set[i]) begin
if(this.scenario_set[i] == scenario) begin
get_ms_scenario_index = i;
return get_ms_scenario_index ;
end
end
if(get_ms_scenario_index == -1) begin
vmm_warning(this.log, vmm_sformatf(“Cannot find the index for the ms scenario”));
end
endfunction: get_ms_scenario_index

vmm_version.sv
line 112
From
$write(“\n”);
$write(“%s VMM_SCENARIO %s\n”,
prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO));
$write(“%s VMM_SCENARIO_NEW_ARGS %s\n”,
prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_NEW_ARGS));
$write(“%s VMM_SCENARIO_NEW_EXTERN_ARGS %s\n”,
prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_NEW_EXTERN_ARGS));
$write(“%s VMM_SCENARIO_NEW_CALL %s\n”,
prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_NEW_CALL));
$write(“%s VMM_SCENARIO_BASE %s\n”,
prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_BASE));
$write(“%s VMM_SCENARIO_BASE_NEW_ARGS %s\n”,
prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_BASE_NEW_ARGS));
$write(“%s VMM_SCENARIO_BASE_NEW_EXTERN_ARGS %s\n”,
prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_BASE_NEW_EXTERN_ARGS));
$write(“%s VMM_SCENARIO_BASE_NEW_CALL %s\n”,
// prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_BASE_NEW_CALL));

To

// $write(“\n”);
// $write(“%s VMM_SCENARIO %s\n”,
// prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO));
// $write(“%s VMM_SCENARIO_NEW_ARGS %s\n”,
// prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_NEW_ARGS));
// $write(“%s VMM_SCENARIO_NEW_EXTERN_ARGS %s\n”,
// prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_NEW_EXTERN_ARGS));
// $write(“%s VMM_SCENARIO_NEW_CALL %s\n”,
// prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_NEW_CALL));
// $write(“%s VMM_SCENARIO_BASE %s\n”,
// prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_BASE));
// $write(“%s VMM_SCENARIO_BASE_NEW_ARGS %s\n”,
// prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_BASE_NEW_ARGS));
// $write(“%s VMM_SCENARIO_BASE_NEW_EXTERN_ARGS %s\n”,
// prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_BASE_NEW_EXTERN_ARGS));
// $write(“%s VMM_SCENARIO_BASE_NEW_CALL %s\n”,
// prefix, VMM_MACRO_TO_STRING(VMM_SCENARIO_BASE_NEW_CALL));

vmm_log.sv
line
From

`ifdef VCS
function void vmm_log_catcher::issue(vmm_log_msg msg);
this.issued = 1;
endfunction:issue

function void vmm_log_catcher::throw(vmm_log_msg msg);
this.thrown = 1;
endfunction:throw

`endif

To
function void vmm_log_catcher::issue(vmm_log_msg msg);
this.issued = 1;
endfunction:issue

function void vmm_log_catcher::throw(vmm_log_msg msg);
this.thrown = 1;
endfunction:throw

vmm_opts.sv
154
From

function vmm_opts_info vmm_opts::get_opts_by_name(string name);
string vname = {“vmm_”, name};
string format;
vmm_opts_info oinfo;
int idx[$];

if (!opts_extracted)
void’(extract_opts_info());

if (opts_info.exists(name)) begin
oinfo = opts_info[name];
end
else begin
oinfo = new(name);
opts_info[name] = oinfo;
end

if (!oinfo.expected && $test$plusargs(vname)) begin
string sarg, format;
oinfo.opt_specified = 1;
format = `vmm_sformatf(“vmm_%s=%%s”, name);
if ($value$plusargs(format, sarg)) begin
oinfo.sarg = sarg;
oinfo.arg_specified = 1;
end
end
oinfo.expected = 1;

return oinfo;
endfunction

To

function vmm_opts_info vmm_opts::get_opts_by_name(string name=“”);
string vname = {“vmm_”, name};
string format;
vmm_opts_info oinfo;
vmm_opts_info oinfob;
int idx[$];
oinfob = new(name);

if (!opts_extracted)
void’(extract_opts_info());

if (opts_info.exists(name)) begin
oinfo = opts_info[name];
end
else begin
oinfo = oinfob;
opts_info[name] = oinfo;
end

if (!oinfo.expected && $test$plusargs(vname)) begin
string sarg, format;
oinfo.opt_specified = 1;
format = `vmm_sformatf(“vmm_%s=%%s”, name);
if ($value$plusargs(format, sarg)) begin
oinfo.sarg = sarg;
oinfo.arg_specified = 1;
end
end
oinfo.expected = 1;

return oinfo;
endfunction

vmm_ral_mem.sv
176
From
extern /local/ function vmm_ral_access Xget_ral_accessX();
To
// extern /local/ function vmm_ral_access Xget_ral_accessX();

vmm_scenario_gen.sv
line 70
From
solve length before items.size() VMM_SOLVE_BEFORE_OPT; To /* solve length before items.size() VMM_SOLVE_BEFORE_OPT;*/

vmm_data.sv
line 148
To
input int unsigned offset = 0,

vmm_scenario.sv
line 30
To
function string vmm_scenario::psdisplay(string prefix = “”);

vmm_ms_scenario_gen.sv
23
To
function vmm_ms_scenario::new(VMM_SCENARIO parent = null VMM_SCENARIO_NEW_ARGS);

vmm_ms_scenario_gen.sv
54
To
function vmm_ms_scenario vmm_ms_scenario::get_ms_scenario(string scenario, string gen = “”);

vmm_ms_scenario_gen.sv
98
To
function vmm_ms_scenario_gen::new(string inst,
int stream_id = -1
`VMM_XACTOR_NEW_ARGS);

vmm_ms_scenario_gen.sv
152
To

function void vmm_ms_scenario_gen::reset_xactor(vmm_xactor::reset_e rst_typ = SOFT_RST);

vmm_log.sv(551)
vmm_log.sv(552)
vmm_log.sv(553)
vmm_log.sv(563)
vmm_log.sv(564)
vmm_log.sv(565)

        void'(this.text("Over 200 vmm_log instances have been created."));         
        void'(this.text("Check that all vmm_data extensions use a static instance")
        void'(this.text("or use +vmm_log_nowarn_at_200 to disable this warning."));
        void'(this.text("Over 1000 vmm_log instances have been created."));
        void'(this.text("Check that all vmm_data extensions use a static instance"));
        void'(this.text("or use +vmm_log_nofatal_at_1000 to disable this failure."));

vmm_log.sv(1774)
void’(this.text(“Callback has already been registered”));
vmm_log.sv(1757)
void’(this.text(“Callback has already been registered”));
vmm_log.sv(1797)
vmm_env.sv(377)
return prefix;
vmm_subenv.sv(85)
return prefix;
vmm_xactor.sv(544)
return prefix;

Try +define+NO_STATIC_METHODS on your vlog command line. It appears the new vmm_opts class introduces a race condition during static initialization. Setting this define removes the unnecessary static qualifiers on the methods in vmm_opts. This will get you past your present problem.

You will probably also want to remove the static qualifier for the vmm_xactor_iter::_vmm_xactor variable. The vmm_xactor class’ new method calls fork-join_none. This is only legal if new is called from an initial block. In this case, it is not. It is called from a static initializer.