Skip to content

FEntwumS/FEntwumS.NetlistViewer

Repository files navigation

Important

This is a beta release. Bugs are to be expected. If you notice any issues, please submit bug reports to help us improve the software.

System requirements

Currently, only Windows and Linux are supported, but the plugin should work on all platforms OneWare Studio runs on, except browsers.

Dependencies

The FEntwumS Netlist Viewer depends on the following OneWare Studio plugins. Please install them before you install the Netlist Viewer.

Category Dependency Minimum version
Plugins > Simulators GHDL Extension 0.10.7
Binaries GHDL 5.0.1
Binaries OSS CAD Suite 2025.01.22

Alternatively, you can enable Automatically download binaries from the Experimental Settings Category in OneWare Studio. If this setting is enabled, the netlist viewer will automatically download all dependencies.

Limitations

The viewer currently only supports designs written either exclusively in VHDL or exclusively in Verilog. While mixed Verilog/SystemVerilog designs can likely be displayed, this is not guaranteed.

About

This repository contains the source code for two plugins for OneWare Studio. They are developed by TH Köln (University of Applied Sciences Cologne) as part of the FEntwumS research project.

Installation

This plugin and all its dependencies are available in the package manager. Just follow these steps to install it:

  1. Open the package manager
  2. Install the FEntwumS.NetlistViewer Extension plugin
  3. Install the GHDL Extension plugin
  4. Install the FEntwumS NetlistViewer Backend, GHDL and Eclipse Adoptiom OpenJDK binaries using the package manager
  5. And that's it. You have successfully installed the FEntwumS Netlist Viewer. For usage instructions, see the following sections

Netlist viewer

The FEntwumS Netlist Viewer plugin allows users to automatically generate and interactively view netlists for their HDL designs inside OneWare Studio. It is a frontend building on the FEntwumS Netlist Reader Backend. You can run the backend, which does all the layouting, either on your local machine or on a remote server in your local network. The default (and recommended) configuration is to run the backend locally. If this is all you need, you just need to install the plugin. It will install and start the backend automatically. You may be prompted to allow network access for the OpenJDK binary by your operating system. Please grant this access, otherwise the netlist viewer will not work.

Using a remote backend

If you plan on using a local backend install (the default and recommended case), you can skip this section.

If you want to use a remote backend, you will need to deploy it yourself. Instructions on how to do so can be found here. Since the traffic between the backend and the viewer is neither encrypted nor authenticated, you should only use a remote backend within local and trusted networks.

When you have your backend up and running, you will need to enter the backends IP address and port (the default port is 8080) in the settings. You also need to uncheck the box for "Use local backend server".

Viewing your design

Now that you have installed the plugin, you can start viewing and interacting with your HDL designs. By simply right-clicking your top level entity and choosing the "View netlist for [insert your entity here]", the plugin will automatically generate a netlist using yosys and then display it in a new tab. You can zoom using your mouse wheel, clicking and dragging with the left mouse button pans the view and left-clicking on an entity will either expand or collapse it (depending on whether the entity is collapsed or not).

Left-clicking on a cell will open the corresponding HDL file.

Viewing a generated netlist

IMPORTANT⚠: The backend only supports netlists generated by Yosys 0.49 and newer, as it uses the flatten separator, which needs to be set using scratchpad -set flatten.separator \";\".

There are certain requirements that a netlist needs to fulfill to be viewable by the netlist viewer. At a minimum, it needs to be flattened (preferably using the -scopename option), the toplevel entity needs to be specified using the hierarchy command and all blackbox cells such as device specific primitives need to have port direction information. The netlist file needs to be of the .json filetype. To ensure that device specific primitives contain information on port directions, load the appropriate libraries. For example, to add this information for the device primitives of the Cologne Chip Gatemate series of FPGAs you need to run read_verilog -lib -specify +/gatemate/cells_sim.v +/gatemate/cells_bb.v. The appropriate command can be found on the synthesis page for the FPGA you are using.

The recommended command to generate a netlist is scratchpad -set flatten.separator \";\"; hierarchy -check -top <top>; proc; memory -nomap; flatten -scopename; write_json -compat-int <top>.json. This sequence expects the HDL files to be fully loaded (e.g. using the read_verilog command).

While the viewing of post-synthesis netlists is currently not well-supported, you should be able to view most post-synthesis netlists.

Since OneWare Studio does not show json files in the Project Explorer, you will need to add the .json filetype manually. To do this, please right click on the project containing the netlist, choose the Edit option and add an entry *.json to the list Files to Include.

Available settings

The FEntwumS Netlist Viewer adds several global and project-specific settings to OneWare Studio.

Global settings

Category Name Description Intended Use
Backend Path to folder containing server jar Points the plugin to the location of the backend executable Plugin development
Backend Path to folder containing java binary Points the plugin to the location of the java executable Plugin development
Backend Extra arguments for the Java Virtual Machine Settings that will be passed to the JVM during its creation Plugin development, memory size adjustment
Backend Server address The address under which the backend is reachable Specifying the location of a remote backend
Backend Port The port on which the backend listens Specifies the port of a remote backend
Backend Request timeout Time in seconds after which requests to the backend time out Large designs can take quite a while to be read, this sets a hard cutoff
Backend Use local backend server Whether to use the local backend Untick if you want to use a remote backend
FPGA FPGA manufacturer Global FPGA manufacturer Default value, can be overridden in the settings of each project
FPGA Device Family Global device family Default value, can be overridden in the settings of each project
Font sizes Entity Label Font Size Font size to be used in the netlist view for entities Self explanatory
Font sizes Cell Label Font Size Font size to be used in the netlist view for cells Self explanatory
Font sizes Edge Label Font Size Font size to be used in the netlist view for connections Self explanatory
Font sizes Port Font Size Font size to be used in the netlist view for ports Self explanatory
Experimental Continue if errors occur during dependency installation Disables the dependency version checker Plugin development
Experimental Use hierarchical backend Uses the backend for hierarchical netlists Beta-testing the hierarchical backend
Experimental Performance Target Sets the way the hierarchical backend loads enitities from the netlist Testing the different modes
Experimental Always regenerate netlists By unticking this checkbox, netlists are only generated for the netlist viewer if the underlying HDL files changed Beta-testing performance improvements
Experimental Enable hierarchy view Enables two views that allow for the easy exploration of the design's hierarchy Beta-testing the hierarchy view
Experimental Automatic netlist generation Allows enabling and setting the mode for automatic netlist generation following changes to the underlying HDL source files Beta-testing automatic netlist generation
Experimental Automatic netlist generation interval (s) The interval in which netlists shall be regenerated, if Automatic netlist generation is set to interval. Measured in seconds Beta-testing automatic netlist generation

Project-specific settings

Name Description Availability
FPGA Manufacturer Overrides the global FPGA manufacturer setting All projects
Device family Overrides the global FPGA device family setting All projects

Troubleshooting

I cannot find a suitable OSS Cad Suite Integration plugin version

Please make sure your version of OneWare Studio has all updates installed. An appropriate version of the OSS Cad Suite Integration plugin is available in OneWare Studio 0.21.1.0 and later.

I started OneWare Studio and the tab that should show my netlist is empty

Currently, it is not possible to store the netlist when OneWare Studio is closed. Please close the tab and regenerate the netlist.

ERROR: GHDL standard is not set

Please edit your project settings to include the used VHDL-Standard.

ERROR: Module ... is not part of the design

Please make sure that you have specified the correct device manufacturer and device family in the project settings. The available options are listed on the synth_<...> pages in the Yosys documentation.

ERROR: Module <...> not found!

If you have recently updated any plugins, e.g. the OSS Cad Suite integration plugin, please restart OneWare Studio. If this issue persists after a restart, please file a bug report.

I generated a netlist using the OneWare Studio command, but I can't see all my entity instances

The builtin Json Netlist generation does not output a flattened netlist. If you want to be able to expand your entities, you need to right-click your toplevel entity and use the "View netlist for [...]" option.

I generated a netlist myself, but I can't seem to find it in the project explorer

By default, OneWare Studio does not display .json files in the project explorer. To fix this, you will need to add the .json filetype manually. To do this, please right-click on the project containing the netlist, choose the Edit option and add an entry *.json to the list Files to Include.

An internal server error occured. Please file a bug report if this problem persists.

First, please make sure that you have selected the correct device manufacturer and device family in the settings. If the design you are trying to view is written in VHDL, make sure that you have set the correct VHDL standard level in the project settings (the default is 93c). You can find a detailed explanation of the VHDL standard levels in the GHDL documentation.

Please file a bug report including the netlist that you wanted to view. If you used our plugin to generate the netlist, you can find the file under build/netlist/<top>-hier.json in your project directory. This folder is hidden inside OneWare Studio by default, so you may need to use your system's file explorer to retrieve the file.

The server could not be reached or The address ... could not be resolved

If you are using a remote backend installation, please make sure that you have entered the correct backend address and port and that the provided address is reachable.

If you are using a local backend installation, please file a bug report.

I get an error telling me to update one of my OneWare Studio plugins, but I am unable to do so because I depend on the specific version that is installed

To ensure that all the OneWare Studio plugins the netlist viewer depends on are installed, a check is run. If this check fails for you, for example due to using an older version of a certain plugin, you can tick the Continue if errors occur during dependency installation checkbox in the experimental section of the Netlist Viewer's settings. By enabling this setting, the result of the check is ignored. This means that you are on your own! While it may look as if everything is working as intended, this configuration is not supported and can stop working at any moment without notice.

Contributors

Languages