Tips on Using the Xilinx Design Tools

Pay attention!!  This could save you a lot of time!!


The Xilinx Foundation tools are industrial-strength design tools that are sold by Xilinx for big bucks, but donated to UW so we can use them in our courses.  Used in the right way, they are very powerful and productive.  However, the Xilinx tools have certain quirks that can make them difficult to use at times, and if ignored will lead to hours, yea days, of frustration.  Fortunately, some of these problems can be avoided by following a few simple guidelines and knowing where the possible problems lie. On this page we will attempt to point out these problems, and where possible, give some ideas for avoiding or fixing them. If you come up with new tips, please mail them to us and we will add them to this list.  By the way, this page is written on the assumption that you will follow our advice.  Specifically, we don't talk about what to do with all the bad things that happen if you don't.


General Tips:


Naming Issues:


Schematic Editor:

  • Unconnected wires are a common problem. Although it may appear that a wire connects two components in the schematic editor, it is very possible they won't actually be connected. To check connections, you can use the "Query" command (Mode menu or Query button) and click wires and macros. You can also click and drag a symbol, making sure the wires follow. Or finally, if you get really frustrated with wiring issues, you might want to turn off auto-wiring by going to View->Preferences->Wires and Buses, and unmarking the Autowiring box.
  • I stay away from Bus terminals and instead connect busses and parts of busses using signal names only.

  • When you name a bus, you can click the box which allows you to give a bus an arbitrary name, e.g. A[7:0], B[7:0] which makes a 16 bit bus by concatenating the two 8-bit busses A and B. You can put simple names in there as well, e.g. GND.
  • The "Integrity Test" command is sometimes useful in uncovering unconnected pins, pins driven from by multiple sources, and other hard-to-find errors. If you're getting an error message when simulating or implementing your design, this is one of the first things you should try.
  • The schematic editor is a little indecisive about how it treats terminal directions. Specifically, if you have an output wire in your schematic, and it ends in a terminal, but you accidently put an input terminal on this output wire, there will not be an error. Furthermore, the tools seem to still treat that terminal as an output (regardless of the terminal direction). But be aware that this bug may cause unknown problems, so you'll probably want to try to avoid it.
  • If the schematic editor won't let you attach a bus to a bus pin on a block symbol, it may be because of an error in the block's Verilog code. (See the Verilog section of this document for more details).
  • Sometimes you may want to re-use a component from one project in another project. But even after you add a particular schematic to your project, that component won't show up in your list of symbols until you create a macro out of it. To do this, you need to open that schematic in the schematic editor, and then select "Hierarchy -> Create Macro Symbol From Current Sheet". You will then be able to use this component as a block symbol in your other schematics.
  • When implementing a design with two or more top level schematics, creating a netlist in the schematic editor

  • (options->create netlist) generates a sourceless/loadless warning for every hanging net that runs across the pages.
    This is a known problem with the integrity test feature of the Foundation Schematic Editor. Currently, this feature does
    not correctly analyze nets across multiple pages. These messages can be safely ignored or disabled.

     Verilog Editor:

  • If an input is never used or can be simplified away then updating the macro will remove those pins. (Xilinx says this is intentional, so we can forget them trying to fix this.)  So if you have something like:
  • then inp will be removed (and outp will be constant). In real situations it may be much more subtle than this example. An output will be removed if you never assign to it. We don't know of a simple way to force it to keep pins. If you are not done with your Verilog code but you want to try synthesising then you should probably answer no when it asks if it should update the macro library.
  • If a signal in a bus which is on a pin can be simplified away, then you will get an error when implementing which says that the signal can't be found.  There is currently no workaround for this problem, although Xilinx says that they are fixing it.
  • The Verilog compiler will warn you if you mismatch the number of bits you type with the size of the field, but it won't tell you if a value is the wrong size for a bus. For instance, if you have a "reg [2:0] myReg" and somewhere type "myReg = 8'b01010101", the Verilog compiler will accept it without issuing a warning. Results are unpredicatable.
  • Another bug it doesn't report is if you have an output bus defined as a different width than the associated reg. For example:
  • This will not generate a compile error. As a result of this bug, when you use this macro in the Schematic Editor it won't let you attach a bus to this pin (even though the block symbol will show a place for connecting a bus).

     Simulator:

  • If you try to place a simulator probe on your schematic, it may disappear once you re-start you simulation script. To avoid this, you need to do two things:
  • Then run the simulation, and things should work fine.
     
  • When using a 'vector', you must put more than one signal in the vector, or else you won't be able to use 'check' statements on that vector.
  •  Script Editor:

  • When you want to make a new script file, it's fine to open an old one from another project and edit it. But make sure you Save As and save it to the current directory. It will use a file name that will change the original file - retype the file name instead.
  •  Implementation:.

  • If you edit the UCF constraints file, you may not be editing the current copy of the UCF file used in the implementation.  If your edit doesn't seem to make a difference, do a "Clear implementation data" in the Project menu of the Project Manager and try again. In fact, clearing the implementation data is usually a good thing to try if something weird happens when you implement.
  • If the tools tell you they're "unable to resolve all placement constraints", it may mean that you've assigned the same pin number to more than one pad.

  • Logic Analyzer Tips:


    ebeling@cs.washington.edu