V 4 LDL
V 4 LDL
V 4 LDL
HDL Designs
ISE 8.1i
R
R
Xilinx is disclosing this Document and Intellectual Property (hereinafter “the Design”) to you for use in the development of designs to operate
on, or interface with Xilinx FPGAs. Except as stated herein, none of the Design may be copied, reproduced, distributed, republished,
downloaded, displayed, posted, or transmitted in any form or by any means including, but not limited to, electronic, mechanical,
photocopying, recording, or otherwise, without the prior written consent of Xilinx. Any unauthorized use of the Design may violate copyright
laws, trademark laws, the laws of privacy and publicity, and communications regulations and statutes.
Xilinx does not assume any liability arising out of the application or use of the Design; nor does Xilinx convey any license under its patents,
copyrights, or any rights of others. You are responsible for obtaining any rights you may require for your use or implementation of the Design.
Xilinx reserves the right to make changes, at any time, to the Design as deemed desirable in the sole discretion of Xilinx. Xilinx assumes no
obligation to correct any errors contained herein or to advise you of any correction if such be made. Xilinx will not assume any liability for the
accuracy or correctness of any engineering or technical support or assistance provided to you in connection with the Design.
THE DESIGN IS PROVIDED “AS IS” WITH ALL FAULTS, AND THE ENTIRE RISK AS TO ITS FUNCTION AND IMPLEMENTATION IS
WITH YOU. YOU ACKNOWLEDGE AND AGREE THAT YOU HAVE NOT RELIED ON ANY ORAL OR WRITTEN INFORMATION OR
ADVICE, WHETHER GIVEN BY XILINX, OR ITS AGENTS OR EMPLOYEES. XILINX MAKES NO OTHER WARRANTIES, WHETHER
EXPRESS, IMPLIED, OR STATUTORY, REGARDING THE DESIGN, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE, TITLE, AND NONINFRINGEMENT OF THIRD-PARTY RIGHTS.
IN NO EVENT WILL XILINX BE LIABLE FOR ANY CONSEQUENTIAL, INDIRECT, EXEMPLARY, SPECIAL, OR INCIDENTAL DAMAGES,
INCLUDING ANY LOST DATA AND LOST PROFITS, ARISING FROM OR RELATING TO YOUR USE OF THE DESIGN, EVEN IF YOU
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE TOTAL CUMULATIVE LIABILITY OF XILINX IN CONNECTION
WITH YOUR USE OF THE DESIGN, WHETHER IN CONTRACT OR TORT OR OTHERWISE, WILL IN NO EVENT EXCEED THE
AMOUNT OF FEES PAID BY YOU TO XILINX HEREUNDER FOR USE OF THE DESIGN. YOU ACKNOWLEDGE THAT THE FEES, IF
ANY, REFLECT THE ALLOCATION OF RISK SET FORTH IN THIS AGREEMENT AND THAT XILINX WOULD NOT MAKE AVAILABLE
THE DESIGN TO YOU WITHOUT THESE LIMITATIONS OF LIABILITY.
The Design is not designed or intended for use in the development of on-line control equipment in hazardous environments requiring fail-
safe controls, such as in the operation of nuclear facilities, aircraft navigation or communications systems, air traffic control, life support, or
weapons systems (“High-Risk Applications”). Xilinx specifically disclaims any express or implied warranties of fitness for such High-Risk
Applications. You represent that use of the Design in such High-Risk Applications is fully at your risk.
Copyright © 1995-2005 Xilinx, Inc. All rights reserved. XILINX, the Xilinx logo, and other designated brands included herein are trademarks
of Xilinx, Inc. PowerPC is a trademark of IBM, Inc. All other trademarks are the property of their respective owners.
Guide Contents
This guide contains the following:
• Information about additional resources and conventions used in this guide.
• A general introduction to the Virtex-4 primitives.
• A listing of the primitives and macros that are supported under the Virtex-4
architecture, organized by functional categories.
• Individual sections for each of the primitive design elements, including VHDL
and Verilog instantiation and inference code examples.
Additional Resources
To find additional documentation, see the Xilinx website at:
http://www.xilinx.com/literature.
To search the Answer Database of silicon, software, and IP questions and answers, or
to create a technical support WebCase, see the Xilinx website at:
http://www.xilinx.com/support.
Conventions
This document uses the following conventions. An example illustrates each
convention.
Typographical
The following typographical conventions are used in this document:
Online Document
The following conventions are used in this document:
Introduction
This version of the Libraries Guide describes the primitive design elements that
comprise the Xilinx Unified Libraries for the Virtex-4 architecture, and includes
examples of instantiation and inference code for each primitive.
Xilinx maintains software libraries with hundreds of functional design elements
(primitives and macros) for different device architectures. New functional elements
are assembled with each release of development system software. In addition to a
comprehensive Unified Library containing all design elements, beginning in 2003,
Xilinx developed a separate library for each architecture. This Virtex-4 guide is one in
a series of architecture-specific libraries.
This guide describes the primitive elements available for Xilinx Virtex-4 FPGA
devices. Common logic functions can be implemented with these elements and more
complex functions can be built by combining macros and primitives.
Functional Categories
The functional categories list the available design elements in each category along
with a brief description of each element that is supported under each Xilinx
architecture.
Table of Contents
About this Guide
Guide Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Additional Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Functional Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Attributes and Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Functional Categories
Arithmetic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Clock Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Config/BSCAN Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Gigabit Transceivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
I/O Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Processor Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
RAM/ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Registers & Latches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Shift Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Slice/CLB Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
EMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
FDCPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
FDRSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
FIFO16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
FRAME_ECC_VIRTEX4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
GT11_CUSTOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
GT11_DUAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
GT11CLK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
GT11CLK_MGT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
IBUF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
IBUFDS_DIFF_OUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
IBUFDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
IBUFG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
IBUFGDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
ICAP_VIRTEX4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
IDDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
IDELAY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
IDELAYCTRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
IOBUF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
IOBUFDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
ISERDES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
KEEPER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
LDCPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
LUT1, 2, 3, 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
LUT1_D, LUT2_D, LUT3_D, LUT4_D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
LUT1_L, LUT2_L, LUT3_L, LUT4_L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
MULT_AND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
MUXCY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
MUXCY_D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
MUXCY_L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
MUXF5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
MUXF5_D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
MUXF5_L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
MUXF6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
MUXF6_D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
MUXF6_L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
MUXF7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
MUXF7_D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
MUXF7_L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
MUXF8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
MUXF8_D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
MUXF8_L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
OBUF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
OBUFDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
OBUFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
OBUFTDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
ODDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
OSERDES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
PMCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
PPC405_ADV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
PULLDOWN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
PULLUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
RAM16X1D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
RAM16X1S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
RAM32X1S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
RAM64X1S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
RAMB16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
RAMB32_S64_ECC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
ROM16X1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
ROM32X1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
ROM64X1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
ROM128X1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
ROM256X1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
SRL16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
SRL16_1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
SRL16E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
SRL16E_1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
SRLC16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
SRLC16_1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
SRLC16E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
SRLC16E_1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
STARTUP_VIRTEX4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
USR_ACCESS_VIRTEX4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
XORCY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
XORCY_D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
XORCY_L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Arithmetic Functions
Functional Categories
This section categorizes, by function, the design elements that are described in detail
later in this guide. The design elements are listed in alphanumeric order under each
functional category.
Arithmetic Functions I/O Components Registers & Latches
Clock Components Processor Components Shift Registers
Config/BSCAN Components RAM/ROM Slice/CLB Primitives
Gigabit Transceivers
Arithmetic Functions
Design Element Description
DSP48 Primitive: 18x18 Signed Multiplier Followed by a Three-Input Adder with Optional Pipeline Registers
Clock Components
Design Element Description
Config/BSCAN Components
Design Element Description
Gigabit Transceivers
STARTUP_VIRTEX4 Primitive: Virtex-4 User Interface to Configuration Clock, Global Reset, Global 3-State Controls, and Other Configuration
Signals
USR_ACCESS_VIRTEX4 Primitive: 32-Bit Register with a 32-Bit DATA Bus and a DATAVALID Port
Gigabit Transceivers
Design Element Description
GT11_CUSTOM Primitive: RocketIO MGTs with 622 Mb/s to 11.1 Gb/s data rates, 8 to 24 transceivers per FPGA, and 2.5 GHz – 5.55 GHz VCO, less
than 1ns RMS jitter
GT11_DUAL Primitive: RocketIO MGT Tile (contains 2 GT11_CUSTOM) with 622 Mb/s to 11.1 Gb/s data rates, 8 to 24 transceivers per FPGA,
and 2.5 GHz – 5.55 GHz VCO, less than 1ns RMS jitter
GT11CLK Primitive: A MUX That Can Select Fom Differential Package Input Clock, refclk From the Fabric, or rxbclk to Drive the Two Vertical
Reference Clock Buses for the Column of MGTs
GT11CLK_MGT Primitive: Allows Differential Package Input to Drive the Two Vertical Reference Clock Buses for the Column of MGTs
I/O Components
Design Element Description
Processor Components
Design Element Description
EMAC Primitive: Fully integrated 10/100/1000 Mb/s Ethernet Media Access Controller (Ethernet MAC)
PPC405_ADV Primitive: Primitive for the Power PC Core
RAM/ROM
RAM/ROM
Design Element Description
FDCPE Primitive: D Flip-Flop with Clock Enable and Asynchronous Preset and Clear
FDRSE Primitive: D Flip-Flop with Synchronous Reset and Set and Clock Enable
LDCPE Primitive: Transparent Data Latch with Asynchronous Clear and Preset and Gate Enable
Shift Registers
Design Element Description
Slice/CLB Primitives
Design Element Description
Slice/CLB Primitives
BSCAN_VIRTEX4
BSCAN_VIRTEX4
Primitive: Provides Access to the BSCAN Sites on Virtex-4 Devices
When the JTAG USER1/2/3/4 instruction is loaded, BSCAN_VIRTEX4 allows users
to monitor dedicated JTAG pins TCK, TMS, and TDI. Users are also granted the ability
BSCAN_VIRTEX4
CAPTURE to drive the TDO pin with user-specified data.
DRCK
RESET
TDO Name Type Width Function
SEL
SHIFT CAPTURE Output 1 Active upon the loading of the USER instruction.
TDI Asserts High when the JTAG TAP controller is in the
UPDATE CAPTURE-DR state.
DRCK Output 1 A mirror of the TCK pin when the JTAG USER
instruction is loaded and the JTAG TAP controller is in
X10193
Usage
Virtex-4 has four available BSCAN_VIRTEX4 primitives. Use the appropriate
attributes to target the desired primitive. To access these primitives, the JTAG USER
instruction must be loaded.
Available Attributes
Attribute Type Allowed Values Default Description
JTAG_CHAIN INTEGER 1, 2, 3, or 4 1 Used to set the BSCAN
site in the device.
BSCAN_VIRTEX4
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
BSCAN_VIRTEX4_inst : BSCAN_VIRTEX4
generic map (
JTAG_CHAIN => 1) -- Value to set BSCAN site of device. Possible values: (1,2,3 or 4)
port map (
CAPTURE => CAPTURE, -- CAPTURE output from TAP controller
DRCK => DRCK, -- Data register output for USER functions
RESET => RESET, -- Reset output from TAP controller
SEL => SEL, -- USER active output
SHIFT => SHIFT, -- SHIFT output from TAP controller
TDI => TDI, -- TDI output from TAP controller
UPDATE => UPDATE, -- UPDATE output from TAP controller
TDO => TDO -- Data input for USER function
);
-- End of BSCAN_VIRETX4_inst instantiation
BSCAN_VIRETX4 #(
.JTAG_CHAIN(1) // Possible values: 1, 2, 3, or 4
) BSCAN_VIRETX4_inst (
.CAPTURE(CAPTURE), // CAPTURE output from TAP controller
.DRCK(DRCK), // Data register output for USER function
.RESET(RESET), // Reset output from TAP controller
.SEL(SEL), // USER active output
.SHIFT(SHIFT), // SHIFT output from TAP controller
.TDI(TDI), // TDI output from TAP controller
.UPDATE(UPDATE), // UPDATE output from TAP controller
.TDO(TDO) // Data input for USER function
);
BUFCF
BUFCF
Primitive: Fast Connect Buffer
BUFCF is a fast connect buffer used to communicate to the software tools the Slice
packing of logic. This buffer does not indicate any functionality for the design, but it
can be used to tell the software to place both the sourcing logic to the buffer and the
destination logic in the same Slice in order to minimize the routing delays for that
I O path.
Usage
X9444 The BUFCF must be instantiated. To connect this element to the design, connect the
input of the buffer to the output of Slice logic (such as a LUT4) and connect the output
to another piece of Slice logic (such as another LUT4). This will indicate to the tools
that both components connected to the logic should be placed into the same Slice. It is
generally suggested to use this component with instantiated logic since connecting it
to inferred logic may disrupt the optimization opportunities for the tools.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- BUFCF: Fast connect buffer used to connect the outputs of the LUTs
-- and some dedicated logic directly to the input of another LUT.
-- For use with all FPGAs.
-- Xilinx HDL Langauge Template version 8.1i
BUFCF_inst: BUFCF (
port map (
O => O, -- Connect to the output of a LUT
I => I -- Connect to the input of a LUT
);
BUFCF
// BUFCF: Fast connect buffer used to connect the outputs of the LUTs
// and some dedicated logic directly to the input of another LUT.
// For use with all FPGAs.
// Xilinx HDL Libraries Guide Version 8.1i
BUFCF BUFCF_inst (
.O(O), // Connect to the output of a LUT
.I(I) // Connect to the input of a LUT
);
BUFG
BUFG
Primitive: Global Clock Buffer
Usage
X9428
This design element is supported for both schematics and instantiation. Synthesis
tools usually infer a BUFGP on any clock net. If there are more clock nets than
BUFGPs, the synthesis tool usually instantiates BUFGPs for the clocks that are most
utilized. The BUFGP contains both a BUFG and an IBUFG.
To use a BUFG in a schematic, connect the input of the BUFG symbol to the clock
source. The clock source can be an external PAD symbol, an IBUF symbol, or internal
logic. For a negative-edge clock input, insert an INV (inverter) symbol between the
BUFG output and the clock input. The inversion is implemented at the Configurable
Logic Block (CLB) or Input/Output Block (IOB) clock pin.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
BUFG_inst : BUFG
port map (
O => O, -- Clock buffer output
I => I -- Clock buffer input
);
BUFG
BUFG BUFG_inst (
.O(O), // Clock buffer output
.I(I) // Clock buffer input
);
BUFGCE
BUFGCE
Primitive: Global Clock Buffer with Clock Enable and Output
State 0
BUFGCE is a clock buffer with one clock input, one clock output, and a clock enable
CE line. Its O output is "0" when clock enable (CE) is Low (inactive). When clock enable
I O
(CE) is High, the I input is transferred to the O output.
Inputs Outputs
BUFGCE
I CE O
X9384
X 0 0
I 1 I
Usage
This design element is supported for schematics and instantiations but not for
inference.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
BUFGCE_inst : BUFGCE
port map (
O => O, -- Clock buffer ouptput
CE => CE, -- Clock enable input
I => I -- Clock buffer input
);
BUFGCE
BUFGCE BUFGCE_inst (
.O(O), // Clock buffer output
.CE(CE), // Clock enable input
.I(I) // Clock buffer input
);
BUFGCE_1
BUFGCE_1
Primitive: Global Clock Buffer with Clock Enable and Output
State 1
CE BUFGCE is a clock buffer with one clock input, one clock output, and a clock enable
line. Its O output is High (1) when clock enable (CE) is Low (inactive). When clock
I O
enable (CE) is High, the I input is transferred to the O output.
BUFGCE_1 Inputs Outputs
X9385
I CE O
X 0 1
I 1 I
Usage
This design element is supported for schematics and instantiations but not for
inference.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
BUFGCE_1_inst : BUFGCE_1
port map (
O => O, -- Clock buffer ouptput
CE => CE, -- Clock enable input
I => I -- Clock buffer input
);
BUFGCE_1
BUFGCE_1 BUFGCE_1_inst (
.O(O), // Clock buffer output
.CE(CE), // Clock enable input
.I(I) // Clock buffer input
);
BUFGCTRL
BUFGCTRL
I1 Unlike global clock buffers that are found in previous generations of FPGAs, the
S0
S1
BUFGCTRL is designed with additional control pins to provide a wider range of
CE0 functionality and more robust input switching. BUFGCTRL is not limited to clocking
CE1
IGNORE0
applications.
IGNORE1
Usage
In order to properly select a BUFGCTRL input, you must assert both the S and CE
pins of the desired input. Failure to do so may cause the output to not switch with the
desired input or output signal toggling.
This design element is supported for schematics and instantiations, but not for
inference.
BUFGCTRL
Available Attributes
Attribute Type Allowed Values Default Description
INIT_OUT INTEGER 0 or 1 0 Initializes the BUFGCTRL
output to the specified value
after configuration.
PRESELECT_I0 BOOLEAN FALSE, TRUE FALSE If TRUE, BUFGCTRL output
will use I0 input after
configuration.
PRESELECT_I1 BOOLEAN FALSE, TRUE FALSE If TRUE, BUFGCTRL output
will use I1 input after
configuration.
Note: Both PRESELECT attributes might not be TRUE at the same time.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
BUFGCTRL_inst : BUFGCTRL
generic map (
INIT_OUT => 0, -- Inital value of 0 or 1 after configuration
PRESELECT_I0 => FALSE, -- TRUE/FALSE set the I0 input after configuration
PRESELECT_I1 => FALSE) -- TRUE/FALSE set the I1 input after configuration
port map (
O => O, -- Clock MUX output
CE0 => CE0, -- Clock enable0 input
CE1 => CE1, -- Clock enable1 input
I0 => I0, -- Clock0 input
I1 => I1, -- Clock1 input
IGNORE0 => IGNORE0, -- Ignore clock select0 input
IGNORE1 => IGNORE1, -- Ignore clock select1 input
S0 => S0, -- Clock select0 input
S1 => S1 -- Clock select1 input
);
BUFGCTRL
BUFGCTRL #(
.INIT_OUT(0), // Inital value of 0 or 1 after configuration
.PRESELECT_I0("FALSE"), // "TRUE" or "FALSE" set the I0 input after configuration
.PRESELECT_I1("FALSE") // "TRUE" or "FALSE" set the I1 input after configuration
) BUFGCTRL_inst (
.O(O), // 1-bit output
.CE0(CE0), // 1-bit clock enable 0
.CE1(CE1), // 1-bit clock enable 1
.I0(I0), // 1-bit clock 0 input
.I1(I1), // 1-bit clock 1 input
.IGNORE0(IGNORE0), // 1-bit ignore 0 input
.IGNORE1(IGNORE1), // 1-bit ignore 1 input
.S0(S0), // 1-bit select 0 input
.S1(S1) // 1-bit select 1 input
);
BUFGCTRL
BUFGMUX
BUFGMUX
Primitive: Global Clock MUX Buffer with Output State 0
BUFGMUX is a multiplexed global clock buffer that can select between two input
BUFGMUX clocks I0 and I1. When the select input (S) is Low, the signal on I0 is selected for
I0 output (O). When the select input (S) is High, the signal on I1 is selected for output.
O
I1
BUFGMUX and BUFGMUX_1 are distinguished by which state the output assumes
S
when it switches between clocks in response to a change in its select input.
X9251 BUGFMUX assumes output state 0 and BUFGMUX_1 assumes output state 1.
Note: BUFGMUX guarantees that when S is toggled, the state of the output will remain in the
inactive state until the next active clock edge (either I0 or I1) occurs.
Inputs Outputs
I0 I1 S O
I0 X 0 I0
X I1 1 I1
X X ↑ 0
X X ↓ 0
Usage
This design element is supported for schematics and instantiations but not for
inference.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
BUFGMUX_inst : BUFGMUX
port map (
O => O, -- Clock MUX output
I0 => I0, -- Clock0 input
I1 => I1, -- Clock1 input
S => S -- Clock select input
);
BUFGMUX
BUFGMUX BUFGMUX_inst (
.O(O), // Clock MUX output
.I0(I0), // Clock0 input
.I1(I1), // Clock1 input
.S(S) // Clock select input
);
BUFGMUX_1
BUFGMUX_1
Primitive: Global Clock MUX Buffer with Output State 1
BUFGMUX_1 is a multiplexed global clock buffer that can select between two input
BUFGMUX_1 clocks I0 and I1. When the select input (S) is Low, the signal on I0 is selected for
I0
output (O). When the select input (S) is High, the signal on I1 is selected for output.
O
I1 BUFGMUX and BUFGMUX_1 are distinguished by which state the output assumes
when it switches between clocks in response to a change in its select input.
S
BUFGMUX assumes output state 0 and BUFGMUX_1 assumes output state 1.
X9252
Inputs Outputs
I0 I1 S O
I0 X 0 I0
X I1 1 I1
X X ↑ 1
X X ↓ 1
Usage
This design element is supported for schematics and instantiations but not for
inference.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- BUFGMUX_1: Global Clock Buffer 2-to-1 MUX (inverted select)
-- Virtex-II/II-Pro, Spartan-3/3E
-- Xilinx HDL Libraries Guide Version 8.1i
BUFGMUX_1_inst : BUFGMUX_1
port map (
O => O, -- Clock MUX output
I0 => I0, -- Clock0 input
I1 => I1, -- Clock1 input
S => S -- Clock select input
);
BUFGMUX_1
BUFGMUX_1 BUFGMUX_1_inst (
.O(O), // Clock MUX output
.I0(I0), // Clock0 input
.I1(I1), // Clock1 input
.S(S) // Clock select input
);
BUFGMUX_VIRTEX4
BUFGMUX_VIRTEX4
Primitive: Global Clock MUX Buffer
BUFGMUX_VIRTEX4 is a global clock buffer with two clock inputs, one clock output,
and a select line. This primitive is based on BUFGCTRL, with some pins connected to
I0
BUFGMUX_VIRTEX4
O logic High or Low.
I1
S This element uses the S pins as select pins. S can switch anytime without causing a
glitch. The Setup/Hold time on S is for determining whether the output wil pass an
X10097
extra pulse of the previously selected clock before switching to the new clock. If S
changes prior to the setup time TBCCCK_S, and before I/O transitions from High to
Low, then the output will not pass an extra pulse of I/O. If S changes following the
hold time for S, then the output will pass an extra pulse, but it will not glitch. In any
case the output will change to the new clock within three clock cycles of the slower
clock.
The Setup/Hold requirements for S0 and S1 are with respect to the falling clock edge
(assuming INIT_OUT = 0), not the rising edge, as for CE0 and CE1.
Switching conditions for BUFGMUX_VIRTEX4 are the same as the S pin of
BUFGCTRL.
BUFGMUX_VIRTEX4 Ports
O – Clock Output Pin
The O pin represents the clock output pin.
I0 – Clock Input Pin
I1 - Clock Input Pin
The I pin represents the clock input pin.
Clock Select Pin
The S pin represents the clock select pin.
The port list and definitions for this element are as follows:
BUFGMUX_VIRTEX4
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
BUFGMUX_VIRTEX4_inst : BUFGMUX_VIRTEX4
generic map (
INIT_OUT => 0, -- Inital value of 0 or 1 after configuration
PRESELECT_I0 => FALSE, -- TRUE/FALSE set the I0 input after configuration
PRESELECT_I1 => FALSE) -- TRUE/FALSE set the I1 input after configuration
port map (
O => O, -- Clock MUX output
I0 => I0, -- Clock0 input
I1 => I1, -- Clock1 input
S => S -- Clock select input
);
BUFIO
BUFIO
Primitive: Local Clock Buffer for I/O
The BUFIO is a clock buffer available in Virtex-4 devices. It is simply a clock-in, clock-
out buffer. The BUFIO drives a dedicated clock net within the I/O column,
independent of the global clock resources. Thus, BUFIOs are ideally suited for source-
BUFIO
I O
synchronous data capture (forwarded/receiver clock distribution). BUFIOs can only
X10099 be driven by clock capable I/Os located in the same clock region. They drive the two
adjacent I/O clock nets (for a total of up to three clock regions), as well as the regional
clock buffers (BUFR). BUFIOs cannot drive logic resources (CLB, block RAM, etc.)
because the I/O clock network only reaches the I/O column.
BUFIO Ports (Detailed Description)
Usage
BUFIOs work in conjunction with I/O capable clocks, and represent an ideal solution
for source synchronous applications that require clock recovery.
This design element is supported for schematics and instantiations, but not for
inference.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
BUFIO_inst : BUFIO
port map (
O => O, -- Clock buffer output
I => I -- Clock buffer input
);
BUFIO
BUFIO BUFIO_inst (
.O(O), // Clock buffer output
.I(I) // Clock buffer input
);
BUFR
BUFR
Primitive: Regional Clock Buffer for I/O and Logic Resources
The BUFR is a clock buffer available in Virtex-4 devices. BUFRs drive clock signals to
BUFR
a dedicated clock net within a clock region, independent from the global clock tree.
I O
CLR
Each BUFR can drive the two regional clock nets in the region in which it is located,
CE and the two clock nets in the adjacent clock regions (up to three clock regions). Unlike
BUFIOs, BUFRs can drive the I/O logic and logic resources (CLB, block RAM, etc.) in
X10098
the existing and adjacent clock regions. BUFRs can be driven by either the output
from BUFIOs or local interconnect. In addition, BUFRs are capable of generating
divided clock outputs with respect to the clock input. The divide values are an integer
between one and eight. BUFRs are ideal for source-synchronous applications
requiring clock domain crossing or serial-to-parallel conversion. There are two BUFRs
in a typical clock region (two regional clock networks). The center column does not
have BUFRs.
BUFR Ports (Detailed Description)
O – Clock Output Port
This port drives the clock tracks in the clock region of the BUFR and the two adjacent
clock regions. This port drives FPGA fabric and IOBs.
CE – Clock Enable Port
CLR – Counter Reset for Divided Clock Output
When asserted HIGH, this port resets the counter used to produce the divided clock
output.
I – Clock Input Port
This port is the clock source port for BUFR. It may be driven by BUFIO output or local
interconnect.
The port list and definitions for this element are as follows:
Available Attributes
Attribute Type Allowed Values Default Description
BUFR_DIVIDE STRING "BYPASS", "1", "2", "BYPASS” Defines whether the
"3", "4", "5", "6", "7", output clock is a divided
"8 version of input clock.
BUFR
Usage
This design element is supported for schematics and instantiations, but not for
inference.
-- <-----Cut code below this line and paste into the architecture body---->
-- BUFR: Regional (Local) Clock Buffer /w Enable, Clear and Division Capabilities
-- Virtex-4
-- Xilinx HDL Libraries Guide Version 8.1i
BUFR_inst : BUFR
generic map (
BUFR_DIVIDE => "BYPASS") -- "BYPASS", "1", "2", "3", "4", "5", "6", "7", "8",
port map (
O => O, -- Clock buffer output
CE => CE, -- Clock enable input
CLR => CLR, -- Clock buffer reset input
I => I -- Clock buffer input
);
BUFR #(
.BUFR_DIVIDE("BYPASS") // "BYPASS", "1", "2", "3", "4", "5", "6", "7", "8"
) BUFR_inst (
.O(O), // Clock buffer output
.CE(CE), // Clock enable input
.CLR(CLR), // Clock buffer reset input
.I(I) // Clock buffer input
);
// End of BUFR_inst instantiation
BUFR
BUFR
CAPTURE_VIRTEX4
CAPTURE_VIRTEX4
Primitive: Virtex-4 Boundary Scan Logic Control Circuit
CAPTURE_VIRTEX4 provides user control over when to capture register (flip-flop
CAP
CAPTURE_VIRTEX4 and latch) information for readback. Virtex-4 devices provide the readback function
CLK
through dedicated configuration port instructions.
X10100
CAPTURE_VIRTEX4 Ports (Detailed Description)
CAP – Input
An asserted high CAP signal indicates that the registers in the device are to be
captured at the next Low-to-High clock transition. By default, data is captured after
every trigger (transition on CLK while CAP is asserted).
CLK – Input
Clock input pin
The port list and definitions for this element are as follows:
Usage
Using the CAPTURE_VIRTEX4 primitive is optional. Without this primitive, readback
of the DFFs will be the initial set/preset value instead of the current value that DFFs
hold.
Virtex-4 devices allow for capturing register (flip-flop and latch) states only.
LUTRAM, SRL, and block RAM always have their current states readback once the
GLUTMASK bit is disabled. Refer to the Virtex-4 Configuration User Guide for more
information about readback.
This design element is supported for schematics and instantiations, but not for
inference.
Available Attributes
Name Description Possible Values
ONESHOT Limits the readback operation to a single data capture TRUE (default), FALSE
CAPTURE_VIRTEX4
-- : for simulation.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
CAPTURE_VIRTEX4_inst : CAPTURE_VIRTEX4
generic map (
ONESHOT => TRUE) -- TRUE or FALSE
port map (
CAP => CAP, -- Capture input
CLK => CLK -- Clock input
);
-- End of CAPTURE_VIRTEX4_inst instantiation
Verilog Template
// CAPTURE_VIRTEX4 : In order to incorporate this function into the design,
// Verilog : the following instance declaration needs to be placed
// instance : in the body of the design code. The instance name
// declaration : (CAPTURE_VIRTEX4_inst) and/or the port declarations within the
// code : parenthesis maybe changed to properly reference and
// : connect this function to the design. Delete or comment
// : out inputs/outs that are not necessary.
CAPTURE_VIRTEX4 #(
.ONESHOT("TRUE") // "TRUE" or "FALSE"
) CAPTURE_VIRTEX4_inst (
.CAP(CAP), // Capture input
.CLK(CLK) // Clock input
);
DCIRESET
DCIRESET
Primitive: DCI State Machine Reset (After Configuration Has Been
Completed)
The port list and definitions for this primitive are as follows:
reset
Usage
The DCIRESET primitive is used to reset the DCI state machine after configuration
has been completed. This design element is supported for schematics and
instantiations, but not for inference.
VHDL Template
-- DCIRESET : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (DCIRESET_inst) and/or the port declarations
-- code : after the "=>" assignment maybe changed to properly
-- : connect this function to the design. All inputs
-- : and outputs must be connected.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
DCIRESET_inst : DCIRESET
port map (
LOCKED => LOCKED, -- DCIRESET LOCK status output
RST => RST -- DCIRESET asynchronous reset input
);
Verilog Template
// DCIRESET : In order to incorporate this function into the design,
// Verilog : the following instance declaration needs to be placed
// instance : in the body of the design code. The instance name
// declaration : (DCIRESET_inst) and/or the port declarations within the
// code : parenthesis maybe changed to properly reference and
// : connect this function to the design.
DCIRESET
DCIRESET DCIRESET_inst (
.LOCKED(LOCKED),
.RST(RST)
);
DCM_ADV
DCM_ADV
Digital Clock Manager with Advanced Features
DCM_ADV
The Digital Clock Managers (DCM) provide a wide range of powerful clock
CLKIN CLK0
PSCLK CLK2X180
DADDR(6:0) CLKDV The three outputs driving the same frequency as CLK0 are delayed by a fourth, a
DI(15:0)
DWE
CLKFX
CLKFX180
half, and then three-fourths of a clock period. An additional control signal
DEN LOCKED optionally shifts all of the nine clock outputs by a fixed fraction of the input clock
DCLK PSDONE
DO(15:0)
period (defined during configuration and described in multiples of the clock
DRDY period divided by 256).
The user can also dynamically and repetitively move the phase forwards or
X10102
backwards by one unit of the clock period divided by 256. Any phase shift is
always invoked as a specific fraction of the clock period, and is always
implemented by moving delay taps with a resolution of DCM_TAP.
• Dynamic Reconfiguration
The DADDR[6:0], DI[15:0], DWE, DEN, CCLK inputs and DO[15:0] and DRDY
outputs are available to dynamically reconfigure select DCM functions. With
dynamic reconfiguration, DCM attributes are changeable to select a different
phase shift, frequency, or frequency-mode setting from the currently configured
settings.
Port Descriptions
There are four types of DCM ports available in the Virtex-4 architecture:
1. Clock Input Ports
2. Control and Data Input Ports
3. Clock Output Ports
4. Status and Data Output Ports
Available Ports
Available Ports Port Names
Clock Input CLKIN, CLKFB, PSCLK, DCLK
Control and Data Input RST, PSINCDEC, PSEN, DADDR[6:0], DI[15:0], DWE, DEN
Clock Output CLK0, CLK90, CLK180, CLK270, CLK2X, CLK2X180, CLKDV,
CLKFX, CLKFX180
Status and Data Output LOCKED, PSDONE, DO[15:0], DRDY
DCM_ADV
The DCM compensates for the clock input path with an IBUFG on the same edge
(top or bottom) of the device as the DCM is used.
2. BUFGCTRL – Internal Global Clock Buffer
Any BUFGCTRL can drive any DCM in the Virtex-4 device using the dedicated
global routing. A BUFGCTRL can drive the DCM CLKIN pin when used to
connect two DCM in series.
3. IBUF – Input Buffer
When IBUF drives CLKIN input, the PAD to DCM input skew is not
compensated.
Feedback Clock Input - CLKFB
The feedback clock (CLKFB) input pin provides a reference or feedback signal to the
DCM to delay-compensate the clock outputs, and align it with the clock input. To
provide the necessary feedback to the DCM, connect only the CLK0 DCM outputs to
the CLKFB pin and set the CLK_FEEDBACK attribute to 1X. When the CLKFB pin is
connected, CLK0, CLK2X, CLKDV, and CLKFX will be deskewed to CLKIN. When
the CLKFB pin is not connected, DCM clock outputs are not deskewed to CLKIN.
However, the phase relationship between all output clocks is preserved.
During internal feedback configuration, the CLK0 output of a DCM connects to a
global buffer on the same top or bottom half of the device. The output of the global
buffer connects to the CLKFB input of the same DCM.
During the external feedback configuration, the following rules apply:
1. To forward the clock, the CLK0 of the DCM must directly drive an OBUF or a
BUFG-to-DDR configuration.
2. External to the FPGA, the forwarded clock signal must be connected to the IBUFG
(GCLK pin) or the IBUF driving the CLKFB of the DCM.
The feedback clock input signal can be driven by one of the following buffers:
1. BUFG – Global Clock Input Buffer
DCM_ADV
This is an external feedback configuration. When IBUF is used, the PAD to DCM
input skew is not compensated.
Phase-Shift Clock Input - PSCLK
The phase-shift clock (PSCLK) input pin provides the source clock for the DCM phase
shift. The frequency of PSCLK is the same as, lower than, or higher than the frequency
of CLKIN. The phase-shift clock signal can be driven by any clock source (external or
internal), including:
1. IBUF - Input Buffer.
2. IBUFG - Global Clock Input Buffer.
To access the dedicated routing, the IBUFGs is on the same edge of the device (top
or bottom) as the DCM can be used to drive a PSCLK input of the DCM.
3. BUFGCTRL - An Internal Global Buffer.
4. Internal Clock - Any internal clock using general purpose routing.
The frequency range of PSCLK is defined by PSCLK_FREQ_LF/HF. This input must
be tied to ground when the CLKOUT_PHASE_SHIFT attribute is set to NONE or
FIXED.
Dynamic Reconfiguration Clock Input - DCLK
The DCLK input pin provides the source clock for the DCM’s dynamic
reconfiguration circuit. The frequency of DCLK can be asynchronous (in phase and
frequency) to CLKIN. The dynamic reconfiguration clock signal is driven by any clock
source (external or internal), including:
1. IBUF - Input Buffer.
2. IBUFG - Global Clock Input Buffer.
Only the IBUFGs on the same edge of the device (top or bottom) as the DCM can
be used to drive a CLKIN input of the DCM.
3. BUFGCTRL - An Internal Global Buffer.
4. Internal Clock - Any internal clock using general purpose routing.
The frequency range of DCLK is described in the Virtex-4 Data Sheet. When dynamic
reconfiguration is not used, this input must be tied to ground. For more information
on Dynamic Configuration, please see the Configuration User Guide.
DCM_ADV
To ensure a proper DCM reset and locking process, the RST signal must be deasserted
after the CLKIN signal has been present and stable for at least three clock cycles.
The time it takes for the DCM to lock after a reset is specified as LOCK_DLL (for a
DLL output) and LOCK_FX (for a DFS output). See the LOCK_DLL timing parameter
in the Virtex-4 Data Sheet. The DCM locks faster at higher frequencies.
In all designs, the DCM must be held in reset until the clock is stable. During
configuration, the DCM will be held in reset until GWE is released. If the clock is
stable when GWE is released, DCM reset after configuration is not necessary.
Phase-Shift Increment/Decrement Input - PSINCDEC
The PSINCDEC input signal is synchronous with PSCLK. The PSINCDEC input
signal is used to increment or decrement the phase-shift factor. As a result, the output
clock will be phase shifted. The PSINCDEC signal is asserted High for increment, or
deasserted Low for decrement. This input must be tied to ground when the
CLKOUT_PHASE_SHIFT attribute is set to NONE or FIXED.
Phase-Shift Enable Input - PSEN
The PSEN input signal is synchronous with PSCLK. A variable phase-shift operation
is initiated by the PSEN input signal. It must be activated for one period of PSCLK.
After PSEN is initiated, the phase change is effective for up to 100 CLKIN pulse cycles,
plus three PSCLK cycles, and is indicated by a High pulse on PSDONE. There are no
sporadic changes or glitches on any output during the phase transition. From the time
PSEN is enabled until PSDONE is flagged, the DCM output clock moves bit-by-bit
from its original phase shift to the target phase shift. The phase-shift is complete when
PSDONE is flagged. PSEN must be tied to ground when the
CLKOUT_PHASE_SHIFT attribute is set to NONE or FIXED.
Dynamic Reconfiguration Data Input - DI[15:0]
The DI input bus provides reconfiguration data for dynamic reconfiguration. When
not used, all bits must be assigned zeros. Please see the dynamic reconfiguration
section of the Configuration User Guide for more information.
Dynamic Reconfiguration Address Input - DADDR[6:0]
The DADDR input bus provides a reconfiguration address for the dynamic
reconfiguration. When not used, all bits must be assigned zeros. The DO output bus
will reflect the DCM’s status. Please see the dynamic reconfiguration section of the
Configuration User Guide for more information.
Dynamic Reconfiguration Write Enable Input - DWE
The DWE input pin provides the write enable control signal to write the DI data into
the DADDR address. When not used, it must be tied Low. Please see the dynamic
reconfiguration section of the Configuration User Guide for more information.
Dynamic Reconfiguration Enable Input - DEN
The DEN input pin provides the enable control signal to access the dynamic
reconfiguration feature. To reflect the DCM status signals on the DO output bus, when
not used, it should be tied to High because if DEN is tied Low, DO will always output
a Low signal. Please see the dynamic reconfiguration section of the Configuration User
Guide for more information.
DCM_ADV
DCM_ADV
The rising edge of CLKFX output is phase aligned to the rising edges of CLK0,
CLK2X, and CLKDV. When M and D to have no common factor, the alignment occurs
only once every D cycles of CLK0.
By default, the effective CLKIN frequency is equal to the CLKIN frequency, except
when the CLKIN_DIVIDE_BY_2 attribute is set to True.
Frequency Synthesis Output Clock, 180° - CLKFX180
The CLKFX180 output clock provides a clock with the same frequency as the DCM’s
CLKFX only phase-shifted by 180°.
DCM_ADV
DCM Attributes
A handful of DCM attributes govern the DCM functionality. This section provides a
detailed description of each attribute. For more information on applying these
attributes in UCF, VHDL, or Verilog code, refer to the Xilinx Constraints Guide.
CLKDV_DIVIDE Attribute
The CLKDV_DIVIDE attribute controls the CLKDV frequency. Since the source clock
frequency is divided by the value of this attribute, the possible values for
CLKDV_DIVIDE are: 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 9, 10, 11, 12, 13, 14,
15, or 16. The default value is 2. In the low frequency mode, any CLKDV_DIVIDE
value produces a CLKDV output with a 50/50 duty-cycle. In the high frequency
mode, the CLKDV_DIVIDE value must be set to an integer value to produce a
CLKDV output with a 50/50 duty-cycle.
Non-Integer CLKDV_DIVIDE
DCM_ADV
CLKIN_PERIOD Attribute
The CLKIN_PERIOD attribute specifies the source clock period (in nanoseconds). The
default value is 0.0 ns.
CLKIN_DIVIDE_BY_2 Attribute
The CLKIN_DIVIDE_BY_2 attribute determines the effective CLKIN frequency
applied to the DCM circuitry. When set to False, the effective CLKIN frequency of the
DCM equals the source clock frequency driving the CLKIN input. When set to True,
the CLKIN frequency is divided by two before it reaches the rest of the DCM circuitry.
Thus, the DCM circuitry sees half the frequency applied to the CLKIN input and
operates based on this frequency. For example, if a 100 MHz clock drives CLKIN, and
CLKIN_DIVIDE_BY_2 is set to True; then the effective CLKIN frequency is 50 MHz.
Thus, CLK0 output is 50 MHz and CLK2X output is 100 MHz. The effective CLKIN
frequency must be used to evaluate any operation or specification derived from
CLKIN frequency. The possible values for CLKIN_DIVIDE_BY_2 are True and False.
The default value is False.
CLKOUT_PHASE_SHIFT Attribute
The CLKOUT_PHASE_SHIFT attribute indicates the mode of the phase shift applied
to the DCM outputs. The possible values are NONE, FIXED, VARIABLE_POSITIVE,
VARIABLE_CENTER, or DIRECT. The default value is NONE.
When set to NONE, a phase shift cannot be performed and a phase-shift value has no
effect on the DCM outputs. When set to FIXED, the DCM outputs are phase shifted by
a fixed phase from the CLKIN. The phase-shift value is determined by PHASE_SHIFT
attribute. If the CLKOUT_PHASE_SHIFT attribute is set to FIXED or NONE, then the
PSEN, PSINCDEC, and the PSCLK inputs must be tied to ground.
When set to VARIABLE_POSITIVE, the DCM outputs can be phase shifted in variable
mode in the positive range with respect to CLKIN. When set to VARIABLE_CENTER,
the DCM outputs can be phase shifted in variable mode, in the positive and negative
range with respect to CLKIN. If set to VARIABLE_POSITIVE or VARIABLE_CENTER,
each phase shift increment (or decrement) will increase (or decrease) the phase shift
by a period of 1/256 x CLKIN.
DCM_ADV
When set to DIRECT, the DCM output can be phase shifted in variable mode in the
positive range with respect to CLKIN. Each phase shift increment/decrement will
increase/decrease the phase shift by one DCM_TAP.
The starting phase in the VARIABLE_POSITIVE and VARIABLE_CENTER modes is
determined by the phase-shift value. The starting phase in the DIRECT mode is
always zero, regardless of the value specified by the PHASE_SHIFT attribute. Thus,
the PHASE_SHIFT attribute should be set to zero when DIRECT mode is used. A non-
zero phase-shift value for DIRECT mode can be loaded to the DCM using Dynamic
Reconfiguration Ports.
CLK_FEEDBACK Attribute
The CLK_FEEDBACK attribute determines the type of feedback applied to the
CLKFB. The possible values are 1X or NONE. The default value is 1X. When set to 1X,
CLKFB pin must be driven by CLK0. When set to NONE leave the CLKFB pin
unconnected.
DESKEW_ADJUST Attribute
The DESKEW_ADJUST attribute affects the amount of delay in the feedback path.
The possible values are SYSTEM_SYNCHRONOUS, SOURCE_SYNCHRONOUS, 0,
1, 2, 3, ... or 31. The default value is SYSTEM_SYNCHRONOUS.
For most designs, the default value is appropriate. In a source-synchronous design,
set this attribute to SOURCE_SYNCHRONOUS. The remaining values should only be
used when consulting with Xilinx.
DFS_FREQUENCY_MODE Attribute
The DFS_FREQUENCY_MODE attribute specifies the frequency mode of the
frequency synthesizer (DFS). The possible values are Low and High. The default
value is Low. The frequency ranges for both frequency modes are specified in the
Virtex-4 Data Sheet. DFS_FREQUENCY_MODE determines the frequency range of
CLKIN, CLKFX, and CLKFX180.
DLL_FREQUENCY_MODE Attribute
The DLL_FREQUENCY_MODE attribute specifies either the High or Low frequency
mode of the delay-locked loop (DLL). The default value is Low. The frequency ranges
for both frequency modes are specified in the Virtex-4 Data Sheet.
DUTY_CYCLE_CORRECTION Attribute
The DUTY_CYCLE_CORRECTION attribute controls the duty cycle correction of the
1x clock outputs: CLK0, CLK90, CLK180, and CLK270. The possible values are True
and False. The default value is True. When set to True, the 1x clock outputs are duty
cycle corrected to a 50/50 duty cycle. It is strongly recommended to always set the
DUTY_CYCLE_CORRECTION attribute to True. Setting this attribute to False does
not necessarily produce output clocks with the same duty cycle as the source clock.
DCM_PERFORMANCE_MODE Attribute
The DCM_PERFORMANCE_MODE attribute allows the choice of optimizing the
DCM either for high frequency and low jitter or for low frequency and a wide phase-
shift range. The attribute values are MAX_SPEED and MAX_RANGE. The default
DCM_ADV
FACTORY_JF Attribute
The FACTORY_JF attribute affects the DCM's jitter filter characteristic. This attribute
is set the default value of F0F0 and should not be modified unless otherwise
instructed by Xilinx.
PHASE_SHIFT Attribute
The PHASE_SHIFT attribute determines the amount of phase shift applied to the
DCM outputs. This attribute can be used in both fixed or variable phase-shift mode. If
used with variable mode, the attribute sets the starting phase shift. When
CLKOUT_PHASE_SHIFT = VARIABLE_POSITIVE, the PHASE_SHIFT value range is
0 to 255. When CLKOUT_PHASE_SHIFT = VARIABLE_CENTER or FIXED, the
PHASE_SHIFT value range is -255 to 255. When CLKOUT_PHASE_SHIFT = DIRECT,
the PHASE_SHIFT value range is 0 to 1023. The default value is 0.
STARTUP_WAIT Attribute
The STARTUP_WAIT attribute determines whether the startup cycle waits for DCM
to lock. The possible values for this attribute are True and False. The default value is
False. When STARTUP_WAIT is set to True, and the LCK_cycle BitGen option is used,
then the configuration startup sequence waits in the startup cycle specified by
LCK_cycle until the DCM is locked.
Available Attributes
Attribute Type Allowed Values Default Description
CLK_FEEDBACK STRING "1X" or "NONE “1X” Specifies the clock feedback of the
allowed value
CLKDV_DIVIDE FLOAT 1.5, 2.0, 2.5, 3.0, 3.5, 2.0 Specifies the extent to which the
4.0, 4.5, 5.0, 5.5, 6.0, CLKDLL, CLKDLLE, CLKDLLHF, or
6.5, 7.0, 7.5, 8.0, 9.0, DCM clock divider (CLKDV output) is
10.0, 11.0, 12.0, 13.0, to be frequency divided.
14.0, 15.0 or 16.0
CLKFX_DIVIDE INTEGER 1 to 32 1 Specifies the frequency divider value for
the CLKFX output.
CLKFX_MULTIPLY INTEGER 2 to 32 4 Specifies the frequency multiplier value
for the CLKFX output.
DCM_ADV
Usage
This design element is supported for schematics and instantiations, but not for
inference.
-- Copy the following two statements and paste them before the
DCM_ADV
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
DCM_ADV_inst : DCM_ADV
generic map (
CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
-- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
CLKFX_MULTIPLY => 4, -- Can be any integer from 2 to 32
CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
CLKIN_PERIOD => 10.0, -- Specify period of input clock in ns from 1.25 to 1000.00
CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift mode of NONE, FIXED,
-- VARIABLE_POSITIVE, VARIABLE_CENTER or DIRECT
CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE or 1X
DCM_PERFORMANCE_MODE => "MAX_SPEED", -- Can be MAX_SPEED or MAX_RANGE
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
-- an integer from 0 to 15
DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
DLL_FREQUENCY_MODE => "LOW", -- LOW, HIGH, or HIGH_SER frequency mode for DLL
DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
FACTORY_JF => X"F0F0", -- FACTORY JF Values Suggested to be set to X"F0F0"
PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 1023
STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
port map (
CLK0 => CLK0, -- 0 degree DCM CLK output
CLK180 => CLK180, -- 180 degree DCM CLK output
CLK270 => CLK270, -- 270 degree DCM CLK output
CLK2X => CLK2X, -- 2X DCM CLK output
CLK2X180 => CLK2X180, -- 2X, 180 degree DCM CLK out
CLK90 => CLK90, -- 90 degree DCM CLK output
CLKDV => CLKDV, -- Divided DCM CLK out (CLKDV_DIVIDE)
CLKFX => CLKFX, -- DCM CLK synthesis out (M/D)
CLKFX180 => CLKFX180, -- 180 degree CLK synthesis out
DO => DO, -- 16-bit data output for Dynamic Reconfiguration Port (DRP)
DRDY => DRDY, -- Ready output signal from the DRP
LOCKED => LOCKED, -- DCM LOCK status output
PSDONE => PSDONE, -- Dynamic phase adjust done output
CLKFB => CLKFB, -- DCM clock feedback
CLKIN => CLKIN, -- Clock input (from IBUFG, BUFG or DCM)
DADDR => DADDR, -- 7-bit address for the DRP
DCLK => DCLK, -- Clock for the DRP
DEN => DEN, -- Enable input for the DRP
DI => DI, -- 16-bit data input for the DRP
DWE => DWE, -- Active high allows for writing configuration memory
PSCLK => PSCLK, -- Dynamic phase adjust clock input
PSEN => PSEN, -- Dynamic phase adjust enable input
PSINCDEC => PSINCDEC, -- Dynamic phase adjust increment/decrement
RST => RST -- DCM asynchronous reset input
);
DCM_ADV #(
.CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
// 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
DCM_ADV
DCM_ADV
DCM_BASE
DCM_BASE
Primitive: Digital Clock Manager with Basic Features
DCM_BASE
The DCM_BASE primitive accesses the basic, frequently used, DCM features and
CLKIN CLK0
CLK90
simplifies the user-interface ports.
CLK180
CLK270
The clock deskew, frequency synthesis, and fixed-phase shifting features are available
CLKFB
CLK2X to use with DCM_BASE.
CLK2X180
CLKDV
RST LOCKED
The DCM contains a delay-locked loop (DLL) to completely eliminate clock
X10103
distribution delays, by deskewing the DCM's output clocks with respect to the input
clock. The DLL contains delay elements (individual small buffers) and control logic.
The incoming clock drives a chain of delay elements, thus the output of every delay
element represents a version of the incoming clock delayed at a different point.
The control logic contains a phase detector and a delay-line selector. The phase
detector compares the incoming clock signal (CLKIN) against a feedback input
(CLKFB) and steers the delay line selector, essentially adding delay to the output of
DCM until the CLKIN and CLKFB coincide.
Frequency Synthesis
Separate outputs provide a doubled frequency (CLK2X and CLK2X180). Another
output, CLKDV, provides a frequency that is a specified fraction of the input
frequency.
Two other outputs, CLKFX and CLKFX180, provide an output frequency derived
from the input clock by simultaneous frequency division and multiplication. The user
can specify any integer multiplier (M) and divisor (D) within the range specified in
the DCM Timing Parameters section of the Virtex-4 Data Sheet. An internal calculator
determines the appropriate tap selection, to make the output edge coincide with the
input clock whenever mathematically possible. For example, M = 9 and D = 5,
multiply the frequency by 1.8, and the output rising edge is coincident with the input
rising edge every five input periods equaling every nine output periods.
The DCM_BASE model will allow only NONE and FIXED CLKOUT_PHASE_SHIFT
MODES. If any other mode is used (e.g., VARIABLE), the model will give an error
message. If users must use the VARIABLE mode, they should use the DCM_PS model.
Port Descriptions
There are four types of DCM ports available in the Virtex-4 architecture:
1. Clock Input Ports
2. Control and Data Input Ports
3. Clock Output Ports
4. Status and Data Output Ports
DCM_BASE
Following are the available ports and port names for this primitive
The DCM compensates for the clock input path when an IBUFG on the same edge
(top or bottom) of the device as the DCM is used.
2. BUFGCTRL – Internal Global Clock Buffer
Any BUFGCTRL can drive any DCM in the Virtex-4 device using the dedicated
global routing. A BUFGCTRL can drive the DCM CLKIN pin when used to
connect two DCM in series. This path can or cannot be compensated for deskew
depending on the component driving the BUFGCTRL and CLKFB pin.
3. BUF – Input Buffer
When IBUF drives CLKIN input, the PAD to DCM input skew is not compensated.
Feedback Clock Input - CLKFB
The feedback clock (CLKFB) input pin provides a reference or feedback signal to the
DCM to delay-compensate the clock outputs, and align it with the clock input. To
provide the necessary feedback to the DCM, connect only the CLK0 or CLK2X DCM
outputs to the CLKFB pin and set the CLK_FEEDBACK attribute to 1X. When the
CLKFB pin is connected, CLK0, CLK2X, CLKDV, and CLKFX will be deskewed to
CLKIN. When the CLKFB pin is not connected, DCM clock outputs are not deskewed
to CLKIN. However, the phase relationship between all output clocks is preserved.
During internal feedback configuration, the CLK0/CLK2X output of a DCM connects
to a global buffer on the same top or bottom half of the device. The output of the
global buffer connects to the CLKFB input of the same DCM.
During the external feedback configuration, the following rules apply:
1. To forward the clock, the CLK0 or CLK2X of the DCM must directly drive an
OBUF or a BUFG-to-DDR configuration.
2. External to the FPGA, the forwarded clock signal must be connected to the IBUFG
(GCLK pin) or the IBUF driving the CLKFB of the DCM.
The feedback clock input signal can be driven by one of the following buffers:
1. IBUFG – Global Clock Input Buffer
DCM_BASE
DCM_BASE
DCM_BASE
DCM Attributes
A handful of DCM attributes govern the DCM functionality. This section provides a
detailed description of each attribute. For more information on applying these
attributes in UCF, VHDL, or Verilog code, refer to the Xilinx Constraints Guide.
CLKDV_DIVIDE Attribute
The CLKDV_DIVIDE attribute controls the CLKDV frequency. The source clock
frequency is divided by the value of this attribute. The possible values for
DCM_BASE
CLKDV_DIVIDE are: 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 9, 10, 11, 12, 13, 14,
15, or 16. The default value is 2. In the low frequency mode, any CLKDV_DIVIDE
value produces a CLKDV output with a 50/50 duty-cycle. In the high frequency
mode, the CLKDV_DIVIDE value must be set to an integer value to produce a
CLKDV output with a 50/50 duty-cycle.
Non-Integer CLKDV_DIVIDE
CLKIN_PERIOD Attribute
The CLKIN_PERIOD attribute specifies the source clock period (in nanoseconds). The
default value is 0.0 ns.
CLKIN_DIVIDE_BY_2 Attribute
The CLKIN_DIVIDE_BY_2 attribute determines the effective CLKIN frequency
applied to the DCM circuitry. When set to False, the effective CLKIN frequency of the
DCM equals the source clock frequency driving the CLKIN input. When set to True,
the CLKIN frequency is divided by two before it reaches the rest of the DCM circuitry.
Thus, the DCM circuitry sees half the frequency applied to the CLKIN input and
operates based on this frequency. For example, if a 100 MHz clock drives CLKIN, and
CLKIN_DIVIDE_BY_2 is set to True; then the effective CLKIN frequency is 50 MHz.
Thus, CLK0 output is 50 MHz and CLK2X output is 100 MHz. The effective CLKIN
frequency must be used to evaluate any operation or specification derived from
CLKIN frequency. The possible values for CLKIN_DIVIDE_BY_2 are True and False.
The default value is False.
CLKOUT_PHASE_SHIFT Attribute
The CLKOUT_PHASE_SHIFT attribute indicates the mode of the phase shift applied
to the DCM outputs. The possible values are NONE, FIXED, VARIABLE_POSITIVE,
VARIABLE_CENTER, or DIRECT. The default value is NONE.
When set to NONE, a phase shift cannot be performed and a phase-shift value has no
affect on the DCM outputs. When set to FIXED, the DCM outputs are phase shifted by
DCM_BASE
a fixed phase from the CLKIN. The phase-shift value is determined by PHASE_SHIFT
attribute. If the CLKOUT_PHASE_SHIFT attribute is set to FIXED or NONE, then the
PSEN, PSINCDEC, and the PSCLK inputs must be tied to ground.
When set to VARIABLE_POSITIVE, the DCM outputs can be phase shifted in variable
mode in the positive range with respect to CLKIN. When set to VARIABLE_CENTER,
the DCM outputs can be phase shifted in variable mode, in the positive and negative
range with respect to CLKIN. If set to VARIABLE_POSITIVE or VARIABLE_CENTER,
each phase shift increment (or decrement) will increase (or decrease) the phase shift
by a period of 1/256 x CLKIN.
When set to DIRECT, the DCM output can be phase shifted in variable mode in the
positive range with respect to CLKIN. Each phase shift increment/decrement will
increase/decrease the phase shift by one DCM_TAP.
The starting phase in the VARIABLE_POSITIVE and VARIABLE_CENTER modes is
determined by the phase-shift value. The starting phase in the DIRECT mode is
always zero, regardless of the value specified by the PHASE_SHIFT attribute. Thus,
the PHASE_SHIFT attribute should be set to zero when DIRECT mode is used. A non-
zero phase-shift value for DIRECT mode can be loaded to the DCM using Dynamic
Reconfiguration Ports.
CLK_FEEDBACK Attribute
The CLK_FEEDBACK attribute determines the type of feedback applied to the
CLKFB. The possible values are 1X or NONE. The default value is 1X. When set to 1X,
CLKFB pin must be driven by CLK0. When set to NONE leave the CLKFB pin
unconnected.
DESKEW_ADJUST Attribute
The DESKEW_ADJUST attribute affects the amount of delay in the feedback path.
The possible values are SYSTEM_SYNCHRONOUS, SOURCE_SYNCHRONOUS,
0, 1, 2, 3, ... or 31. The default value is SYSTEM_SYNCHRONOUS.
For most designs, the default value is appropriate. In a source-synchronous design,
set this attribute to SOURCE_SYNCHRONOUS. The remaining values should only be
used when consulting with Xilinx.
DFS_FREQUENCY_MODE Attribute
The DFS_FREQUENCY_MODE attribute specifies the frequency mode of the
frequency synthesizer (DFS). The possible values are Low and High. The default
value is Low. The frequency ranges for both frequency modes are specified in the
Virtex-4 Data Sheet. DFS_FREQUENCY_MODE determines the frequency range of
CLKIN, CLKFX, and CLKFX180.
DLL_FREQUENCY_MODE Attribute
The DLL_FREQUENCY_MODE attribute specifies either the High or Low frequency
mode of the delay-locked loop (DLL). The default value is Low. The frequency ranges
for both frequency modes are specified in the Virtex-4 Data Sheet.
DCM_BASE
DUTY_CYCLE_CORRECTION Attribute
The DUTY_CYCLE_CORRECTION attribute controls the duty cycle correction of the
1x clock outputs: CLK0, CLK90, CLK180, and CLK270. The possible values are True
and False. The default value is True. When set to True, the 1x clock outputs are duty
cycle corrected to a 50/50 duty cycle. It is strongly recommended to always set the
DUTY_CYCLE_CORRECTION attribute to True. Setting this attribute to False does
not necessarily produce output clocks with the same duty cycle as the source clock.
DCM_PERFORMANCE_MODE Attribute
The DCM_PERFORMANCE_MODE attribute allows the choice of optimizing the
DCM either for high frequency and low jitter or for low frequency and a wide phase-
shift range. The attribute values are MAX_SPEED and MAX_RANGE. The default
value is MAX_SPEED. When set to MAX_SPEED, the DCM is optimized to produce
high frequency clocks with low jitter. However, the phase-shift range is smaller than
when MAX_RANGE is selected. When set to MAX_RANGE, the DCM is optimized to
produce low frequency clocks with a wider phase-shift range. The
DCM_PERFORMANCE_MODE affects the following specifications: DCM input and
output frequency range, phase-shift range, output jitter, DCM_TAP,
CLKIN_CLKFB_PHASE, CLKOUT_PHASE, and duty-cycle precision. The Virtex-4
Data Sheet specifies these values.
For most cases, the DCM_PERFORMANCE_MODE attribute should be set to
MAX_SPEED (default). Consider changing to MAX_RANGE in the following
situations:
• The frequency needs to be below the low frequency limit of the MAX_SPEED
setting.
• A greater absolute phase-shift range is required.
FACTORY_JF Attribute
The FACTORY_JF attribute affects the DCM's jitter filter characteristic. This attribute
is set the default value of F0F0 and should not be modified unless otherwise
instructed by Xilinx.
PHASE_SHIFT Attribute
The PHASE_SHIFT attribute determines the amount of phase shift applied to the
DCM outputs. This attribute can be used in either NONE or FIXED phase-shift mode.
When the CLKOUT_PHASE_SHIFT = FIXED, the PHASE_SHIFT value range is 0 to
255. When CLKOUT_PHASE_SHIFT = FIXED_CENTER, the PHASE_SHIFT value
range is -255 to 255. When CLKOUT_PHASE_SHIFT = DIRECT, the PHASE_SHIFT
value range is 0 to 1023. The default value is 0.
If you need to use the VARIABLE PHASE_SHIFT mode, you must use DCM_PS.
STARTUP_WAIT Attribute
The STARTUP_WAIT attribute determines whether the startup cycle waits for DCM
to lock. The possible values for this attribute are True and False. The default value is
False. When STARTUP_WAIT is set to True, and the LCK_cycle BitGen option is used,
then the configuration startup sequence waits in the startup cycle specified by
LCK_cycle until the DCM is locked.
DCM_BASE
Available Attributes
Attribute Type Allowed Values Default Description
CLK_FEEDBACK STRING "1X"or "NONE “1X” Specifies the feedback input
to the DCM (CLK0, or
CLK2X).
CLKDV_DIVIDE FLOAT 1.5, 2.0, 2.5, 3.0, 3.5, 2.0 Specifies the extent to which
4.0, 4.5, 5.0, 5.5, 6.0, the CLKDLL, CLKDLLE,
6.5, 7.0, 7.5, 8.0, 9.0, CLKDLLHF, or DCM clock
10.0, 11.0, 12.0, 13.0, divider (CLKDV output) is
14.0, 15.0 or 16.0 to be frequency divided.
CLKFX_DIVIDE INTEGER 1 to 32 1 Specifies the frequency
divider value for the CLKFX
output.
CLKFX_MULTIPLY INTEGER 2 to 32 4 Specifies the frequency
multiplier value for the
CLKFX output.
CLKIN_DIVIDE_BY_2 BOOLEAN FALSE, TRUE FALSE Allows for the input clock
frequency to be divided in
half when such a reduction is
necessary to meet the DCM
input clock frequency
requirements.
CLKIN_PERIOD FLOAT 1.25 to 1000.00 0.0 Specifies the period of input
clock in ns from 1.25 to
1000.00.
CLKOUT_PHASE_ STRING "NONE" or "FIXED "NONE” Specifies the phase shift
SHIFT mode of allowed value.
DCM_AUTOCALI- BOOLEAN TRUE, FALSE TRUE Specifies the additional
BRATION circuitry necessary to ensure
proper DCM operation. It is
suggested that users consult
with Xilinx before changing
this attribute.
DCM_PERFORMANCE_ STRING "MAX_SPEED" or "MAX_SPEED” Allows selection between
MODE "MAX_RANGE” maximum frequency and
minimum jitter for low
frequency and maximum
phase shift range
DESKEW_ADJUST STRING "SOURCE_SYNCHR "SYSTEM_SYN Affects the amount of delay
ONOUS", CHRONOUS" in the feedback path, and
"SYSTEM_SYNCHR should be used for source-
ONOUS" or "0" to "15 synchronous interfaces.
DFS_FREQUENCY_ STRING "LOW" or "HIGH “LOW” Specifies the frequency
MODE mode of the frequency
synthesizer.
DLL_FREQUENCY_ STRING "LOW" or "HIGH "LOW” This specifies the DLL's
MODE frequency mode.
DUTY_CYCLE_ BOOLEAN TRUE, FALSE TRUE Corrects the duty cycle of the
CORRECTION CLK0, CLK90, CLK180, and
CLK270 outputs.
FACTORY_JF 16-Bit Hexadecimal Any 16-Bit F0F0 The FACTORY_JF attribute
Hexadecimal value affects the DCMs jitter filter
characteristic. This attribute
is set the default value of
F0F0 and should not be
modified unless otherwise
instructed by Xilinx.
PHASE_SHIFT INTEGER -255 to 1023 0 Specifies the phase shift
numerator. The range
depends on
CLKOUT_PHASE_SHIFT.
STARTUP_WAIT BOOLEAN FALSE, TRUE FALSE When set to TRUE, the
configuration startup
sequence waits in the
specified cycle until the
DCM locks.
DCM_BASE
Usage
This design element is supported for schematics and instantiations, but not for
inference.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
DCM_BASE_inst : DCM_BASE
generic map (
CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
-- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
CLKFX_MULTIPLY => 4, -- Can be any integer from 2 to 32
CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
CLKIN_PERIOD => 10.0, -- Specify period of input clock in ns from 1.25 to 1000.00
CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift mode of NONE or FIXED
CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE or 1X
DCM_PERFORMANCE_MODE => "MAX_SPEED", -- Can be MAX_SPEED or MAX_RANGE
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
-- an integer from 0 to 15
DFS_FREQUENCY_MODE => "LOW", -- LOW or HIGH frequency mode for frequency synthesis
DLL_FREQUENCY_MODE => "LOW", -- LOW, HIGH, or HIGH_SER frequency mode for DLL
DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
FACTORY_JF => X"F0F0", -- FACTORY JF Values Suggested to be set to X"F0F0"
PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 1023
STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
port map (
CLK0 => CLK0, -- 0 degree DCM CLK ouptput
CLK180 => CLK180, -- 180 degree DCM CLK output
CLK270 => CLK270, -- 270 degree DCM CLK output
CLK2X => CLK2X, -- 2X DCM CLK output
CLK2X180 => CLK2X180, -- 2X, 180 degree DCM CLK out
CLK90 => CLK90, -- 90 degree DCM CLK output
CLKDV => CLKDV, -- Divided DCM CLK out (CLKDV_DIVIDE)
CLKFX => CLKFX, -- DCM CLK synthesis out (M/D)
CLKFX180 => CLKFX180, -- 180 degree CLK synthesis out
LOCKED => LOCKED, -- DCM LOCK status output
CLKFB => CLKFB, -- DCM clock feedback
CLKIN => CLKIN, -- Clock input (from IBUFG, BUFG or DCM)
RST => RST -- DCM asynchronous reset input
);
Verilog Template
// DCM_BASE : In order to incorporate this function into the design,
// Verilog : the following instance declaration needs to be placed
DCM_BASE
DCM_BASE #(
.CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
// 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
.CLKFX_DIVIDE(1), // Can be any integer from 1 to 32
.CLKFX_MULTIPLY(4), // Can be any integer from 2 to 32
.CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature
.CLKIN_PERIOD(10.0), // Specify period of input clock in ns from 1.25 to 1000.00
.CLKOUT_PHASE_SHIFT("NONE"), // Specify phase shift mode of NONE or FIXED
.CLK_FEEDBACK("1X"), // Specify clock feedback of NONE, 1X or 2X
.DCM_PERFORMANCE_MODE("MAX_SPEED"), // Can be MAX_SPEED or MAX_RANGE
.DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
// an integer from 0 to 15
.DFS_FREQUENCY_MODE("LOW"), // LOW or HIGH frequency mode for frequency synthesis
.DLL_FREQUENCY_MODE("LOW"), // LOW, HIGH, or HIGH_SER frequency mode for DLL
.DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE
.FACTORY_JF(16'hf0f0), // FACTORY JF value suggested to be set to 16'hf0f0
.PHASE_SHIFT(0), // Amount of fixed phase shift from -255 to 1023
.STARTUP_WAIT("FALSE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE
) DCM_BASE_inst(
.CLK0(CLK0), // 0 degree DCM CLK output
.CLK180(CLK180), // 180 degree DCM CLK output
.CLK270(CLK270), // 270 degree DCM CLK output
.CLK2X(CLK2X), // 2X DCM CLK output
.CLK2X180(CLK2X180), // 2X, 180 degree DCM CLK out
.CLK90(CLK90), // 90 degree DCM CLK output
.CLKDV(CLKDV), // Divided DCM CLK out (CLKDV_DIVIDE)
.CLKFX(CLKFX), // DCM CLK synthesis out (M/D)
.CLKFX180(CLKFX180), // 180 degree CLK synthesis out
.LOCKED(LOCKED), // DCM LOCK status output
.CLKFB(CLKFB), // DCM clock feedback
.CLKIN(CLKIN), // Clock input (from IBUFG, BUFG or DCM)
.RST(RST) // DCM asynchronous reset input
);
DCM_BASE
DCM_PS
DCM_PS
Primitive: Digital Clock Manager with Basic and Phase-Shift Features
DCM_PS
The DCM_PS primitive access all DCM features and ports available in DCM_BASE
CLKIN CLK0
CLK90
with additional ports used by the variable phase shifting feature. DCM_PS also has
CLKFB CLK180 these available DCM features: clock deskew, frequency synthesis, and fixed or
RST
CLK270
CLK2X
variable phase shifting.
CLK2X180
PSINCDEC CLKDV
DCM_PS also supports the following, powerful, clock management features:
CLKFX
PSEN CLKFX180
LOCKED
Clock Deskew
PSCLK PSDONE
DO(15:0) The DCM contains a delay-locked loop (DLL) to completely eliminate clock
distribution delays, by deskewing the DCM's output clocks with respect to the input
X10104
clock. The DLL contains delay elements (individual small buffers) and control logic.
The incoming clock drives a chain of delay elements, thus the output of every delay
element represents a version of the incoming clock delayed at a different point.
The control logic contains a phase detector and a delay-line selector. The phase
detector compares the incoming clock signal (CLKIN) against a feedback input
(CLKFB) and steers the delay line selector, essentially adding delay to the output of
DCM until the CLKIN and CLKFB coincide.
Frequency Synthesis
Separate outputs provide a doubled frequency (CLK2X and CLK2X180). Another
output, CLKDV, provides a frequency that is a specified fraction of the input
frequency.
Two other outputs, CLKFX and CLKFX180, provide an output frequency derived
from the input clock by simultaneous frequency division and multiplication. The user
can specify any integer multiplier (M) and divisor (D) within the range specified in
the DCM Timing Parameters section of the Virtex-4 Data Sheet. An internal calculator
determines the appropriate tap selection, to make the output edge coincide with the
input clock whenever mathematically possible. For example, M = 9 and D = 5,
multiply the frequency by 1.8, and the output rising edge is coincident with the input
rising edge every five input periods equaling every nine output periods.
Phase Shifting
The three outputs driving the same frequency as CLK0 are delayed by a fourth, a half,
and then three-fourths of a clock period. An additional control signal optionally shifts
all of the nine clock outputs by a fixed fraction of the input clock period (defined
during configuration and described in multiples of the clock period divided by 256).
The user can also dynamically and repetitively move the phase forwards or
backwards by one unit of the clock period divided by 256. Any phase shift is always
invoked as a specific fraction of the clock period, and is always implemented by
moving delay taps with a resolution of DCM_TAP.
Port Descriptions
There are four types of DCM ports available in the Virtex-4 architecture:
1. Clock Input Ports
DCM_PS
When an IBUFG drives a CLKFB pin of a DCM in the same (top or bottom) half of
the device, the pad to DCM skew is compensated for deskew.
2. BUFGCTRL – Internal Global Clock Buffer
Any BUFGCTRL can drive any DCM in the Virtex-4 device using the dedicated
global routing. A BUFGCTRL can drive the DCM CLKIN pin when used to
connect two DCM in series. This path can or cannot be compensated for deskew
depending on the component driving the BUFGCTRL and CLKFB pin.
3. BUF – Input Buffer
When IBUF drives CLKIN input, the PAD to DCM input skew is not compensated.
Feedback Clock Input - CLKFB
The feedback clock (CLKFB) input pin provides a reference or feedback signal to the
DCM to delay-compensate the clock outputs, and align it with the clock input. To
provide the necessary feedback to the DCM, connect only the CLK0 or CLK2X DCM
outputs to the CLKFB pin and set the CLK_FEEDBACK attribute to 1X. When the
CLKFB pin is connected, CLK0, CLK2X, CLKDV, and CLKFX will be deskewed to
CLKIN. When the CLKFB pin is not connected, DCM clock outputs are not deskewed
to CLKIN. However, the phase relationship between all output clocks is preserved.
During internal feedback configuration, the CLK0/CLK2X output of a DCM connects
to a global buffer on the same top or bottom half of the device. The output of the
global buffer connects to the CLKFB input of the same DCM.
During the external feedback configuration, the following rules apply:
1. To forward the clock, the CLK0 or CLK2X of the DCM must directly drive an
OBUF or a BUFG-to-DDR configuration.
DCM_PS
2. External to the FPGA, the forwarded clock signal must be connected to the IBUFG
(GCLK pin) or the IBUF driving the CLKFB of the DCM.
The feedback clock input signal can be driven by one of the following buffers:
1. IBUFG – Global Clock Input Buffer
To access the dedicated routing, only the IBUFGs on the same edge (top or
bottom) as the DCM can be used to drive a PSCLK input of the DCM.
3. BUFGCTRL - An Internal Global Buffer.
4. Internal Clock - Any internal clock using internal routing.
The frequency range of PSCLK is defined by PSCLK_FREQ_LF/HF. This input must
be tied to ground when the CLKOUT_PHASE_SHIFT attribute is set to NONE or
FIXED.
DCM_PS
In all designs, the DCM must be held in reset until the clock is stable. During
configuration, the DCM will be held in reset until GWE is released. If the clock is
stable when GWE is released, DCM reset after configuration is not necessary.
Phase-Shift Increment/Decrement Input - PSINCDEC
The PSINCDEC input signal is synchronous with PSCLK. The PSINCDEC input
signal is used to increment or decrement the phase-shift factor. As a result, the output
clock will be phase shifted. The PSINCDEC signal is asserted High for increment, or
deasserted Low for decrement. This input must be tied to ground when the
CLKOUT_PHASE_SHIFT attribute is set to NONE or FIXED.
Phase-Shift Enable Input - PSEN
The PSEN input signal is synchronous with PSCLK. A variable phase-shift operation
is initiated by the PSEN input signal. It must be activated for one period of PSCLK.
After PSEN is initiated, the phase change is effective for up to 100 CLKIN pulse cycles,
plus three PSCLK cycles, and is indicated by a High pulse on PSDONE. There are no
sporadic changes or glitches on any output during the phase transition. From the time
PSEN is enabled until PSDONE is flagged, the DCM output clock moves bit-by-bit
from its original phase shift to the target phase shift. The phase-shift is complete when
PSDONE is flagged. PSEN must be tied to ground when the
CLKOUT_PHASE_SHIFT attribute is set to NONE or FIXED.
DCM_PS
DCM_PS
To guarantee an established system clock at the end of the start-up cycle, the DCM can
delay the completion of the device configuration process until after the DCM is
locked. The STARTUP_WAIT attribute activates this feature.
Until the LOCKED signal is activated, the DCM output clocks are not valid and can
exhibit glitches, spikes, or other spurious movement. In particular, the CLK2X output
can appear as a 1x clock with a 25/75 duty cycle.
DCM Status Mapping to DO Bus
DCM_PS
DCM Attributes
A handful of DCM attributes govern the DCM functionality. This section provides a
detailed description of each attribute. For more information on applying these
attributes in UCF, VHDL, or Verilog code, refer to the Xilinx Constraints Guide.
CLKDV_DIVIDE Attribute
The CLKDV_DIVIDE attribute controls the CLKDV frequency. Since the source clock
frequency is divided by the value of this attribute, the possible values for
CLKDV_DIVIDE are: 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 9, 10, 11, 12, 13, 14,
15, or 16. The default value is 2. In the low frequency mode, any CLKDV_DIVIDE
value produces a CLKDV output with a 50/50 duty-cycle. In the high frequency
mode, the CLKDV_DIVIDE value must be set to an integer value to produce a
CLKDV output with a 50/50 duty-cycle.
Non-Integer CLKDV_DIVIDE
CLKIN_PERIOD Attribute
The CLKIN_PERIOD attribute specifies the source clock period (in nanoseconds). The
default value is 0.0 ns.
CLKIN_DIVIDE_BY_2 Attribute
The CLKIN_DIVIDE_BY_2 attribute determines the effective CLKIN frequency
applied to the DCM circuitry. When set to False, the effective CLKIN frequency of the
DCM equals the source clock frequency driving the CLKIN input. When set to True,
the CLKIN frequency is divided by two before it reaches the rest of the DCM circuitry.
Thus, the DCM circuitry sees half the frequency applied to the CLKIN input and
operates based on this frequency. For example, if a 100 MHz clock drives CLKIN, and
CLKIN_DIVIDE_BY_2 is set to True; then the effective CLKIN frequency is 50 MHz.
Thus, CLK0 output is 50 MHz and CLK2X output is 100 MHz. The effective CLKIN
frequency must be used to evaluate any operation or specification derived from
DCM_PS
CLKIN frequency. The possible values for CLKIN_DIVIDE_BY_2 are True and False.
The default value is False.
CLKOUT_PHASE_SHIFT Attribute
The CLKOUT_PHASE_SHIFT attribute indicates the mode of the phase shift applied
to the DCM outputs. The possible values are NONE, FIXED, VARIABLE_POSITIVE,
VARIABLE_CENTER, or DIRECT. The default value is NONE.
When set to NONE, a phase shift cannot be performed and a phase-shift value has no
affect on the DCM outputs. When set to FIXED, the DCM outputs are phase shifted by
a fixed phase from the CLKIN. The phase-shift value is determined by PHASE_SHIFT
attribute. If the CLKOUT_PHASE_SHIFT attribute is set to FIXED or NONE, then the
PSEN, PSINCDEC, and the PSCLK inputs must be tied to ground.
When set to VARIABLE_POSITIVE, the DCM outputs can be phase shifted in variable
mode in the positive range with respect to CLKIN. When set to VARIABLE_CENTER,
the DCM outputs can be phase shifted in variable mode, in the positive and negative
range with respect to CLKIN. If set to VARIABLE_POSITIVE or VARIABLE_CENTER,
each phase shift increment (or decrement) will increase (or decrease) the phase shift
by a period of 1/256 x CLKIN.
When set to DIRECT, the DCM output can be phase shifted in variable mode in the
positive range with respect to CLKIN. Each phase shift increment/decrement will
increase/decrease the phase shift by one DCM_TAP.
The starting phase in the VARIABLE_POSITIVE and VARIABLE_CENTER modes is
determined by the phase-shift value. The starting phase in the DIRECT mode is
always zero, regardless of the value specified by the PHASE_SHIFT attribute. Thus,
the PHASE_SHIFT attribute should be set to zero when DIRECT mode is used. A non-
zero phase-shift value for DIRECT mode can be loaded to the DCM using Dynamic
Reconfiguration Ports.
CLK_FEEDBACK Attribute
The CLK_FEEDBACK attribute determines the type of feedback applied to the
CLKFB. The possible values are 1X or NONE. The default value is 1X. When set to 1X,
CLKFB pin must be driven by CLK0. When set to NONE leave the CLKFB pin
unconnected.
DESKEW_ADJUST Attribute
The DESKEW_ADJUST attribute affects the amount of delay in the feedback path.
The possible values are SYSTEM_SYNCHRONOUS, SOURCE_SYNCHRONOUS,
0, 1, 2, 3, ... or 31. The default value is SYSTEM_SYNCHRONOUS.
For most designs, the default value is appropriate. In a source-synchronous design,
set this attribute to SOURCE_SYNCHRONOUS. The remaining values should only be
used when consulting with Xilinx. For more information on the source synchronous
interface, reference XAPP259.
DFS_FREQUENCY_MODE Attribute
The DFS_FREQUENCY_MODE attribute specifies the frequency mode of the
frequency synthesizer (DFS). The possible values are Low and High. The default
value is Low. The frequency ranges for both frequency modes are specified in the
DCM_PS
DLL_FREQUENCY_MODE Attribute
The DLL_FREQUENCY_MODE attribute specifies either the High or Low frequency
mode of the delay-locked loop (DLL). The default value is Low. The frequency ranges
for both frequency modes are specified in the Virtex-4 Data Sheet.
DUTY_CYCLE_CORRECTION Attribute
The DUTY_CYCLE_CORRECTION attribute controls the duty cycle correction of the
1x clock outputs: CLK0, CLK90, CLK180, and CLK270. The possible values are True
and False. The default value is True. When set to True, the 1x clock outputs are duty
cycle corrected to a 50/50 duty cycle. It is strongly recommended to always set the
DUTY_CYCLE_CORRECTION attribute to True. Setting this attribute to False does
not necessarily produce output clocks with the same duty cycle as the source clock.
DCM_PERFORMANCE_MODE Attribute
The DCM_PERFORMANCE_MODE attribute allows the choice of optimizing the
DCM either for high frequency and low jitter or for low frequency and a wide phase-
shift range. The attribute values are MAX_SPEED and MAX_RANGE. The default
value is MAX_SPEED. When set to MAX_SPEED, the DCM is optimized to produce
high frequency clocks with low jitter. However, the phase-shift range is smaller than
when MAX_RANGE is selected. When set to MAX_RANGE, the DCM is optimized to
produce low frequency clocks with a wider phase-shift range. The
DCM_PERFORMANCE_MODE affects the following specifications: DCM input and
output frequency range, phase-shift range, output jitter, DCM_TAP,
CLKIN_CLKFB_PHASE, CLKOUT_PHASE, and duty-cycle precision. The Virtex-4
Data Sheet specifies these values.
For most cases, the DCM_PERFORMANCE_MODE attribute should be set to
MAX_SPEED (default). Only consider changing to MAX_RANGE in the following
situations:
• The frequency needs to be below the low frequency limit of the MAX_SPEED
setting.
• A greater absolute phase-shift range is required.
FACTORY_JF Attribute
The FACTORY_JF attribute affects the DCM's jitter filter characteristic. This attribute
is set the default value of F0F0 and should not be modified unless otherwise
instructed by Xilinx.
PHASE_SHIFT Attribute
The PHASE_SHIFT attribute determines the amount of phase shift applied to the
DCM outputs. This attribute can be used in both fixed or variable phase-shift mode. If
used with variable mode, the attribute sets the starting phase shift. When
CLKOUT_PHASE_SHIFT = VARIABLE_POSITIVE, the PHASE_SHIFT value range is
0 to 255. When CLKOUT_PHASE_SHIFT = VARIABLE_CENTER or FIXED, the
PHASE_SHIFT value range is −255 to 255. When CLKOUT_PHASE_SHIFT =
DIRECT, the PHASE_SHIFT value range is 0 to 1023. The default value is 0.
DCM_PS
STARTUP_WAIT Attribute
The STARTUP_WAIT attribute determines whether the startup cycle waits for DCM
to lock. The possible values for this attribute are True and False. The default value is
False. When STARTUP_WAIT is set to True, and the LCK_cycle BitGen option is used,
then the configuration startup sequence waits in the startup cycle specified by
LCK_cycle until the DCM is locked.
Available Attributes
Attribute Type Allowed Values Default Description
CLK_FEEDBACK STRING "1X" or "NONE "1X” Specifies the clock
feedback of allowed
value.
CLKDV_DIVIDE FLOAT 1.5, 2.0, 2.5, 3.0, 3.5, 2.0 Specifies the extent to
4.0, 4.5, 5.0, 5.5, 6.0, which the CLKDLL,
6.5, 7.0, 7.5, 8.0, 9.0, CLKDLLE, CLKDLLHF,
10.0, 11.0, 12.0, 13.0, or DCM clock divider
14.0, 15.0 or 16.0 (CLKDV output) is to be
frequency divided.
CLKFX_DIVIDE INTEGER 1 to 32 1 Specifies the frequency
divider value for the
CLKFX output.
CLKFX_MULTIPLY INTEGER 2 to 32 4 Specifies the frequency
multiplier value for the
CLKFX output.
CLKIN_DIVIDE_BY_2 BOOLEAN FALSE, TRUE FALSE Allows for the input clock
frequency to be divided in
half when such a
reduction is necessary to
meet the DCM input clock
frequency requirements.
CLKIN_PERIOD FLOAT 1.25 to 1000.00 0.0 Specifies the period of
input clock in ns from
1.25 to 1000.00.
CLKOUT_PHASE_SHIFT STRING "NONE" or "NONE” Specifies the phase shift
"FIXED" or mode of allowed value.
"VARIABLE_POSIT
IVE" or
"VARIABLE_CENT
ER" or "DIRECT
DCM_AUTOCALI- BOOLEAN TRUE, FALSE TRUE Specifies the additional
BRATION circuitry necessary to
ensure proper DCM
operation. It is suggested
that users consult with
Xilinx before changing
this attribute.
DCM_PERFORMANCE_ STRING "MAX_SPEED" or "MAX_SPEED” Allows selection between
MODE "MAX_RANGE maximum frequency and
minimum jitter for low
frequency and maximum
phase shift range
DESKEW_ADJUST STRING "SOURCE_SYNCH "SYSTEM_SYNCH Affects the amount of
RONOUS", RONOUS" delay in the feedback
"SYSTEM_SYNCH path, and should be used
RONOUS" or "0" to for source-synchronous
"15 interfaces.
DFS_FREQUENCY_ STRING "LOW" or "HIGH "LOW” Specifies the frequency
MODE mode of the frequency
synthesizer.
DLL_FREQUENCY_ STRING "LOW" or "HIGH "LOW” This specifies the DLL's
MODE frequency mode.
DUTY_CYCLE_ BOOLEAN TRUE, FALSE TRUE Corrects the duty cycle of
CORRECTION the CLK0, CLK90,
CLK180, and CLK270
outputs.
DCM_PS
Usage
This design element is supported for schematics and instantiations, but not for
inference.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
DCM_PS_inst : DCM_PS
generic map (
CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
-- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
CLKFX_MULTIPLY => 4, -- Can be any integer from 2 to 32
CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
CLKIN_PERIOD => 10.0, -- Specify period of input clock in ns from 1.25 to 1000.00
CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift mode of NONE, FIXED,
-- VARIABLE_POSITIVE, VARIABLE_CENTER or DIRECT
CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE or 1X
DCM_PERFORMANCE_MODE => "MAX_SPEED", -- Can be MAX_SPEED or MAX_RANGE
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
-- an integer from 0 to 15
DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
DLL_FREQUENCY_MODE => "LOW", -- LOW, HIGH, or HIGH_SER frequency mode for DLL
DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
FACTORY_JF => X"F0F0", -- FACTORY JF Values Suggested to be set to X"F0F0"
PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 1023
STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
DCM_PS
port map (
CLK0 => CLK0, -- 0 degree DCM CLK ouptput
CLK180 => CLK180, -- 180 degree DCM CLK output
CLK270 => CLK270, -- 270 degree DCM CLK output
CLK2X => CLK2X, -- 2X DCM CLK output
CLK2X180 => CLK2X180, -- 2X, 180 degree DCM CLK out
CLK90 => CLK90, -- 90 degree DCM CLK output
CLKDV => CLKDV, -- Divided DCM CLK out (CLKDV_DIVIDE)
CLKFX => CLKFX, -- DCM CLK synthesis out (M/D)
CLKFX180 => CLKFX180, -- 180 degree CLK synthesis out
DO => DO, -- 16-bit data output for Dynamic Reconfiguration Port (DRP)
LOCKED => LOCKED, -- DCM LOCK status output
PSDONE => PSDONE, -- Dynamic phase adjust done output
CLKFB => CLKFB, -- DCM clock feedback
CLKIN => CLKIN, -- Clock input (from IBUFG, BUFG or DCM)
PSCLK => PSCLK, -- Dynamic phase adjust clock input
PSEN => PSEN, -- Dynamic phase adjust enable input
PSINCDEC => PSINCDEC, -- Dynamic phase adjust increment/decrement
RST => RST -- DCM asynchronous reset input
);
DCM_PS #(
.CLKDV_DIVIDE(2.0), // Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
// 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
.CLKFX_DIVIDE(1), // Can be any integer from 1 to 32
.CLKFX_MULTIPLY(4), // Can be any integer from 2 to 32
.CLKIN_DIVIDE_BY_2("FALSE"), // TRUE/FALSE to enable CLKIN divide by two feature
.CLKIN_PERIOD(10.0), // Specify period of input clock in ns from 1.25 to 1000.00
.CLKOUT_PHASE_SHIFT("NONE"), // Specify phase shift mode of NONE, FIXED,
// VARIABLE_POSITIVE, VARIABLE_CENTER or DIRECT
.CLK_FEEDBACK("1X"), // Specify clock feedback of NONE, 1X or 2X
.DCM_PERFORMANCE_MODE("MAX_SPEED"), // Can be MAX_SPEED or MAX_RANGE
.DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"), // SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
// an integer from 0 to 15
.DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis
.DLL_FREQUENCY_MODE("LOW"), // LOW, HIGH, or HIGH_SER frequency mode for DLL
.DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE
.FACTORY_JF(16'hf0f0), // FACTORY JF value suggested to be set to 16'hf0f0
.PHASE_SHIFT(0), // Amount of fixed phase shift from -255 to 1023
.STARTUP_WAIT("FALSE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE
) DCM_PS_inst(
.CLK0(CLK0), // 0 degree DCM CLK output
.CLK180(CLK180), // 180 degree DCM CLK output
.CLK270(CLK270), // 270 degree DCM CLK output
.CLK2X(CLK2X), // 2X DCM CLK output
.CLK2X180(CLK2X180), // 2X, 180 degree DCM CLK out
.CLK90(CLK90), // 90 degree DCM CLK output
.CLKDV(CLKDV), // Divided DCM CLK out (CLKDV_DIVIDE)
.CLKFX(CLKFX), // DCM CLK synthesis out (M/D)
.CLKFX180(CLKFX180), // 180 degree CLK synthesis out
.DO(DO), // 16-bit data output for Dynamic Reconfiguration Port (DRP)
.LOCKED(LOCKED), // DCM LOCK status output
.PSDONE(PSDONE), // Dynamic phase adjust done output
.CLKFB(CLKFB), // DCM clock feedback
.CLKIN(CLKIN), // Clock input (from IBUFG, BUFG or DCM)
.PSCLK(PSCLK), // Dynamic phase adjust clock input
.PSEN(PSEN), // Dynamic phase adjust enable input
.PSINCDEC(PSINCDEC), // Dynamic phase adjust increment/decrement
.RST(RST) // DCM asynchronous reset input
);
DCM_PS
DCM_PS
DSP48
DSP48
Primitive: 18x18 Signed Multiplier Followed by a Three-Input Adder with
Optional Pipeline Registers
A(17:0) DSP48 BCOUT(17:0)
The DSP48 slice has a 48-bit output and is primarily intended for use in digital-signal
B(17:0) PCOUT(47:0) processing applications. However, the flexibility of this component means that it can
C(47:0) P(47:0)
be applied to many more applications than a typical MACC unit.
OPMODE[6:0]
SUBTRACT A basic DSP48 slice consists of a multiplier followed by an adder. The multiplier
CARRYIN
CARRYINSEL(1:0)
accepts two, 18-bit, signed, two’s complement operands producing a 36-bit, signed,
CEA twos complement result. The result is sign extended to 48 bits. The adder accepts
CEB three, 48-bit, signed, twos’ complement operands producing a 48-bit, singed, twos’
CEC
CEM
complement result.
CEP
CECTRL
Possible operands for the adder include the multiplier output and external source or
CECARRYIN the registered output of the adder providing an accumulate function. The 48-bit
CECINSUB output allows for 4096 accumulations of 36-bit operands before overflow occurs.
RSTA
RSTM
Signal Name Direction Size Function
RSTP
RSTCTRL
CLK I 1 The DSP48 clock
RSTCARRYIN
DSP48
B
18
18
BCIN
18 B input to
18 18 Multiplier
D Q D Q
18
EN EN
RST RST
CEB
RSTB X10176
B Input Logic
P
18
DSP48 Slice Output
18
D Q
18
CEP EN
RST
RSTP X10168
P Output Logic
Attribute Function
AREG 0=bypass, 1=single, 2=dual
BREG 0=bypass, 1=single, 2=dual
CREG 0=bypass, 1=single
PREG 0=bypass, 1=single
MREG 0=bypass, 1=single
SUBTRACTREG 0=bypass, 1=single
OPMODEREG 0=bypass, 1=single
CARRYINSELREG 0=bypass, 1=single
DSP48
X, Y, and Z Multiplexers
The Operational Mode (OpMode) inputs provide a way for the design to change its
functionality on the fly. For example, the loading of an accumulator to restart an
accumulation process. The OpMode bits can be optionally registered under the
control of the configuration RAM.
The following tables list the possible values of OpMode and resulting function at the
outputs of the three multiplexers supplying data to the adder/subtracter. The 7-bit
OpMode control can be further broken down into multiplexer select bits. Not all
possible combinations for the multiplexer select bits are allowed. If the multiplier
output is selected then both the X and Y multiplexer are consumed with the multiplier
output.
OpMode Control Bit Select X, Y, and Z Multiplexer Outputs
OPMODE Binary
X Multiplexer Output Fed to Add/Subtract
Z Y X
XXX XX 00 ZERO (Default)
XXX 01 01 Multiplier Output
XXX XX 10 P
XXX XX 11 A concatenated B
OPMODE Binary
Y Multiplexer Output Fed to Add/Subtract
Z Y X
XXX 00 XX ZERO (Default)
XXX 01 01 Multiplier Output
XXX 10 XX Illegal selection
XXX 11 XX C
DSP48
OPMODE Binary
Z Multiplexer Output Fed to Add/Subtract
Z Y X
00 XX XX ZERO (Default)
001 XX XX PCIN
010 XX XX P
011 XX XX C
100 XX XX Illegal selection
101 XX XX Shift (PCIN)
110 XX XX Shift (P)
111 XX XX Illegal selection
DSP48
DSP48
common clock enable signal. The clock enable allows control signals to stall along
with data when needed.
Available Attributes
Attribute Type Allowed Values Default Description
AREG INTEGER 0, 1, or 2 1 Number of pipeline registers on
the A input, 0, 1 or 2
B_INPUT STRING "DIRECT" or "DIRECT” "DIRECT”=multiplicand is B;
"CASCADE” “CASCADE”=multiplicant is
BCIN.
BREG INTEGER 0, 1, or 2 1 Number of pipeline registers on
the B input, 0, 1 or 2.
CARRYINREG INTEGER 0 OR 1 1 Number of pipeline registers
for the CARRYIN input.
CARRYINSELREG INTEGER 0 or 1 1 Number of pipeline registers
for the CARRYINSEL.
CREG INTEGER 0, 1, or 2 1 Number of pipeline registers on
the C input, 0 or 1.
LEGACY_MODE STRING "NONE", "MULT18X18" "MULT18X18S” An internal attribute setting for
or "MULT18X18S” the DCM. It should not be
modified from the default
value unless instructed by
Xilinx
MREG INTEGER 0 or 1 1 Number of multiplier pipeline
registers, 0 or 1
OPMODEREG INTEGER 0 or 1 1 Number of pipeline regsiters on
OPMODE input, 0 or 1.
PREG INTEGER 0 or 1 1 Number of pipeline registers on
the P output, 0 or 1.
SUBTRACTREG INTEGER 0 or 1 1 Number of pipeline registers on
the SUBTRACT input, 0 or 1.
Usage
This design element is supported for schematics, instantiations, and inference. It is
suggested that you use the Architecture Wizard in order to properly create
instantiation code for the DSP48 block.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
DSP48
DSP48_inst : DSP48
generic map (
AREG => 1, -- Number of pipeline registers on the A input, 0, 1 or 2
BREG => 1, -- Number of pipeline registers on the B input, 0, 1 or 2
B_INPUT => "DIRECT", -- B input DIRECT from fabric or CASCADE from another DSP48
CARRYINREG => 1, -- Number of pipeline registers for the CARRYIN input, 0 or 1
CARRYINSELREG => 1, -- Number of pipeline registers for the CARRYINSEL, 0 or 1
CREG => 1, -- Number of pipeline registers on the C input, 0 or 1
LEGACY_MODE => "MULT18X18S", -- Backward compatibility, NONE, MULT18X18 or MULT18X18S
MREG => 1, -- Number of multiplier pipeline registers, 0 or 1
OPMODEREG => 1, -- Number of pipeline regsiters on OPMODE input, 0 or 1
PREG => 1, -- Number of pipeline registers on the P output, 0 or 1
SUBTRACTREG => 1) -- Number of pipeline registers on the SUBTRACT input, 0 or 1
port map (
BCOUT => BCOUT, -- 18-bit B cascade output
P => P, -- 48-bit product output
PCOUT => PCOUT, -- 48-bit cascade output
A => A, -- 18-bit A data input
B => B, -- 18-bit B data input
BCIN => BCIN, -- 18-bit B cascade input
C => C, -- 48-bit cascade input
CARRYIN => CARRYIN, -- Carry input signal
CARRYINSEL => CARRYINSEL, -- 2-bit carry input select
CEA => CEA, -- A data clock enable input
CEB => CEB, -- B data clock enable input
CEC => CEC, -- C data clock enable input
CECARRYIN => CECARRYIN, -- CARRYIN clock enable input
CECINSUB => CECINSUB, -- CINSUB clock enable input
CECTRL => CECTRL, -- Clock Enable input for CTRL regsitersL
CEM => CEM, -- Clock Enable input for multiplier regsiters
CEP => CEP, -- Clock Enable input for P regsiters
CLK => CLK, -- Clock input
OPMODE => OPMODE, -- 7-bit operation mode input
PCIN => PCIN, -- 48-bit PCIN input
RSTA => RSTA, -- Reset input for A pipeline registers
RSTB => RSTB, -- Reset input for B pipeline registers
RSTC => RSTC, -- Reset input for C pipeline registers
RSTCARRYIN => RSTCARRYIN, -- Reset input for CARRYIN registers
RSTCTRL => RSTCTRL, -- Reset input for CTRL registers
RSTM => RSTM, -- Reset input for multiplier registers
RSTP => RSTP, -- Reset input for P pipeline registers
SUBTRACT => SUBTRACT -- SUBTRACT input
);
DSP48 #(
.AREG(1), // Number of pipeline registers on the A input, 0, 1 or 2
.BREG(1), // Number of pipeline registers on the B input, 0, 1 or 2
.B_INPUT("DIRECT"), // B input DIRECT from fabric or CASCADE from another DSP48
.CARRYINREG(1), // Number of pipeline registers for the CARRYIN input, 0 or 1
.CARRYINSELREG(1), // Number of pipeline registers for the CARRYINSEL, 0 or 1
.CREG(1), // Number of pipeline registers on the C input, 0 or 1
.LEGACY_MODE("MULT18X18S"), // Backward compatibility, NONE, MULT18X18 or MULT18X18S
.MREG(1), // Number of multiplier pipeline registers, 0 or 1
.OPMODEREG(1), // Number of pipeline regsiters on OPMODE input, 0 or 1
.PREG(1), // Number of pipeline registers on the P output, 0 or 1
.SUBTRACTREG(1) // Number of pipeline registers on the SUBTRACT input, 0 or 1
) DSP48_inst (
DSP48
EMAC
EMAC
The Virtex-4 Tri-mode Ethernet Media Access Controller (Ethernet MAC) provides
Ethernet connectivity to the Virtex-4 PowerPC™ Processor. The Ethernet MAC
(EMAC) supports the following feature:
• Fully integrated 10/100/1000 Mb/s Ethernet MAC
• Complies with the IEEE 802.3-2002 specification
• Configurable full- or half-duplex operation
• Media Independent Interface (MII) Management (MDIO) interface to manage
objects in the Physical (PHY) layer
• User accessable raw statistics vector outputs
• Supports VLAN frames
• Configurable inter-frame gap adjustment
• Configurable in-band Frame Check Sequence (FCS) field passing on both transmit
and receive paths
• Provides auto pad on transmit and FCS field stripping on receive
• Configured and monitored through a host interface
• Hardware selectable Device Control Register (DCR) bus or 1G Ethernet MAC bus
host interface
• Configurable flow control through Ethernet MAC Control PAUSE frames;
symmetrically or asymmetrically enabled
• Configurable support for jumbo frames of any length
• Configurable receive address filter for unicast, multicast, and broadcast addresses
• Media Independent Interface (MII), Gigabit Media Independent Interface (GMII),
and Reduced Gigabit Media Independent Interface (RGMII)
• Includes a 1000BASE-X Physical Coding Sublayer (PCS) and a Physical Medium
Attachment (PMA) sublayer for use with the Multi-gigabit Transceiver (MGT) to
provide a complete on-chip 1000BASE-X implementation
• Serial Gigabit Media Independent Interface (SGMII) supported through MGT
interface to external copper PHY layer
For complete information about the Ethernet MAC in Virtex-4 devices, see the
following documents:
• Virtex-4 Datasheet
• Virtex-4 Tri-mode Ethernet Media Access Controller (Ethernet MAC) User Guide
EMAC
EMAC
Inputs Outputs
CLIENTEMAC1TXCLIENTCLKIN EMAC1CLIENTTXCLIENTCLKOUT
CLIENTEMAC1TXD [15:0] EMAC1CLIENTTXACK
CLIENTEMAC1TXDVLD EMAC1CLIENTTXCOLLISION
CLIENTEMAC1TXDVLDMSW EMAC1CLIENTTXRETRANSMIT
CLIENTEMAC1TXUNDERRUN EMAC1CLIENTTXSTATS
CLIENTEMAC1TXIFGDELAY [7:0] EMAC1CLIENTTXSTATSBYTEVLD
CLIENTEMAC1TXFIRSTBYTE EMAC1CLIENTTXSTATSVLD
CLIENTEMAC0PAUSEREQ
CLIENTEMAC0PAUSEVAL [15:0]
CLIENTEMAC1PAUSEREQ
CLIENTEMAC1PAUSEVAL [15:0]
HOSTADDR [9:0] HOSTMIIMRDY
HOSTCLK HOSTRDDATA [31:0]
HOSTMIIMSEL
HOSTOPCODE [1:0]
HOSTREQ
HOSTWRDATA [31:0]
HOSTEMAC1SEL
DCREMACCLK DCRHOSTDONEIR
DCREMACENABLE EMACDCRACK
DCREMACDBUS [0:31] EMACDCRDBUS [0:31]
DCREMACABUS [8:9]
DCREMACREAD
DCREMACWRITE
PHYEMAC0RXCLK EMAC0PHYTXCLK
PHYEMAC0RXD [7:0] EMAC0PHYTXD [7:0]
PHYEMAC0RXDV EMAC0PHYTXEN
PHYEMAC0RXER EMAC0PHYTXER
PHYEMAC0MIITXCLK
PHYEMAC0COL
PHYEMAC0CRS
PHYEMAC1RXCLK EMAC1PHYTXCLK
PHYEMAC1RXD [7:0] EMAC1PHYTXD [7:0]
PHYEMAC1RXDV EMAC1PHYTXEN
PHYEMAC1RXER EMAC1PHYTXER
PHYEMAC1MIITXCLK
PHYEMAC1COL
PHYEMAC1CRS
PHYEMAC0SIGNALDET EMAC0PHYENCOMMAALIGN
PHYEMAC0PHYAD [4:0] EMAC0PHYLOOPBACKMSB
PHYEMAC0RXCLKCORCNT [2:0] EMAC0PHYMGTRXRESET
EMAC
Inputs Outputs
PHYEMAC0RXBUFSTATUS [1:0] EMAC0PHYMGTTXRESET
PHYEMAC0RXCHARISCOMMA EMAC0PHYPOWERDOWN
PHYEMAC0RXCHARISK EMAC0PHYSYNCACQSTATUS
PHYEMAC0RXCHECKINGCRC EMAC0PHYTXCHARDISPMODE
PHYEMAC0RXCOMMADET EMAC0PHYTXCHARDISPVAL
PHYEMAC0RXDISPERR EMAC0PHYTXCHARISK
PHYEMAC0RXLOSSOFSYNC [1:0]
PHYEMAC0RXNOTINTABLE
PHYEMAC0RXRUNDISP
PHYEMAC0RXBUFERR
PHYEMAC0TXBUFERR
PHYEMAC1SIGNALDET EMAC1PHYENCOMMAALIGN
PHYEMAC1PHYAD [4:0] EMAC1PHYLOOPBACKMSB
PHYEMAC1RXCLKCORCNT [2:0] EMAC1PHYMGTRXRESET
PHYEMAC1RXBUFSTATUS [1:0] EMAC1PHYMGTTXRESET
PHYEMAC1RXCHARISCOMMA EMAC1PHYPOWERDOWN
PHYEMAC1RXCHARISK EMAC1PHYSYNCACQSTATUS
PHYEMAC1RXCHECKINGCRC EMAC1PHYTXCHARDISPMODE
PHYEMAC1RXCOMMADET EMAC1PHYTXCHARDISPVAL
PHYEMAC1RXDISPERR EMAC1PHYTXCHARISK
PHYEMAC1RXLOSSOFSYNC [1:0]
PHYEMAC1RXNOTINTABLE
PHYEMAC1RXRUNDISP
PHYEMAC1RXBUFERR
PHYEMAC1TXBUFERR
PHYEMAC0MCLKIN EMAC0PHYMCLKOUT
PHYEMAC0MDIN EMAC0PHYMDOUT
EMAC0PHYMDTRI
PHYEMAC1MCLKIN EMAC1PHYMCLKOUT
PHYEMAC1MDIN EMAC1PHYMDOUT
EMAC1PHYMDTRI
Usage
Refer to the Embedded Tri-mode Ethernet MAC Wrapper from the CORE Generator
Tool for information regarding the use of this component.
FDCPE
FDCPE
Primitive: D Flip-Flop with Clock Enable and Asynchronous Preset and
Clear
FDCPE is a single D-type flip-flop with data (D), clock enable (CE), asynchronous
preset (PRE), and asynchronous clear (CLR) inputs and data output (Q). The
PRE
asynchronous (PRE), when High, sets the (Q) output High; (CLR) , when High, resets
the output Low. Data on the (D) input is loaded into the flip-flop when (PRE) and
FDCPE
D (CLR) are Low and (CE) is High on the Low-to-High clock (C) transition. When (CE)
CE Q
is Low, the clock transitions are ignored.
C
The flip-flop is asynchronously cleared, output Low, when power is applied.
CLR
ForVirtex-4 devices, the power on condition can be simulated by applying a High-
X4389 level pulse on the GSR net.
The active level of the GSR defaults to active-High but can be inverted by adding an
inverter in front of the GSR input of the STARTUP_VIRTEX4 symbol.
Inputs Outputs
CLR PRE CE D C Q
1 X X X X 0
0 1 X X X 1
0 0 0 X X No Change
0 0 1 0 ↑ 0
0 0 1 1 ↑ 1
Usage
This design element is inferred in the design code; however, the element can be
instantiated for cases where strict placement control, relative placement control, or
initialization attributes must be applied.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- FDCPE: Single Data Rate D Flip-Flop with Asynchronous Clear, Set and
FDCPE
FDCPE_inst : FDCPE
generic map (
INIT => '0') -- Initial value of register ('0' or '1')
port map (
Q => Q, -- Data output
C => C, -- Clock input
CE => CE, -- Clock enable input
CLR => CLR, -- Asynchronous clear input
D => D, -- Data input
PRE => PRE -- Asynchronous set input
);
// FDCPE: Single Data Rate D Flip-Flop with Asynchronous Clear, Set and
// Clock Enable (posedge clk). All families.
// Xilinx HDL Libraries Guide Version 8.1i
FDCPE #(
.INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
) FDCPE_inst (
.Q(Q), // Data output
.C(C), // Clock input
.CE(CE), // Clock enable input
.CLR(CLR), // Asynchronous clear input
.D(D), // Data input
.PRE(PRE) // Asynchronous set input
);
// End of FDCPE_inst instantiation
FDRSE
FDRSE
Primitive: D Flip-Flop with Synchronous Reset and Set and Clock
Enable
FDRSE is a single D-type flip-flop with synchronous reset (R), synchronous set (S),
and clock enable (CE) inputs and data output (Q). The reset (R) input, when High,
S overrides all other inputs and resets the Q output Low during the Low-to-High clock
transition. When the set (S) input is High and R is Low, the flip-flop is set, output
FDRSE
D Q High, during the Low-to-High clock (C) transition. Data on the D input is loaded into
CE
C
the flip-flop when R and S are Low and CE is High during the Low-to-High clock
transition.
R X3732 The flip-flop is asynchronously cleared, output Low, when power is applied.
For Virtex-4 devices, the power on condition can be simulated by applying a High-
level pulse on the GSR net.
The active level of the GSR defaults to active-High but can be inverted by adding an
inverter in front of the GSR input of the STARTUP_VIRTEX4 symbol.
Inputs Outputs
R S CE D C Q
1 X X X ↑ 0
0 1 X X ↑ 1
0 0 0 X X No Change
0 0 1 1 ↑ 1
0 0 1 0 ↑ 0
Usage
This design element is inferred in the design code; however, the element can be
instantiated for cases where strict placement control, relative placement control, or
initialization attributes must be applied.
Available Attributes
Attribute Type Allowed Default Description
Values
INIT 1-Bit Binary 1-Bit Binary 1'b0 Sets the initial value of Q output after
configuration
FDRSE
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- FDRSE: Single Data Rate D Flip-Flop with Synchronous Clear, Set and
-- Clock Enable (posedge clk). All families.
-- Xilinx HDL Libraries Guide Version 8.1i
FDRSE_inst : FDRSE
generic map (
INIT => '0') -- Initial value of register ('0' or '1')
port map (
Q => Q, -- Data output
C => C, -- Clock input
CE => CE, -- Clock enable input
D => D, -- Data input
R => R, -- Synchronous reset input
S => S -- Synchronous set input
);
FDRSE #(
.INIT(1'b0) // Initial value of register (1'b0 or 1'b1)
) FDRSE_inst (
.Q(Q), // Data output
.C(C), // Clock input
.CE(CE), // Clock enable input
.D(D), // Data input
.R(R), // Synchronous reset input
.S(S) // Synchronous set input
);
FIFO16
FIFO16
Primitive: Virtex-4 Block RAM based built-in FIFO
DI(31:0) FIFO16 ALMOSTEMPTY
A large percentage of FPGA designs implement FIFOs using block RAMs. In the
ALMOSTFULL Virtex-4 architecture, additional dedicated logic in the block RAM enables users to
DIP(3:0)
DO(31:0)
easily implement synchronous or asynchronous FIFOs. This eliminates the need to
RDCLK DOP(3:0)
use additional CLB logic for counter, comparator, or status flag generation and uses
EMPTY
RDEN
FULL
just one block RAM resource per FIFO. Both standard and first-word fall-through
RST RDERR
(FWFT) modes are supported.
WRERR
WRCLK
RDCOUNT(11:0)
The supported configurations are 4K x 4, 2K x 9, 1K x 18, and 512 x 36.
WREN WRCOUNT(11:0)
The block RAM can be configured as an asynchronous first-in/first-out (FIFO)
X10106 memory with independent read and write clocks for either synchronous or
asynchronous operation. Port A of the block RAM is used as a FIFO read port, and
Port B is a FIFO write port. Data is read from the FIFO on the rising edge of read clock
and written to the FIFO on the rising edge of write clock. Independent read and write
port width selection is not supported in FIFO mode.
The available status flags are:
• Full (FULL): Synchronous to WRCLK
• Empty (EMPTY): Synchronous to RDCLK
• Almost Full (AFULL): Synchronous to WRCLK
• Almost Empty (AEMPTY): Synchronous to RDCLK
• Write Count (WRCOUNT): Synchronous to WRCLK
• Write Error (WRERR): Synchronous to WRCLK
• Read Count (RDCOUNT): Synchronous to RDCLK
• Read Error (RDERR): Synchronous to RDCLK
The following table shows the FIFO capacity in the two modes:
Port Descriptions
FIFO16
Available Attributes
Attribute Type Allowed Values Default Description
ALMOST_EMPTY_OFFSE 12-Bit 12-Bit 12'h080 Sets the almost empty
T Hexadecimal Hexadecimal threshold.
ALMOST_FULL_OFFSET 12-Bit 12-Bit 12'h080 Sets almost full threshold.
Hexadecimal Hexadecimal
DATA_WIDTH INTEGER 4, 9, 18, 36 36 Sets data width to allowed
value.
FIRST_WORD_FALL_TH BOOLEAN FALSE, TRUE FALSE Sets the FIFO FWFT to
ROUGH "TRUE" or "FALSE."
Usage
This design element is supported for schematics or instantiation, but is not currently
supported for inference.
Operating Mode
There are two operating modes in FIFO functions. They differ only in output behavior
after the first word is written to a previously empty FIFO.
Standard Mode
After the first word is written into an empty FIFO, the Empty flag deasserts
synchronously with RDCLK. After Empty is deasserted Low and RDEN is asserted,
the first word will appear at DOUT on the rising edge of RDCLK.
FIFO16
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
FIFO16_inst : FIFO16
generic map (
ALMOST_FULL_OFFSET => X"080", -- Sets almost full threshold
ALMOST_EMPTY_OFFSET => X"080", -- Sets the almost empty threshold
DATA_WIDTH => 36, -- Sets data width to 4, 9, 18, or 36
FIRST_WORD_FALL_THROUGH => FALSE) -- Sets the FIFO FWFT to TRUE or FALSE
port map (
ALMOSTEMPTY => ALMOSTEMPTY, -- 1-bit almost empty output flag
ALMOSTFULL => ALMOSTFULL, -- 1-bit almost full output flag
DO => DO, -- 32-bit data output
DOP => DOP, -- 4-bit parity data output
EMPTY => EMPTY, -- 1-bit empty output flag
FIFO16
Verilog Template
// FIFO16 : In order to incorporate this function into the design,
// Verilog : the following instance declaration needs to be placed
// instance : in the body of the design code. The instance name
// declaration : (FIFO16_512x36_inst) and/or the port declarations within the
// code : parenthesis maybe changed to properly reference and
// : connect this function to the design. All inputs
// : and outputs must be connected.
// FIFO16: Virtex-4 BlockRAM Asynchrnous FIFO configured for 512 deep x 36 wide
// Xilinx HDL Libraries Guide Version 8.1i
FIFO16 #(
.ALMOST_FULL_OFFSET(12'h080), // Sets almost full threshold
.ALMOST_EMPTY_OFFSET(12'h080), // Sets the almost empty threshold
.DATA_WIDTH(36), // Sets data width to 4, 9, 18, or 36
.FIRST_WORD_FALL_THROUGH("FALSE") // Sets the FIFO FWFT to "TRUE" or "FALSE"
) FIFO16_512x36_inst (
.ALMOSTEMPTY(ALMOSTEMPTY), // 1-bit almost empty output flag
.ALMOSTFULL(ALMOSTFULL), // 1-bit almost full output flag
.DO(DO), // 32-bit data output
.DOP(DOP), // 4-bit parity data output
.EMPTY(EMPTY), // 1-bit empty output flag
.FULL(FULL), // 1-bit full output flag
.RDCOUNT(RDCOUNT), // 12-bit read count output
.RDERR(RDERR), // 1-bit read error output
.WRCOUNT(WRCOUNT), // 12-bit write count output
.WRERR(WRERR), // 1-bit write error
.DI(DI), // 32-bit data input
.DIP(DIP), // 4-bit partity input
.RDCLK(RDCLK), // 1-bit read clock input
.RDEN(RDEN), // 1-bit read enable input
.RST(RST), // 1-bit reset input
.WRCLK(WRCLK), // 1-bit write clock input
.WREN(WREN) // 1-bit write enable input
);
FRAME_ECC_VIRTEX4
FRAME_ECC_VIRTEX4
ERROR – Output
Indicates whether an error exists or not.
SYNDROME – Output
Provides the bit location of the error and whether zero, one, or two erroneous bits are
present.
SYNDROMEVALID - Output
When asserted HIGH, SYNDROMEVALID indicates that the end of a frame readback.
Usage
In order to use the FRAME_ECC_VIRTEX4, this primitive must be instantiated in a
design. Any readbacks must be performed through the SelectMAP, JTAG, or ICAP.
At the end of each frame readback, the SYNDROME_VALID pin will be asserted
HIGH for one cycle of the readback clock (CCLK, TCK, or ICAP_CLK). The number of
cycles required to read back a frame varies with the interface used.
When SYNDROME_VALID is asserted HIGH, the value on the SYNDROME pin
indicates the presence of zero, one, or two bit errors in the frame. The following table
summarizes the relationship of various SYNDROME value and error status.
FRAME_ECC_VIRTEX4
Note: SYNDROME_VALID must be HIGH for the values on the table above to be useful.
This design element is supported for instantiation and schematics but not for
inference.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
FRAME_ECC_VIRTEX4_inst : FRAME_ECC_VIRTEX4
port map (
ERROR => ERROR,
SYNDROME => SYNDROME,
SYNDROMEVALID => SYNDROMEVALID
);
FRAME_ECC_VIRTEX4 FRAME_ECC_VIRTEX4_inst (
.ERROR(ERROR), // 1-bit output indicating an error
.SYNDROME(SYNDROME), // 12-bit output location of erroroneous bit
.SYNDROMEVALID(SYNDROMEVALID) //- 1-bit output indicating 0, 1 or 2 bit errors in frame
FRAME_ECC_VIRTEX4
);
FRAME_ECC_VIRTEX4
GT11_CUSTOM
GT11_CUSTOM
Primitive: RocketIO MGTs with 622 Mb/s to 11.1 Gb/s Data Rates, 8 to
24 Transceivers per FPGA, and 2.5 GHz – 5.55 GHz VCO, Less Than
1ns RMS Jitter
RocketIO MGTs have flexible, programmable features that allow a multi-gigabit serial
transceiver to be easily integrated into any Virtex-4 design. The RocketIO MGTs
support the following features:
• 10.3 Gb/s data rates
• 8to 24 transceivers per FPGA
• 2.5 GHz – 5.55 GHz VCO, less than 1ns RMS jitter
• Transmitter pre-emphasis
• Receiver continuous time equalization
• On-chip AC coupled receiver, with optional by-pass
• Receiver signal detect and loss of signal indicator, out of band signal receiver
• Transmit driver idle state for out of band signaling-both outputs at Vcm
• 8B/10B or 64B/66B encoding, or no data encoding (pass through mode)
• Channel bonding
• Flexible Cyclic Redundancy Check (CRC) generation and checking
• Pins for transmitter and receiver termination voltage
• User reconfiguration using secondary (dynamic) configuration bus
• Multiple loopback paths including PMA RX-TX path
GT11_CUSTOM
GT11_CUSTOM
Inputs Outputs
TXBYPASS8B10B [7:0]
TXCHARDISPMODE [7:0]
TXCHARDISPVAL [7:0]
TXCHARISK [7:0]
TXCLKSTABLE
TXCRCCLK
TXCRCDATAVALID
TXCRCDATAWIDTH [2:0]
TXCRCIN [63:0]
TXCRCINIT
TXCRCINTCLK
TXCRCPD
TXCRCRESET
TXDATA [63:0]
TXDATAWIDTH [1:0]
TXENC64B66BUSE
TXENC8B10BUSE
TXENOOB
TXGEARBOX64B66BUSE
TXINHIBIT
TXINTDATAWIDTH [1:0]
TXPMARESET
TXPOLARITY
TXRESET
TXSCRAM64B66BUSE
TXSYNC
TXUSRCLK
TXUSRCLK2
Usage
Refer to the Architecture Wizard in the ISE software for information regarding the use
of this component. If the Architecture Wizard is not used, two GT11 primitives should
be instantiated with the combusout port connected t othe compbusin of the other
GT11 instance.
GT11_CUSTOM
GT11_DUAL
GT11_DUAL
Primitive: RocketIO MGT Tile (contains 2 GT11_CUSTOM) with · 622
Mb/s to 11.1 Gb/s data rates, · 8 to 24 transceivers per FPGA, and · 2.5
GHz – 5.55 GHz VCO, less than 1ns RMS jitter
RocketIO MGTs have flexible, programmable features that allow a multi-gigabit serial
transceiver to be easily integrated into any Virtex-4 design. The RocketIO MGTs
support the following features:
• 622 Mb/s to 11.1 Gb/s data rates
• 8 to 24 transceivers per FPGA
• 2.5 GHz – 5.55 GHz VCO, less than 1ns RMS jitter
• Transmitter pre-emphasis (pre-equalization)
• Receiver continuous time equalization
• On-chip AC coupled receiver
• Digital oversampled receiver for data rates up to 2.5 Gb/s
• Receiver signal detect and loss of signal indicator, out-of-band signal receiver
• Transmit driver idle state for out-of-band signaling, both outputs at Vcm
• 8B/10B or 64B/66B encoding, or no data encoding (pass through mode)
• Channel bonding
• Flexible Cyclic Redundancy Check (CRC) generation and checking
• Pins for transmitter and receiver termination voltage
• User reconfiguration using secondary (dynamic) configuration bus
• Multiple loopback paths including PMA RX-TX path
For complete information about the RocketIO MGTs in Virtex-4 devices, see the
following documents:
• Virtex-4 Data Sheet
• Virtex-4 RocketIO Multi-Gigabit Transceiver User Guide
GT11_DUAL
GT11_DUAL
Inputs Outputs
ENCHANSYNC_A; RXMCLK_A;
ENCHANSYNC_B; RXMCLK_B;
ENMCOMMAALIGN_A; RXPCSHCLKOUT_A;
ENMCOMMAALIGN_B; RXPCSHCLKOUT_B;
ENPCOMMAALIGN_A; RXREALIGN_A;
ENPCOMMAALIGN_B; RXREALIGN_B;
GREFCLK_A; RXRECCLK1_A;
GREFCLK_B; RXRECCLK1_B;
POWERDOWN_A; RXRECCLK2_A;
POWERDOWN_B; RXRECCLK2_B;
REFCLK1_A; RXSIGDET_A;
REFCLK1_B; RXSIGDET_B;
REFCLK2_A; TX1N_A;
REFCLK2_B; TX1N_B;
RX1N_A; TX1P_A;
RX1N_B; TX1P_B;
RX1P_A; TXBUFERR_A;
RX1P_B; TXBUFERR_B;
RXBLOCKSYNC64B66BUSE_A; TXCALFAIL_A;
RXBLOCKSYNC64B66BUSE_B; TXCALFAIL_B;
RXCLKSTABLE_A; TXCYCLELIMIT_A;
RXCLKSTABLE_B; TXCYCLELIMIT_B;
RXCOMMADETUSE_A; TXLOCK_A;
RXCOMMADETUSE_B; TXLOCK_B;
RXCRCCLK_A; TXOUTCLK1_A;
RXCRCCLK_B; TXOUTCLK1_B;
RXCRCDATAVALID_A; TXOUTCLK2_A;
RXCRCDATAVALID_B; TXOUTCLK2_B;
RXCRCINIT_A; TXPCSHCLKOUT_A;
RXCRCINIT_B; TXPCSHCLKOUT_B;
RXCRCINTCLK_A;
RXCRCINTCLK_B;
RXCRCPD_A;
RXCRCPD_B;
RXCRCRESET_A;
RXCRCRESET_B;
RXDEC64B66BUSE_A;
RXDEC64B66BUSE_B;
RXDEC8B10BUSE_A;
RXDEC8B10BUSE_B;
RXDESCRAM64B66BUSE_A;
GT11_DUAL
Inputs Outputs
RXDESCRAM64B66BUSE_B;
RXIGNOREBTF_A;
RXIGNOREBTF_B;
RXPMARESET_A;
RXPMARESET_B;
RXPOLARITY_A;
RXPOLARITY_B;
RXRESET_A;
RXRESET_B;
RXSLIDE_A;
RXSLIDE_B;
RXSYNC_A;
RXSYNC_B;
RXUSRCLK_A;
RXUSRCLK_B;
RXUSRCLK2_A;
RXUSRCLK2_B;
TXCLKSTABLE_A;
TXCLKSTABLE_B;
TXCRCCLK_A;
TXCRCCLK_B;
TXCRCDATAVALID_A;
TXCRCDATAVALID_B;
TXCRCINIT_A;
TXCRCINIT_B;
TXCRCINTCLK_A;
TXCRCINTCLK_B;
TXCRCPD_A;
TXCRCPD_B;
TXCRCRESET_A;
TXCRCRESET_B;
TXENC64B66BUSE_A;
TXENC64B66BUSE_B;
TXENC8B10BUSE_A;
TXENC8B10BUSE_B;
TXENOOB_A;
TXENOOB_B;
TXGEARBOX64B66BUSE_A;
TXGEARBOX64B66BUSE_B;
TXINHIBIT_A;
TXINHIBIT_B;
GT11_DUAL
Inputs Outputs
TXPMARESET_A;
TXPMARESET_B;
TXPOLARITY_A;
TXPOLARITY_B;
TXRESET_A;
TXRESET_B;
TXSCRAM64B66BUSE_A;
TXSCRAM64B66BUSE_B;
TXSYNC_A;
TXSYNC_B;
TXUSRCLK_A;
TXUSRCLK_B;
TXUSRCLK2_A;
TXUSRCLK2_B;
Usage
It is recommended that the GT11_DUAL is instantiated instead of the GT11_CUSTOM
for all usages. It must be used if multiple GT11s are used in a design, or if the dynamic
configuration bus is implemented. If the Architecture Wizard is not used, two GT11
primitives should be instantiated with the combusout port connected t othe
compbusin of the other GT11 instance.
GT11_DUAL
GT11CLK
GT11CLK
Primitive: A MUX That Can Select Fom Differential Package Input
Clock, refclk From the Fabric, or rxbclk to Drive the Two Vertical
Reference Clock Buses for the Column of MGTs
This block needs to be instantiated when using the dedicated package pins for
GT11CLK RocketIO clocks. There are two available per MGT column.The attributes allow this
MGTCLKP SYNCLK1OUT
MGTCLKN
package input to drive one or both SYNCLK clock trees. Please see the Virtex-4
SYNCLK1IN RocketIO MGT User Guide for more details.
SYNCLK2IN
REFCLK
RXBCLK SYNCLK2OUT
The attribute REFCLKSEL allows more clocking options. These options include:
MGTCLK, SYNCLK1IN, SYNCLK2IN, REFCLK, RXBCLK.
X10290
GT11CLK
GT11CLK_MGT
GT11CLK_MGT
Primitive: Allows Differential Package Input to Drive the Two Vertical
Reference Clock Buses for the Column of MGTs
This block needs to be instantiated when using the dedicated package pins for
MGTCLKP
GT11CLK_MGT
SYNCLK1OUT RocketIO clocks. There are two available per MGT column.The attributes allow this
MGTCLKN SYNCLK2OUT
package input to drive one or both SYNCLK clock trees. Please see the Virtex-4
X10188
RocketIO MGT User Guide for more details.
GT11CLK is also available and has an attribute REFCLKSEL, with the following
VALUE options: MGTCLK, SYNCLK1IN, SYNCLK2IN, REFCLK, RXBCLK.
Usage
This block allows more clocking options for MGTs.
GT11CLK_MGT
IBUF
IBUF
Primitive: Single-Ended Input Buffer with Selectable I/O Standard and
Capacitance
Input Buffers are necessary to isolate the internal circuit from the signals coming into
IBUF the FPGA. IBUFs are contained in input/output blocks (IOB). IBUFs allow the
specification of the particular I/O Standard to configure the I/O. In general, an IBUF
I O should be used for all single-ended data input or bi-directional pins.
Usage
IBUFs are automatically inserted (inferred) to any signal directly connected to a top
level input or inout port of the design by the synthesis tool. It is generally
recommended to allow the synthesis tool to infer this buffer however if so desired, the
IBUF can be instantiated into the design. In order to do so, connect the input port, I, of
the component directly to the associated top-level input or in-out port and connect the
output port, O, to the FPGA logic to be sourced by that port. Modify any necessary
generic maps (VHDL) or named parameter value assignment (Verilog) in order to
change the default behavior of the component.
Available Attribute
Attribute Type Allowed Values Default Description
CAPACITANCE STRING "LOW", "DON'T CARE” Specifies whether it is desired to
"NORMAL", use an I/O with lower or normal
"DON'T CARE” intrinsic capacitance.
IOSTANDARD STRING "DEFAULT "DEFAULT” Use to assign an I/O standard to
an I/O primitive.
Note: Consult the device user guide or databook for the allowed values and the default value.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
IBUF
IBUF_inst : IBUF
generic map (
IOSTANDARD => "DEFAULT")
port map (
O => O, -- Buffer output
I => I -- Buffer input (connect directly to top-level port)
);
IBUF #(
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
)IBUF_inst (
.O(O), // Buffer output
.I(I) // Buffer input (connect directly to top-level port)
);
IBUFDS_DIFF_OUT
IBUFDS_DIFF_OUT
IBUFDS_DIFF_OUT
IBUFDS
IBUFDS
Primitive: Differential Signaling Input Buffer with Selectable I/O Interface
and Optional Delay
IBUFDS is an input buffer that supports low-voltage, differential signaling. In
I IBUFDS, a design level interface signal is represented as two distinct ports (I and IB),
O one deemed the "master" and the other the "slave." The master and the slave are
IB
opposite phases of the same logical signal (for example, MYNET and MYNETB). The
IBUFDS component allow the specification of the particular I/O Standard to
X9255 configure the IOBs as well as the specification of added delay for the incoming paths
to properly align incoming data with the associated clock source. In general, an
IBUFDS should be used for all differential data input or bi-directional pins.
Inputs Outputs
I IB O
0 0 -*
0 1 0
1 0 1
1 1 -*
Usage
The IBUFDS must be instantiated in order to be incorporated into the design. In order
to do so, connect the input ports, I and IB, of the component directly to the associated
top-level input or inout ports and connect the output port, O, to the FPGA logic to be
sourced by that port. Modify any necessary generic maps (VHDL) or named
parameter value assignment (Verilog) in order to change the default behavior of the
component.
Available Attributes
Attribute Type Allowed Values Default Description
CAPACITANCE STRING "LOW", "DONT CARE” Specifies whether it is desired to
"NORMAL", use an I/O with lower or normal
"DONT CARE” intrinsic capacitance.
DIFF_TERM Boolean FALSE, TRUE FALSE Enables the built-in differential
termination resistor.
IOSTANDARD STRING "DEFAULT” "DEFAULT” "Use to assign an I/O standard
to an I/O primitive.
IBUFDS
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
IBUFDS_inst : IBUFDS
generic map (
.IOSTANDARD => "DEFAULT")
port map (
O => O, -- Clock buffer output
I => I, -- Diff_p clock buffer input (connect directly to top-level port)
IB => IB -- Diff_n clock buffer input (connect directly to top-level port)
);
IBUFDS #(
.DIFF_TERM("FALSE"), // Differential Termination (Virtex-4 only)
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
) IBUFDS_inst (
.O(O), // Clock buffer output
.I(I), // Diff_p clock buffer input (connect directly to top-level port)
.IB(IB) // Diff_n clock buffer input (connect directly to top-level port)
);
IBUFG
IBUFG
Primitive: Dedicated Input Buffer with Selectable I/O Interface
The IBUFG is an input buffer that connects to one of the dedicated clock pins of the
device. Its purpose is to connect external clock source to the CLKIN or CLKFB pin of
I O the DCM. It may also be used to connect directly to the low-skew clock routing
resource in the device limiting the amount of clock delay incurred. Via attributes, the
desired I/O standard for this clock pin may be specified. .
IBUFG
Input (I) Outputs (O)
X10181
0/L 0
1/H 1
U/X/Z X
Usage
Synthesis tools can infer IBUFGs automatically by detecting ports that are connected
to clock sources. In general, this is the preferred manner to use this buffer however if
desired, it may be instantiated into the design. In order to do so, connect the input
port, I, of the component directly to the associated top-level clock port and connect
the output port, O, to either the DCM input pin or to all associated clocks in the
design. Modify any necessary generic maps (VHDL) or named parameter value
assignment (Verilog) in order to change the default behavior of the component. If a
location constraint (LOC) is used for this port or buffer, ensure the location used is one
of the dedicated clock pins for the device.
Available Attributes
Attribute Type Allowed Values Default Description
CAPACITANCE STRING "LOW", "NORMAL", "DONT CARE” Specifies whether it is desired
"DONT CARE” to use an I/O with lower or
normal intrinsic capacitance.
IOSTANDARD STRING "DEFAULT” "DEFAULT” Use to assign an I/O standard
to an I/O primitive.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
IBUFG
IBUFG_inst : IBUFG
generic map (
.IOSTANDARD => "DEFAULT")
port map (
O => O, -- Clock buffer output
I => I -- Clock buffer input (connect directly to top-level port)
);
IBUFG #(
.IOSTANDARD("DEFAULT")
) IBUFG_inst (
.O(O), // Clock buffer output
.I(I) // Clock buffer input (connect directly to top-level port)
);
IBUFGDS
IBUFGDS
Primitive: Differential Signaling Dedicated Input Clock Buffer with
Selectable I/O Interface and Optional Delay
The IBUFGDS is an input buffer that connects to one of the dedicated differential
I clock pin pairs of the device. Its purpose is to connect an external input differential
O
IB clock to the CLKIN or CLKFB pin of the DCM. It may also be used to connect directly
to the low-skew clock routing resource in the device limiting the amount of clock
delay incurred. Via attributes, the desired I/O standard for this clock pin may be
X9255 specified.
Inputs Outputs
I IB O
0 0 No Change
0 1 0
1 0 1
1 1 No Change
Usage
The IBUFGDS buffer must be instantiated in order to incorporate this into a design. In
order to do so, connect the input port, I, of the component directly to the associated
top-level clock port and connect the output port, O, to either the DCM input pin or to
all associated clocks in the design. Modify any necessary generic maps (VHDL) or
named parameter value assignment (Verilog) in order to change the default behavior
of the component. If a location constraint (LOC) is used for this port or buffer, ensure
the location used is one of the dedicated clock pins for the device.
Available Attributes
Attribute Type Allowed Values Default Description
CAPACITANCE STRING "LOW", "DON'T CARE” Specifies whether it is desired to
"NORMAL", use an I/O with lower or normal
"DON'T CARE” intrinsic capacitance.
DIFF_TERM Boolean FALSE, TRUE FALSE Enables the built-in differential
termination resistor.
IOSTANDARD STRING "DEFAULT” "DEFAULT” Use to assign an I/O standard to
an I/O primitive.
IBUFGDS
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
IBUFGDS_inst : IBUFGDS
generic map (
DIFF_TERM => "FALSE", -- Differential Termination (Virtex-4 only)
.IOSTANDARD => "DEFAULT")
port map (
O => O, -- Clock buffer output
I => I, -- Diff_p clock buffer input (connect directly to top-level port)
IB => IB -- Diff_n clock buffer input (connect directly to top-level port)
);
IBUFGDS #(
.DIFF_TERM("FALSE"),
.IOSTANDARD("DEFAULT")
) IBUFGDS_inst (
.O(O), // Clock buffer output
.I(I), // Diff_p clock buffer input
.IB(IB) // Diff_n clock buffer input
);
// End of IBUFGDS_inst instantiation
ICAP_VIRTEX4
ICAP_VIRTEX4
Primitive: Virtex-4 Internal Configuration Access Port
ICAP_VIRTEX4
ICAP_VIRTEX4 provides user access to the Virtex-4 internal configuration access port
I(7:0) O(7:0)
(ICAP).
BUSY
WRITE
Available Attributes
Attribute Type Allowed Values Default Description
ICAP_WIDTH STRING "X8" or "X32” "X8” Specifies the data width
for the ICAP component.
Usage
ICAP_VIRTEX4 provides the same config user interface as the SelectIO map interface.
The ICAP port can be connected to external pins or internal signals. This device is
supported for schematics and instantiation only.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
ICAP_VIRTEX4_inst : ICAP_VIRTEX4
generic map (
ICAP_WIDTH => "X8") -- "X8" or "X32"
ICAP_VIRTEX4
port map (
BUSY => BUSY, -- Busy output
O => O, -- 32-bit data output
CE => CE, -- Clock enable input
CLK => CLK, -- Clock input
I => I, -- 32-bit data input
WRITE => WRITE -- Write input
);
IDDR
IDDR
Primitive: A Dedicated Input Register to Receive External Dual Data
Rate (DDR) Signals into Virtex-4 FPGAs
The IDDR primitive is a dedicated input registers to receive external dual data rate
D
IDDR
Q1 (DDR) signals into Virtex-4 FPGAs. Unlike previous generations of Xilinx FPGAs,
CE
IDDR primitive is not limited to recovering the data for the FPGA fabric for
processing at opposite edges. IDDR is available with modes that present the data to
C
the FPGA fabric at the same clock edge. This feature allows designers to avoid
S
additional timing complexities and CLB usage. In addition, IDDR will work in
R Q2 conjunction with SelectIO features of Virtex-4 architecture.
X10109
IDDR Ports
Q1 – Q2 – Data These pins are the IDDR output that connects to the FPGA fabric. Q1 is
Output the first data pair while, Q2 is the second data pair.
C – Clock Input Port The C pin represents the clock input pin.
CE – Clock Enable When asserted LOW, this port disables the output clock at port O.
Port
D – Data Input This pin is where the DDR data is presented into the IDDR module.
(DDR) This pin connects to the IOB pad.
R - Reset Depends on how SRTYPE is set.
S - Set Asynchronous set pin. Set is assert HIGH.
IDDR Modes
The following section describes the functionality of various modes of IDDR. These
modes are set by the DDR_CLK_EDGE attribute.
OPPOSITE_EDGE
In the OPPOSITE_EDGE mode, data is recovered in the classic DDR methodology.
Given a DDR data and clock at pin D and C respectively, Q1 will change after every
positive edge of clock C, and Q2 will change after every negative edge of clock C.
SAME_EDGE
In the SAME_EDGE mode, data is still recovered by opposite edges of clock C.
However, an extra register has been placed in front of the negative edge data register.
This extra register is clocked with positive clock edge of clock signal C. As a result
DDR data is now presented into the FPGA fabric at the same clock edge. However,
because of this feature the data pair appears to be "separated." Q1 and Q2 no longer
IDDR
have pair 1 and 2. Instead, the first pair presented is pair 1 and don’t care, followed by
pair 2 and 3 at the next clock cycle.
SAME_EDGE_PIPELINED
The SAME_EDGE_PIPELINED mode recovers data in a similar fashion as the
SAME_EDGE mode. In order to avoid the "separated" effect of the SAME_EDGE
mode, an extra register has been placed in front of the positive edge data register. A
data pair will now appear at the Q1 and Q2 pin at the same time. However, using this
mode, cost the user an additional cycle of latency for Q1 and Q2 signals to change.
Available Attributes
Attribute Type Allowed Values Default Description
DDR_CLK_EDGE STRING "OPPOSITE_EDGE", "OPPOSITE_EDGE” DDR clock mode recovery
"SAME_EDGE", mode selection
"SAME_EDGE_PIPE-
LINED”
INIT_Q1 INTEGER 0 or 1 1 Q1 initialization value
INIT_Q2 INTEGER 0 or 1 1 Q2 initialization value
SRTYPE STRING "SYNC" or "ASYNC” "SYNC” Set/Reset type selection
Usage
This device is supported for inference and instantiation.
IDDR
VHDL Template
-- IDDR : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (IDDR_inst) and/or the port declarations
-- code : after the "=>" assignment maybe changed to properly
-- : connect this function to the design. Delete or comment
-- : out inputs/outs that are not necessary.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
IDDR_inst : IDDR
generic map (
DDR_CLK_EDGE => "OPPOSITE_EDGE", -- "OPPOSITE_EDGE", "SAME_EDGE"
-- or "SAME_EDGE_PIPELINED"
INIT_Q1 => '0', -- Initial value of Q1: '0' or '1'
INIT_Q2 => '0', -- Initial value of Q2: '0' or '1'
SRTYPE => "SYNC") -- Set/Reset type: "SYNC" or "ASYNC"
port map (
Q1 => Q1, -- 1-bit output for positive edge of clock
Q2 => Q2, -- 1-bit output for negative edge of clock
C => C, -- 1-bit clock input
CE => CE, -- 1-bit clock enable input
D => D, -- 1-bit DDR data input
R => R, -- 1-bit reset
S => S -- 1-bit set
);
Verilog Template
// IDDR : In order to incorporate this function into the design,
// Verilog : the following instance declaration needs to be placed
// instance : in the body of the design code. The instance name
// declaration : (IDDR_inst) and/or the port declarations within the
// code : parenthesis maybe changed to properly reference and
// : connect this function to the design. Delete or comment
// : out inputs/outs that are not necessary.
IDDR #(
.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE", "SAME_EDGE"
// or "SAME_EDGE_PIPELINED"
.INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1
.INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1
.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
) IDDR_inst (
.Q1(Q1), // 1-bit output for positive edge of clock
.Q2(Q2), // 1-bit output for negative edge of clock
.C(C), // 1-bit clock input
.CE(CE), // 1-bit clock enable input
.D(D), // 1-bit DDR data input
.R(R), // 1-bit reset
IDDR
IDELAY
IDELAY
Primitive: Startup calibration module for IDELAY elements
Virtex-4 modules have an IDELAY module in the input path of every user I/O.
IDELAY
CE
I O
IDELAY allows the implementation of deskew algorithms to correctly capture
C incoming data. IDELAY can be applied to data signals, clock signals, or both. IDELAY
INC
RST features a fully-controllable, 64-tap delay line. Each tap delay is carefully calibrated to
X10110
provide an absolute delay value of 78 ps independent of process, voltage, and
temperature variations. Three modes of operation are available:
• Zero hold time delay mode
This mode of operation allows backward compatibility for designs using the zero-
hold time delay feature in Virtex-II and Virtex-II Pro devices. When used in this
mode, the IDELAYCTRL primitive does not need to be instantiated.
• Fixed tap-delay mode
In the fixed tap-delay mode, the delay value is set to the number determined by
the attribute IOBDELAY_VALUE. This value cannot be changed during run-time.
When used in this mode, the IDELAYCTRL primitive must be instantiated.
• Variable tap-delay mode
In the variable tap-delay mode, the delay value can be changed at run-time by
manipulating the control signals CE and INC. When used in this mode, the
IDELAYCTRL primitive must be instantiated.
The following figure shows the block diagram of the IDELAY module.
Delay for Zero Hold Time
O
I
64 Tap Delay Line
I0
I1
.
.
.
I62
I63
INC UP/DOWN
CE COUNTER
RST
X10164
IDELAY
IDELAY Primitive
The following table lists the availale ports in the IDELAY primitive.
IDELAY Ports
IDELAY
The global clock buffer, BUFG, connects the incoming regional clock signal to the
global clock tree, gclk. The input and output data path is combinatorial and is not
affected by the clock signal (C). However, the user can choose to register the output
signal (O) in the IOB.
Clock Input - C
All control inputs to IDELAY (RST, CE and INC) are synchronous to the clock input
(C). The data input and output (I and O) of IDELAY is not affected by this clock signal.
This clock input is identical to the CLKDIV input for the ISERDES. All the clock
sources used to drive CLKDIV can therefore drive the IDELAY clock input (C). The
clock sources that can drive the clock input (C) are:
• Eight gclk (global clock tree)
• Two rclk (regional clock tree)
Note:
1. RST resets delay chain to tap count specified by attribute IOBDELAY_VALUE. If
IOBDLEAY_VALUE not specified, tap count reset to 0.
2. RST, CE, and INC are synchronous to the input clock signal (C).
When CE is raised, the increment/decrement operation begins on the next positive
clock cycle. When CE is lowered, the increment/decrement operation ceases on the
next positive clock cycle.
IDELAY
Available Attributes
Attribute Type Allowed Values Default Description
IOBDELAY_TYPE String “DEFAULT”, “DEFAULT” This attribute sets
“FIXED”, or the type of tap
“VARIABLE” delay.
IOBDELAY_VALUE Integer 0 to 63 0 This attribute
specifies the initial
number of tap
delays.
IOBDELAY_TYPE Attribute
The IOBDELAY_TYPE attribute sets the type of delay used. The attribute values are
DEFAULT, FIXED, and VARIABLE. The default value is DEFAULT. When set to
DEFAULT, the zero-hold time delay element is selected. This delay element eliminates
pad-to-pad hold time. The delay is matched to the internal clock-distribution delay of
the Virtex-4 device. When used, it guarantees a pad-to-pad hold time of zero.
When set to FIXED, the tap-delay value is fixed at the number of taps determined by
the IOBDELAY_VALUE attribute. This value is preset and cannot be changed
dynamically.
When set to VARIABLE, the variable tap delay is selected. The tap delay can be
incremented by setting CE = 1and INC = 1 or decremented by setting CE = 1 and INC
= 0. The increment/decrement operation is synchronous to C, the input clock signal.
IOBDELAY_VALUE Attribute
The IOBDELAY_VALUE attribute specifies the initial number of tap delays. The
possible values are any integers from 0 to 63. The default value is 0. When set to 0, the
total delay becomes the delay of the output MUX which is approximately 400 ps.
The value of the tap delay reverts to IOBDELAY_VALUE when the tap delay is reset
(RST = 1), or the IOBDELAY_TYPE is set to FIXED.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
IDELAY
IDELAY_inst : IDELAY
generic map (
IOBDELAY_TYPE => "DEFAULT", -- "DEFAULT", "FIXED" or "VARIABLE"
IOBDELAY_VALUE => 0) -- Any value from 0 to 63
port map (
O => O, -- 1-bit output
C => C, -- 1-bit clock input
CE => CE, -- 1-bit clock enable input
I => I, -- 1-bit data input
INC => INC, -- 1-bit increment input
RST => RST -- 1-bit reset input
);
IDELAY #(
.IOBDELAY_TYPE("DEFAULT"), // "DEFAULT", "FIXED" or "VARIABLE"
.IOBDELAY_VALUE(0) // Any value from 0 to 63
) IDELAY_inst (
.O(O), // 1-bit output
.C(C), // 1-bit clock input
.CE(CE), // 1-bit clock enable input
.I(I), // 1-bit data input
.INC(INC), // 1-bit increment input
.RST(RST) // 1-bit reset input
);
IDELAY
IDELAYCTRL
IDELAYCTRL
Primitive: IDELAY tap delay value control
IDELAYCTRL
The IDELAYCTRL module must be instantiated when using the tap-delay line. This
REFCLK RDY
RST
occurs when the IDELAY or ISERDES primitive is instantiated with the
IOBDELAY_TYPE attribute set to Fixed or Variable. The IDELAYCTRL module
X10111
provides a voltage bias, independent of process, voltage, and temperature variations
to the tap-delay line using a fixed-frequency reference clock, REFCLK. This enables
very accurate delay tuning.
Usage
The most efficient way to use the IDELAYCTRL module is to define and lock down
the placement of every IDELAYCTRL instance used in a design. This is done by
instantiating the IDELAYCTRL instances with location (LOC) constraints.
Instantiating IDELAYCTRL instances without LOC constraints cause the
implementation tools to replicate IDELAYCTRL instances throughout the device,
even in HCLK regions not using the tap-delay line. This increases the power
consumption, uses more global clock resources in every HCLK region, and increases
the use of routing resources.
When instantiating IDELAYCTRL instances with defined LOC constraints, you must
define and lock placement of all ISERDES and IDELAY components using the tap-
delay line (IOBDELAY_TYPE attribute set to Fixed or Variable).
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
IDELAYCTRL_inst : IDELAYCTRL
port map (
RDY => RDY, -- 1-bit output indicates validity of the REFCLK
REFCLK => REFCLK, -- 1-bit reference clock input
RST => RST -- 1-bit reset input
);
IDELAYCTRL
// IDELAYCTRL: Input Delay Control Element (Must be used in conjunction with the IDELAY
// when used in FIXED or VARIABLE tap-delay mode)
// Virtex-4
// Xilinx HDL Libraries Guide Version 8.1i
IDELAYCTRL IDELAYCTRL_inst (
.RDY(RDY), // 1-bit ready output
.REFCLK(REFCLK), // 1-bit reference clock input
.RST(RST) // 1-bit reset input
);
IOBUF
IOBUF
Primitive: Bi-Directional Buffer with Selectable I/O Interface
Virtex-4 IOBUFs are bi-directional buffer. The I/O interface corresponds to a specific
T I/O standard. You can attach an IOSTANDARD attribute to an IOBUF instance.
IOBUF components that use the LVTTL, LVCMOS15, LVCMOS18, LVCMOS25, and
I IO LVCMOS33 signaling standards have selectable drive and slew rates using the DRIVE
and FAST or SLOW constraints. The defaults are DRIVE = 12 mA and SLOW slew.
O
IOBUFs are composites of IBUF and OBUFT elements. The O output is X (unknown)
X8406 when IO (input/output) is Z. IOBUFs can be implemented as interconnections of their
component elements.
T I IO O
1 X Z X
0 1 1 1
0 0 0 0
Usage
These design elements are instantiated rather than inferred.
Available Attributes
Attribute Type Allowed Values Default Description
CAPACITANCE STRING "LOW", "NORMAL", "DONT CARE” Specifies whether it is desired to
"DONT CARE” use an I/O with lower or normal
intrinsic capacitance.
DRIVE INTEGER 2, 4, 6, 8, 12, 16, 24 12 Selects output drive strength
(mA) for the SelectIO buffers that
use the LVTTL, LVCMOS12,
LVCMOS15, LVCMOS18,
LVCMOS25, or LVCMOS33
interface I/O standard.
IOSTANDARD STRING "DEFAULT” "DEFAULT” Use to assign an I/O standard to
an I/O primitive.
SLEW INTEGER "SLOW" or "FAST” "SLOW” Sets the output rise and fall time.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
IOBUF
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- IOBUF: Single-ended Bi-directional Buffer
-- All devices
-- Xilinx HDL Libraries Guide Version 8.1i
IOBUF_inst : IOBUF
generic map
(DRIVE => 12,
IOSTANDARD => "DEFAULT",
SLEW => "SLOW")
port map (
O => O, -- Buffer output
IO => IO, -- Buffer inout port (connect directly to top-level port)
I => I, -- Buffer input
T => T -- 3-state enable input
);
IOBUF #(
.DRIVE(12), // Specify the output drive strength
.IOSTANDARD("DEFAULT"), // Specify the I/O standard
.SLEW("SLOW") // Specify the output slew rate
) IOBUF_inst (
.O(O), // Buffer output
.IO(IO), // Buffer inout port (connect directly to top-level port)
.I(I), // Buffer input
.T(T) // 3-state enable input
);
IOBUFDS
IOBUFDS
Primitive: 3-State Differential Signaling I/O Buffer with Active Low
Output Enable
IOBUFDS is a single 3-state, differential signaling input/output buffer with active
T Low output enable.
I IO
Inputs Bidirectional Outputs
IOB
I T IO IOB O
O
X 1 Z Z No Change
X9827
0 0 0 1 0
1 0 1 0 1
Usage
This design element is instantiated rather than inferred.
Available Attibutes
Attribute Type Allowed Values Default Description
DRIVE INTEGER 2, 4, 6, 8, 12, 16, 24 12 Selects output drive strength (mA)
for the SelectIO buffers that use the
LVTTL, LVCMOS12, LVCMOS15,
LVCMOS18, LVCMOS25, or
LVCMOS33 interface I/O standard.
IOSTANDARD STRING "DEFAULT” "DEFAULT” Use to assign an I/O standard to an
I/O primitive.
SLEW STRING "SLOW" or "SLOW” Sets the output rise and fall time.
"FAST”
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
IOBUFDS_inst : IOBUFDS
generic map (
IOSTANDARD => "DEFAULT")
IOBUFDS
port map (
O => O, -- Buffer output
IO => IO, -- Diff_p inout (connect directly to top-level port)
IOB => IOB, -- Diff_n inout (connect directly to top-level port)
I => I, -- Buffer input
T => T -- 3-state enable input
);
IOBUFDS #(
.IOSTANDARD("DEFAULT") // Specify the I/O standard
) IOBUFDS_inst (
.O(O), // Buffer output
.IO(IO), // Diff_p inout (connect directly to top-level port)
.IOB(IOB), // Diff_n inout (connect directly to top-level port)
.I(I), // Buffer input
.T(T) // 3-state enable input
);
ISERDES
ISERDES
Primitive: Dedicated I/O Buffer Input Deserializer
D
ISERDES
O
The Virtex-4 architecture provides a way for the user to easily implement source
CE1
Q1
synchronous solutions by using the ISERDES module. Unlike previous generations of
CE2
CLK Q2
FPGAs, ISERDES is a dedicated source synchronous I/O architecture. This module
SR
Q3
helps user by saving logic resources in the FPGA fabric for source synchronous
REV
CLKDIV Q4 applications. Furthermore, ISERDES also avoids additional timing complexities that
OCLK
BITSLIP
Q5 may be encountered when designing such solution in the FPGA fabric. ISERDES
DLYINC Q6 module is present in all Virtex-4 family of FPGA.
DLYCE
SHIFTOUT1
DLYRST
SHIFTIN1 SHIFTOUT2
The ISERDES module contains or works in conjunction with the following modules:
SHIFTIN2 serial to parallel converters, serial delay chains, a word alignment unit (BITSLIP), and
X10112
a clock enable (CE) module. In addition, ISERDES contains multiple clock inputs to
accommodate various applications and will work in conjunction with the SelectIO
features in Virtex-4 family.
ISERDES Ports (Detailed Description)
O – Combinatorial Output
This port is an unregistered output of the ISERDES module. It is the unregistered
output of the delay chain. In addition, this output port can also be configured to
bypass all the submodules within ISERDES module. This output can be used to drive
the BUFIOs.
Q1 to Q6 – Registered Outputs
This port is a registered output of the ISERDES module. Using these outputs, the user
has a selection of the following combination of ISERDES submodules path as the
inputs:
1. Delay chain to serial to parallel converter to bitslip module.
2. Delay chain to serial to parallel converter.
These ports can be programmed from 2 to 6 bits. In the extended width mode, this
port can be expanded up to 10 bits.
SHIFTOUT 1-2 – Data input expansion (master)
Carry out for data input expansion. Connect to SHIFTIN1/2 of slave.
BITSLIP – BITSLIP Control Pin
This pin allows the ISERDES to perform a BITSLIP operation when logic HIGH is
given and the BITSLIP module is enabled.
CE 1-2 – Clock Enables
Clock Enables input that feeds into the CE module.
CLK – High Speed Forwarded Clock Input
This clock input is used to drive the Serial to Parallel Converter and the BITSLIP
module. The possible source for the CLK port is from one of the following clock
resources:
1. Eight global clock lines in a clock region
2. Two regional clock lines
ISERDES
ISERDES
The set/reset pin, SR forces the storage element into the state specified by the SRVAL
attribute, set through the user constraints file (UCF). SRVAL = “1” forces a logic 1.
SRVAL = “0” forces a logic "0." When SR is used, a second input (REV) forces the
storage element into the opposite state. The reset condition predominates over the set
condition. The following truth tables describes the operation of SR in conjunction
with REV.
Truth Table When SRVAL = “0” (Default Condition)
SR REV Function
0 0 NOP
0 1 Set
1 0 Reset
1 1 Reset
SR REV Function
0 0 NOP
0 1 Reset
1 0 Set
1 1 Reset
ISERDES
CE Module
CE Module is essentially a 2:1 parallel to serial converter. This module is controlled by
CLKDIV clock input and is used to control the clock enable port of the Serial to
Parallel Converter module.
ISERDES
BITSLIP Module
The BITSLIP module is a "Barrel Shifter" type function that reorders an output
sequence. An output pattern only changes whenever the BITSLIP is invoked. The
maximum number of BITSLIP reordering is always equal to the number of bits in the
pattern length minus one (DATA_WIDTH – 1). BITSLIP is supported for both SDR
and DDR operations. However, note that the output reordering for SDR and DDR
greatly differs.
In order to use the BITSLIP, the attribute "BITSLIP_ENABLE" must be set to "ON."
Setting this attribute to "OFF" allows the user to bypass the BITSLIP module.
The BITSLIP operation is synchronous to the CLKDIV clock input. In order to invoke
the BITSLIP module, the BITSLIP port must be asserted HIGH for one and only one
CLKDIV cycle. After one CLKDIV cycle the BITSLIP port is asserted HIGH, the
BITSLIP operation is completed. For DDR mode, a BITSLIP operation may not be
stable until after two CLKDIV cycles. All outputs of the BITSLIP appear in one of the
registered output ports (Q1 to Q6) BITSLIP operations are synchronous to CLKDIV.
Additional Features
Width Expansion
It is possible to use the ISERDES modules to recover data widths larger than 6. In
order to use this feature, two ISERDES modules need to be instantiated. Both the
ISERDES must be an adjacent master and slave pair. The attribute SERDES_MODE
must be set to either "MASTER" or "SLAVE" in order to differentiate the modes of the
ISERDES pair. In addition, the user must connect the SHIFOUT ports of the MASTER
to the SHIFTIN ports of the SLAVE. This feature supports data widths of 7, 8, and 10
for SDR and DDR mode. The table below lists the data width availability for SDR and
DDR mode.
Mode Widths
ISERDES
Available Attributes
Attribute Type Allowed Values Default Description
BITSLIP_ENABLE BOOLEAN FALSE, TRUE 0 Allows the user to enable the bitslip
controller.
DATA_RATE STRING "SDR" or "DDR” "DDR” Specify data rate of either allowed
value.
DATA_WIDTH STRING If DATA_RATE = 4 Defines the serial to parallel
"DDR", value is converter width. This value also
limited to 4,6,8, or depends on the SDR vs. DDR and
10. If DATA_RATE the Mode of the ISERDES
= "SDR", value is
limited to
2,3,4,5,6,7, or 8.
INIT_Q1 1-Bit Binary 1-Bit Binary 1'b0 Defines the intial value of Q outputs
INIT_Q2 1-Bit Binary 1-Bit Binary 1'b0 Defines the intial value of Q outputs
INIT_Q3 1-Bit Binary 1-Bit Binary 1'b0 Defines the intial value of Q outputs
INIT_Q4 1-Bit Binary 1-Bit Binary 1'b0 Defines the intial value of Q outputs
INTERFACE_TYPE STRING "MEMORY" or "MEMORY” Determines which ISERDES use
"NETWORKING” model is used.
IOBDELAY STRING "NONE", "IBUF", "NONE” Defines where the at the ISERDES
"IFD", "BOTH outputs the Delay Chains will be
used
IOBDELAY_TYPE STRING "DEFAULT", "DEFAULT” Defines whether the Delay Chains
"FIXED", or is in fixed or variable mode
"VARIABLE”
IOBDELAY_VALUE INTEGER 0 to 63 0 Set initial tap delay to an integer
from 0 to 63.
NUM_CE INTEGER 1 or 2 2 Define number or clock enables to
an integer of 1 or 2.
SERDES_MODE STRING "MASTER" or "MASTER” Defines whether the ISERDES
"SLAVE” module is a master or slave when
width expansion is used
SRVAL_Q1 1-Bit Binary 1-Bit Binary 1'b0 Define Q1 output value upon SR
assertion - 1'b1 or 1'b0.
SRVAL_Q1 to SRVAL_Q4 BINARY 1^b0 or 1^b1 1'b0 Defines the value of Q outputs
when reset is invoked
SRVAL_Q2 1-Bit Binary 1-Bit Binary 1'b0 Define Q2 output value upon SR
assertion - 1'b1 or 1'b0.
SRVAL_Q3 1-Bit Binary 1-Bit Binary 1'b0 Define Q3 output value upon SR
assertion - 1'b1 or 1'b0.
SRVAL_Q4 1-Bit Binary 1-Bit Binary 1'b0 Define Q4 output value upon SR
assertion - 1'b1 or 1'b0.
VHDL Template
-- ISERDES : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (ISERDES_inst) and/or the port declarations
-- code : after the "=>" assignment maybe changed to properly
-- : connect this function to the design. Delete or comment
ISERDES
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
ISERDES_inst : ISERDES
generic map (
BITSLIP_ENABLE => FALSE, -- TRUE/FALSE to enable bitslip controller
DATA_RATE => "DDR", -- Specify data rate of "DDR" or "SDR"
DATA_WIDTH => 4, -- Specify data width - For DDR 4,6,8, or 10
-- For SDR 2,3,4,5,6,7, or 8
INIT_Q1 => '0', -- INIT for Q1 register - '1' or '0'
INIT_Q2 => '0', -- INIT for Q2 register - '1' or '0'
INIT_Q3 => '0', -- INIT for Q3 register - '1' or '0'
INIT_Q4 => '0', -- INIT for Q4 register - '1' or '0'
INTERFACE_TYPE => "MEMORY", -- Use model - "MEMORY" or "NETWORKING"
IOBDELAY => "NONE", -- Specify outputs where delay chain will be applied
-- "NONE", "IBUF", "IFD", or "BOTH"
IOBDELAY_TYPE => "DEFAULT", -- Set tap delay "DEFAULT", "FIXED", or "VARIABLE"
IOBDELAY_VALUE => 0, -- Set initial tap delay to an integer from 0 to 63
NUM_CE => 2, -- Define number or clock enables to an integer of 1 or 2
SERDES_MODE => "MASTER", --Set SERDES mode to "MASTER" or "SLAVE"
SRVAL_Q1 => '0', -- Define Q1 output value upon SR assertion - '1' or '0'
SRVAL_Q2 => '0', -- Define Q1 output value upon SR assertion - '1' or '0'
SRVAL_Q3 => '0', -- Define Q1 output value upon SR assertion - '1' or '0'
SRVAL_Q4 => '0') -- Define Q1 output value upon SR assertion - '1' or '0'
port map (
O => O, -- 1-bit output
Q1 => Q1, -- 1-bit output
Q2 => Q2, -- 1-bit output
Q3 => Q3, -- 1-bit output
Q4 => Q4, -- 1-bit output
Q5 => Q5, -- 1-bit output
Q6 => Q6, -- 1-bit output
SHIFTOUT1 => SHIFTOUT1, -- 1-bit output
SHIFTOUT2 => SHIFTOUT2, -- 1-bit output
BITSLIP => BITSLIP, -- 1-bit input
CE1 => CE1, -- 1-bit input
CE2 => CE2, -- 1-bit input
CLK => CLK, -- 1-bit input
CLKDIV => CLKDIV, -- 1-bit input
D => D, -- 1-bit input
DLYCE => DLYCE, -- 1-bit input
DLYINC => DLYINC, -- 1-bit input
DLYRST => DLYRST, -- 1-bit input
OCLK => OCLK, -- 1-bit input
REV => REV, -- 1-bit input
SHIFTIN1 => SHIFTIN1, -- 1-bit input
SHIFTIN2 => SHIFTIN2, -- 1-bit input
SR => SR -- 1-bit input
);
Verilog Template
// ISERDES : In order to incorporate this function into the design,
// Verilog : the following instance declaration needs to be placed
// instance : in the body of the design code. The instance name
// declaration : (ISERDES_inst) and/or the port declarations within the
// code : parenthesis maybe changed to properly reference and
ISERDES
ISERDES #(
.BITSLIP_ENABLE("FALSE"), // TRUE/FALSE to enable bitslip controller
.DATA_RATE("DDR"), // Specify data rate of "DDR" or "SDR"
.DATA_WIDTH(4), // Specify data width - For DDR 4,6,8, or 10
// For SDR 2,3,4,5,6,7, or 8
.INIT_Q1(1'b0), // INIT for Q1 register - 1'b1 or 1'b0
.INIT_Q2(1'b0), // INIT for Q2 register - 1'b1 or 1'b0
.INIT_Q3(1'b0), // INIT for Q3 register - 1'b1 or 1'b0
.INIT_Q4(1'b0), // INIT for Q4 register - 1'b1 or 1'b0
.INTERFACE_TYPE("MEMORY"), // Use model - "MEMORY" or "NETWORKING"
.IOBDELAY("NONE"), // Specify outputs where delay chain will be applied
// "NONE", "IBUF", "IFD", or "BOTH"
.IOBDELAY_TYPE("DEFAULT"), // Set tap delay "DEFAULT", "FIXED", or "VARIABLE"
.IOBDELAY_VALUE(0), // Set initial tap delay to an integer from 0 to 63
.NUM_CE(2), // Define number or clock enables to an integer of 1 or 2
.SERDES_MODE("MASTER"), // Set SERDES mode to "MASTER" or "SLAVE"
.SRVAL_Q1(1'b0), // Define Q1 output value upon SR assertion - 1'b1 or 1'b0
.SRVAL_Q2(1'b0), // Define Q2 output value upon SR assertion - 1'b1 or 1'b0
.SRVAL_Q3(1'b0), // Define Q3 output value upon SR assertion - 1'b1 or 1'b0
.SRVAL_Q4(1'b0) // Define Q4 output value upon SR assertion - 1'b1 or 1'b0
) ISERDES_inst (
.O(O), // 1-bit combinatorial output
.Q1(Q1), // 1-bit registered output
.Q2(Q2), // 1-bit registered output
.Q3(Q3), // 1-bit registered output
.Q4(Q4), // 1-bit registered output
.Q5(Q5), // 1-bit registered output
.Q6(Q6), // 1-bit registered output
.SHIFTOUT1(SHIFTOUT1), // 1-bit carry output
.SHIFTOUT2(SHIFTOUT2), // 1-bit carry output
.BITSLIP(BITSLIP), // 1-bit Bitslip input
.CE1(CE1), // 1-bit clock enable input
.CE2(CE2), // 1-bit clock enable input
.CLK(CLK), // 1-bit clock input
.CLKDIV(CLKDIV), // 1-bit divided clock input
.D(D), // 1-bit serial data input
.DLYCE(DLYCE), // 1-bit delay chain enable input
.DLYINC(DLYINC), // 1-bit delay increment/decrement input
.DLYRST(DLYRST), // 1-bit delay chain reset input
.OCLK(OCLK), // 1-bit high-speed clock input
.REV(REV), // 1-bit reverse SR input
.SHIFTIN1(SHIFTIN1), // 1-bit carry input
.SHIFTIN2(SHIFTIN2), // 1-bit carry input
.SR(SR) // 1-bit set/reset input
);
KEEPER
KEEPER
Primitive: KEEPER Symbol
KEEPER is a weak keeper element that retains the value of the net connected to its
bidirectional O pin. For example, if a logic 1 is being driven onto the net, KEEPER
drives a weak/resistive 1 onto the net. If the net driver is then 3-stated, KEEPER
continues to drive a weak/resistive 1 onto the net.
Usage
O
X8718 This design element is instantiated rather than inferred.
-- <-----Cut code below this line and paste into the architecture body---->
KEEPER KEEPER_inst (
.O(O), // Keeper output (connect directly to top-level port)
);
KEEPER
LDCPE
LDCPE
Primitive: Transparent Data Latch with Asynchronous Clear and Preset
and Gate Enable
LDCPE is a transparent data latch with data (D), asynchronous clear (CLR),
PRE
asynchronous preset (PRE), and gate enable (GE). When CLR is High, it overrides the
other inputs and resets the data (Q) output Low. When PRE is High and CLR is Low, it
D LDCPE
presets the data (Q) output High. Q reflects the data (D) input while the gate (G) input
GE Q
and gate enable (GE) are High and CLR and PRE are Low. The data on the D input
G
during the High-to-Low gate transition is stored in the latch. The data on the Q output
remains unchanged as long as G or GE remains Low.
CLR
X8371 The latch is asynchronously cleared, output Low, when power is applied, or when
global reset is active.
GSR defaults to active-High but can be inverted by adding an inverter in front of the
GSR input of the Virtex-4 symbol.
Inputs Outputs
CLR PRE GE G D Q
1 X X X X 0
0 1 X X X 1
0 0 0 X X No Change
0 0 1 1 0 0
0 0 1 1 1 1
0 0 1 0 X No Change
0 0 1 ↓ D D
Usage
This design element is inferred in the design code; however, the element can be
instantiated for cases where strict placement control, relative placement control, or
initialization attributes must be applied.
Available Attributes
Attribute Type Allowed Values Default Description
INIT 1-Bit 1 or 0 0 Sets the initial value of Q
output after configuration
LDCPE
LDCPE #(
.INIT(1'b0) // Initial value of latch (1'b0 or 1'b1)
) LDCPE_inst (
.Q(Q), // Data output
.CLR(CLR), // Asynchronous clear/reset input
.D(D), // Data input
.G(G), // Gate input
.GE(GE), // Gate enable input
.PRE(PRE) // Asynchronous preset/set input
);
LUT1, 2, 3, 4
LUT1, 2, 3, 4
Primitive: 1-, 2-, 3-, 4-Bit Look-Up Table with General Output
LUT1, LUT2, LUT3, and LUT4 are, respectively, 1-, 2-, 3-, and 4-bit look-up-tables
(LUTs) with general output (O).
LUT1
A mandatory INIT attribute, with an appropriate number of hexadecimal digits for
O
the number of inputs, must be attached to the LUT to specify its function.
I0
LUT1 provides a look-up-table version of a buffer or inverter.
X9852
LUTs are the basic Virtex-4 building blocks. Two LUTs are available in each CLB slice;
four LUTs are available in each CLB. The variants, “LUT1_D, LUT2_D, LUT3_D,
I1 LUT2 LUT4_D” and “LUT1_L, LUT2_L, LUT3_L, LUT4_L” provide additional types of
O outputs that can be used by different timing models for more accurate pre-layout
I0 timing estimation.
X8379
LUT3 Function Table
Inputs Outputs
LUT3 I2 I1 I0 O
I2
I1 0 0 0 INIT[0]
I0 O
0 0 1 INIT[1]
X8382 0 1 0 INIT[2]
0 1 1 INIT[3]
1 0 0 INIT[4]
I3 LUT4
I2
1 0 1 INIT[5]
O
I1 1 1 0 INIT[6]
I0
1 1 1 INIT[7]
INIT = binary equivalent of the hexadecimal number assigned to the INIT attribute
X8385
Usage
LUTs are generally inferred with the logic portions of the HDL code. Xilinx suggests
that you instantiate LUTs only if you have a need to implicitly specify the logic
mapping, or if you need to manually place or relationally place the logic.
Available Attributes
LUT1
Attribute Type Allowed Values Default Description
INIT 2-Bit Hexadecimal 2-Bit Hexadecimal 2'h0 Initializes ROMs, RAMs, registers,
and look-up tables.
LUT2
Attribute Type Allowed Values Default Description
INIT 4-Bit Hexadecimal 4-Bit Hexadecimal 4'h0 Initializes ROMs, RAMs, registers,
and look-up tables.
LUT1, 2, 3, 4
LUT3
Attribute Type Allowed Values Default Description
INIT 8-Bit Hexadecimal 8-Bit Hexadecimal 8'h00 Initializes ROMs, RAMs, registers,
and look-up tables.
LUT4
Attribute Type Allowed Values Default Description
INIT 16-Bit Hexadecimal 16-Bit Hexadecimal 16'h0000 Initializes ROMs, RAMs, registers,
and look-up tables.
-- <-----Cut code below this line and paste into the architecture body---->
LUT1_inst : LUT1
generic map (
INIT => "00")
port map (
O => O, -- LUT general output
I0 => I0 -- LUT input
);
LUT1 #(
.INIT(2'b00) // Specify LUT Contents
) LUT1_inst (
.O(O), // LUT general output
.I0(I0) // LUT input
);
// End of LUT1_inst instantiation
LUT1, 2, 3, 4
LUT1_D
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- LUT2: 2-input Look-Up Table with general output
-- Xilinx HDL Libraries Guide Version 8.1i
LUT2_inst : LUT2
generic map (
INIT => X"0")
port map (
O => O, -- LUT general output
I0 => I0, -- LUT input
I1 => I1 -- LUT input
);
LUT2 #(
.INIT(4'h0) // Specify LUT Contents
) LUT2_inst (
.O(O), // LUT general output
.I0(I0), // LUT input
.I1(I1) // LUT input
);
LUT1, 2, 3, 4
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT3_inst : LUT3
generic map (
INIT => X"00")
port map (
O => O, -- LUT general output
I0 => I0, -- LUT input
I1 => I1, -- LUT input
I2 => I2 -- LUT input
);
LUT3 #(
.INIT(8'h00) // Specify LUT Contents
) LUT3_inst (
.O(O), // LUT general output
.I0(I0), // LUT input
.I1(I1), // LUT input
.I2(I2) // LUT input
);
LUT1, 2, 3, 4
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT4_inst : LUT4
generic map (
INIT => X"0000")
port map (
O => O, -- LUT general output
I0 => I0, -- LUT input
I1 => I1, -- LUT input
I2 => I2, -- LUT input
I3 => I3 -- LUT input
);
LUT4 #(
.INIT(16'h0000) // Specify LUT Contents
) LUT4_inst (
.O(O), // LUT general output
.I0(I0), // LUT input
.I1(I1), // LUT input
.I2(I2), // LUT input
.I3(I3) // LUT input
);
// End of LUT4_inst instantiation
LUT1, 2, 3, 4
I1 LUT2_D LO
LUT1_D provides a look-up-table version of a buffer or inverter.
I0 O
See also “LUT1, 2, 3, 4” and “LUT1_L, LUT2_L, LUT3_L, LUT4_L.”
LUT3_D Function Table
X8380
Inputs Outputs
I2 I1 I0 O LO
I2 LUT3_D LO
I1 0 0 0 INIT[0] INIT[0]
I0 O
0 0 1 INIT[1] INIT[1]
X8383 0 1 0 INIT[2] INIT[2]
0 1 1 INIT[3] INIT[3]
1 0 0 INIT[4] INIT[4]
I3 LUT4_D
I2 LO
1 0 1 INIT[5] INIT[5]
I1 O 1 1 0 INIT[6] INIT[6]
I0
1 1 1 INIT[7] INIT[7]
X8386
INIT = binary equivalent of the hexadecimal number assigned to the INIT attribute
Usage
LUTs are generally inferred with the logic portions of the HDL code. Xilinx suggests
that you instantiate LUTs only if you have a need to implicitly specify the logic
mapping, or if you need to manually place or relationally place the logic.
Available Attributes
LUT1_D
Attribute Type Allowed Values Default Description
INIT 2-Bit Hexadecimal 2-Bit Hexadecimal 2'h0 Initializes ROMs, RAMs, registers,
and look-up tables.
LUT2_D
Attribute Type Allowed Values Default Description
INIT 4-Bit Hexadecimal 4-Bit Hexadecimal 4'h0 Initializes ROMs, RAMs, registers,
and look-up tables.
LUT3_D
Attribute Type Allowed Values Default Description
INIT 8-Bit Hexadecimal 8-Bit Hexadecimal 8'h00 Initializes ROMs, RAMs, registers,
and look-up tables.
LUT4_D
Attribute Type Allowed Values Default Description
INIT 16-Bit Hexadecimal 16-Bit Hexadecimal 16'h0000 Initializes ROMs, RAMs, registers,
and look-up tables.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT1_D_inst : LUT1_D
generic map (
INIT => "00")
port map (
LO => LO, -- LUT local output
O => O, -- LUT general output
I0 => I0 -- LUT input
);
LUT1_D #(
.INIT(2'b00) // Specify LUT Contents
) LUT1_D_inst (
.LO(LO), // LUT local output
.O(O), // LUT general output
.I0(I0) // LUT input
);
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT2_D_inst : LUT2_D
generic map (
INIT => X"0")
port map (
LO => LO, -- LUT local output
O => O, -- LUT general output
I0 => I0, -- LUT input
I1 => I1 -- LUT input
);
LUT2_D #(
.INIT(4'h0) // Specify LUT Contents
) LUT2_D_inst (
.LO(LO), // LUT local output
.O(O), // LUT general output
.I0(I0), // LUT input
.I1(I1) // LUT input
);
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT3_D_inst : LUT3_D
generic map (
INIT => X"00")
port map (
LO => LO, -- LUT local output
O => O, -- LUT general output
I0 => I0, -- LUT input
I1 => I1, -- LUT input
I2 => I2 -- LUT input
);
LUT3_D #(
.INIT(8'h00) // Specify LUT Contents
) LUT3_D_inst (
.LO(LO), // LUT local output
.O(O), // LUT general output
.I0(I0), // LUT input
.I1(I1), // LUT input
.I2(I2) // LUT input
);
-- : for simulation.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT4_D_inst : LUT4_D
generic map (
INIT => X"0000")
port map (
LO => LO, -- LUT local output
O => O, -- LUT general output
I0 => I0, -- LUT input
I1 => I1, -- LUT input
I2 => I2, -- LUT input
I3 => I3 -- LUT input
);
LUT4_D #(
.INIT(16'h0000) // Specify LUT Contents
) LUT4_D_inst (
.LO(LO), // LUT local output
.O(O), // LUT general output
.I0(I0), // LUT input
.I1(I1), // LUT input
.I2(I2), // LUT input
.I3(I3) // LUT input
);
Inputs Outputs
X8381
I2 I1 I0 LO
0 0 0 INIT[0]
LUT3_L
I2 LO 0 0 1 INIT[1]
I1
I0
0 1 0 INIT[2]
0 1 1 INIT[3]
X8384
1 0 0 INIT[4]
1 0 1 INIT[5]
1 1 0 INIT[6]
I3 LUT4_L
I2
LO
1 1 1 INIT[7]
I1
I0 INIT = binary equivalent of the hexadecimal number assigned to the INIT attribute
X8387
Usage
LUTs are generally inferred with the logic portions of the HDL code. Xilinx suggests
that you instantiate LUTs only if you have a need to implicitly specify the logic
mapping, or if you need to manually place or relationally place the logic.
Available Attributes
LUT1_L
Attribute Type Allowed Values Default Description
INIT 2-Bit Hexadecimal 2-Bit Hexadecimal 2'h0 Initializes ROMs, RAMs, registers,
and look-up tables.
LUT2_L
Attribute Type Allowed Values Default Description
INIT 4-Bit Hexadecimal 4-Bit Hexadecimal 4'h0 Initializes ROMs, RAMs, registers,
and look-up tables.
LUT3_L
Attribute Type Allowed Values Default Description
INIT 8-Bit Hexadecimal 8-Bit Hexadecimal 8'h00 Initializes ROMs, RAMs, registers,
and look-up tables.
LUT4_L
Attribute Type Allowed Values Default Description
INIT 16-Bit Hexadecimal 16-Bit Hexadecimal 16'h0000 Initializes ROMs, RAMs, registers,
and look-up tables.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT1_L_inst : LUT1_L
generic map (
INIT => "00")
port map (
LO => LO, -- LUT local output
I0 => I0 -- LUT input
);
LUT1_L #(
.INIT(2'b00) // Specify LUT Contents
) LUT1_L_inst (
.LO(LO), // LUT local output
.I0(I0) // LUT input
);
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT2_L_inst : LUT2_L
generic map (
INIT => X"0")
port map (
LO => LO, -- LUT local output
I0 => I0, -- LUT input
I1 => I1 -- LUT input
);
LUT2_L #(
.INIT(4'h0) // Specify LUT Contents
) LUT2_L_inst (
.LO(LO), // LUT local output
.I0(I0), // LUT input
.I1(I1) // LUT input
);
-- : for simulation.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT3_L_inst : LUT3_L
generic map (
INIT => X"00")
port map (
LO => LO, -- LUT local output
I0 => I0, -- LUT input
I1 => I1, -- LUT input
I2 => I2 -- LUT input
);
LUT3_L #(
.INIT(8'h00) // Specify LUT Contents
) LUT3_L_inst (
.LO(LO), // LUT local output
.I0(I0), // LUT input
.I1(I1), // LUT input
.I2(I2) // LUT input
);
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
LUT4_L_inst : LUT4_L
generic map (
INIT => X"0000")
port map (
LO => LO, -- LUT local output
I0 => I0, -- LUT input
I1 => I1, -- LUT input
I2 => I2, -- LUT input
I3 => I3 -- LUT input
);
MULT_AND
MULT_AND
Primitive: Fast Multiplier AND
MULT_AND is a logical AND gate component that can be used to reduce logic and
improve speed when users are building soft multipliers within the device fabric. It can
also be used in some carry-chain operations to reduce the needed LUTs to implement
I1 some functions. The I1 and I0 inputs must be connected to the I1 and I0 inputs of the
LO
I0 associated LUT. The LO output must be connected to the DI input of the associated
MUXCY, MUXCY_D, or MUXCY_L.
X8405
Inputs Output
I1 I0 LO
0 0 0
0 1 0
1 0 0
1 1 1
LO MUXCY_L
S
0 1
DI CI
LUT4
B1 I3
A1 I2
LI SUM1
B0 I1 O O
CI
A0 IO
XORCY
I1
LO
I0
MULT_AND
CO
X8733
Usage
For HDL, this design element is instantiated rather than inferred.
-- Copy the following two statements and paste them before the
MULT_AND
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
MULT_AND_inst : MULT_AND
port map (
LO => LO, -- MULT_AND output (connect to MUXCY DI)
I0 => I0, -- MULT_AND data[0] input
I1 => I1 -- MULT_AND data[1] input
);
MULT_AND MULT_AND_inst (
.LO(LO), // MULT_AND output (connect to MUXCY DI)
.I0(I0), // MULT_AND data[0] input
.I1(I1) // MULT_AND data[1] input
);
MUXCY
MUXCY
Primitive: 2-to-1 Multiplexer for Carry Logic with General Output
MUXCY is used to implement a 1-bit high-speed carry propagate function. One such
function can be implemented per slice for a total of 4-bits per configurable logic block
O (CLB) for Virtex-4 devices.
S MUXCY The direct input (DI) of a slice is connected to the (DI) input of the MUXCY. The carry
0 1 in (CI) input of an LC is connected to the CI input of the MUXCY. The select input (S)
of the MUXCY is driven by the output of the lookup table (LUT) and configured as a
DI CI MUX function. The carry out (O) of the MUXCY reflects the state of the selected input
X8728 and implements the carry out function of each LC. When Low, S selects DI; when
High, S selects CI.
The variants, “MUXCY_D” and “MUXCY_L” provide additional types of outputs that
can be used by different timing models for more accurate pre-layout timing
estimation.
Inputs Outputs
S DI CI O
0 1 X 1
0 0 X 0
1 X 1 1
1 X 0 0
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXCY: Carry-Chain MUX with general output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXCY_inst : MUXCY
port map (
O => O, -- Carry output signal
CI => CI, -- Carry input signal
DI => DI, -- Data input signal
MUXCY
MUXCY MUXCY_inst (
.O(O), // Carry output signal
.CI(CI), // Carry input signal
.DI(DI), // Data input signal
.S(S) // MUX select, tie to '1' or LUT4 out
);
MUXCY_D
MUXCY_D
Primitive: 2-to-1 Multiplexer for Carry Logic with Dual Output
MUXCY_D implements a 1-bit high-speed carry propagate function. One such
function is implemented per logic cell (LC), for a total of 4-bits per configurable logic
LO O block (CLB). The direct input (DI) of an LC is connected to the DI input of the
MUXCY_D. The carry in (CI) input of an LC is connected to the CI input of the
S MUXCY_D MUXCY_D. The select input (S) of the MUX is driven by the output of the lookup
0 1 table (LUT) and configured as an XOR function. The carry out (O and LO) of the
MUXCY_D reflects the state of the selected input and implements the carry out
DI CI function of each LC. When Low, S selects DI; when High, S selects CI.
X8729
Outputs O and LO are functionally identical. The O output is a general interconnect.
The LO outputs is used to connect to other inputs within the same slice.
See also “MUXCY” and “MUXCY_L”
Inputs Outputs
S DI CI O LO
0 1 X 1 1
0 0 X 0 0
1 X 1 1 1
1 X 0 0 0
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXCY_D: Carry-Chain MUX with general and local outputs
-- Xilinx HDL Libraries Guide Version 8.1i
MUXCY_D_inst : MUXCY_D
port map (
LO => LO, -- Carry local output signal
O => O, -- Carry general output signal
CI => CI, -- Carry input signal
DI => DI, -- Data input signal
MUXCY_D
MUXCY_D MUXCY_D_inst (
.LO(LO), // Carry local output signal
.O(O), // Carry general output signal
.CI(CI), // Carry input signal
.DI(DI), // Data input signal
.S(S) // MUX select, tie to '1' or LUT4 out
);
MUXCY_L
MUXCY_L
Primitive: 2-to-1 Multiplexer for Carry Logic with Local Output
MUXCY_L implements a 1-bit high-speed carry propagate function. One such
function can be implemented per slice, for a total of 4-bits per configurable logic block
LO (CLB). The direct input (DI) of an LC is connected to the DI input of the MUXCY_L.
The carry in (CI) input of an LC is connected to the CI input of the MUXCY_L. The
S MUXCY_L select input (S) of the MUXCY_L is driven by the output of the lookup table (LUT)
0 1 and configured as an XOR function. The carry out (LO) of the MUXCY_L reflects the
state of the selected input and implements the carry out function of each slice. When
DI CI Low, S selects DI; when High, S selects CI.
X8730
See also “MUXCY” and “MUXCY_D”
Inputs Outputs
S DI CI LO
0 1 X 1
0 0 X 0
1 X 1 1
1 X 0 0
Usage
For HDL, this design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXCY_L: Carry-Chain MUX with local output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXCY_L_inst : MUXCY_L
port map (
LO => LO, -- Carry local output signal
CI => CI, -- Carry input signal
DI => DI, -- Data input signal
S => S -- MUX select, tie to '1' or LUT4 out
);
MUXCY_L
MUXCY_L MUXCY_L_inst (
.LO(LO), // Carry local output signal
.CI(CI), // Carry input signal
.DI(DI), // Data input signal
.S(S) // MUX select, tie to '1' or LUT4 out
);
MUXF5
MUXF5
Primitive: 2-to-1 Lookup Table Multiplexer with General Output
MUXF5 provides a multiplexer function in a CLB slice for creating a function-of-5
lookup table or a 4-to-1 multiplexer in combination with the associated lookup tables.
The local outputs (LO) from the two lookup tables are connected to the I0 and I1
I0 inputs of the MUXF5. The S input is driven from any internal net. When Low, S selects
I0. When High, S selects I1.
O
I1 The variants, “MUXF5_D” and “MUXF5_L”, provide additional types of outputs that
S can be used by different timing models for more accurate pre-layout timing
X8431 estimation.
Inputs Outputs
S I0 I1 O
0 1 X 1
0 0 X 0
1 X 1 1
1 X 0 0
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF5: Slice MUX to tie two LUT4's together with general output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF5_inst : MUXF5
port map (
O => O, -- Output of MUX to general routing
I0 => I0, -- Input (tie directly to the output of LUT4)
I1 => I1, -- Input (tie directoy to the output of LUT4)
S => S -- Input select to MUX
);
MUXF5
// MUXF5: Slice MUX to tie two LUT4's together with general output
// For use with All FPGAs
// Xilinx HDL Libraries Guide Version 8.1i
MUXF5 MUXF5_inst (
.O(O), // Output of MUX to general routing
.I0(I0), // Input (tie directly to the output of LUT4)
.I1(I1), // Input (tie directoy to the output of LUT4)
.S(S) // Input select to MUX
);
MUXF5_D
MUXF5_D
Primitive: 2-to-1 Lookup Table Multiplexer with Dual Output
MUXF5_D provides a multiplexer function in a CLB slice for creating a function-of-5
lookup table or a 4-to-1 multiplexer in combination with the associated lookup tables.
I0 The local outputs (LO) from the two lookup tables are connected to the I0 and I1
LO
inputs of the MUXF5. The S input is driven from any internal net. When Low, S selects
O I0. When High, S selects I1.
I1
S Outputs O and LO are functionally identical. The O output is a general interconnect.
X8432 The LO output connects to other inputs in the same CLB slice.
See also “MUXF5” and “MUXF5_L”
Inputs Outputs
S I0 I1 O LO
0 1 X 1 1
0 0 X 0 0
1 X 1 1 1
1 X 0 0 0
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF5_D: Slice MUX to tie two LUT4's together with general and local outputs
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF5_D_inst : MUXF5_D
port map (
LO => LO, -- Ouptut of MUX to local routing
O => O, -- Output of MUX to general routing
I0 => I0, -- Input (tie directly to the output of LUT4)
I1 => I1, -- Input (tie directoy to the output of LUT4)
S => S -- Input select to MUX
);
MUXF5_D
// MUXF5_D: Slice MUX to tie two LUT4's together with general and local outputs
// For use with All FPGAs
// Xilinx HDL Libraries Guide Version 8.1i
MUXF5_D MUXF5_D_inst (
.LO(LO), // Ouptut of MUX to local routing
.O(O), // Output of MUX to general routing
.I0(I0), // Input (tie directly to the output of LUT4)
.I1(I1), // Input (tie directoy to the output of LUT4)
.S(S) // Input select to MUX
);
MUXF5_L
MUXF5_L
Primitive: 2-to-1 Lookup Table Multiplexer with Local Output
MUXF5_L provides a multiplexer function in a CLB slice for creating a function-of-5
lookup table or a 4-to-1 multiplexer in combination with the associated lookup tables.
The local outputs (LO) from the two lookup tables are connected to the I0 and I1
I0 inputs of the MUXF5. The S input is driven from any internal net. When Low, S selects
LO
I0. When High, S selects I1.
I1 The LO output connects to other inputs in the same CLB slice.
S See also “MUXF5” and “MUXF5_D”.
X8433
Inputs Output
S I0 I1 LO
0 1 X 1
0 0 X 0
1 X 1 1
1 X 0 0
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF5_L: Slice MUX to tie two LUT4's together with local output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF5_L_inst : MUXF5_L
port map (
LO => LO, -- Output of MUX to local routing
I0 => I0, -- Input (tie directly to the output of LUT4)
I1 => I1, -- Input (tie directoy to the output of LUT4)
S => S -- Input select to MUX
);
MUXF5_L
// MUXF5_L: Slice MUX to tie two LUT4's together with local output
// For use with All FPGAs
// Xilinx HDL Libraries Guide Version 8.1i
MUXF5_L MUXF5_L_inst (
.LO(LO), // Output of MUX to local routing
.I0(I0), // Input (tie directly to the output of LUT4)
.I1(I1), // Input (tie directoy to the output of LUT4)
.S(S) // Input select to MUX
);
MUXF6
MUXF6
Primitive: 2-to-1 Lookup Table Multiplexer with General Output
MUXF6 provides a multiplexer function in one half of a Virtex-4 CLB (two slices) for
creating a function-of-6 lookup table or an 8-to-1 multiplexer in combination with the
associated four lookup tables and two MUXF5s. The local outputs (LO) from the two
I0 MUXF5s in the CLB are connected to the I0 and I1 inputs of the MUXF6. The S input is
driven from any internal net. When Low, S selects I0. When High, S selects I1.
O
I1 The variants, “MUXF6_D” and “MUXF6_L”, provide additional types of outputs that
can be used by different timing models for more accurate pre-layout timing
S estimation.
X8434
Inputs Outputs
S I0 I1 O
0 1 X 1
0 0 X 0
1 X 1 1
1 X 0 0
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF6: CLB MUX to tie two MUXF5's together with general output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF6_inst : MUXF6
port map (
O => O, -- Output of MUX to general routing
I0 => I0, -- Input (tie to MUXF5 LO out)
I1 => I1, -- Input (tie to MUXF5 LO out)
S => S -- Input select to MUX
);
MUXF6
// MUXF6: CLB MUX to tie two MUXF5's together with general output
// For use with All FPGAs
// Xilinx HDL Libraries Guide Version 8.1i
MUXF6 MUXF6_inst (
.O(O), // Output of MUX to general routing
.I0(I0), // Input (tie to MUXF5 LO out)
.I1(I1), // Input (tie to MUXF5 LO out)
.S(S) // Input select to MUX
);
MUXF6_D
MUXF6_D
Primitive: 2-to-1 Lookup Table Multiplexer with Dual Output
MUXF6_D provides a multiplexer function in a full Virtex-4 CLB, or one half of a
Virtex-4 CLB (two slices) for creating a function-of-6 lookup table or an 8-to-1
multiplexer in combination with the associated four lookup tables and two MUXF5s.
I0
LO The local outputs (LO) from the two MUXF5s in the CLB are connected to the I0 and
I1 inputs of the MUXF6. The S input is driven from any internal net. When Low, S
O selects I0. When High, S selects I1.
I1
Outputs O and LO are functionally identical. The O output is a general interconnect.
S
The LO output connects to other inputs in the same CLB slice.
X8435
See also “MUXF6” and “MUXF6_L”
Inputs Outputs
S I0 I1 O LO
0 1 X 1 1
0 0 X 0 0
1 X 1 1 1
1 X 0 0 0
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF6_D: CLB MUX to tie two MUXF5's together with general and local outputs
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF6_D_inst : MUXF6_D
port map (
LO => LO, -- Ouptut of MUX to local routing
O => O, -- Output of MUX to general routing
I0 => I0, -- Input (tie to MUXF5 LO out)
I1 => I1, -- Input (tie to MUXF5 LO out)
S => S -- Input select to MUX
);
MUXF6_D
// MUXF6_D: CLB MUX to tie two MUXF5's together with general and local outputs
// For use with All FPGAs
// Xilinx HDL Libraries Guide Version 8.1i
MUXF6_D MUXF6_D_inst (
.LO(LO), // Ouptut of MUX to local routing
.O(O), // Output of MUX to general routing
.I0(I0), // Input (tie to MUXF5 LO out)
.I1(I1), // Input (tie to MUXF5 LO out)
.S(S) // Input select to MUX
);
MUXF6_L
MUXF6_L
Primitive: 2-to-1 Lookup Table Multiplexer with Local Output
MUXF6_L provides a multiplexer function in half of a Virtex-4 CLB (two slices) for
creating a function-of-6 lookup table or an 8-to-1 multiplexer in combination with the
associated four lookup tables and two MUXF5s. The local outputs (LO) from the two
I0 MUXF5s in the CLB are connected to the I0 and I1 inputs of the MUXF6. The S input is
LO
driven from any internal net. When Low, S selects I0. When High, S selects I1.
I1 The LO output connects to other inputs in the same CLB slice.
S See also “MUXF6” and “MUXF6_D”.
X8436
Inputs Output
S I0 I1 LO
0 1 X 1
0 0 X 0
1 X 1 1
1 X 0 0
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF6_L: CLB MUX to tie two MUXF5's together with local output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF6_L_inst : MUXF6_L
port map (
LO => LO, -- Output of MUX to local routing
I0 => I0, -- Input (tie to MUXF5 LO out)
I1 => I1, -- Input (tie to MUXF5 LO out)
S => S -- Input select to MUX
);
MUXF6_L
// MUXF6_L: CLB MUX to tie two MUXF5's together with local output
// For use with All FPGAs
// Xilinx HDL Libraries Guide Version 8.1i
MUXF6_L MUXF6_L_inst (
.LO(LO), // Output of MUX to local routing
.I0(I0), // Input (tie to MUXF5 LO out)
.I1(I1), // Input (tie to MUXF5 LO out)
.S(S) // Input select to MUX
);
MUXF7
MUXF7
Primitive: 2-to-1 Lookup Table Multiplexer with General Output
MUXF7 provides a multiplexer function in a full Virtex-4 CLB for creating a function-
of-7 lookup table or a 16-to-1 multiplexer in combination with the associated lookup
tables. Local outputs (LO) of MUXF6 are connected to the I0 and I1 inputs of the
I0
MUXF7. The S input is driven from any internal net. When Low, S selects I0. When
High, S selects I1.
O
I1 The variants, “MUXF7_D” and “MUXF7_L”, provide additional types of outputs that
S can be used by different timing models for more accurate pre-layout timing
X8431 estimation.
Inputs Outputs
S I0 I1 O
0 I0 X I0
1 X I1 I1
X 0 0 0
X 1 1 1
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF7: CLB MUX to tie two MUXF6's together with general output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF7_inst : MUXF7
port map (
O => O, -- Output of MUX to general routing
I0 => I0, -- Input (tie to MUXF6 LO out)
I1 => I1, -- Input (tie to MUXF6 LO out)
S => S -- Input select to MUX
);
MUXF7
// MUXF7: CLB MUX to tie two MUXF6's together with general output
// For use with Virtex-II/II-Pro and Spartan-3/3E
// Xilinx HDL Libraries Guide Version 8.1i
MUXF7 MUXF7_inst (
.O(O), // Output of MUX to general routing
.I0(I0), // Input (tie to MUXF6 LO out)
.I1(I1), // Input (tie to MUXF6 LO out)
.S(S) // Input select to MUX
);
MUXF7_D
MUXF7_D
Primitive: 2-to-1 Lookup Table Multiplexer with Dual Output
MUXF7_D provides a multiplexer function in one full Virtex-4 CLB for creating a
function-of-7 lookup table or a 16-to-1 multiplexer in combination with the associated
I0 lookup tables. Local outputs (LO) of MUXF6 are connected to the I0 and I1 inputs of
LO the MUXF7. The S input is driven from any internal net. When Low, S selects I0. When
O High, S selects I1.
I1
Outputs O and LO are functionally identical. The O output is a general interconnect.
S The LO output connects to other inputs in the same CLB slice.
X8432
See also “MUXF7” and “MUXF7_L”.
Inputs Outputs
S I0 I1 O LO
0 I0 X I0 I0
1 X I1 I1 I1
X 0 0 0 0
X 1 1 1 1
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF7_D: CLB MUX to tie two MUXF6's together with general and local outputs
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF7_D_inst : MUXF7_D
port map (
LO => LO, -- Ouptut of MUX to local routing
O => O, -- Output of MUX to general routing
I0 => I0, -- Input (tie to MUXF6 LO out)
I1 => I1, -- Input (tie to MUXF6 LO out)
S => S -- Input select to MUX
);
MUXF7_D
// MUXF7_D: CLB MUX to tie two MUXF6's together with general and local outputs
// For use with Virtex-II/II-Pro and Spartan-3/3E
// Xilinx HDL Libraries Guide Version 8.1i
MUXF7_D MUXF7_D_inst (
.LO(LO), // Ouptut of MUX to local routing
.O(O), // Output of MUX to general routing
.I0(I0), // Input (tie to MUXF6 LO out)
.I1(I1), // Input (tie to MUXF6 LO out)
.S(S) // Input select to MUX
);
MUXF7_L
MUXF7_L
Primitive: 2-to-1 Lookup Table Multiplexer with Local Output
MUXF7 provides a multiplexer function in a full Virtex-4 CLB for creating a function-
of-7 lookup table or a 16-to-1 multiplexer in combination with the associated lookup
tables. Local outputs (LO) of MUXF6 are connected to the I0 and I1 inputs of the
I0
LO MUXF7. The S input is driven from any internal net. When Low, S selects I0. When
High, S selects I1.
I1 The LO output connects to other inputs in the same CLB slice.
S See also “MUXF7” and “MUXF7_D”.
X8433
Inputs Output
S I0 I1 LO
0 I0 X I0
1 X I1 I1
X 0 0 0
X 1 1 1
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF7_L: CLB MUX to tie two MUXF6's together with local output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF7_L_inst : MUXF7_L
port map (
LO => LO, -- Output of MUX to local routing
I0 => I0, -- Input (tie to MUXF6 LO out)
I1 => I1, -- Input (tie to MUXF6 LO out)
S => S -- Input select to MUX
);
MUXF7_L
// MUXF7_L: CLB MUX to tie two MUXF6's together with local output
// For use with Virtex-II/II-Pro and Spartan-3/3E
// Xilinx HDL Libraries Guide Version 8.1i
MUXF7_L MUXF7_L_inst (
.LO(LO), // Output of MUX to local routing
.I0(I0), // Input (tie to MUXF6 LO out)
.I1(I1), // Input (tie to MUXF6 LO out)
.S(S) // Input select to MUX
);
MUXF8
MUXF8
Primitive: 2-to-1 Lookup Table Multiplexer with General Output
MUXF8 provides a multiplexer function in full Virtex-4 CLBs for creating a function-
of-8 lookup table or a 32-to-1 multiplexer in combination with the associated lookup
I0 tables, MUXF5s, MUXF6s, and MUXF7s. Local outputs (LO) of MUXF7 are connected
to the I0 and I1 inputs of the MUXF8. The (S) input is driven from any internal net.
O When Low, (S) selects I0. When High, (S) selects I1.
I1
The variants, “MUXF8_D”and “MUXF8_L”, provide additional types of outputs that
S can be used by different timing models for more accurate pre-layout timing
X8434 estimation
Inputs Outputs
S I0 I1 O
0 I0 X I0
1 X I1 I1
X 0 0 0
X 1 1 1
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF8: CLB MUX to tie two MUXF7's together with general output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF8_inst : MUXF8
port map (
O => O, -- Output of MUX to general routing
I0 => I0, -- Input (tie to MUXF7 LO out)
I1 => I1, -- Input (tie to MUXF7 LO out)
S => S -- Input select to MUX
);
MUXF8
// MUXF8: CLB MUX to tie two MUXF7's together with general output
// For use with Virtex-II/II-Pro and Spartan-3/3E
// Xilinx HDL Libraries Guide Version 8.1i
MUXF8 MUXF8_inst (
.O(O), // Output of MUX to general routing
.I0(I0), // Input (tie to MUXF7 LO out)
.I1(I1), // Input (tie to MUXF7 LO out)
.S(S) // Input select to MUX
);
MUXF8_D
MUXF8_D
Primitive: 2-to-1 Lookup Table Multiplexer with Dual Output
MUXF8_D provides a multiplexer function in two full Virtex-4 CLBs for creating a
function-of-8 lookup table or a 32-to-1 multiplexer in combination with the associated
four lookup tables and two MUXF8s. Local outputs (LO) of MUXF7 are connected to
I0 the I0 and I1 inputs of the MUXF8. The (S) input is driven from any internal net. When
Low, (S) selects I0. When High, (S) selects I1.
O
I1 Outputs O and LO are functionally identical. The O output is a general interconnect.
The LO output connects to other inputs in the same CLB slice.
S
X8434 See also “MUXF8” and “MUXF8_L”.
Inputs Outputs
S I0 I1 O LO
0 I0 X I0 I0
1 X I1 I1 I1
X 0 0 0 0
X 1 1 1 1
Usage
This design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF8_D: CLB MUX to tie two MUXF7's together with general and local outputs
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF8_D_inst : MUXF8_D
port map (
LO => LO, -- Ouptut of MUX to local routing
O => O, -- Output of MUX to general routing
I0 => I0, -- Input (tie to MUXF7 LO out)
I1 => I1, -- Input (tie to MUXF7 LO out)
S => S -- Input select to MUX
);
MUXF8_D
// MUXF8_D: CLB MUX to tie two MUXF7's together with general and local outputs
// For use with Virtex-II/II-Pro and Spartan-3/3E
// Xilinx HDL Libraries Guide Version 8.1i
MUXF8_D MUXF8_D_inst (
.LO(LO), // Ouptut of MUX to local routing
.O(O), // Output of MUX to general routing
.I0(I0), // Input (tie to MUXF7 LO out)
.I1(I1), // Input (tie to MUXF7 LO out)
.S(S) // Input select to MUX
);
MUXF8_L
MUXF8_L
Primitive: 2-to-1 Lookup Table Multiplexer with Local Output
MUXF8_L provides a multiplexer function in two full Virtex-4 CLBs for creating a
function-of-8 lookup table or a 32-to-1 multiplexer in combination with the associated
four lookup tables and two MUXF8s. Local outputs (LO) of MUXF7 are connected to
I0
LO the I0 and I1 inputs of the MUXF8. The S input is driven from any internal net. When
Low, S selects I0. When High, S selects I1.
I1 The LO output connects to other inputs in the same CLB slice.
S See also “MUXF8” and “MUXF8_D”.
X8433
Inputs Output
S I0 I1 LO
0 I0 X I0
1 X I1 I1
X 0 0 0
X 1 1 1
Usage
FThis design element can only be instantiated.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- MUXF8_L: CLB MUX to tie two MUXF7's together with local output
-- Xilinx HDL Libraries Guide Version 8.1i
MUXF8_L_inst : MUXF8_L
port map (
LO => LO, -- Output of MUX to local routing
I0 => I0, -- Input (tie to MUXF7 LO out)
I1 => I1, -- Input (tie to MUXF7 LO out)
S => S -- Input select to MUX
);
MUXF8_L
// MUXF8_L: CLB MUX to tie two MUXF7's together with local output
// For use with Virtex-II/II-Pro and Spartan-3/3E
// Xilinx HDL Libraries Guide Version 8.1i
MUXF8_L MUXF8_L_inst (
.LO(LO), // Output of MUX to local routing
.I0(I0), // Input (tie to MUXF7 LO out)
.I1(I1), // Input (tie to MUXF7 LO out)
.S(S) // Input select to MUX
);
OBUF
OBUF
Primitive: Single-ended Output Buffer
Output buffers are necessary for all output signals because they isolate the internal
circuit and provide drive current for signals leaving a chip. The OBUF is a constantly
OBUF enabled output buffer that is generally used for specifying a single-ended output
when a 3-state is not necessary for the output. The output (O) of an OBUF should be
I O connected directly to the top-level ouput port in the design.
Usage
X9445 OBUFs are optional for use in the schematic since they will automatically be inserted
into the design, if necessary. If you want to manually add this component, however,
the component should be placed in the top-level schematic connecting the output
directly to an output port marker.
OBUFs are available in bundles of 4, 8, or 16 to make it easier for you to incorporate
them into your design without having to apply multiples of them one at a time. (The
bundles are thus identified as OBUF4, OBUF8, and OBUF16.)
Available Attributes
Attribute Type Allowed Values Default Description
DRIVE INTEGER 2, 4, 6, 8, 12, 16, 24 12 Selects output drive strength (mA) for
the SelectIO buffers that use the
LVTTL, LVCMOS12, LVCMOS15,
LVCMOS18, LVCMOS25, or
LVCMOS33 interface I/O standard.
IOSTANDARD STRING "DEFAULT” "DEFAULT” Use to assign an I/O standard to an
I/O primitive.
SLEW STRING "SLOW" or "FAST” "SLOW” Sets the output rise and fall time.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
OBUF_inst : OBUF
generic map (
DRIVE => 12,
OBUF
OBUFDS
OBUFDS
Primitive: Differential Signaling Output Buffer with Selectable I/O
Interface
OBUFDS is a single output buffer that supports low-voltage, differential signaling (1.8
CMOS). OBUFDS isolates the internal circuit and provides drive current for signals
O leaving the chip. Its output is represented as two distinct ports (O and OB), one
I
OB deemed the "master" and the other the "slave." The master and the slave are opposite
phases of the same logical signal (for example, MYNET and MYNETB).
OBUFDS Inputs Outputs
X9259 I O OB
0 0 1
1 1 0
Usage
This design element should be instantiated rather than inferred.
Available Attributes
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
OBUFDS
OBUFDS_inst : OBUFDS
generic map (
IOSTANDARD => "DEFAULT")
port map (
O => O, -- Diff_p output (connect directly to top-level port)
OB => OB, -- Diff_n output (connect directly to top-level port)
I => I -- Buffer input
);
OBUFDS #(
.IOSTANDARD("DEFAULT") // Specify the output I/O standard
) OBUFDS_inst (
.O(O), // Diff_p output (connect directly to top-level port)
.OB(OB), // Diff_n output (connect directly to top-level port)
.I(I) // Buffer input
);
OBUFT
OBUFT
Primitive: 3-State Output Buffer with Active-Low Output Enable
Output buffers are necessary for all output signals because they isolate the internal
circuit and provide drive current for signals leaving a chip. The OBUFT is a 3-state
OBUFT output buffer with input I, output O, and active-Low output enables (T). When T is
Low, data on the inputs of the buffers is transferred to the corresponding outputs.
T When T is High, the output is high impedance (off or Z state).
I O An OBUFT output should be connected directly to the top-level output or inout port.
OBUFTs are generally used when a single-ended output is needed with a tri-state
capability, such as the case when building bi-directional I/O.
X9449
Inputs Outputs
T I O
1 X Z
0 1 1
0 0 0
Usage
OBUFTs should be placed in the top-level schematic connecting the output directly to
an output or bi-directional port marker.
OBUFTs are available in bundles of 4, 8, or 16 to make it easier for you to incorporate
them into your design without having to apply multiples of them one at a time. (The
bundles are thus identified as OBUFT4, OBUFT8, and OBUFT16.) The bundles are
discussed in the schematics version of the Virtex-4 Libraries Guide.
Available Attributes
OBUFT
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
OBUFT_inst : OBUFT
generic map (
DRIVE => 12,
IOSTANDARD => "DEFAULT",
SLEW => "SLOW")
port map (
O => O, -- Buffer output (connect directly to top-level port)
I => I, -- Buffer input
T => T -- 3-state enable input
);
OBUFT #(
.DRIVE(12), // Specify the output drive strength
.IOSTANDARD("DEFAULT"), // Specify the output I/O standard
.SLEW("SLOW") // Specify the output slew rate
) OBUFT_inst (
.O(O), // Buffer output (connect directly to top-level port)
.I(I), // Buffer input
.T(T) // 3-state enable input
);
OBUFTDS
OBUFTDS
Primitive: 3-State Differential Signaling Output Buffer with Active Low
Output Enable and Selectable I/O Interface
OBUFTDS is a single 3-state, differential signaling output buffer with active Low
enable and a SelectIO interface.
T
When T is Low, data on the input of the buffer is transferred to the output (O) and
O inverted output (OB). When T is High, both outputs are high impedance (off or Z
I
OB state).
Usage
These design elements are instantiated rather than inferred.
Available Attributes
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
OBUFTDS
-- <-----Cut code below this line and paste into the architecture body---->
OBUFTDS_inst : OBUFTDS
generic map (
IOSTANDARD => "DEFAULT")
port map (
O => O, -- Diff_p output (connect directly to top-level port)
OB => OB, -- Diff_n output (connect directly to top-level port)
I => I, -- Buffer input
T => T -- 3-state enable input
);
OBUFTDS #(
.IOSTANDARD("DEFAULT") // Specify the output I/O standard
) OBUFTDS_inst (
.O(O), // Diff_p output (connect directly to top-level port)
.OB(OB), // Diff_n output (connect directly to top-level port)
.I(I), // Buffer input
.T(T) // 3-state enable input
);
ODDR
ODDR
Primitive: A Dedicated Output Register to Transmit Dual Data Rate
(DDR) Signals From Virtex-4 FPGAs
DI
ODDR
Q
ODDR primitives are dedicated output registers used in transmitting dual data rate
D2 (DDR) signals from Virtex-4 FPGAs. The ODDR primitive’s interface with the FPGA
CE
fabric is not limited to opposite edges. ODDR is available with modes that allow data
C
S
to be presented from the FPGA fabric at the same clock edge. This feature allows
R designers to avoid additional timing complexities and CLB usage. In addition, ODDR
X10116
will work in conjunction with SelectIO features of Virtex-4 architecture.
ODDR Ports (Detailed Description)
Q – Data Output (DDR)
This pin connects to the IOB pad.
C – Clock Input Port
The C pin represents the clock input pin.
CE – Clock Enable Port
When asserted LOW, this port disables the output clock at port O.
D1 – D2 – Data Input
This pin is where the DDR data is presented into the ODDR module.
R - Reset
Depends on how SRTYPE is set.
ODDR Modes
The following section describes the functionality of various modes of ODDR. These
modes are set by the DDR_CLK_EDGE attribute.
OPPOSITE_EDGE
In the OPPOSITE_EDGE mode, data transmit interface uses the classic DDR
methodology. Given a data and clock at pin D1-2 and C respectively, D1 will be
sampled at every positive edge of clock C, and D2 will be sampled at every negative
edge of clock C. Q changes every clock edge.
SAME_EDGE
In the SAME_EDGE mode, data is still transmitted by opposite edges of clock C.
However, both register are clocked with positive clock edge C and an extra register
has been placed in front of the D2 input data register. The extra register is clocked
with negative clock edge of clock signal C. Using this feature, DDR data can now be
presented into the ODDR at the same clock edge.
Port List and Definitions
ODDR
Available Attributes
Usage
This design element is available for schematics and instantiation only.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- ODDR: Output Double Data Rate Output Register with Set, Reset
-- and Clock Enable. Virtex-4
-- Xilinx HDL Libraries Guide Version 8.1i
ODDR_inst : ODDR
generic map(
DDR_CLK_EDGE => "OPPOSITE_EDGE", -- "OPPOSITE_EDGE" or "SAME_EDGE"
INIT => '0', -- Initial value for Q port ('1' or '0')
SRTYPE => "SYNC") -- Reset Type ("ASYNC" or "SYNC")
port map (
Q => Q, -- 1-bit DDR output
C => C, -- 1-bit clock input
CE => CE, -- 1-bit clock enable input
D1 => D1, -- 1-bit data input (positive edge)
D2 => D2, -- 1-bit data input (negative edge)
R => R, -- 1-bit reset input
S => S -- 1-bit set input
);
ODDR
// ODDR: Output Double Data Rate Output Register with Set, Reset
// and Clock Enable. Virtex-4
// Xilinx HDL Libraries Guide Version 8.1i
ODDR #(
.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE"
.INIT(1'b0), // Initial value of Q: 1'b0 or 1'b1
.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
) ODDR_inst (
.Q(Q), // 1-bit DDR output
.C(C), // 1-bit clock input
.CE(CE), // 1-bit clock enable input
.D1(D1), // 1-bit data input (positive edge)
.D2(D2), // 1-bit data input (negative edge)
.R(R), // 1-bit reset
.S(S) // 1-bit set
);
// End of ODDR_inst instantiation
ODDR
OSERDES
OSERDES
Primitive: Dedicated IOB output serializer
OSERDES
The Virtex-4 architecture provides a way for the user to easily implement source
DI OQ
D4
FPGAs, OSERDES is an output architecture that contains a parallel to serial converter
D5 resources for both data and tristate. This module helps user by saving logic resources
D6
T1
TQ
that is otherwise implemented in the FPGA fabric. Furthermore, OSERDES also
T2
T3
avoids additional timing complexities that may be encountered when designing such
T4 circuitry in the FPGA fabric. OSERDES module is present in all Virtex-4 family of
CLK
OCE SHIFTOUT1
FPGA. In addition, OSERDES contains multiple clock inputs to accommodate various
TCE applications and will work in conjunction with the SelectIO features of Virtex-4
SR
REV family.
CLKDIV
SHIFTIN1
SHIFTOUT2 OSERDES Ports (Detailed Description)
SHIFTIN2
X10117
OQ – Data Path Output
This port is the data output of the OSERDES module. This port connects the output of
the data serial to parallel converter to the data input of the IOB pad. In addition, this
output port can also be configured to bypass all the submodules within OSERDES
module.
SHIFTOUT 1-2 – Data input expansion (slave)
Carry out for data input expansion. Connect to SHIFTIN1/2 of master.
TQ – 3-state Path Output
This port is the 3-state output of the OSERDES module. This port connects the output
of the 3-state serial to parallel converter to the control input of the IOB pad.
CLK – High Speed Clock Input
This clock input is used to drive the parallel-to-serial converters. The possible source
for the CLK port is from one of the following clock resources:
1. Eight global clock lines in a clock region
2. Two regional clock lines
3. Six clock capable I/Os (within adjacent clock region)
4. Fabric (through bypass)
CLKDIV – Divided High Speed Clock Input
This clock input is used to drive the parallel-to-serial converters. This clock has to
have slower frequency than the clock connected to the CLK port. The possible source
for the CLKDIV port is from one of the following clock resources:
1. Eight global clock lines in a clock region
2. Two regional clock lines
D1-D6 – Parallel Data Inputs
Ports D1 to D6 are the location in which all incoming parallel data enters the
OSERDES module. This port is connected to the FPGA fabric, and can be configured
from 2 to 6 bits. In the extended width mode, this port can be expanded up to 10 bits.
OCE – Output Data Clock Enable
OSERDES
This port is used to enables the output of the data serial to parallel converter when
asserted HIGH.
REV - Reverse SR pin
When SR is used, a second input, REV forces the storage element into the opposite
state. The reset condition predominates over the set condition. See “Set/Reset Input –
SR” for the truth table that describes the REV operation with respect to SR.
SR - Set/Reset Input
The set/reset pin, SR forces the storage element into the state specified by the SRVAL
attribute. SRVAL = “1” forces a logic 1. SRVAL =”0” forces a logic "0." When SR is
used, a second input (REV) forces the storage element into the opposite state. The
reset condition predominates over the set condition. The following truth tables
describe the operation of SR in conjunction with REV.
The Truth Table when SRVAL = ”0” (Default Condition)
SR REV Function
0 0 NOP
0 1 Set
1 0 Reset
1 1 Reset
SR REV Function
0 0 NOP
0 1 Reset
1 0 Set
1 1 Reset
Usage
Parallel-to-Serial Converter (Data)
The data parallel to serial converter in the OSERDES module takes in 2 to 6 bit of
parallel data and convert them into serial data. Data input widths larger than 6 (7,8,
and 10) is achievable by cascading two OSERDES modules for data width expansion.
In order to do this, one OSERDES must be set into a MASTER mode, while another is
set into SLAVE mode. The user will also need to connect the SHIFTOUT of "slave" and
OSERDES
SHIFTIN of "master" ports together. The "slave" will only use D3 to D6 ports as its
input. The parallel to serial converter is available for both SDR and DDR modes.
This module is designed such that the data input at D1 port is the first output bit. This
module is controlled by CLK and CLKDIV clocks. The following table describes the
relationship between CLK and CLKDIV for both SDR and DDR mode.
Output of this block is connected to the data input of an IOB pad of the FPGA. This
IOB pad can be configured to a desired standard using SelectIO.
Parallel-to-Serial Converter (3-state)
The 3-state parallel-to-serial converter in the OSERDES module takes in up to 4 bits of
parallel 3-state signals and converts them into serial3-state signals. Unlike data
parallel-to-serial converters, the 3-state parallel-to-serial converters are not extendable
to more than 4-bit 3-state signals. This module is primarily controlled by CLK and
CLKDIV clocks. In order to use this module, the following attributes must be
declared: DATA_RATE_TQ and TRISTATE_WIDTH. In certain cases, the user may
also need to declare DATA_RATE_OQ and DATA_WIDTH. The following table lists
the attributes needed for the desired functionality.
Note: If 4-bit DDR is chosen, then the constraints DATA_RATE_OQ and DATA_WIDTH must
be {SDR,2} or {DDR,4} for proper operation.
Output of this block is connected to the tristate input of an IOB pad of the FPGA. This
IOB pad can be configured to a desired standard using SelectIO.
Width Expansion
It is possible to use the OSERDES modules to transmit parallel data widths larger than
six. However, the tristate output is not expandable. In order to use this feature, two
OSERDES modules need to be instantiated. Both the OSERDES must be an adjacent
master and slave pair. The attribute MODE must be set to either "MASTER" or
"SLAVE" in order to differentiate the modes of the ISERDES pair. In addition, the user
must connect the SHIFTIN ports of the MASTER to the SHIFTOUT ports of the
SLAVE. This feature supports data widths of 7, 8, and 10 for SDR and DDR mode. The
table below lists the data width availability for SDR and DDR mode.
OSERDES
Mode Widths
SDR Data Widths 2,3,4,5,6,7,8
DDR Data Widths 4,6,8,10
Available Attributes
DATA_RATE_OQ STRING "SDR" or "DDR” "DDR” Defines whether the data changes at
every clock edge or every positive clock
edge with respect to CLK.
DATA_RATE_TQ STRING "BUF", "SDR", "DDR” Defines whether the 3-state changes at
"DDR” every clock edge, every positive clock
edge, or buffer configuration with
respect to CLK.
DATA_WIDTH STRING If 4 Defines the parallel to serial data
DATA_RATE_O converter width. This value also
Q = "DDR", depends on the DATA_RATE_OQ value
value is limited of the OSERDES
to 4,6,8, or 10. If
DATA_RATE_O
Q = "SDR", value
is limited to
2,3,4,5,6,7, or 8.
INIT_OQ 1-Bit Binary 1-Bit Binary 1'b0 Defines the initial value of OQ output
INIT_TQ 1-Bit Binary 1-Bit Binary 1'b0 Defines the initial value of TQ output
SERDES_MODE STRING "MASTER" or "MASTER” Defines whether the OSERDES module
"SLAVE” is a master or slave when width
expansion is used
SRVAL_OQ 1-Bit Binary 1-Bit Binary 1'b0 Defines the value of OQ output when
reset is invoked
OSERDES
SRVAL_TQ 1-Bit Binary 1-Bit Binary 1'b0 Defines the value of TQ output when
reset is invoked
TRISTATE_WIDTH STRING If 4 Specify parallel to serial converter
DATA_RATE_T width. When DATA_RATE_TQ = DDR:
Q = "DDR", 2 or 4. When DATA_RATE_TQ = SDR or
value is limited BUF: 1.
to 2 and 4. If
DATA_RATE_T
Q = "SDR" or
"BUF", value is
limited 1.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
OSERDES_inst : OSERDES
generic map (
DATA_RATE_OQ => "DDR", -- Specify data rate to "DDR" or "SDR"
DATA_RATE_TQ => "DDR", -- Specify data rate to "DDR", "SDR", or "BUF"
DATA_WIDTH => 4, -- Specify data width - For DDR: 4,6,8, or 10
-- For SDR or BUF: 2,3,4,5,6,7, or 8
INIT_OQ => '0', -- INIT for Q1 register - '1' or '0'
INIT_TQ => '0', -- INIT for Q2 register - '1' or '0'
SERDES_MODE => "MASTER", --Set SERDES mode to "MASTER" or "SLAVE"
SRVAL_OQ => '0', -- Define Q1 output value upon SR assertion - '1' or '0'
SRVAL_TQ => '0', -- Define Q1 output value upon SR assertion - '1' or '0'
TRISTATE_WIDTH => 4) -- Specify parallel to serial converter width
-- When DATA_RATE_TQ = DDR: 2 or 4
-- When DATA_RATE_TQ = SDR or BUF: 1 "
port map (
OQ => OQ, -- 1-bit output
SHIFTOUT1 => SHIFTOUT1, -- 1-bit output
SHIFTOUT2 => SHIFTOUT2, -- 1-bit output
TQ => TQ, -- 1-bit onput
CLK => CLK, -- 1-bit input
CLKDIV => CLKDIV, -- 1-bit input
D1 => D1, -- 1-bit input
D2 => D2, -- 1-bit input
D3 => D3, -- 1-bit input
D4 => D4, -- 1-bit input
D5 => D5, -- 1-bit input
D6 => D6, -- 1-bit input
OCE => OCE, -- 1-bit input
REV => REV, -- 1-bit input
SHIFTIN1 => SHIFTIN1, -- 1-bit input
SHIFTIN2 => SHIFTIN2, -- 1-bit input
SR => SR, -- 1-bit input
OSERDES
PMCD
PMCD
Primitive: Phase-Matched Clock Divider
PMCD
The Phase-Matched Clock Dividers (PMCDs) are one of the clock resources available
CLKA CLKA1
CLKB CLKA1D2
in the Virtex-4 architecture. PMCDs provide the following clock management
CLKC CLKA1D4 features:
CLKD CLKA1D8
CLKD1
Port Descriptions
PMCD Port Description
PMCD
Available Attributes
Attribute Type Allowed Values Default Description
EN_REL BOOLEAN FALSE, TRUE 0 This attribute allows for CLKA1D2,
CLKA1D4, and CLKA1D8 outputs to
be released at REL signal assertion.
Note: REL is synchronous to CLKA
input.
RST_DEASSERT_CLK STRING "CLKA", "CLKB", "CLKA” This attribute allows the deassertion
"CLKC", or of the RST signal to be synchronous
"CLKD” to a selected PMCD input clock.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
PMCD_inst : PMCD
generic map (
EN_REL => FALSE, -- TRUE/FALSE to allow synchronous deassertion of RST
RST_DEASSERT_CLK => "CLKA") -- Reset syncronization to which clock: CLKA, CLKB, CLKC or CLKD
port map (
CLKA1 => CLKA1, -- Output CLKA divided by 1
CLKA1D2 => CLKA1D2, -- Output CLKA divided by 2
CLKA1D4 => CLKA1D4, -- Output CLKA divided by 4
CLKA1D8 => CLKA1D8, -- Output CLKA divided by 8
CLKB1 => CLKB1, -- Output phase matched CLKB
CLKC1 => CLKC1, -- Output phase matched CLKC
CLKD1 => CLKD1, -- Output phase matched CLKD
CLKA => CLKA, -- Input CLKA
CLKB => CLKB, -- Input CLKB
PMCD
PMCD #(
.EN_REL("FALSE"), // TRUE/FALSE to allow synchronous deassertion of RST
.RST_DEASSERT_CLK("CLKA") // Reset syncronization to which clock: CLKA, CLKB, CLKC or CLKD
) PMCD_inst (
.CLKA1(CLKA1), // Output CLKA divided by 1
.CLKA1D2(CLKA1D2), // Output CLKA divided by 2
.CLKA1D4(CLKA1D4), // Output CLKA divided by 4
.CLKA1D8(CLKA1D8), // Output CLKA divided by 8
.CLKB1(CLKB1), // Output phase matched CLKB
.CLKC1(CLKC1), // Output phase matched CLKC
.CLKD1(CLKD1), // Output phase matched CLKD
.CLKA(CLKA), // Input CLKA
.CLKB(CLKB), // Input CLKB
.CLKC(CLKC), // Input CLKC
.CLKD(CLKD), // Input CLKD
.REL(REL), // PCMD release input
.RST(RST) // Active high reset input
);
PMCD
PPC405_ADV
PPC405_ADV
PPC405_ADV
PPC405_ADV
BRAMDSOCLK APUFCMDECODED
BRAMDSOCMRDDBUS(0:31) APUFCMDECUDI(0:2)
BRAMISOCMCLK APUFCMDECUDIVALID
BRAMISOCMDCRRDDBUS(0:31) APUFCMENDIAN
BRAMISOCMRDDBUS(0:63) APUFCMFLUSH
CPMC405CLOCK APUFCMINSTRUCTION(0:31)
CPMC405CORECLKINACTIVE APUFCMINSTRVALID
CPMC405CPUCLKEN APUFCMLOADBYTEEN(0:3)
CPMC405JTAGCLKEN APUFCMLOADDATA(0:31)
CPMC405TIMERCLKEN APUFCMLOADDVALID
CPMC405TIMERTICK APUFCMOPERANDVALID
CPMDCRCLK APUFCMRADATA(0:31)
CPMFCMCLK APUFCMRBDATA(0:31)
DBGC405DEBUGHALT APUFCMWRITEBACKOK
DBGC405EXTBUSHOLDACK APUFCMXERCA
DBGC405UNCONDDEBUGEVENT C405CPMCORESLEEPREQ
DSARCVALUE(0:7) C405DBGLOADDATAQNAPUDBUS
DSCNTLVALUE(0:7) C405DBGMSRWE
DSOCMRWCOMPLETE C405DBGSTOPACK
EICC405CRITINPUTIRQ C405DBGWBCOMPLETE
EICC405EXTINPUTIRQ C405DBGWBFULL
EXTDCRACK C405DBGWBIAR(0:29)
EXTDCRDBUSIN(0:31) C405JTGCAPTUREDR
FCMAPUCR(0:3) C405JTGEXTEST
FCMAPUDCDCREN C405JTGPGMOUT
FCMAPUDCDFORCEALIGN C405JTGSHIFTDR
FCMAPUDCDFORCEBESTEERING C405JTGTDO
FCMAPUDCDFPUOP C405JTGTDOEN
C405JTGUPDATEDR
FCMAPUDCDLDSTBYTE C405PLBDCUABORT
FCMAPUDCDLDSTDW C405PLBDCUABUS(0:31)
FCMAPUDCDLDSTHW C405PLBDCUBE(0:7)
FCMAPUDCDLDSTQW C405PLBDCUCACHEABLE
FCMAPUDCDLDSTWD C405PLBDCUGUARDED
FCMAPUDCDLOAD C405PLBDCUPRIORITY(0:1)
FCMAPUDCDPRIVOP C405PLBDCUREQUEST
FCMAPUDCDRAEN C405PLBDCURNW
FCMAPUDCDRBEN C405PLBDCUSIZE2
FCMAPUDCDSTORE C405PLBDCUU0ATTR
FCMAPUDCDTRAPBE C405PLBDCUWRDBUS(0:63)
FCMAPUDCDTRAPLE C405PLBDCUWRITETHRU
FCMAPUDCDUPDATE C405PLBICUABORT
FCMAPUDCDXERCAEN C405PLBICUABUS(0:29)
FCMAPUDCDXEROVEN C405PLBICUCACHEABLE
FCMAPUDECODEBUSY C405PLBICUPRIORITY(0:1)
FCMAPUDONE C405PLBICUREQUEST
FCMAPUEXCEPTION C405PLBICUSIZE(2:3)
FCMAPUEXEBLOCKINGMCO C405PLBICUU0ATTR
FCMAPUEXECRFIELD(0:2) C405RSTCHIPRESETREQ
FCMAPUEXENONBLOCKINGMCO C405RSTCORERESETREQ
FCMAPUINSTRACK C405RSTSYSRESETREQ
FCMAPULOADWAIT C405TRCCYCLE
FCMAPURESULT(0:31) C405TRCEVENEXECUTIONSTATUS(0:1)
FCMAPURESULTVALID C405TRCODDEXECUTIONSTATUS(0:1)
FCMAPUSLEEPNOTREADY C405TRCTRACESTATUS(0:3)
FCMAPUXERCA C405TRCTRIGGEREVENTOUT
FCMAPUXEROV C405TRCTRIGGEREVENTTYPE(0:10)
ISARCVALUE(0:7) C405XXXMACHINECHECK
ISCNTLVALUE(0:7) DCREMACENABLER
JTGC405BNDSCANTDO DSOCMBRAMABUS(8:29)
JTGC405TCK DSOCMBRAMBYTEWRITE(0:3)
JTGC405TDI DSOCMBRAMEN
JTGC405TMS DSOCMBRAMWRDBUS(0:31)
JTGC405TRSTNEG DSOCMBUSY
MCBCPUCLKEN DSOCMRDADDRVALID
MCBJTAGEN DSOCMWRADDRVALID
MCBTIMEREN EXTDCRABUS(0:9)
MCPPCRST EXTDCRDBUSOUT(0:31)
PLBC405DCUADDRACK EXTDCRREAD
PLBC405DCUBUSY EXTDCRWRITE
PLBC405DCUERR ISOCMBRAMEN
PLBC405DCURDDACK ISOCMBRAMEVENWRITEEN
PLBC405DCURDDBUS(0:63) ISOCMBRAMODDWRITEEN
PLBC405DCURDWDADDR(1:3) ISOCMBRAMRDABUS(8:28)
PLBC405DCUSSIZE1 ISOCMBRAMWRABUS(8:28)
PLBC405DCUWRDACK ISOCMBRAMWRDBUS(0:31)
PLBC405ICUADDRACK ISOCMDCRBRAMEVENEN
PLBC405ICUBUSY ISOCMDCRBRAMODDEN
PLBC405ICUERR ISOCMDCRBRAMRDSELECT
PLBC405ICURDDACK DCREMACWRITE
PLBC405ICURDDBUS(0:63) DCREMACREAD
PLBC405ICURDWDADDR(1:3) DCREMACDBUS(0:31)
PLBC405ICUSSIZE1 DCREMACABUS(8:9)
PLBCLK DCREMACCLK
RSTC405RESETCHIP
RSTC405RESETCORE
RSTC405RESETSYS
TIEAPUCONTROL(0:15)
TIEAPUUDI1(0:23)
TIEAPUUDI2(0:23)
TIEAPUUDI3(0:23)
TIEAPUUDI4(0:23)
TIEAPUUDI5(0:23)
TIEAPUUDI6(0:23)
TIEAPUUDI7(0:23)
TIEAPUUDI8(0:23)
TIEC405CLOCKENABLE
TIEC405CLOCKSELECT80
TIEC405CLOCKSELECTS1
TIEC405DCUMARGIN
TIEC405DETERMINISTICMULT
TIEC405DISOPERANDFWD
TIEC405DUTYENABLE
TIEC405ICUMARGIN
TIEC405MMUEN
TIEDCRADDR(0:5)
TIEPVRBIT10
TIEPVRBIT11
TIEPVRBIT28
TIEPVRBIT29
TIEPVRBIT30
TIEPVRBIT31
TIEPVRBIT8
TIEPVRBIT9
TRCC405TRACEDISABLE
TRCC405TRIGGEREVENTIN
EMACDCRDBUS(0:31)
EMACDCRACK
X10191
PPC405_ADV Schematic
PPC405_ADV
PPC405_ADV
Inputs Outputs
FCMAPUDCDRBEN C405PLBDCURNW
FCMAPUDCDSTORE C405PLBDCUSIZE2
FCMAPUDCDTRAPBE C405PLBDCUU0ATTR
FCMAPUDCDTRAPLE C405PLBDCUWRDBUS [0:63]
FCMAPUDCDUPDATE C405PLBDCUWRITETHRU
FCMAPUDCDXERCAEN C405PLBICUABORT
FCMAPUDCDXEROVEN C405PLBICUABUS [0:29]
FCMAPUDECODEBUSY C405PLBICUCACHEABLE
FCMAPUDONE C405PLBICUPRIORITY [0:1]
FCMAPUEXCEPTION C405PLBICUREQUEST
FCMAPUEXEBLOCKINGMCO C405PLBICUSIZE [2:3]
FCMAPUEXECRFIELD [0:2] C405PLBICUU0ATTR
FCMAPUEXENONBLOCKINGMCO C405RSTCHIPRESETREQ
FCMAPUINSTRACK C405RSTCORERESETREQ
FCMAPULOADWAIT C405RSTSYSRESETREQ
FCMAPURESULT [0:31] C405TRCCYCLE
FCMAPURESULTVALID C405TRCEVENEXECUTIONSTATUS [0:1]
FCMAPUSLEEPNOTREADY C405TRCODDEXECUTIONSTATUS [0:1]
FCMAPUXERCA C405TRCTRACESTATUS [0:3]
FCMAPUXEROV C405TRCTRIGGEREVENTOUT
ISARCVALUE [0:7] C405TRCTRIGGEREVENTTYPE [0:10]
ISCNTLVALUE [0:7] C405XXXMACHINECHECK
JTGC405BNDSCANTDO DCREMACABUS [8:9]
JTGC405TCK DCREMACCLK
JTGC405TDI DCREMACDBUS [0:31]
JTGC405TMS DCREMACENABLER
JTGC405TRSTNEG DCREMACREAD
MCBCPUCLKEN DCREMACWRITE
MCBJTAGEN DSOCMBRAMABUS [8:29]
MCBTIMEREN DSOCMBRAMBYTEWRITE [0:3]
MCPPCRST DSOCMBRAMEN
PLBC405DCUADDRACK DSOCMBRAMWRDBUS [0:31]
PLBC405DCUBUSY DSOCMBUSY
PLBC405DCUERR DSOCMRDADDRVALID
PLBC405DCURDDACK DSOCMWRADDRVALID
PLBC405DCURDDBUS [0:63] EXTDCRABUS [0:9]
PLBC405DCURDWDADDR [1:3] EXTDCRDBUSOUT [0:31]
PLBC405DCUSSIZE1 EXTDCRREAD
PLBC405DCUWRDACK EXTDCRWRITE
PLBC405ICUADDRACK ISOCMBRAMEN
PLBC405ICUBUSY ISOCMBRAMEVENWRITEEN
PPC405_ADV
Inputs Outputs
PLBC405ICUERR ISOCMBRAMODDWRITEEN
PLBC405ICURDDACK ISOCMBRAMRDABUS [8:28]
PLBC405ICURDDBUS [0:63] ISOCMBRAMWRABUS [8:28]
PLBC405ICURDWDADDR [1:3] ISOCMBRAMWRDBUS [0:31]
PLBC405ICUSSIZE1 ISOCMDCRBRAMEVENEN
PLBCLK ISOCMDCRBRAMODDEN
RSTC405RESETCHIP ISOCMDCRBRAMRDSELECT
RSTC405RESETCORE
RSTC405RESETSYS
TIEAPUCONTROL [0:15]
TIEAPUUDI1 [0:23]
TIEAPUUDI2 [0:23]
TIEAPUUDI3 [0:23]
TIEAPUUDI4 [0:23]
TIEAPUUDI5 [0:23]
TIEAPUUDI6 [0:23]
TIEAPUUDI7 [0:23]
TIEAPUUDI8 [0:23]
TIEC405DETERMINISTICMULT
TIEC405DISOPERANDFWD
TIEC405MMUEN
TIEDCRADDR [0:5]
TIEPVRBIT10
TIEPVRBIT11
TIEPVRBIT28
TIEPVRBIT29
TIEPVRBIT30
TIEPVRBIT31
TIEPVRBIT8
TIEPVRBIT9
TRCC405TRACEDISABLE
TRCC405TRIGGEREVENTIN
Usage
Refer to the EDK software for information regarding the use of this component.
VHDL/Verilog Instantiation
Use the Embedded Development Kit (EDK) in order to generate and instantiate these
components.
PPC405_ADV
PULLDOWN
PULLDOWN
Primitive: Resistor to GND for Input Pads
PULLDOWN resistor elements are connected to input, output, or bidirectional pads
to guarantee a logic Low level for nodes that might float.
Usage
For HDL, the PULLDOWN design element is instantiated rather than inferred.
X3860
-- <-----Cut code below this line and paste into the architecture body---->
PULLDOWN
PULLUP
PULLUP
Primitive: Resistor to VCC for Input PADs, Open-Drain, and 3-State
Outputs
The pull-up elements establish a High logic level for open-drain elements and macros
(DECODE, WAND, WORAND) or 3-state nodes (TBUF) when all the drivers are set to
off.
The buffer outputs are connected together as a wired-AND to form the output (O).
When all the inputs are High, the output is off. To establish an output High level, a
PULLUP resistor is tied to output (O). One PULLUP resistor uses the least power, two
pull-up resistors achieve the fastest Low-to-High speed.
X3861 To indicate two PULLUP resistors, append a DOUBLE parameter to the pull-up
symbol attached to the output (O) node.
Usage
This design element is instantiated rather than inferred.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
PULLUP_inst : PULLUP
port map (
O => O -- Pullup output (connect directly to top-level port)
);
PULLUP
PULLUP PULLUP_inst (
.O(O), // Pullup output (connect directly to top-level port)
);
RAM16X1D
RAM16X1D
Primitive: 16-Deep by 1-Wide Static Dual Port Synchronous RAM
RAM16X1D is a 16-word by 1-bit static dual port random access memory with
synchronous write capability. The device has two separate address ports: the read
WE RAM16X1D SPO
address (DPRA3 – DPRA0) and the write address (A3 – A0). These two address ports
D are completely asynchronous. The read address controls the location of the data
WCLK DPO driven out of the output pin (DPO), and the write address controls the destination of a
A0
A1
valid write transaction.
A2
A3
When the write enable (WE) is Low, transitions on the write clock (WCLK) are
DPRA0 ignored and data stored in the RAM is not affected. When WE is High, any positive
DPRA1 transition on WCLK loads the data on the data input (D) into the word selected by the
DPRA2
DPRA3
4-bit write address. For predictable performance, write address and data inputs must
be stable before a Low-to-High WCLK transition. This RAM block assumes an active-
X4950 High WCLK. WCLK can be active-High or active-Low. Any inverter placed on the
WCLK input net is absorbed into the block.
Mode selection is shown in the following truth table.
Inputs Outputs
The SPO output reflects the data in the memory cell addressed by A3 – A0. The DPO
output reflects the data in the memory cell addressed by DPRA3 – DPRA0.
Note: The write process is not affected by the address on the read address port.
Usage
This design element can be inferred or instantiated. The instantiation code is shown
below. For information on how to infer RAM, see the XST User Guide.
RAM16X1D
Available Attributes.
Attribute Type Allowed Values Default Description
INIT 64-Bit Hexadecimal 64-Bit Hexadecimal 16'h0000000000 Initializes ROMs, RAMs,
000000 registers, and look-up tables.
-- <-----Cut code below this line and paste into the architecture body---->
RAM16X1D_inst : RAM16X1D
generic map (
INIT => X"0000")
port map (
DPO => DPO, -- Port A 1-bit data output
SPO => SPO, -- Port B 1-bit data output
A0 => A0, -- Port A address[0] input bit
A1 => A1, -- Port A address[1] input bit
A2 => A2, -- Port A address[2] input bit
A3 => A3, -- Port A address[3] input bit
D => D, -- Port A 1-bit data input
DPRA0 => DPRA0, -- Port B address[0] input bit
DPRA1 => DPRA1, -- Port B address[1] input bit
DPRA2 => DPRA2, -- Port B address[2] input bit
DPRA3 => DPRA3, -- Port B address[3] input bit
WCLK => WCLK, -- Port A write clock input
WE => WE -- Port A write enable input
);
RAM16X1D #(
.INIT(16'h0000) // Initial contents of RAM
) RAM16X1D_inst (
RAM16X1D
RAM16X1D
RAM16X1S
RAM16X1S
Primitive: 16-Deep by 1-Wide Static Synchronous RAM
RAM16X1S is a 16-word by 1-bit static random access memory with synchronous
write capability. When the write enable (WE) is Low, transitions on the write clock
WE RAM16X1S O
(WCLK) are ignored and data stored in the RAM is not affected. When WE is High,
D
any positive transition on WCLK loads the data on the data input (D) into the word
WCLK selected by the 4-bit address (A3 – A0). For predictable performance, address and data
A0 inputs must be stable before a Low-to-High WCLK transition. This RAM block
A1 assumes an active-High WCLK. However, WCLK can be active-High or active-Low.
A2 Any inverter placed on the WCLK input net is absorbed into the block.
A3
The signal output on the data output pin (O) is the data that is stored in the RAM at
the location defined by the values on the address pins.
X4942
You can initialize RAM16X1S during configuration using the INIT attribute. See
“Specifying Initial Contents of a RAM” in the RAM16X1D section.
Mode selection is shown in the following truth table.
Inputs Outputs
WE(mode) WCLK D O
0 (read) X X Data
1 (read) 0 X Data
1 (read) 1 X Data
1 (write) ↑ D D
1 (read) ↓ X Data
Data = word addressed by bits A3 – A0
Usage
This design element can be inferred or instantiated. The instantiation code is shown
below. For information on how to infer RAM, see the XST User Guide.
Available Attributes.
Attribute Type Allowed Values Default Description
INIT 64-Bit Hexadecimal 64-Bit Hexadecimal 16'h0000000000 Initializes ROMs, RAMs,
000000 registers, and look-up tables.
RAM16X1S
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
RAM16X1S_inst : RAM16X1S
generic map (
INIT => X"0000")
port map (
O => O, -- RAM output
A0 => A0, -- RAM address[0] input
A1 => A1, -- RAM address[1] input
A2 => A2, -- RAM address[2] input
A3 => A3, -- RAM address[3] input
D => D, -- RAM data input
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
RAM16X1S #(
.INIT(16'h0000) // Initial contents of RAM
) RAM16X1S_inst (
.O(O), // RAM output
.A0(A0), // RAM address[0] input
.A1(A1), // RAM address[1] input
.A2(A2), // RAM address[2] input
.A3(A3), // RAM address[3] input
.D(D), // RAM data input
.WCLK(WCLK), // Write clock input
.WE(WE) // Write enable input
);
RAM32X1S
RAM32X1S
Primitive: 32-Deep by 1-Wide Static Synchronous RAM
RAM32X1S is a 32-word by 1-bit static random access memory with synchronous
write capability. When the write enable is Low, transitions on the write clock (WCLK)
WE RAM32X1S O are ignored and data stored in the RAM is not affected. When (WE) is High, any
D positive transition on WCLK loads the data on the data input (D) into the word
WCLK
A0 selected by the 5-bit address (A4 – A0). For predictable performance, address and data
A1 inputs must be stable before a Low-to-High WCLK transition. This RAM block
A2
A3
assumes an active-High WCLK. However, WCLK can be active-High or active-Low.
A4 Any inverter placed on the WCLK input net is absorbed into the block.
X4943 The signal output on the data output pin (O) is the data that is stored in the RAM at
the location defined by the values on the address pins.
You can initialize RAM32X1S during configuration using the INIT attribute. See
“Specifying Initial Contents of a RAM” in the RAM16X1D section.
Mode selection is shown in the following truth table.
Inputs Outputs
WE (mode) WCLK D O
0 (read) X X Data
1 (read) 0 X Data
1 (read) 1 X Data
1 (write) ↑ D D
1 (read) ↓ X Data
Data = word addressed by bits A4 – A0
Usage
For HDL, this design element can be inferred or instantiated. The instantiation code is
shown below. For information on how to infer RAM, see the XST User Guide.
Available Attributes
Attribute Type Allowed Values Default Description
INIT_00 To INIT_07 INTEGER 0, 1, 2, 3, 4, 5, 6, or 7 0 Initializes ROMs, RAMs, registers, and
look-up tables.
RAM32X1S
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
RAM32X1S_inst : RAM32X1S
generic map (
INIT => X"00000000")
port map (
O => O, -- RAM output
A0 => A0, -- RAM address[0] input
A1 => A1, -- RAM address[1] input
A2 => A2, -- RAM address[2] input
A3 => A3, -- RAM address[3] input
A4 => A4, -- RAM address[4] input
D => D, -- RAM data input
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
RAM32X1S #(
.INIT(32'h00000000) // Initial contents of RAM
) RAM32X1S_inst (
.O(O), // RAM output
.A0(A0), // RAM address[0] input
.A1(A1), // RAM address[1] input
.A2(A2), // RAM address[2] input
.A3(A3), // RAM address[3] input
.A4(A4), // RAM address[4] input
.D(D), // RAM data input
.WCLK(WCLK), // Write clock input
.WE(WE) // Write enable input
);
RAM64X1S
RAM64X1S
Primitive: 64-Deep by 1-Wide Static Synchronous RAM
RAM64X1S is a 64-word by 1-bit static random access memory with synchronous
write capability. When the write enable is Low, transitions on the write clock (WCLK)
WE RAM64x1S are ignored and data stored in the RAM is not affected. When WE is High, any
D O
positive transition on WCLK loads the data on the data input (D) into the word
WCLK
A0
selected by the 6-bit address (A5 – A0). For predictable performance, address and data
A1 inputs must be stable before a Low-to-High WCLK transition. This RAM block
A2 assumes an active-High WCLK. However, WCLK can be active-High or active-Low.
A3 Any inverter placed on the WCLK input net is absorbed into the block.
A4
A5 The signal output on the data output pin (O) is the data that is stored in the RAM at
the location defined by the values on the address pins.
X9265
You can initialize RAM64X1S during configuration using the INIT attribute. See
“Specifying Initial Contents of a RAM” in the RAM16X1D section.
Mode selection is shown in the following truth table.
Inputs Outputs
WE (mode) WCLK D O
0 (read) X X Data
1 (read) 0 X Data
1 (read) 1 X Data
1 (write) ↑ D D
1 (read) ↓ X Data
Data = word addressed by bits A5 – A0
Usage
For HDL, this design element can be inferred or instantiated. The instantiation code is
shown below. For information on how to infer RAM, see the XST User Guide.
Available Attributes.
Attribute Type Allowed Values Default Description
INIT 64-Bit Hexadecimal 64-Bit Hexadecimal 64'h000000000 Initializes ROMs, RAMs,
0000000 registers, and look-up tables.
RAM64X1S
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
RAM64X1S_inst : RAM64X1S
generic map (
INIT => X"0000000000000000")
port map (
O => O, -- 1-bit data output
A0 => A0, -- Address[0] input bit
A1 => A1, -- Address[1] input bit
A2 => A2, -- Address[2] input bit
A3 => A3, -- Address[3] input bit
A4 => A4, -- Address[4] input bit
A5 => A5, -- Address[5] input bit
D => D, -- 1-bit data input
WCLK => WCLK, -- Write clock input
WE => WE -- Write enable input
);
-- End of RAM64X1S_inst instantiation
RAM64X1S #(
.INIT(64'h0000000000000000) // Initial contents of RAM
) RAM64X1S_inst (
.O(O), // 1-bit data output
.A0(A0), // Address[0] input bit
.A1(A1), // Address[1] input bit
.A2(A2), // Address[2] input bit
.A3(A3), // Address[3] input bit
.A4(A4), // Address[4] input bit
.A5(A5), // Address[5] input bit
.D(D), // 1-bit data input
.WCLK(WCLK), // Write clock input
.WE(WE) // Write enable input
);
RAMB16
RAMB16
Primitive: 16384-Bit Data Memory and 2048-Bit Parity Memory, Single-
Port Synchronous Block RAM with Port Width (n) Configured to 1, 2, 4,
9, 18, or 36 Bits
RAMB16
In addition to distributed RAM memory, Virtex-4 devices feature a large numberof 18
ADDRA(14:0) CASCADEOUTA
ADDRB(14:0) Kb block RAM memories. The block RAM memory is a True Dual-Port™ RAM,
CASCADEINA
CASCADEINB CASCADEOUTB
offering fast, discrete, and large blocks of memory in the device. The memory is
CLKA organized in columns, and the total amount of block RAM memory depends on the
CLKB
DIA(31:0) DOA(31:0) size of the Virtex-4 device. The 18 Kb blocks are cascadable to enable a deeper and
DIB(31:0)
DIPA(3:0)
wider memory implementation, with a minimal timing penalty incurred through
DIPB(3:0) DOB(31:0) specialized routing resources.
ENA
REGCEA
REGCEB
ENB
DOPA(3:0)
Available Attributes
SSRA
SSRB DOPB(3:0)
Table 4-4: Block RAM
WEA(3:0) Memory Cell
WEB(3:0) Initialization Attributes
X10119 from to
INIT_00 255 0
INIT_01 511 256
INIT_02 767 512
… … …
INIT_0E 3839 3584
INIT_0F 4095 3840
INIT_10 4351 4096
… … …
INIT_1F 8191 7936
INIT_20 8447 8192
… … …
INIT_2F 12287 12032
INIT_30 12543 12288
.. … …
INIT_3F 16383 16128
RAMB16
with a regular INIT_xx attribute behavior. The same formula can be used to calculate
the bit positions initialized by a particular INITP_xx attribute.
Output Latches Initialization - INIT (INIT_A & INIT_B)
The INIT_A and INIT_B (dual-port) attributes define the output latches values after
configuration. The width of the INIT (INIT_A & INIT_B) attribute is the port width, as
shown in Table 4-5. These attributes are hex-encoded bit vectors and the default value
is 0.
Output Latches Synchronous Set/Reset - SRVAL (SRVAL_A & SRVAL_B)
The SRVAL_A and SRVAL_B (dual-port) attributes define output latch values when
the SSR input is asserted. The width of the SRVAL (SRVAL_A and SRVAL_B) attribute
is the port width, as shown in the following table:
Table 4-5: Port Width Values Port Data Width DOP Bus DO Bus INIT / SRVAL
1 NA <0> 1
2 NA <1:0> 2
4 NA <3:0> 4
9 <0> <7:0> (1 + 8) = 9
18 <1:0> <15:0> (2 + 16) = 18
36 <3:0> <31:0> (4 + 32) = 36
RAMB16
Usage
Read Operation
The read operation uses one clock edge. The read address is registered on the read
port, and the stored data is loaded into the output latches after the RAM access
interval passes.
Write Operation
A write operation is a single clock-edge operation. The write address is registered on
the write port, and the data input is stored in memory.
Operating Modes
There are three options for the behavior of the data output during a write operation
on its port. The "read during write" mode offers the flexibility of using the data output
bus during a write operation on the same port. Output behavior is determined by the
configuration. This choice increases the efficiency of block RAM memory at each clock
cycle and allows designs that use maximum bandwidth.
Three different modes are used to determine data available on the output latches after
a write clock edge.
WRITE_FIRST or Transparent Mode (Default)
In WRITE_FIRST mode, the input data is simultaneously written into memory and
stored in the data output (transparent write).
READ_FIRST or Read-Before-Write Mode
In READ_FIRST mode, data previously stored at the write address appears on the
output latches, while the input data is being stored in memory (read before write).
NO_CHANGE Mode
In NO_CHANGE mode, the output latches remain unchanged during a write
operation.
Mode selection is set by configuration. One of these three modes is set individually for
each port by an attribute. The default mode is WRITE_FIRST.
RAMB16
Available Attributes
Attribute Type Allowed Values Default Description
DOA_REG INTEGER 0 or 1 0 Optional output registers on A
port .
DOB_REG INTEGER 0 or 1 0 Optional output registers on B
port.
INIT_00 to INIT_39 256-Bit 256-Bit 256'h00000000000000 To change the initial contents of
Hexadecimal Hexadecimal 000000000000000000 the RAM to anything other
000000000000000000 than all zero's.
00000000000000
INIT_0A to INIT_0F 256-Bit 256-Bit 256'h00000000000000 To change the initial contents of
Hexadecimal Hexadecimal 000000000000000000 the RAM to anything other
000000000000000000 than all zero's.
00000000000000
INIT_1A to INIT_1F 256-Bit 256-Bit 256'h00000000000000 To change the initial contents of
Hexadecimal Hexadecimal 000000000000000000 the RAM to anything other
000000000000000000 than all zero's.
00000000000000
INIT_2A to INIT_2F 256-Bit 256-Bit 256'h00000000000000 To change the initial contents of
Hexadecimal Hexadecimal 000000000000000000 the RAM to anything other
000000000000000000 than all zero's.
00000000000000
INIT_3A to INIT_3F 256-Bit 256-Bit 256'h00000000000000 To change the initial contents of
Hexadecimal Hexadecimal 000000000000000000 the RAM to anything other
000000000000000000 than all zero's.
00000000000000
INIT_A 36-Bit 36-Bit 36'h0 Initial values on A output port.
Hexadecimal Hexadecimal
INIT_B 36-Bit 36-Bit 36'h0 Initial values on B output port.
Hexadecimal Hexadecimal
INITP_00 to 256-Bit 256-Bit 256'h00000000000000 Applied for the parity bits.
INITP_07 Hexadecimal Hexadecimal 000000000000000000
000000000000000000
00000000000000
INVERT_CLK_DOA BOOLEAN FALSE, TRUE FALSE Invert clock on A port output
_REG registers.
INVERT_CLK_DOB_ BOOLEAN FALSE, TRUE FALSE Invert clock on A port output
REG registers.
RAM_EXTENSION_ STRING "LOWER", "NONE” Allowed value when cascaded.
A "NONE" or
"UPPER”
RAM_EXTENSION_ STRING "LOWER", "NONE” Allowed value when cascaded.
B "NONE" or
"UPPER”
READ_WIDTH_A INTEGER 0, 1, 2, 4, 9, 18 or 0 Set/Reset for the allowed
36 value.
READ_WIDTH_B INTEGER 0, 1, 2, 4, 9, 18 or 0 Set/Reset for the allowed
36 value.
SIM_COLLISION_ STRING "ALL", "NONE", "ALL” Collision check enable for the
CHECK "WARNING_ONL allowed value.
Y" or
"GENERATE_X_
ONLY”
SRVAL_A 36-Bit 36-Bit 36'h0 Use to set/reset value for A
Hexadecimal Hexadecimal port output.
SRVAL_B 36-Bit 36-Bit 36'h0 Use to set/reset value for B port
Hexadecimal Hexadecimal output.
WRITE_MODE_A STRING "WRITE_FIRST", "WRITE_FIRST” Configures port A (Sm) of a
"READ_FIRST" or dual port RAMB16 to support
"NO_CHANGE” one of three write modes.
WRITE_MODE_B STRING "WRITE_FIRST", "WRITE_FIRST” Configures port B (Sn) of a
"READ_FIRST" or dual-port RAMB16 to support
"NO_CHANGE” one of three write modes.
RAMB16
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
RAMB16_inst : RAMB16
generic map (
DOA_REG => 0, -- Optional output registers on the A port (0 or 1)
DOB_REG => 0, -- Optional output registers on the B port (0 or 1)
INIT_A => X"000000000", -- Initial values on A output port
INIT_B => X"000000000", -- Initial values on B output port
INVERT_CLK_DOA_REG => FALSE, -- Invert clock on A port output registers (TRUE or FALSE)
INVERT_CLK_DOB_REG => FALSE, -- Invert clock on B port output registers (TRUE or FALSE)
RAM_EXTENSION_A => "NONE", -- "UPPER", "LOWER" or "NONE" when cascaded
RAM_EXTENSION_B => "NONE", -- "UPPER", "LOWER" or "NONE" when cascaded
READ_WIDTH_A => 0, -- Valid values are 1,2,4,9,18 or 36
READ_WIDTH_B => 0, -- Valid values are 1,2,4,9,18 or 36
SIM_COLLISION_CHECK => "ALL", -- Collision check enable "ALL", "WARNING_ONLY", "GENERATE_X_ONLY"
-- or "NONE"
SRVAL_A => X"000000000", -- Port A ouput value upon SSR assertion
SRVAL_B => X"000000000", -- Port B ouput value upon SSR assertion
WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE
WRITE_WIDTH_A => 0, -- Valid values are 1,2,4,9,18 or 36
WRITE_WIDTH_B => 0, -- Valid values are 1,2,4,9,18 or 36
INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_06 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_07 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_08 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0C => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0D => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0E => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0F => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_10 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_11 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_12 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_13 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_14 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_15 => X"0000000000000000000000000000000000000000000000000000000000000000",
RAMB16
RAMB16
RAMB16 #(
.DOA_REG(0), // Optional output registers on A port (0 or 1)
.DOB_REG(0), // Optional output registers on B port (0 or 1)
.INIT_A(36'h000000000), // Initial values on A output port
.INIT_B(36'h000000000), // Initial values on B output port
.INVERT_CLK_DOA_REG("FALSE"), // Invert clock on A port output registers ("TRUE" or "FALSE")
.INVERT_CLK_DOB_REG("FALSE"), // Invert clock on A port output registers ("TRUE" or "FALSE")
.RAM_EXTENSION_A("NONE"), // "UPPER", "LOWER" or "NONE" when cascaded
.RAM_EXTENSION_B("NONE"), // "UPPER", "LOWER" or "NONE" when cascaded
.READ_WIDTH_A(0), // Valid values are 1, 2, 4, 9, 18, or 36
.READ_WIDTH_B(0), // Valid values are 1, 2, 4, 9, 18, or 36
.SIM_COLLISION_CHECK("ALL"), // Collision check enable "ALL", "WARNING_ONLY",
// "GENERATE_X_ONLY" or "NONE"
.SRVAL_A(36'h000000000), // Set/Reset value for A port output
.SRVAL_B(36'h000000000), // Set/Reset value for B port output
.WRITE_MODE_A("WRITE_FIRST"), // "WRITE_FIRST", "READ_FIRST", or "NO_CHANGE"
.WRITE_MODE_B("WRITE_FIRST"), // "WRITE_FIRST", "READ_FIRST", or "NO_CHANGE"
.WRITE_WIDTH_A(2), // Valid values are 1, 2, 4, 9, 18, or 36
.WRITE_WIDTH_B(0), // Valid values are 1, 2, 4, 9, 18, or 36
// The following INIT_xx declarations specify the initial contents of the RAM
.INIT_00(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_01(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_02(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_03(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_04(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_05(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_06(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_07(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_08(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_09(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0A(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0B(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0C(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0D(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0E(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_0F(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_10(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_11(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_12(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_13(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_14(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_15(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_16(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_17(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_18(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_19(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1A(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1B(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1C(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1D(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1E(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_1F(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_20(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_21(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_22(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_23(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_24(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_25(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_26(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_27(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_28(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_29(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2A(256'h0000000000000000000000000000000000000000000000000000000000000000),
RAMB16
.INIT_2B(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2C(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2D(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2E(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_2F(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_30(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_31(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_32(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_33(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_34(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_35(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_36(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_37(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_38(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_39(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3A(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3B(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3C(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3D(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3E(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_3F(256'h0000000000000000000000000000000000000000000000000000000000000000),
RAMB32_S64_ECC
RAMB32_S64_ECC
Primitive: 512 Deep by 64-Bit Wide Synchronous, Two-Port, Block RAM
with Built-In Error Correction
Two vertically adjacent block RAMs can be configured as a single 512 x 64 RAM with
DI(63:0) RAMB32_S64_ECC DO(63:0)
built in Hamming error correction, using the extra eight bits in the 72-bit wide RAM.
RDADDR(8:0) The operation is transparent to the user. The eight protection bits are generated
RDCLK
during each write operation, and are used during each read operation to correct any
single error, or to detect (but not correct) any double error. Two status outputs indicate
RDEN
the three possible read results: No error, single error corrected, double error detected.
SSR The read operation does not correct the error in the memory array, it only presents
WRADDR(8:0) corrected data on DOUT.
WRCLK STATUS(1:0)
This error correction code (ECC) configuration option is available with any block
WREN
RAM pair, but cannot use the one block RAM immediately above or below the Virtex-
X10249
4 PowerPC™ blocks.
RAMB32_S64_ECC
Available Attributes
Attribute Type Allowed Values Default Description
DO_REG INTEGER 0 or 1 0 Optional output
registers on A port .
SIM_COLLISION_ STRING “ALL”, "NONE", "ALL” Collision check
CHECK "WARNING_ONLY" enable for the
or "GENERATE_X_ allowed value.
ONLY”
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
RAMB32_S64_ECC_inst: RAMB32_S64_ECC_inst (
port map (
DO => DO, -- 64-bit output data
STATUS => STATUS, -- 2-bit status output
DI => DI, -- 64-bit data input
RDADDR => RDADDR, -- 9-bit data address input
RDCLK => RDCLK, -- 1-bit read clock input
RDEN => RDEN, -- 1-bit read enable input
SSR => SSR, -- 1-bit synchronous reset
WRADDR =>WRADDR, -- 9-bit write address input
WRCLK => WRCLK, -- 1-bit write clock input
WREN => WREN -- 1-bit write enable input
);
RAMB32_S64_ECC
RAMB32_S64_ECC RAMB32_S64_ECC_inst (
.DO(DO), // 64-bit output data
.STATUS(STATUS), // 2-bit status output
.DI(DI), // 64-bit data input
.RDADDR(RDADDR), // 9-bit data address input
.RDCLK(RDCLK), // 1-bit read clock input
.RDEN(RDEN), // 1-bit read enable input
.SSR(SSR), // 1-bit synchronous reset
.WRADDR(WRADDR), // 9-bit write address input
.WRCLK(WRCLK), // 1-bit write clock input
.WREN(WREN) // 1-bit write enable input
);
RAMB32_S64_ECC
ROM16X1
ROM16X1
Primitive: 16-Deep by 1-Wide ROM
ROM16X1 is a 16-word by 1-bit read-only memory. The data output (O) reflects the
word selected by the 4-bit address (A3 – A0). The ROM is initialized to a known value
during configuration with the INIT=value parameter. The value consists of four
A0 ROM16X1 O hexadecimal digits that are written into the ROM from the most-significant digit
A1 A=FH to the least-significant digit A=0h. For example, the INIT=10A7 parameter
A2 produces the data stream:
A3 0001 0000 1010 0111
An error occurs if the INIT=value is not specified.
X4137
Usage
This design element should be instantiated rather than inferred.
Available Attributes
Attribute Type Allowed Values Default Description
INIT 16-Bit 16-Bit Hexadecimal 16'h0000 Specifies the contents after
Hexadecimal configuration.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
ROM16X1_inst : ROM16X1
generic map (
INIT => X"0000")
port map (
O => O, -- ROM output
A0 => A0, -- ROM address[0]
A1 => A1, -- ROM address[1]
A2 => A2, -- ROM address[2]
A3 => A3 -- ROM address[3]
);
-- End of ROM16X1_inst instantiation
ROM16X1
ROM16X1 #(
.INIT(16'h0000) // Contents of ROM
) ROM16X1_inst (
.O(O), // ROM output
.A0(A0), // ROM address[0]
.A1(A1), // ROM address[1]
.A2(A2), // ROM address[2]
.A3(A3) // ROM address[3]
);
ROM32X1
ROM32X1
Primitive: 32-Deep by 1-Wide ROM
ROM32X1 is a 32-word by 1-bit read-only memory. The data output (O) reflects the
word selected by the 5-bit address (A4 – A0). The ROM is initialized to a known value
ROM32X1 during configuration with the INIT=value parameter. The value consists of eight
A0 O hexadecimal digits that are written into the ROM from the most-significant digit
A1 A=1FH to the least-significant digit A=00h. For example, the INIT=10A78F39
A2 parameter produces the data stream:
A3
0001 0000 1010 0111 1000 1111 0011 1001
A4
An error occurs if the INIT=value is not specified.
X4130
Usage
This design element should be instantiated rather than inferred.
Available Attributes.
Attribute Type Allowed Values Default Description
INIT 32-Bit 32-Bit Hexadecimal 32'h00000 Specifies the contents after
Hexadecimal 000 configuration.
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
ROM32X1_inst : ROM32X1
generic map (
INIT => X"00000000")
port map (
O => O, -- ROM output
A0 => A0, -- ROM address[0]
A1 => A1, -- ROM address[1]
A2 => A2, -- ROM address[2]
A3 => A3, -- ROM address[3]
A4 => A4 -- ROM address[4]
);
-- End of ROM32X1_inst instantiation
ROM32X1
ROM32X1 #(
.INIT(32'h00000000) // Contents of ROM
) ROM32X1_inst (
.O(O), // ROM output
.A0(A0), // ROM address[0]
.A1(A1), // ROM address[1]
.A2(A2), // ROM address[2]
.A3(A3), // ROM address[3]
.A4(A4) // ROM address[4]
);
// End of ROM32X1_inst instantiation
ROM64X1
ROM64X1
Primitive: 64-Deep by 1-Wide ROM
ROM64X1 is a 64-word by 1-bit read-only memory. The data output (O) reflects the
word selected by the 6-bit address (A5 – A0). The ROM is initialized to a known value
A0 ROM64X1 O during configuration with the INIT=value parameter. The value consists of 16
A1 hexadecimal digits that are written into the ROM from the most-significant digit
A2 A=Fh to the least-significant digit A=0h.
A3 An error occurs if the INIT=value is not specified.
A4
A5
Usage
X9730
This design element should be instantiated rather than inferred.
Available Attributes.
Attribute Type Allowed Values Default Description
INIT 64-Bit 64-Bit Hexadecimal 64'h00000 Specifies the contents after
Hexadecimal 000000000 configuration.
00
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
ROM64X1_inst : ROM64X1
generic map (
INIT => X"0000000000000000")
port map (
O => O, -- ROM output
A0 => A0, -- ROM address[0]
A1 => A1, -- ROM address[1]
A2 => A2, -- ROM address[2]
A3 => A3, -- ROM address[3]
A4 => A4, -- ROM address[4]
A5 => A5 -- ROM address[5]
);
ROM64X1
ROM64X1 #(
.INIT(64'h0000000000000000) // Contents of ROM
) ROM64X1_inst (
.O(O), // ROM output
.A0(A0), // ROM address[0]
.A1(A1), // ROM address[1]
.A2(A2), // ROM address[2]
.A3(A3), // ROM address[3]
.A4(A4), // ROM address[4]
.A5(A5) // ROM address[5]
);
ROM128X1
ROM128X1
Primitive: 128-Deep by 1-Wide ROM
ROM128X1 is a 128-word by 1-bit read-only memory. The data output (O) reflects the
word selected by the 7-bit address (A6 – A0). The ROM is initialized to a known value
ROM128X1 O
during configuration with the INIT=value parameter. The value consists of 32
A0
A1
hexadecimal digits that are written into the ROM from the most-significant digit
A2
A=Fh to the least-significant digit A=0h.
A3 An error occurs if the INIT=value is not specified.
A4
A5
A6
Usage
This design element should be instantiated rather than inferred.
X9731
Available Attributes
Attribute Type Allowed Values Default Description
INIT 128-Bit 128-Bit Hexadecimal 128'h0000 Specifies the contents after
Hexadecimal 000000000 configuration.
000000000
000000000
0
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- ROM128X1: 128 x 1 Asynchronous Distributed => LUT ROM
-- Virtex-II/II-Pro, Spartan-3/3E
-- Xilinx HDL Libraries Guide Version 8.1i
ROM128X1_inst : ROM128X1
generic map (
INIT => X"00000000000000000000000000000000")
port map (
O => O, -- ROM output
A0 => A0, -- ROM address[0]
A1 => A1, -- ROM address[1]
A2 => A2, -- ROM address[2]
A3 => A3, -- ROM address[3]
A4 => A4, -- ROM address[4]
A5 => A5, -- ROM address[5]
A6 => A6 -- ROM address[6]
);
ROM128X1
ROM128X1 #(
.INIT(128'h00000000000000000000000000000000) // Contents of ROM
) ROM128X1_inst (
.O(O), // ROM output
.A0(A0), // ROM address[0]
.A1(A1), // ROM address[1]
.A2(A2), // ROM address[2]
.A3(A3), // ROM address[3]
.A4(A4), // ROM address[4]
.A5(A5), // ROM address[5]
.A6(A6) // ROM address[6]
);
ROM256X1
ROM256X1
Primitive: 256-Deep by 1-Wide ROM
ROM256X1 is a 256-word by 1-bit read-only memory. The data output (O) reflects the
word selected by the 8-bit address (A7– A0). The ROM is initialized to a known value
during configuration with the INIT=value parameter. The value consists of 64
A0 ROM256X1 O
hexadecimal digits that are written into the ROM from the most-significant digit
A1
A2 A=Fh to the least-significant digit A=0h.
A3
A4
An error occurs if the INIT=value is not specified.
A5
A6
A7
Usage
X9732 This design element should be instantiated rather than inferred.
Available Attributes
Attribute Type Allowed Default Description
Values
INIT 256-Bit 256-Bit 256'h000000000000000 Specifies the contents after
Hexadecimal Hexadecimal 0000000000000000000 configuration.
0000000000000000000
00000000000
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- ROM256X1: 256 x 1 Asynchronous Distributed => LUT ROM
-- Virtex-II/II-Pro, Spartan-3/3E
-- Xilinx HDL Libraries Guide Version 8.1i
ROM256X1_inst : ROM256X1
generic map (
INIT => X"0000000000000000000000000000000000000000000000000000000000000000")
port map (
O => O, -- ROM output
A0 => A0, -- ROM address[0]
A1 => A1, -- ROM address[1]
A2 => A2, -- ROM address[2]
A3 => A3, -- ROM address[3]
A4 => A4, -- ROM address[4]
A5 => A5, -- ROM address[5]
A6 => A6 -- ROM address[6]
A7 => A7 -- ROM address[7]
);
ROM256X1
ROM256X1 #(
.INIT(256'h0000000000000000000000000000000000000000000000000000000000000000) // Contents of ROM
) ROM256X1_inst (
.O(O), // ROM output
.A0(A0), // ROM address[0]
.A1(A1), // ROM address[1]
.A2(A2), // ROM address[2]
.A3(A3), // ROM address[3]
.A4(A4), // ROM address[4]
.A5(A5), // ROM address[5]
.A6(A6) // ROM address[6]
.A7(A7) // ROM address[7]
);
// End of ROM256X1_inst instantiation
SRL16
SRL16
Primitive: 16-Bit Shift Register Look-Up Table (LUT)
SRL16 is a shift register look-up table (LUT). The inputs A3, A2, A1, and A0 select the
output length of the shift register. The shift register may be of a fixed, static length or
SRL16
it may be dynamically adjusted.
D Q
CLK
The shift register LUT contents are initialized by assigning a four-digit hexadecimal
A0
A1 number to an INIT attribute. The first, or the left-most, hexadecimal digit is the most
A2 significant bit. If an INIT value is not specified, it defaults to a value of four zeros
A3
(0000) so that the shift register LUT is cleared during configuration.
X8420 The data (D) is loaded into the first bit of the shift register during the Low-to-High
clock (CLK) transition. During subsequent Low-to-High clock transitions data shifts
to the next highest bit position while new data is loaded. The data appears on the Q
output when the shift register length determined by the address inputs is reached.
Inputs Output
Am CLK D Q
Am X X Q(Am)
Am ↑ D Q(Am - 1)
m= 0, 1, 2, 3
Usage
This design element can be inferred or instantiated.
SRL16
Available Attributes
Attribute Type Allowed Values Default Description
INIT 16-Bit 16-Bit Hexadecimal 16'h0000 Sets the initial value of Q output
Hexadecimal after configuration
-- <-----Cut code below this line and paste into the architecture body---->
SRL16_inst : SRL16
generic map (
INIT => X"0000")
port map (
Q => Q, -- SRL data output
A0 => A0, -- Select[0] input
A1 => A1, -- Select[1] input
A2 => A2, -- Select[2] input
A3 => A3, -- Select[3] input
CLK => CLK, -- Clock input
D => D -- SRL data input
);
SRL16
SRL16
SRL16_1
SRL16_1
Primitive: 16-Bit Shift Register Look-Up Table (LUT) with Negative-Edge
Clock
SRL16_1 is a shift register look-up table (LUT). The inputs A3, A2, A1, and A0 select
the output length of the shift register. The shift register may be of a fixed, static length
D SRL16_1 Q or it may be dynamically adjusted. See “Static Length Mode” and “Dynamic Length
CLK Mode” in “SRL16”.
A0
A1 The shift register LUT contents are initialized by assigning a four-digit hexadecimal
A2 number to an INIT attribute. The first, or the left-most, hexadecimal digit is the most
A3 significant bit. If an INIT value is not specified, it defaults to a value of four zeros
(0000) so that the shift register LUT is cleared during configuration.
X8422
The data (D) is loaded into the first bit of the shift register during the High-to-Low
clock (CLK) transition. During subsequent High-to-Low clock transitions data shifts
to the next highest bit position as new data is loaded. The data appears on theQ
output when the shift register length determined by the address inputs is reached.
Inputs Output
Am CLK D Q
Am X X Q(Am)
Am ↓ D Q(Am - 1)
m= 0, 1, 2, 3
Usage
This design element can be inferred or instantiated.
Available Attributes
Attribute Type Allowed Values Default Description
INIT 16-Bit 16-Bit Hexadecimal 16'h0000 Sets the initial value of Q output
Hexadecimal after configuration
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
SRL16_1
SRL16_1_inst : SRL16_1
generic map (
INIT => X"0000")
port map (
Q => Q, -- SRL data output
A0 => A0, -- Select[0] input
A1 => A1, -- Select[1] input
A2 => A2, -- Select[2] input
A3 => A3, -- Select[3] input
CLK => CLK, -- Clock input
D => D -- SRL data input
);
SRL16E
SRL16E
Primitive: 16-Bit Shift Register Look-Up Table (LUT) with Clock Enable
SRL16E is a shift register look-up table (LUT). The inputs A3, A2, A1, and A0 select
the output length of the shift register. The shift register may be of a fixed, static length
D SRL16E Q or dynamically adjusted. See “Static Length Mode” and “Dynamic Length Mode” in
CE “SRL16”.
CLK
A0 The shift register LUT contents are initialized by assigning a four-digit hexadecimal
A1
A2
number to an INIT attribute. The first, or the left-most, hexadecimal digit is the most
A3 significant bit. If an INIT value is not specified, it defaults to a value of four zeros
(0000) so that the shift register LUT is cleared during configuration.
X8423
When CE is High, the data (D) is loaded into the first bit of the shift register during the
Low-to-High clock (CLK) transition. During subsequent Low-to-High clock
transitions, when CE is High, data shifts to the next highest bit position as new data is
loaded. The data appears on the Q output when the shift register length determined
by the address inputs is reached.
When CE is Low, the register ignores clock transitions.
Inputs Output
Am CE CLK D Q
Am 0 X X Q(Am)
Am 1 ↑ D Q(Am - 1)
m= 0, 1, 2, 3
Usage
This design element can be inferred or instantiated.
Available Attributes
Attribute Type Allowed Values Default Description
INIT 16-Bit 16-Bit Hexadecimal 16'h0000 Sets the initial value of content
Hexadecimal and output of shift register after
configuration
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
SRL16E
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- SRL16E: 16-bit shift register LUT with clock enable operating on posedge of clock
-- All FPGAs
-- Xilinx HDL Libraries Guide Version 8.1i
SRL16E_inst : SRL16E
generic map (
INIT => X"0000")
port map (
Q => Q, -- SRL data output
A0 => A0, -- Select[0] input
A1 => A1, -- Select[1] input
A2 => A2, -- Select[2] input
A3 => A3, -- Select[3] input
CE => CE, -- Clock enable input
CLK => CLK, -- Clock input
D => D -- SRL data input
);
SRL16E #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRL16E_inst (
.Q(Q), // SRL data output
.A0(A0), // Select[0] input
.A1(A1), // Select[1] input
.A2(A2), // Select[2] input
.A3(A3), // Select[3] input
.CE(CE), // Clock enable input
.CLK(CLK), // Clock input
.D(D) // SRL data input
SRL16E
);
SRL16E
SRL16E_1
SRL16E_1
Primitive: 16-Bit Shift Register Look-Up Table (LUT) with Negative-Edge
Clock and Clock Enable
SRL16E_1 is a shift register look-up table (LUT) with clock enable (CE). The inputs A3,
A2, A1, and A0 select the output length of the shift register. The shift register may be
D SRL16E_1 Q of a fixed, static length or dynamically adjusted. See “Static Length Mode” and
CE “Dynamic Length Mode” in the “SRL16”.
CLK
A0 The shift register LUT contents are initialized by assigning a four-digit hexadecimal
A1
A2
number to an INIT attribute. The first, or the left-most, hexadecimal digit is the most
A3 significant bit. If an INIT value is not specified, it defaults to a value of four zeros
(0000) so that the shift register LUT is cleared during configuration.
X8421
When CE is High, the data (D) is loaded into the first bit of the shift register during the
High-to-Low clock (CLK) transition. During subsequent High-to-Low clock
transitions, when CE is High, data shifts to the next highest bit position as new data is
loaded. The data appears on the Q output when the shift register length determined
by the address inputs is reached.
When CE is Low, the register ignores clock transitions.
Inputs Output
Am CE CLK D Q
Am 0 X X Q(Am)
Am 1 ↓ D Q(Am - 1)
m= 0, 1, 2, 3
Usage
This design element can be inferred or instantiated.
Available Attributes
Attribute Type Allowed Values Default Description
INIT 16-Bit 16-Bit Hexadecimal 16'h0000 Sets the initial value of content
Hexadecimal and output of shift register after
configuration
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
SRL16E_1
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- SRL16E_1: 16-bit shift register LUT with clock enable operating on negedge of clock
-- All FPGAs
-- Xilinx HDL Libraries Guide Version 8.1i
SRL16E_1_inst : SRL16E_1
generic map (
INIT => X"0000")
port map (
Q => Q, -- SRL data output
A0 => A0, -- Select[0] input
A1 => A1, -- Select[1] input
A2 => A2, -- Select[2] input
A3 => A3, -- Select[3] input
CE => CE, -- Clock enable input
CLK => CLK, -- Clock input
D => D -- SRL data input
);
// SRL16E_1: 16-bit shift register LUT with clock enable operating on negedge of clock
// All FPGAs
// Xilinx HDL Libraries Guide Version 8.1i
SRL16E_1 #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRL16E_1_inst (
.Q(Q), // SRL data output
.A0(A0), // Select[0] input
.A1(A1), // Select[1] input
.A2(A2), // Select[2] input
.A3(A3), // Select[3] input
.CE(CE), // Clock enable input
.CLK(CLK), // Clock input
.D(D) // SRL data input
);
SRLC16
SRLC16
Primitive: 16-Bit Shift Register Look-Up Table (LUT) with Carry
SRLC16 is a shift register look-up table (LUT) with Carry. The inputs A3, A2, A1, and
A0 select the output length of the shift register. The shift register may be of a fixed,
D SRLC16
static length, or it may be dynamically adjusted.
Q
CLK Q15
The shift register LUT contents are initialized by assigning a four-digit hexadecimal
A0 number to an INIT attribute. The first, or the left-most, hexadecimal digit is the most
A1 significant bit. If an INIT value is not specified, it defaults to a value of four zeros
A2
(0000) so that the shift register LUT is cleared during configuration.
A3
The data (D) is loaded into the first bit of the shift register during the Low-to-High
X9296
clock (CLK) transition. During subsequent Low-to-High clock transitions data shifts
to the next highest bit position as new data is loaded. The data appears on the Q
output when the shift register length determined by the address inputs is reached.
The Q15 output is available for the user to cascade multiple shift register LUTs to
create larger shift registers.
For information about the static length mode, see “Static Length Mode” in “SRL16”.
For information about the dynamic length mode, see “Dynamic Length Mode” in
“SRL16”.
Inputs Output
Am CLK D Q
Am X X Q(Am)
Am ↑ D Q(Am - 1)
m= 0, 1, 2, 3
Usage
This design element can be inferred or instantiated.
Available Attributes
Attribute Type Allowed Values Default Description
INIT 16-Bit 16-Bit Hexadecimal 16'h0000 Sets the initial value of content
Hexadecimal and output of shift register after
configuration
SRLC16
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
SRLC16_inst : SRLC16
generic map (
INIT => X"0000")
port map (
Q => Q, -- SRL data output
Q15 => Q15, -- Carry output (connect to next SRL)
A0 => A0, -- Select[0] input
A1 => A1, -- Select[1] input
A2 => A2, -- Select[2] input
A3 => A3, -- Select[3] input
CLK => CLK, -- Clock input
D => D -- SRL data input
);
SRLC16 #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRLC16_inst (
.Q(Q), // SRL data output
.Q15(Q15), // Carry output (connect to next SRL)
.A0(A0), // Select[0] input
.A1(A1), // Select[1] input
.A2(A2), // Select[2] input
.A3(A3), // Select[3] input
.CLK(CLK), // Clock input
.D(D) // SRL data input
);
SRLC16_1
SRLC16_1
Primitive: 16-Bit Shift Register Look-Up Table (LUT) with Carry and
Negative-Edge Clock
SRLC16_1 is a shift register look-up table (LUT) with carry and a negative-edge clock.
The inputs A3, A2, A1, and A0 select the output length of the shift register. The shift
D SRLC16_1 register may be a fixed-length, static length, or it may be dynamically adjustable. See
Q “Static Length Mode” and “Dynamic Length Mode” in “SRL16”.
CLK Q15
A0 The shift register LUT contents are initialized by assigning a four-digit hexadecimal
A1 number to an INIT attribute. The first, or the left-most, hexadecimal digit is the most
A2 significant bit. If an INIT value is not specified, it defaults to a value of four zeros
A3 (0000) so that the shift register LUT is cleared during configuration.
The data (D) is loaded into the first bit of the shift register during the High-to-Low
X9297 clock (CLK) transition. During subsequent High-to-Low clock transitions data shifts
to the next highest bit position as new data is loaded. The data appears on the Q
output when the shift register length determined by the address inputs is reached.
The Q15 output is available for the user to cascade multiple shift register LUTs to
create larger shift registers.
Inputs Output
Am CLK D Q Q15
Am X X Q(Am) No Change
Am ↓ D Q(Am - 1) Q14
m= 0, 1, 2, 3
Usage
This design element can also be inferred.
Available Attributes
Attribute Type Allowed Values Default Description
INIT 16-Bit 16-Bit Hexadecimal 16'h0000 Sets the initial value of content
Hexadecimal and output of shift register after
configuration
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
SRLC16_1
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
SRLC16_1_inst : SRLC16_1
generic map (
INIT => X"0000")
port map (
Q => Q, -- SRL data output
Q15 => Q15, -- Carry output (connect to next SRL)
A0 => A0, -- Select[0] input
A1 => A1, -- Select[1] input
A2 => A2, -- Select[2] input
A3 => A3, -- Select[3] input
CLK => CLK, -- Clock input
D => D -- SRL data input
);
SRLC16E
SRLC16E
Primitive: 16-Bit Shift Register Look-Up Table (LUT) with Carry and
Clock Enable
SRLC16E is a shift register look-up table (LUT) with carry and clock enable. The
inputs A3, A2, A1, and A0 select the output length of the shift register. The shift
D SRLC16E register may be of a fixed, static length or it may be dynamically adjusted.
CE Q
CLK Q15 The shift register LUT contents are initialized by assigning a four-digit hexadecimal
A0 number to an INIT attribute. The first, or the left-most, hexadecimal digit is the most
A1 significant bit. If an INIT value is not specified, it defaults to a value of four zeros
A2 (0000) so that the shift register LUT is cleared during configuration.
A3
The data (D) is loaded into the first bit of the shift register during the Low-to-High
X9298
clock (CLK) transition. When CE is High, during subsequent Low-to-High clock
transitions, data shifts to the next highest bit position as new data is loaded. The data
appears on the Q output when the shift register length determined by the address
inputs is reached.
The Q15 output is available for the user to cascade multiple shift register LUTs to
create larger shift registers.
For information about the static length mode, see “Static Length Mode” in “SRL16”.
For information about the dynamic length mode, see “Dynamic Length Mode” in
“SRL16”.
Inputs Output
Am CLK CE D Q Q15
Am X 0 X Q(Am) Q(15)
Am X 1 X Q(Am) Q(15)
Am ↑ 1 D Q(Am - 1) Q15
m= 0, 1, 2, 3
Usage
This design element can be inferred or instantiated.
Available Attributes
Attribute Type Allowed Values Default Description
INIT 16-Bit 16-Bit Hexadecimal 16'h0000 Sets the initial value of content
Hexadecimal and output of shift register after
configuration
SRLC16E
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- SRLC16E: 16-bit cascable shift register LUT with clock enable operating on posedge of clock
-- Virtex-II/II-Pro, Spartan-3/3E
-- Xilinx HDL Libraries Guide Version 8.1i
SRLC16E_inst : SRLC16E
generic map (
INIT => X"0000")
port map (
Q => Q, -- SRL data output
Q15 => Q15, -- Carry output (connect to next SRL)
A0 => A0, -- Select[0] input
A1 => A1, -- Select[1] input
A2 => A2, -- Select[2] input
A3 => A3, -- Select[3] input
CE => CE, -- Clock enable input
CLK => CLK, -- Clock input
D => D -- SRL data input
);
// SRLC16E: 16-bit cascable shift register LUT with clock enable operating on posedge of clock
// Virtex-II/II-Pro/4, Spartan-3/3E
// Xilinx HDL Libraries Guide Version 8.1i
SRLC16E #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRLC16E_inst (
.Q(Q), // SRL data output
.Q15(Q15), // Carry output (connect to next SRL)
.A0(A0), // Select[0] input
.A1(A1), // Select[1] input
.A2(A2), // Select[2] input
.A3(A3), // Select[3] input
.CE(CE), // Clock enable input
.CLK(CLK), // Clock input
.D(D) // SRL data input
);
SRLC16E_1
SRLC16E_1
Primitive: 16-Bit Shift Register Look-Up Table (LUT) with Carry,
Negative-Edge Clock, and Clock Enable
SRLC16E_1 is a shift register look-up table (LUT) with carry, clock enable, and
negative-edge clock. The inputs A3, A2, A1, and A0 select the output length of the
D SRLC16E_1
shift register. The shift register may be of a fixed, static length or it may be
CE Q
CLK
dynamically adjusted. See “SRLC16” and “Dynamic Length Mode” in “SRL16”.
Q15
A0 The shift register LUT contents are initialized by assigning a four-digit hexadecimal
A1 number to an INIT attribute. The first, or the left-most, hexadecimal digit is the most
A2 significant bit. If an INIT value is not specified, it defaults to a value of four zeros
A3 (0000) so that the shift register LUT is cleared during configuration.
X9299 When CE is High, the data (D) is loaded into the first bit of the shift register during the
High-to-Low clock (CLK) transition. During subsequent High-to-Low clock
transitions data shifts to the next highest bit position as new data is loaded when CE is
HIgh. The data appears on the Q output when the shift register length determined by
the address inputs is reached.
The Q15 output is available for the user to cascade multiple shift register LUTs to
create larger shift registers.
Inputs Output
Am CE CLK D Q Q15
Am 0 X X Q(Am) No Change
Am 1 X X Q(Am) No Change
Am 1 ↓ D Q(Am -1 ) Q14
m= 0, 1, 2, 3
Usage
This design element can be inferred or instantiated.
Available Attributes
Attribute Type Allowed Values Default Description
INIT 16-Bit 16-Bit Hexadecimal 16'h0000 Sets the initial value of content
Hexadecimal and output of shift register after
configuration
SRLC16E_1
-- Copy the following two statements and paste them before the
-- Entity declaration, unless they already exists.
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
-- SRLC16E_1: 16-bit shift register LUT with clock enable operating on negedge of clock
-- Virtex-II/II-Pro, Spartan-3/3E
-- Xilinx HDL Libraries Guide Version 8.1i
SRLC16E_1_inst : SRLC16E_1
generic map (
INIT => X"0000")
port map (
Q => Q, -- SRL data output
Q15 => Q15, -- Carry output (connect to next SRL)
A0 => A0, -- Select[0] input
A1 => A1, -- Select[1] input
A2 => A2, -- Select[2] input
A3 => A3, -- Select[3] input
CE => CE, -- Clock enable input
CLK => CLK, -- Clock input
D => D -- SRL data input
);
SRLC16E_1 #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRLC16E_1_inst (
.Q(Q), // SRL data output
.Q15(Q15), // Carry output (connect to next SRL)
.A0(A0), // Select[0] input
.A1(A1), // Select[1] input
.A2(A2), // Select[2] input
.A3(A3), // Select[3] input
.CE(CE), // Clock enable input
.CLK(CLK), // Clock input
.D(D) // SRL data input
);
STARTUP_VIRTEX4
STARTUP_VIRTEX4
Primitive: Virtex-4 User Interface to Configuration Clock, Global Reset,
Global 3-State Controls, and Other Configuration Signals
STARTUP_VIRTEX4
The STARTUP_VIRTEX4 primitive is used for Global Set/Reset, global 3-state control,
CLK
GSR
and the user configuration clock. The Global Set/Reset (GSR) input, when High, sets
GTS
USRCCLKO
EOS or resets all flip-flops, all latches, and every block RAM output register in the device,
USRCCLKTS depending on the initialization state (INIT=1 or 0) of the component.
USRDONEO
USRDONETS
Note: Block RAM content, LUT RAMs, the Digital Clock Manager (DCM), and shift register
X10195
LUTs (SRL16, SRL16_1, SRL16E, SRL16E_1, SRLC16, SRLC16_1, SRLC16E, and
SRLC16E_1) are not set/reset.
Following configuration, the global 3-state control (GTS), when High—and BSCAN is
not enabled and executing an EXTEST instruction—forces all the IOB outputs into
high impedance mode, which isolates the device outputs from the circuit but leaves
the inputs active.
Port List and Definition
Usage
Including the STARTUP_VIRTEX4 primitive in a design is optional. You must include
the primitive under the following conditions.
To exert external control over global set/reset, connect the GSR pin to a top level port
and an IBUF, as shown below.
To exert external control over global 3-state, connect the GTS pin to a top level port
and IBUF, as shown below.
To synchronize startup to a user clock, connect the user clock signal to the CLK input,
as shown below. Furthermore, "user clock" must be selected in the BitGen program.
You can use location constraints to specify the pin from which GSR or GTS (or both) is
accessed.
VHDLInstantiation Template
-- STARTUP_VIRTEX4 : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (STARTUP_VIRTEX4_inst) and/or the port declarations
-- code : after the "=>" assignment maybe changed to properly
-- : connect this function to the design. Delete or comment
-- : out inputs/outs that are not necessary.
STARTUP_VIRTEX4
Library UNISIM;
use UNISIM.vcomponents.all;
-- <-----Cut code below this line and paste into the architecture body---->
STARTUP_VIRTEX4 STARTUP_VIRTEX4_inst (
.EOS(EOS), // End Of Startup 1-bit output
.CLK(CLK), // Clock input for start-up sequence
.GSR(GSR_PORT), // Global Set/Reset input (GSR can not be used as a port name)
.GTS(GTS_PORT), // Global 3-state input (GTS can not be used as a port name)
.USRCCLKO(USRCCLKO), // USERCLK0 1-bit input
.USRCCLKTS(USRCCLKTS), // USERCLKTS 1-bit input
.USRDONEO(USRDONEO), // USRDONE0 1-bit input
.USRDONETS(USRDONETS) // USRDONETS 1-bit input
);
USR_ACCESS_VIRTEX4
USR_ACCESS_VIRTEX4
Primitive: 32-Bit Register with a 32-Bit DATA Bus and a DATAVALID
Port
The User Access Register (USR_ACCESS_VIRTEX4) module is a 32-bit register that
USR_ACCESS_VIRTEX4 DATA[31:0] allows data from the bitstream to be directly accessible by the FPGA fabric. This
DATAVALID module has two outputs: the 32-bit DATA bus and DATAVALID.
X10180
The configuration data source clock can be CCLK or TCK. The use model for this
block is that it allows data from a bitstream data storage source (e.g., PROM) to be
accessed by the fabric after the FPGA has been configured. To accomplish this the
STARTUP_VIRTEX4 block should also be instantiated. The STARTUP_VIRTEX4
block has inputs that allow the user to take over the CCLK and DONE pins after the
EOS (End-Of-Startup) signal has been asserted. These pins are USR_CCLK_O,
USR_CCLK_TS, USR_DONE_O, and USR_DONE_TS. The bitgen option –g
DONE_cycle: 7 should be used to prevent the DONE pin from going high since that
would reset the PROM. The USR_CCLK_O pin should be connected to a controlled
clock in the fabric. The PROM should contain a packet of data with the USR_ACCESS
register as the target. After EOS has been asserted, the data packet can be loaded by
clocking the USR_CCLK_O pin while keeping USR_CCLK_TS low (it can be tied low
in this usage).
Alternatively, the USR_ACCESS register can be used to provide a single 32-bit
constant value to the fabric as an alternative to using a BRAM or LUTRAM to hold the
constant.
Widt
Name Type Function
h
DATA Output 32 32-bit data bus
DATAVALID Output 1 Indicates whether the value at the DATA bus is valid or new
DATA – Output
DATA output port is the 32-bit register that allows the FPGA fabric to access data
from bitstream data storage source.
DATAVALID – Output
DATAVALID port indicates whether the value in the DATA bus is new or valid. When
this condition is true, this port is asserted HIGH for one cycle of the configuration
data source clock.
USR_ACCESS_VIRTEX4 Usage
Whenever a new value accessed by USR_ACCESS_VIRTEX4 appeared in the DATA
bus, the DATAVALID signal is asserted for one cycle of the configuration data source
clock. There are many sources for the configuration data source clock. They can be
either CCLK or TCK.
When using this module to access data from bitstream data storage source (e.g.,
PROM) to FPGA fabric after configuration, the STARTUP_VIRTEX4 block should also
be instantiated. The STARTUP_VIRTEX4 module contains inputs that allow the
designer to utilize the CCLK and DONE pins after the EOS (End-Of-Startup) signal
have been asserted. These pins are USR_CCLK_O, USR_CCLK_TS, USR_DONE_O,
and USR_DONE_TS. The USR_CCLK_O pin should be connected to a controlled
USR_ACCESS_VIRTEX4
clock in the fabric. The data storage source should contain a packet of data with the
USR_ACCESS_VIRTEX4 register as the target. After EOS has been asserted, the data
packet can be loaded by clocking the USR_CCLK_O pin while keeping
USR_CCLK_TS to logic Low. The USR_CCLK_TS can be tied to logic LOW when
using this application.
In addition, when using this module, the bitgen option –g DONE_cycle: 7 should be
used to prevent the HIGH assertion of DONE pin. Should the DONE pin be asserted
HIGH, the PROM will be reset.
USR_ACCESS_VIRTEX4_inst : USR_ACCESS_VIRTEX4
port map (
DATA => DATA, -- 32-bit data output
DATAVALID => DATAVALID -- 1-bit data valid signal
);
Verilog Template
// USR_ACCESS_VIRTEX4: 32-bit register that allows data from the
// bitstream
// to be directly accessible by the FPGA fabric.
// Virtex-4
// Xilinx HDL Libraries Guide version 8.1i
USR_ACCESS_VIRTEX4 USR_ACCESS_VIRTEX4_inst (
.DATA(DATA), // 32-bit data output
.DATAVALID(DATAVALID) // 1-bit data valid signal
);
XORCY
XORCY
Primitive: XOR for Carry Logic with General Output
XORCY is a special XOR with general O output that generates faster and smaller
arithmetic functions.
LI
O Usage
CI
Its O output is a general interconnect. See also “XORCY_D” and “XORCY_L”.
X8410
VHDL Instantiation Code
-- XORCY : In order to incorporate this function into the design,
-- VHDL : the following instance declaration needs to be placed
-- instance : in the architecture body of the design code. The
-- declaration : instance name (XORCY_inst) and/or the port declarations
-- code : after the "=>" assignment maybe changed to properly
-- : reference and connect this function to the design.
-- : All inputs and outputs must be connected.
-- <-----Cut code below this line and paste into the architecture body---->
XORCY_inst : XORCY
port map (
O => O, -- XOR output signal
CI => CI, -- Carry input signal
LI => LI -- LUT4 input signal
);
-- End of XORCY_inst instantiation
XORCY XORCY_inst (
.O(O), // XOR output signal
.CI(CI), // Carry input signal
.LI(LI) // LUT4 input signal
);
XORCY
XORCY_D
XORCY_D
Primitive: XOR for Carry Logic with Dual Output
XORCY_D is a special XOR that generates faster and smaller arithmetic functions.
LO
LI
O Usage
CI
XORCY_D has two functionally identical outputs: O and LO. The O output is a
X8409 general interconnect. The LO output connects to another output within the same CLB
slice.
See also “XORCY” and “XORCY_L.”
-- <-----Cut code below this line and paste into the architecture body---->
XORCY_D_inst : XORCY_D
port map (
LO => LO, -- XOR local output signal
O => O, -- XOR general output signal
CI => CI, -- Carry input signal
LI => LI -- LUT4 input signal
);
XORCY_D XORCY_D_inst (
.LO(LO), // XOR local output signal
.O(O), // XOR general output signal
XORCY_D
XORCY_L
XORCY_L
Primitive: XOR for Carry Logic with Local Output
XORCY_L is a special XOR with local LO output that generates faster and smaller
LO arithmetic functions.
LI
CI Usage
X8404 The LO output connects to another output within the same CLB slice.
See also “XORCY” and “XORCY_D.”
-- <-----Cut code below this line and paste into the architecture body---->
XORCY_L_inst : XORCY_L
port map (
LO => LO, -- XOR local output signal
CI => CI, -- Carry input signal
LI => LI -- LUT4 input signal
);
XORCY_L XORCY_L_inst (
.LO(LO), // XOR local output signal
.CI(CI), // Carry input signal
.LI(LI) // LUT4 input signal
);
XORCY_L