xilt

0.0.16 • Public • Published

Xilt - Command Line Tools for Xilinx Toolchain

Xilt is a command line tool for building Xilinx FPGA projects from the command line.

Overview

Xilt assumes Xilinx ISE WebPack 14.7 is installed and only works on 64-bit Linux systems (this is a deliberate design decision since the ISE isn't officially supported on current versions of Windows).

Xilt can be used to:

  • Build VHDL, Verilog and mixed mode FPGA projects.
  • Runs xst, ngdbuild, map, par and bitgen all from one command invocation.
  • Filters output to show errors and warnings while suppressing all other messages (these can be reviewed later in log if necessary).
  • Launch common Xilinx GUI tools (ISE, CoreGen and License Manager) without having to explicitly setup ISE environment paths.
  • Build places all intermediate files into a separate folder to keep your source folders clean.

Installation

Install with:

sudo npm install -g xilt

(Requires Node 8 or later)

Building with Xilt

To build a project for an FPGA device, run xilt build, specifying the following options (most optional) and a list of vhdl, verilog files (and one .ucf file)

  • --device:val set the Xilinx device name (required)
  • --intDir:val set the intermediate build directory (default: ./build)
  • --outDir:val set the output folder for .bit file (default: intermediate directory)
  • --projectName:val set the name of the project (default: folder name)
  • --topModule:val set the name of the top module (default: project name)

eg:

xilt build --device:xc6slx9-2-tqg144 myproj.vhd myproj.ucf

Building ISim Simulations

To build a project for simulation, run xilt buildsim specifying the following options (most optional) and a list of vhdl, verilog files (and one .ucf file)

  • --intDir:val set the intermediate build directory (default: ./build)
  • --outDir:val set the output folder for .bit file (default: intermediate directory)
  • --projectName:val set the name of the project (default: folder name)
  • --topModule:val set the name of the top module (default: project name)

The output directory will contain two files: (where "MyTopModule" is the name of your top module)

  • MyTopModule-sim - the generated ISim executable
  • MyTopModule-isim - a bash script to setup the xilinx environment path and run the executable

Run the simulator like so:

$ cd buildDir; ./MyTopModule-isim -gui

Passing Arguments to Xilinx Toolchain

To pass arguments to the underlying tools invoked by xilt, specify those options by prefixing them with the tool name:

  • --xst_<name>[:val] sets additional arguments to pass to xst
  • --ngcbuild_<name>[:val] sets additional arguments to pass to ngdbuild
  • --map_<name>[:val] sets additional arguments to pass to map
  • --par_<name>[:val] sets additional arguments to pass to par
  • --bitgen_<name>[:val] sets additional arguments to pass to bitgen

For example to invoke bitgen with -g StartupClk:CCLK use:

--bitgen_g:StartupClk:CCLK

Response Files

You can pass additional command line arguments via a response file. A response file is a simple text file that lists out additional command line options. To reference a response file on the command line, preceeed the file name with an @ symbol.

Response files are a great way to collect all the settings required for a particular FPGA board into one central location. eg: the following will load additional command line arguments from the file ./boards/mimasv2-xilt/txt.

xilt build --projectName:blah @./boards/mimasv2-xilt.txt 

The mimasv2-xilt.txt can contain all the require Xilinx command line switches required for that board:

--device:xc6slx9-2-CSG324
--map_w
--par_w
--bitgen_w
--bitgen_g:Binary:yes
... etc ... etc ...

Dependency Scanning

Xilt includes a simple dependency scanning capability that assumes the names of VHDL entities and packages are located in files with the same name as the required entity/package.

eg:

Suppose you had an entity named SevenSegmentHexDisplay that was referenced in your top.vhd file like so

    -- Use an instance of the SevenSegmentHexDisplay component
    display : entity work.SevenSegmentHexDisplay
    PORT MAP 
    (
        -- etc..
    )

and suppose all your shared components like this reside in folder at ../components then running the following command:

xilt scandeps *.vhd *.ucf --deppath:../components

should find all the required files and output something like this:

top.vhd
myproject.ucf
../components/SevenSegmentHexDisplay.vhd

Note that if SevenSegmentHexDisplay entity also referenced other entities, the scandep function would also try to locate those.

Dependency scanning is a simple regex search and looks for entity and use statements the use components from the work library.

You can also explicitly declare a required file with a comment of the form:

--xilt:require:../lib/somefolder/my_oddly_named_component.vhd

Dependency scanning is completely separate from the build process and is intended to be used by a make file to build a list of input files to the build (which would then be passed back to xilt to do the actual build).

Suppressing Warnings

Xilt can suppress warnings that have been deemed to be benign. To suppress a warning, include a comment of the following form in any of the VHDL source files.

--xilt:nowarn:<text>

or

--xilt:nowarn:~<regexp>

Any warning messages that match the text or regular expression will be suppressed from the stdout. The messages will still be included in the report files.

Note that any directives to suppress warnings apply to all source files being compiled - not just the file in which they appear. Be careful to not suppress warnings you don't intend by including specific details from the warning such as the block and the signal name.

Periodically you should check the full reports for warnings, or use the --nofilter command line switch to disable this feature and report all warnings.

The following are some common benign warnings you might like to suppress globally.

-- Input <X> is never used. This port will be preserved and left unconnected if it 
-- belongs to a top-level block or it belongs to a sub-block and the hierarchy of this 
-- sub-block is preserved.
--xilt:nowarn:~^WARNING:Xst:647

-- FF/Latch <X> (without init value) has a constant value of <Y> in block <Z>. 
-- This FF/Latch will be trimmed during the optimization process.
--xilt:nowarn:~^WARNING:Xst:1710

-- Due to other FF/Latch trimming, FF/Latch <X> (without init value) has a constant
-- value of Y in block <Z>. This FF/Latch will be trimmed during the optimization process.
--xilt:nowarn:~^WARNING:Xst:1895

-- FFs/Latches <o_sd_op_cmd<1:1>> (without init value) have a constant value of <X> in 
-- block <Y>.
--xilt:nowarn:~^WARNING:Xst:2404

-- Node <X> of sequential type is unconnected in block <Y>.
--xilt:nowarn:~^WARNING:Xst:2677

-- WARNING:PhysDesignRules:2410 - This design is using one or more 9K Block RAMs
--   (RAMB8BWER).  9K Block RAM initialization data, both user defined and
--   default, may be incorrect and should not be used.  For more information,
--   please reference Xilinx Answer Record 39999.
--xilt:nowarn:~^WARNING:PhysDesignRules:2410

Message Reformatting

Xilt can reformat Xilinx error, warning and informational messages into a more commonly used formats with the --messageFormat:val command line switch. This can make it easier to integrate with editor problem matchers.

Available formats include:

  • ms | msCompile - Microsoft compiler error format (works with $msCompile problem match in VS Code)
  • gcc - The gcc compiler error format (works with $gcc problem matcher in VS Code if installed).

Also, when messages are reformatted xilt tries to locate various signals, entities etc... in the input source files to provide file and line number information for many messages that the Xilinx tools don't normally provide. This depends on the unit/block/entity names matching the name of the file they're declared in and uses a simple regex to locate the signal/port being referenced.

If message filtering is being used (see above), the filters are matched against both the original message string and the reformatted message.

Message Reformatting for GHDL

Similarly to the message filtering for the Xilinx tools described above, xilt can also filter the messages fom GHDL and reformat them into $msCompile format.

xilt ghdl-filter [ghdl command line]

There are no other command line options to the action and you must include the ghdl command (including its full path if not on system path) on the command line.

GIT Root Paths

Sometimes it's handy to reference files relative to the root of the project workspace.

To support this, most filenames and paths handled by xilt can use the special double slash file prefix to mean the project root - which is determined by walking the parent directory chain from the current directory until a .git folder is found.

eg: suppose you have this project structure

$/Projects/MyProject/
    .git
    shared/
    Project1/
    Project2/
        part1
        part2

Using the path //shared will work from within any of the project sub-folders such as /Project1 and /Project2/part1/.

Launching Xilinx GUI Tools

To launch Xilinx GUI Tools, use xilt <toolname>.

  • xilt coregen launch Xilinx Core Generator
  • xilt ise launch Xilinx ISE
  • xilt xlcm launch Xilinx license manager

Other

Other command line options include:

  • --debug Logs file dependency checks
  • --verbose Displays lots of output and disables default output filtering
  • --help Displays help
  • --deppath Sets a path to be searched for dependency files
  • --nofilter Ignores all --xilt:nowarn directives
  • --messageFormat:msCompile|gcc|ise Reformats messages to Microsoft of GCC message format

Dependencies (1)

Dev Dependencies (0)

    Package Sidebar

    Install

    npm i xilt

    Weekly Downloads

    2

    Version

    0.0.16

    License

    Apache

    Unpacked Size

    53.2 kB

    Total Files

    12

    Last publish

    Collaborators

    • toptensoftware