Sigasi's Blog

This website hosts blogs on multiple topics that relate to the world, work and lives of Sigasi team members.

Sigasi HDT
All blog posts related to our product, Sigasi HDT: tips and tricks, howtos, feature discussions, ...
Jan on HDL design
Jan's blog about his personal views on HDL design. Relevant for the future, but aware of the past.
VHDL
Posts that will make you a better VHDL designer, regardless of the tools you use.
Developing for Eclipse
We develop on top of Eclipse, so we have some experience in this field. In this feed, we share some of this experience.

You can easily subscribe to each of these blogs by clicking the rss icons. It is also possible to subscribe to all blog posts

Learning from LEON3/GRLIB (part 1/3)

The LEON3/GRLIB project from Airoflex Gaisler (formerly Gaisler Research) is one of the largest open source VHDL projects. It contains almost 700 VHDL files, for a total of 600.000 lines of code. The project is based on the AMBA on-chip bus and serves as a framework for building SoCs. It is used in consumer electronics, automotive and aerospace applications.

How to work with Gaisler's Leon3 SPARC processor

Big projects

During our beta period, some people have had trouble loading very large designs into Sigasi HDT. The processing power required by Sigasi HDT rises with the size of your project, as opposed to the processing power required by a VHDL editor which increases with the size of the file you are editing.

We have been working on improving the responsiveness of Sigasi HDT, and to demonstrate this, I'd like to show you how you use Sigasi HDT to navigate and edit one of the largest open source hardware projects: Gaisler's Leon3 SPARC processor and its accompanying libraries (commonly known as GRLIB). I've downloaded the GRLIB project, and set it up to work with Sigasi HDT. GRLIB uses a lot of different libraries:

libraries in GRLIBlibraries in GRLIB

Still fast

To start off with some performance figures on my computer. I have a standard desktop computer, Core 2 Duo and 2 GiB or RAM. Nothing fancy.
The initial compilation of the full GRLIB project takes 35 seconds on my machine, using a Java heap space of less than 500 MiB. In fact, our upcoming release (due Februari 2010) will knock an extra 40% off that compilation time, bringing it to 20 seconds.

Once Sigasi HDT is started and the project is fully compiled, you move to full speed. If you edit a file an save it, Sigasi HDT will not recompile the full project, but only the small subset that is required to make its internal data structures consistent with your project. This usually takes less than a second.

Try it yourself

Taking a look at other people's code is always a good way to learn. This is especially true for large industrial projects, like GRLIB, rather than hello-world style toy projects. I'd like to thank Jiri and the people from Airoflex Gaisler for sharing this project with the world under the GPL license. (Note that you can purchase a commercial license from Airoflex if you need that.)

To look at GRLIB using Sigasi HDT, you can download a free trial license. After you've started Sigasi HDT, just click "Point to existing project", and you're set to go.

Download the GRLIB project. I've packaged release 1.0.20-b3403, with one actual design and the VHDL libraries that it requires.

What do you think?

I'd love to hear which publicly available VHDL projects you have inspected and learned from. Was it easy to understand them? Were the files well-structured? Did it include documentation or did you have to dive in head first?

The latest EDA innovation: logic synthesis!

A few months ago Richard Goering blogged about the 5 greatest moments in EDA innovation. Here is the list: Spice, Verilog, Multi-level logic synthesis, Automated IC layout and Structured VLSI design.

I would make some minor edits to the list. Instead of Verilog, I would nominate VHDL and Verilog, because I believe we have at least as much to thank to VHDL as to Verilog. Instead of multi-level logic synthesis, I would list RTL synthesis, because that has been the standard for digital design standard during the last 20 years. It builds on logic synthesis by adding the concept of synthesizing from clocked hardware descriptions written in a hardware description language.

On a sidenote, it's kind of funny that Mr. Goering mentions a lot of synthesis technology contributors, but not Synopsys, the company that made it all happen. But OK, that's Cadence company policy I guess.

Overall, I agree with the list. Its most remarkable feature is that all these great innovations are quite old. By 1985, the year I graduated as an engineer, the fundamental research and development for all of them had been done. By 1990, the year I became a hardware designer for real, all were well-established solutions. In fact, if the list would have been compiled 15 years ago, I think it would have been exactly the same.

The youngest of these innovations is logic synthesis. This confirms my experience that it was a one-of-a-kind innovation, as I testified in a previous blog post. However, it also means that nothing as great has happened in EDA during my career as a digital hardware designer.

That is certainly not what I expected on my graduation day. Back in 1985, there was a feeling of great enthusiasm about digital VLSI design and about EDA as its prime enabler. It looked like a vast unexplored field with lots of exciting innovations waiting to happen. It's quite a shock to realize that the greatest moments were in fact already behind us.

Free tutorial webinar on February 3rd

When you download a new open source hardware project, or you are given a new commercial hardware design, you need to invest some effort before you can start working on that project. It may take you some time to figure out its structure, its packages and so on. You may have to read through many source files and documentation files before you have the first clue what the project does or how it is structured.

In this webinar, we will use Sigasi HDT (hardware development toolkit) to navigate through an open source hardware project. We will show intelligent navigation features, hyperlinks in the code and intelligent search functions. We show you the most important productivity features, so you can make the most out of using the VHDL tool of the future: Sigasi HDT.

How to add a decorator to the splash screen of your RCP application?

Decorated Splash ScreenDecorated Splash Screen I wanted to add a decorator to the splash screen our RCP application Sigasi HDT to give our users a visual clue about which version they are running (beta, trial, ...). After some digging and searching for the correct Google search terms, this turned out to be really simple. There is an extension for that: org.eclipse.ui.splashHandlers

This extension point allows to contribute a splash handler in which you can add custom behavior to the splash screen.
In this extension you have to specify a splashHandler and a splashHandlerProductBinding. In splashHandler you specify the class that implements the custom behaviour. In splashHandlerProductBinding you bind your splashHandler to your RCP application (you could also customize the behaviour of Eclipse's splash screen).

For our product this is:

   <extension point="org.eclipse.ui.splashHandlers">
      <splashHandler
            class="com.sigasi.hdt.ui.SplashHandler"
            id="com.sigasi.hdt.ui.splashHandler">
      </splashHandler>
      <splashHandlerProductBinding
            productId="com.sigasi.hdt.rcp.product"
            splashId="com.sigasi.hdt.ui.splashHandler">
      </splashHandlerProductBinding>
   </extension>

The only thing left to do, is to implement the splashHandler (The quick fix in the Plugin Manifest Editor is a real time saver).

I extended the EclipseSplashHandler (org.eclipse.ui.internal.splash) and just overrided init to superpose a png image in top right corner.

package com.sigasi.hdt.ui;
 
import com.sigasi.hdt.HdtPlugin;
 
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.internal.splash.EclipseSplashHandler;
import org.eclipse.ui.plugin.AbstractUIPlugin;
 
@SuppressWarnings("restriction")
public class SplashHandler extends EclipseSplashHandler {
 
	private static final String BETA_PNG = "icons/splash/beta.png";
	private static final int BORDER = 10;
	private Image image;
 
	public SplashHandler() {
		super();
	}
 
	@Override
	public void init(Shell splash) {
		super.init(splash);
 
		//here you could check some condition on which decoration to show
 
		ImageDescriptor descriptor = AbstractUIPlugin.imageDescriptorFromPlugin(HdtPlugin.ID, BETA_PNG);
		if (descriptor != null)
			image = descriptor.createImage();
		if (image !=null) {
			final int xposition = splash.getSize().x - image.getImageData().width - BORDER;
			final int yposition = BORDER;
			getContent().addPaintListener (new PaintListener () {
				public void paintControl (PaintEvent e) {
					e.gc.drawImage (image, xposition, yposition);
				}
			});
		}
	}
 
	@Override
	public void dispose() {
		super.dispose();
		if (image != null)
			image.dispose();
	}
 
}

Syndicate content