Pin files are used to specify the pins of a module or entity. Pin files are
used for both the top level of the design and for all of the intermediate levels.
Here are some examples:
Pin file statement types are restrictions
The file must contain a #title statement and a #module statement. These must both specify the same file name.
#title "file_name"
#module "file_name"
The #revision statement is optional. It is used for the RCS revision header.
The #uselibrary is highly recommended for PAD rings. It causes hdlmaker to use Xilinx 4000/5200 or Lucent ORCA IO cells directly instead of writing pure VHDL.
Synopsys does much better if it is told what to do.
Is used for intermediate level modules.
The legal characters for signal names are a-z,0-9 and _. If the signal refers to
a bus or
bus fragment then the format is signal_name[#] or signal_name[#..#] where .. represents a
range. Examples of legal names are
foo
foo_bar[3]
myname[8..15]
yourname[31..0]
The following name is illegal because the name portion of the string contains a number.
name12[15..19]
For bidirectional IOs hdlmaker has the following conventions
name Internal source name
fb_name Feedback signal from the IO pin
name_pin Name of pin.
For all unidirectional pins
name Internal signal name
name_pin Pin name
The type field specifies the direction of the pin. The available types are
in input
out output
inout bidirectional or tristate
rsvd reserved (used to preserve a pin number for future use)
clks Xilinx secondary clock buffer
clkp Xilinx primary clock buffer
tdo Xilinx 4000 tdo buffer (for 5200 or ORCA use a regular out)
internal Internal control signal (for example clock enables or tristate enables)
The clk statement specfies the clk to the IO registers.
clk=sysclk positive edge triggered clock
clk=!sysclk negative edge triggered clock
lch=sysclk High true latch enable (inputs only)
lch=!sysclk Low true latch enable(inputs only)
inclk=sysclk positive edge triggered input clock
inclk=!sysclk negative edge triggered input clock
outclk=sysclk positive edge triggered output clock
outclk=!sysclk negative edge triggered output clock
If no clk statement is present then the IO pin is assumed to be combinatorial
Input and output clock enables are specified as follows:
inclkenb=enb_name Input flipflop enable
outclkenb=enb_name Output enable
inoutenb=enb_name Both
The tristate enable is high = disable, low = enable. The tristate statement has the
form:
tristate=!enable Enable the output of enable is high
tristate=enable_l Enable the output if enable_l is low
The default reset level is 0. If a preset is desired then use
resetlevel=1
Pullup and pulldown resistors ,may be specified as follows:
resistor=pullup
resistor=pulldown
The speed of the outputs and hold time characteristics of the inputs may be controled
as follows:
speed=slow Use the slew limited output buffers, default is the fast buffers
speed=fast Use the fast output buffers, default is the fast buffers
setup=nodelay Use the fast input buffers, some hold time will be required.
setup=nohold Use the slow input buffers, hold time is 0, setup time is much longer
Xilinx timing constraints.
p2s=16 The pin to setup time of this pin is 16 ns.
c2p=20 The clock to pin time of this pin is 20 ns.
The alias statement is used to provide an additional connection to a pin. Xilinx
inputs can
be both registered and combinatorial at the same time. An example is shown below:
txbusy type = in,clk = sysclk,pin=128,resetlevel=1;
nxttxbusy type = in,alias = txbusy,p2s=16 ;
txbusy is registered,nxttxbusy is combinatorial.
The pin statement specifies the pin numbers. The pin list is an arbitrary list of
numbers.
Examples:
pin=12
pin=[0..3,8,31..20,7]
ranges can be either high to low or low to high and can be mixed in a single list. The pin
numbers are matched to the bus pins from left to right.