UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
2,918 Views
Registered: ‎08-11-2017

Elaboration system task in SystemVerilog

Jump to solution

I'm trying to synthesize the following SystemVerilog module in Vivado:

 

module ok_trigger_in #(addr=8'h40) (
    ok_ep_bus.ep ep,
    input bit clk,
    output bit [31:0] dout
    );

    if (addr < 8'h40 || addr > 8'h5f)
        $fatal(0, "Bad address for okTriggerIn. Correct address range is 0x40 - 0x5F.");

    okTriggerIn u_ep(.okHE(ep.HE), .ep_addr(addr), .ep_clk(clk), .ep_trigger(dout));
endmodule

 

Vivado synthesis prints: "WARNING: [Synth 8-1921] elaboration system task fatal violates IEEE 1800 syntax" and ignores the line. (i.e. when I instantiate the module with a bad value of the "addr" parameter, it does not stop synthesis.)

Tags (1)
0 Kudos
1 Solution

Accepted Solutions
Xilinx Employee
Xilinx Employee
2,770 Views
Registered: ‎01-11-2011

Re: Elaboration system task in SystemVerilog

Jump to solution

Currently Vivado does not support the $fatal SystemVerilog system task. However in 2017.x versions, we do have limited capabilities for messaging similar to $fatal, by using $info, $warning, and $error.

 

$info("info");
$warning("warning");
$error("error");

 

INFO: [Synth 8-5572] Synth: info
WARNING: [Synth 8-5572] Synth: warning
ERROR: [Synth 8-5572] Synth: error

 

$error will stop Synthesis from completing. Note that this is supported only within initial blocks, and can only be used to evaluate constant expressions; for example, parameters. This is also noted in the Synthesis User Guide for 2017.4 (http://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug901-vivado-synthesis.pdf).

-------------------------------------------------------------------------
Please don’t forget to reply, kudo, and accept as solution!
-------------------------------------------------------------------------
0 Kudos
4 Replies
Scholar markcurry
Scholar
2,889 Views
Registered: ‎09-16-2009

Re: Elaboration system task in SystemVerilog

Jump to solution

 

Which version of Vivado?  I believe they added this support in 2017.1.  It was a missing feature that was available in ISE that is/was missing in Vivado.  I can dig through some notes to confirm, but check your Vivado version and/or try the latest version.

 

Regards,

 

Mark

 

0 Kudos
2,873 Views
Registered: ‎08-11-2017

Re: Elaboration system task in SystemVerilog

Jump to solution

I am on 2017.1. I couldn't find any mention of it in the 2017.2 release notes.

0 Kudos
Visitor avelure
Visitor
2,498 Views
Registered: ‎10-23-2017

Re: Elaboration system task in SystemVerilog

Jump to solution

This issue is also present in 2017.4

The syntax looks right according to IEEE std 1800-2005 which the warning is referring to

fatal_message_task ::= $fatal [ ( finish_number [ , message_argument { , message_argument } ] ) ] ;

— $fatal shall generate a run-time fatal assertion error, which terminates the simulation 
with an error code. The first argument passed to $fatal shall be consistent with the corresponding
argument to the Verilog $finish system task, which sets the level of diagnostic information reported
by the tool. Calling $fatal results in an implicit call to $finish.
0 Kudos
Xilinx Employee
Xilinx Employee
2,771 Views
Registered: ‎01-11-2011

Re: Elaboration system task in SystemVerilog

Jump to solution

Currently Vivado does not support the $fatal SystemVerilog system task. However in 2017.x versions, we do have limited capabilities for messaging similar to $fatal, by using $info, $warning, and $error.

 

$info("info");
$warning("warning");
$error("error");

 

INFO: [Synth 8-5572] Synth: info
WARNING: [Synth 8-5572] Synth: warning
ERROR: [Synth 8-5572] Synth: error

 

$error will stop Synthesis from completing. Note that this is supported only within initial blocks, and can only be used to evaluate constant expressions; for example, parameters. This is also noted in the Synthesis User Guide for 2017.4 (http://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug901-vivado-synthesis.pdf).

-------------------------------------------------------------------------
Please don’t forget to reply, kudo, and accept as solution!
-------------------------------------------------------------------------
0 Kudos