Xilinx ISE 13.2 on Ubuntu Linux 10.04

by Guy Eschemann on September 13, 2011

Even though Xilinx doesn’t officially support Ubuntu Linux for its ISE Design Suite, it is technically possible to run ISE 13.2 under the 64-bit version of Ubuntu Linux 10.04 (LTS).

Out of the box, the ISE Project Navigator and most command-line tools work fine. I only had problems starting the SmartXplorer tool and the PlanAhead environment.

SmartXplorer reported the following error:

bash: ./smartxplorer: No such file or directory

This is because SmartXplorer is a 32-bit application, and it requires additional libraries for running in a 64-bit environment. The problem is easily fixed by installing the 32-bit libraries for the Intel architecture:

sudo apt-get install ia32-libs

PlanAhead reported the following error:

[: 43: GNU/Linux: unexpected operator
/opt/Xilinx/13.2/ISE_DS/PlanAhead/bin/rdiArgs.sh: 15: Syntax error: "(" unexpected

The fix, as I’ve been told on the Xilinx Forum, is to change the first line of every script in the  /opt/Xilinx/13.2/ISE_DS/PlanAhead/bin directory from “#!/bin/sh” to “#!/bin/bash” — that worked for me.

{ 0 comments }

How to Check Setup and Hold Times in VHDL

by Guy Eschemann on May 5, 2011

Let’s take writing to an external SRAM as an example. The data is written into the SRAM at the rising edge of the “wr” signal, and you need to make sure that the “data” signal is stable during a given time before (the “setup time”) and after (the “hold time”) the rising edge of “wr”.

How do you check that your VHDL module meets the setup and hold time requirements of the SRAM?

Of course, you could just have a look at the waveforms in your VHDL simulation and measure these times using cursors. A better way to do it is to have your VHDL testbench automatically perform these checks for you using two checker processes.

Here’s a simple entity that does just that:

--------------------------------------------------------------------------------
-- Purpose : Checks that the data signal meets the given setup and hold times
--           with respect to the rising edge of the wr signal.
-- Author  : Guy.Eschemann@gmail.com
-- Created : 03-May-2011
--------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;

entity setup_hold_check is

  generic (
    g_setup_time : time := 5 ns;
    g_hold_time  : time := 10 ns);

  port (
    wr   : in std_logic;
    data : in std_logic_vector(7 downto 0));

end setup_hold_check;

architecture behavioral of setup_hold_check is
begin

  p_check_setup_time : process (wr, data)
  begin
    if rising_edge(wr) then
      assert data'stable(g_setup_time)
        report "Setup time violation" severity error;
    end if;
  end process;

  p_check_hold_time : process (wr'delayed(g_hold_time))
  begin
    if rising_edge(wr'delayed(g_hold_time)) then
      assert data'last_event = 0 ns or data'last_event > g_hold_time
        report "Hold time violation" severity error;
    end if;
  end process;

end behavioral;

{ 1 comment }

Webinar Notes: 10 Deadly Sins of Software Estimation

April 29, 2011

As a consultant, estimating the effort required to complete a given task is an important part of my job—and Joel’s Painless Software Schedules have served me pretty well until now. Still, I’m always interested in getting better at estimating schedules. Here’s what I learned from the Webinar on Software Estimation given by Steve McConnell of [...]

Read the full article →

What’s New in VHDL-2008

April 16, 2011

I justed watched this short video by John Aynsley of Doulos about what’s new in VHDL 2008. Here are my notes, from the point of view of someone who cares deeply about code quality and readability. The good things, that will help reduce the number of defects and make the code more readable: with the [...]

Read the full article →

Fun with XST Synthesis Reports

April 11, 2011

A few days ago, a customer called me saying that the latest version of the VHDL module I had delivered wasn’t working. At all. Nothing came out of this image processing block. As I had spent a lot of time carefully verifying the design, I was quite sure that I had done nothing wrong. My [...]

Read the full article →

Python Notes: How to Run a Command and Capture its Output in Real-Time

March 24, 2011

This is for the case where you want to run an external command from a python script and capture its output in real-time. I use it when I need to run a command that does not complete immediately, and show some real-time progress information to the user: from subprocess import Popen, PIPE # the command [...]

Read the full article →

Windows XP: How to Insert an Em Dash

March 19, 2011

Some applications, like Microsoft Word, automatically replace two dashes (“–”) between words by an em dash. In other applications, like a web browser, you can insert an em dash by holding down the [Alt] key and entering the code 0151 on the numeric keypad.

Read the full article →

How to Profile a Section of Code on TI C64x+ DSPs

March 15, 2011

On Texas Instruments DSPs based on the C64x+ CPU, you can use the Time Stamp Counter to easily measure the execution time of a section of code. The Time Stamp Counter is a free-running 64-bit counter that is normally incremented during each CPU cycle, it is thus more accurate than the operating system services. The Time Stamp [...]

Read the full article →

Git Notes

March 14, 2011

How to create a remote Git repository on a network drive from a local repository: git clone –bare <path to local repository> <path to remote repository> git remote add origin <path to remote repository>

Read the full article →

VHDL Subprograms

February 22, 2011

This has got to be the best explanation of VHDL subprograms I’ve ever seen: A function returns a value. A procedure returns a block of code. A concurrent procedure returns a process. — posted by Mike Treseler on comp.arch.fpga

Read the full article →