Return to Support Page
 homesearchagentssupportask xilinxmap

Answers Database


Foundation XVHDL: Using Timespecs


Record #1487

Product Family:  Software

Product Line:  Metamor

Problem Title:
Foundation XVHDL:  Using Timespecs


Problem Description:
Keywords:  timespec, tnm, ucf, cst, metamor

Versions:  F6.x, F1.3/F1.4

Urgency:  Standard

General Description:

The XACTStep and M1 Implementation software allows users to set timing requireme
nts on various
paths in the design.  By attaching TNM attributes to
instances in the design, and then setting point-to-point
timespecs, timing-critical paths can be controlled.  The
process for using timespecs with a Foundation VHDL design is
as follows:

1. Attach 'TNM' attributes to PADs, Flip-Flops, RAMs, Latches
   in the VHDL code.
2. Write a constraint file (.CST for F6.x, .UCF for F1.x) which
   contains the Timespecs.  This constraints file will be read
   into the Design Manager during implementation.

Refer to the Xilinx Development Systems Reference Guide for more information abo
ut using Timespecs and Timing Driven
Implementation.

**Note that this solution applies to the Metamor XVHDL compiler
only.  If using the Express HDL compiler, you have the ability
to use the Express Constraints GUI to set up timegroups and
timespecs.


Solution 1:

Example: Putting TNMs on Instantiated Instances
-----------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all;

entity DP_RAM is
   port (WR, DATA, CLK, RST: in std_logic;
	 ADDR0, ADDR1, ADDR2, ADDR3: in std_logic;
	 DPRA0, DPRA1, DPRA2, DPRA3: in std_logic;
	 DPOUT, SPOUT, DOUT: out std_logic);
end DP_RAM;

architecture INST of DP_RAM is
   component RAM16X1D
      port (D,WE,WCLK,A3,A2,A1,A0,
	    DPRA3,DPRA2,DPRA1,DPRA0: in std_logic;
	    SPO,DPO: out std_logic);
   end component;
   attribute TNM: string;
   attribute TNM of U1:  label is "RAMTNM";
begin
   U1: RAM16X1D
      port map (
	D=>DATA, WE=>WR, WCLK=>CLK,
	A3=>ADDR3, A2=>ADDR2, A1=>ADDR1, A0=>ADDR0,
	DPRA3=>DPRA3, DPRA2=>DPRA2, DPRA1=>DPRA1,
	DPRA0=>DPRA0, SPO=>SPOUT, DPO=>DPOUT);
end INST;



Solution 2:

Attaching TNM attributes in the VHDL code
-----------------------------------------

A) Inferred Components

To attach a TNM attribute to an inferred PAD, Flip-Flop or
Latch, use the following syntax:

      attribute TNM:  string;
      attribute TNM of <signal_name>:  signal is "<tnm_id>";

where <signal_name> is the Q output of the flip-flop or
latch, or the port name for the desired pad, and <tnm_id> is
the TNM identifier name which you want to assign to the
instance.

If a signal is declared as a top-level entity output or inout
port, and is also the output of a flip-flop or latch, a TNM
attribute attached to that signal will be placed onto the
OPAD, and not the flip-flop.  In order to attach a TNM
attribute to the flip-flop in this case, a dummy signal must
be created.

See the resolution titled "Example: Putting TNMs on Inferred
Instances" for example VHDL code.


B) Instantiated Components

To attach a TNM attribute to an instantiated flip-flop, RAM
or latch, use the following syntax:

      attribute TNM:  string;
      attribute TNM of <instance_name>:  label is "<tnm_id>";

where <instance_name> is the instance name assigned to the
instantiated component in the VHDL code, and <tnm_id> is the
TNM identifer name which you want to assign to the instance.

See the resolution titled "Example: Putting TNMs on
Instantiated Instances" for example VHDL code.


Writing a Constraint File with Timespecs
----------------------------------------

After attaching TNMs to the desired instances in the VHDL
file, you must write a constraint file (<project_name>.CST for
F6.x or <project_name>.UCF for F1.x) which will be read by the
Xilinx Design Manager during implementation.

Below is an example constraint file.  This constraint file
assumes that the TNMs INPAD, FLOP_X, FLOP_Y, FLOPOUT, and
OUTPAD have been defined.

##CST file for use with Foundation 6.x##
timespec="ts01=from:INPAD:to:FLOP_X=20ns";
timespec="ts02=from:FLOP_X:to:FLOP_Y=8ns";
timespec="ts03=from:FLOPOUT:to:OUTPAD=8ns";
timespec="ts04=from:FLOP_Y:to:FLOPOUT=10ns";

##UCF file for use with Foundation F1.x##
TIMESPEC TS01 = FROM : INPAD : TO : FLOP_X : 20ns;
TIMESPEC TS02 = FROM : FLOP_X : TO : FLOP_Y : 8ns;
TIMESPEC TS03 = FROM : FLOPOUT : TO : OUTPAD : 8ns;
TIMESPEC TS04 = FROM : FLOP_Y : TO : FLOPOUT : 10ns;



Solution 3:

Example: Putting TNMs on Inferred Instances
-------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all;

entity FLOPS is
   port (DIN1, CLK, RESET: in std_logic;
	 DOUT1: out std_logic);
end FLOPS;

architecture USE_TSPEC of FLOPS is
   signal X : std_logic;  -- Internal flip-flops
   signal Y : std_logic;

   signal DUMMY: std_logic;  -- This lets us place a TNM on
			     -- both the flip-flop and on the
			     -- output pad DOUT1.
   attribute TNM: string;
   attribute TNM of DOUT1:  signal is "OUTPAD";
   attribute TNM of DIN1:  signal is "INPAD";
   attribute TNM of X:	signal is "FLOP_X";
   attribute TNM of Y:	signal is "FLOP_Y";
   attribute TNM of DUMMY: signal is "FLOPOUT";
begin
   process (CLK, RESET)
   begin
      if RESET='1' then
	 X <= '0';
	 Y <= '0';
	 DUMMY <= '0';
      elsif (CLK'event and CLK='1') then
	 X <= DIN1;
	 Y <= X;
	 DUMMY <= Y;
      end if;
   end process;

   DOUT1 <= DUMMY;  -- Pass the output of the last FF to the
		    -- OPAD.  This dummy signal is created to
		    -- allow us to put a TNM on the last FF
		    -- whose output is also the top-level
		    -- pad.
end USE_TSPEC;



End of Record #1487

For the latest news, design tips, and patch information on the Xilinx design environment, check out the Xilinx Expert Journals!

© 1998 Xilinx, Inc. All rights reserved
Trademarks and Patents