Professional Documents
Culture Documents
Quite often an FPGA-based design, and the design of the board upon which the physical
FPGA device will be placed, are worked on in parallel. Alternatively, only the FPGA project
Summary may exist, having been developed to the point of successful synthesis. Whatever the
This application note case, the two projects will, at some stage, need to be linked – effectively targeting the
provides detailed FPGA device to the board.
information on linking
and managing design This process involves:
changes between FPGA • Creation of a PCB project (where one does not exist)
and PCB projects. • Targeting (linking) the FPGA project to the PCB project
• Managing any design changes originating in one or both of the linked projects.
How do I link and sync my FPGA and PCB projects? – this video looks at how Altium Designer enables you to link and
synchronize existing FPGA and PCB projects together to create a complete, unified design.
Perhaps the easiest and more streamlined method of linking the FPGA project to a PCB project, is to create the PCB project
directly from within the FPGA design, with the aid of the FPGA To PCB Project Wizard. This method automatically links the two
projects and maximizes synchronization functionality between them.
Figure 1. FPGA To PCB Project Wizard – streamlining the linkage of FPGA and PCB projects.
Figure 3. Choose the physical device into which the FPGA design will be programmed.
This page of the Wizard also allows you to decide whether unconstrained ports – ports in the FPGA design that have not been
constrained to a specific pin number on the physical FPGA device – will have I/O pins assigned or not. For a new configuration,
this will include all ports. However, this will not result in optimal pin allocation and better results can be obtained by importing pin
allocations acquired from the vendor place and route tools.
This schematic sheet will be created with the component symbol placed for the FPGA device targeted in the constraint file. The
Wizard allows you to determine where and by what name, the schematic is created.
By default, the schematic will be named using the chosen designator for the FPGA component (e.g. FPGA_U1_Auto.SchDoc)
and will be stored in the same location as the FPGA project.
Each used pin on the component symbol is linked to a port entry in the constraint file by signal (net label/port) name. The names
for nets in the PCB project are therefore required to be the same as those in the FPGA project.
Once linked, any changes made to the source documents of either PCB or FPGA project can be passed on, ensuring that the
two projects remain synchronized.
The Use Standard Sheet Size Where Possible option, when enabled, directs the Wizard to attempt to use a standard
schematic sheet size, where possible, to encompass the component symbol(s) and related ports for the FPGA device. You also
have the option of specifying the default measurement units used for the sheet - Metric or Imperial.
Should you wish to connect power pins of the device via dedicated power ports, ensure that the corresponding option for this is
enabled on this page of the Wizard.
Use the Unused I/O Pins region of the page to determine how any unused I/O pins on the component are handled. You have
the ability to control the treatment of various categories of I/O pin types individually:
• Input-only pins
• VREF pins
• Special Function pins and
• all other unused I/O pins.
The pins can be handled in one of the following ways:
Tie to single port - Tie all unused pins in the category to a single port (which will also appear on the parent
sheet symbol (if applicable) on the sheet above)
Tie to individual ports - Tie all unused pins in the category to their own, individual ports (which will also appear on
the parent sheet symbol (if applicable) on the sheet above)
Tie to ports by IO bank - Tie all unused VREF pins to a port on a bank by bank basis (which will also appear on the
(VREF only) parent sheet symbol (if applicable) on the sheet above).
Add No ERC directive - Add a No ERC directive to an unused pin, so that it is not included as part of error checking
when the design is compiled
Ignore - Do nothing with an unused pin
Note: For VREF pins, when the Tie to single port or Tie to ports by IO bank options are selected, you are given the additional
option of whether or not to connect via Power Ports.
1 2 3 4 5 6 7 8 9 10 11 12
A A
U1J
VCCO_0 J13 A2 VCCAUX
VCCO_0 VCCAUX
VCCO_0 K13 A9 VCCAUX
VCCO_0 VCCAUX
VCCO_0 J12 A18 VCCAUX
VCCO_0 VCCAUX
VCCO_0 C11 A25 VCCAUX
VCCO_0 VCCAUX
VCCO_0 J11 B1 VCCAUX
VCCO_0 VCCAUX
VCCO_0 H10 B26 VCCAUX
VCCO_0 VCCAUX
VCCO_0 H9 J1 VCCAUX
VCCO_0 VCCAUX
VCCO_0 C7 J26 VCCAUX
VCCO_0 VCCAUX
V1 VCCAUX
VCCAUX
CLK_REF VCCO_1 J14 V26 VCCAUX
CLK_REF VCCO_1 VCCAUX
VCCO_1 K14 AE1 VCCAUX
VCCO_1 VCCAUX
JTAG_NEXUS_TCK VCCO_1 J15 AE26 VCCAUX
JTAG_NEXUS_TCK VCCO_1 VCCAUX
VCCO_1 C16 AF2 VCCAUX
VCCO_1 VCCAUX
JTAG_NEXUS_TDI VCCO_1 J16 AF9 VCCAUX
JTAG_NEXUS_TDI VCCO_1 VCCAUX
VCCO_1 H17 AF18 VCCAUX
VCCO_1 VCCAUX
JTAG_NEXUS_TDO VCCO_1 H18 AF25 VCCAUX U1K
JTAG_NEXUS_TDO VCCO_1 VCCAUX
VCCO_1 C20 GND A1 P11 GND
VCCO_1 GND GND
JTAG_NEXUS_TMS H8 VCCINT GND A26 P12 GND
JTAG_NEXUS_TMS VCCINT GND GND
VCCO_2 G24 H19 VCCINT GND B2 P13 GND
VCCO_2 VCCINT GND GND
TEST_BUTTON VCCO_2 J19 J9 VCCINT GND B25 P14 GND
TEST_BUTTON VCCO_2 VCCINT GND GND
VCCO_2 K19 J10 VCCINT GND C3 P15 GND
VCCO_2 VCCINT GND GND
VCCO_2 L18 J17 VCCINT GND C24 P16 GND
VCCO_2 VCCINT GND GND
VCCO_2 L24 J18 VCCINT GND D4 R4 GND
VCCO_2 VCCINT GND GND
VCCO_2 M18 K9 VCCINT GND D12 R10 GND
VCCO_2 VCCINT GND GND
CCLK VCCO_2 N17 K10 VCCINT GND D15 R11 GND
CCLK VCCO_2 VCCINT GND GND
U1I VCCO_2 N18 K17 VCCINT GND D23 R12 GND
VCCO_2 VCCINT GND GND
DONE CCLK AD26 K18 VCCINT GND K11 R13 GND
DONE CCLK VCCINT GND GND
DONE AC24 VCCO_3 P18 U9 VCCINT GND K12 R14 GND
DONE VCCO_3 VCCINT GND GND
HSWAP_EN VCCO_3 P17 U10 VCCINT GND K15 R15 GND
HSWAP_EN VCCO_3 VCCINT GND GND
PROG_B D3 VCCO_3 R18 U17 VCCINT GND K16 R16 GND
B PROG_B VCCO_3 VCCINT GND GND B
M0 VCCO_3 T24 U18 VCCINT GND L10 R17 GND
M0 VCCO_3 VCCINT GND GND
M0 AE3 VCCO_3 T18 V9 VCCINT GND L11 R23 GND
M0 VCCO_3 VCCINT GND GND
M1 M1 AC3 VCCO_3 U19 V10 VCCINT GND L12 T10 GND
M1 M1 VCCO_3 VCCINT GND GND
M2 AF3 VCCO_3 V19 V17 VCCINT GND L13 T11 GND
M2 VCCO_3 VCCINT GND GND
M2 VCCO_3 Y24 V18 VCCINT GND L14 T12 GND
M2 VCCO_3 VCCINT GND GND
TDI C1 W8 VCCINT GND L15 T13 GND
TDI VCCINT GND GND
PROG_B TDO D24 VCCO_4 V14 W19 VCCINT GND L16 T14 GND
PROG_B TDO VCCO_4 VCCINT GND GND
TCK B24 VCCO_4 U14 GND L17 T15 GND
TCK VCCO_4 GND GND
TCK TMS A24 VCCO_4 V15 GND M4 T16 GND
TCK TMS VCCO_4 GND GND
VCCO_4 AD16 GND M10 T17 GND
VCCO_4 GND GND
TDI HSWAP_EN C2 VCCO_4 V16 GND M11 U11 GND
TDI HSWAP_EN VCCO_4 GND GND
VCCO_4 W17 GND M12 U12 GND
VCCO_4 GND GND
TDO F22 VCCO_4 W18 GND M13 U15 GND
TDO NC VCCO_4 GND GND
AA5 VCCO_4 AD20 GND M14 U16 GND
NC VCCO_4 GND GND
TMS GND M15 AC4 GND
TMS GND GND
XC3S1500-4FG676C VCCO_5 V13 GND M16 AC12 GND
VCCO_5 GND GND
VCCO_5 U13 GND M17 AC15 GND
VCCO_5 GND GND
VCCO_5 V12 GND M23 AC23 GND
VCCO_5 GND GND
VCCO_5 AD11 GND N11 AD3 GND
VCCO_5 GND GND
FPGA_CS_B VCCO_5 V11 GND N12 AD24 GND
FPGA_CS_B VCCO_5 GND GND
VCCO_5 W10 GND N13 AE2 GND
VCCO_5 GND GND
FPGA_D1 VCCO_5 W9 GND N14 AE25 GND
FPGA_D1 VCCO_5 GND GND
VCCO_5 AD7 GND N15 AF1 GND
VCCO_5 GND GND
FPGA_D2 GND N16 AF26 GND
FPGA_D2 GND GND
VCCO_6 P9
VCCO_6
FPGA_D3 VCCO_6 P10 XC3S1500-4FG676C
FPGA_D3 VCCO_6
VCCO_6 R9
VCCO_6
FPGA_D4 VCCO_6 T3
FPGA_D4 VCCO_6
VCCO_6 T9
VCCO_6
FPGA_D5 VCCO_6 U8
FPGA_D5 VCCO_6
VCCO_6 V8
VCCO_6
FPGA_D6 VCCO_6 Y3
FPGA_D6 VCCO_6
FPGA_D7 VCCO_7 N9
FPGA_D7 VCCO_7
VCCO_7 N10
VCCO_7
FPGA_DIN/D0 VCCO_7 M9
FPGA_DIN/D0 VCCO_7
VCCO_7 L3
VCCO_7
FPGA_DOUT/BUSY VCCO_7 L9
FPGA_DOUT/BUSY VCCO_7
VCCO_7 K8
VCCO_7
FPGA_INIT_B VCCO_7 J8
FPGA_INIT_B VCCO_7
VCCO_7 G3
VCCO_7
FPGA_RDWR_B
FPGA_RDWR_B
XC3S1500-4FG676C
GND
GND
VCCAUX
VCCAUX
VCCINT
VCCINT
VCCO_0
VCCO_0
VCCO_1
VCCO_1
C C
VCCO_2
VCCO_2
VCCO_3
VCCO_3
U1A U1E
VCCO_4 A13 U1B U1C U1D AF14 CLK_REF U1F U1G U1H
VCCO_4 IO_L32P_0/GCLK6 IO_L32P_4/GCLK0
BANK 0
BANK 4
BANK 2
BANK 3
BANK 5
BANK 6
BANK 7
Title
1 2 3 4 5 6 7 8 9 10 11 12
Figure 5. Example auto-generated schematic sheet for a Xilinx Spartan-3 device (XC3S1500-4FG676C).
In summary, after all of the options in the Wizard have been set as required, the following will be generated:
• A new PCB project (if specified)
• A new schematic sheet, added to the new or existing PCB project, which contains the schematic representation of the FPGA
component
• A new schematic sheet with parent sheet symbol (if specified). If an existing sheet is targeted, the parent sheet symbol for
the FPGA Component schematic will be added/updated as necessary
• A new configuration (if specified), which will be added to the FPGA project file and which contains a single, new constraint
file. The constraint file will contain:
- a part constraint, for example:
Record=Constraint | TargetKind=Part | TargetId=XC3S1500-4FG676C
- a PCB board constraint, for example:
Record=Constraint | TargetKind=PCB | TargetId=CHC_Accumulator_PCB.PrjPcb
- a list of constraints for all ports on the top-level schematic of the FPGA project. Each of these port constraints is matched
(and therefore linked) by net name to the equivalent pin of the FPGA component on the PCB project's auto-generated
schematic sheet.
If an existing configuration was chosen, only those elements listed above which are not currently found in any constraint files
associated to that configuration, will be added.
For a detailed description of configurations and constraint files, refer to the document AR0124 Design Portability,
Configurations and Constraints.
For more detailed information on the use of the Projects panel in Structure Editor mode, press F1 while the cursor is over
the (focused) panel.
The PCB project to which the FPGA design project will be linked can of course be created manually and, quite often, this will be
the case, with both projects being designed in parallel.
In such cases, there may not be an auto-generated schematic sheet for the FPGA Component. Linking of the two projects must
truly be carried out manually.
Figure 8. FPGA Workspace Map dialog with only FPGA project existing.
When you create the PCB project and the schematic sheet for the FPGA component used is not auto-generated, the FPGA
component that is placed on the sheet must be recognized and supported by the software.
The range of supported devices are shown in the Browse Physical Devices dialog (Figure 9). With the Devices view active
(View » Devices View), access to this dialog is made by selecting Tools » Browse Physical Devices from the menus.
With the release of Altium Designer Winter09, another approach was added. Altium Designer's component libraries are already setup to use this information,
the FPGA component detail is looked up in a database based on the component library name, for example XC3S1500-4FG676C. For new components, the
part can either be named in the same manner, or a parameter called NexusDeviceID can be added to the schematic component, with the same data. Altium
Designer will then be able to look up the new component in its database of FPGA parts.
Figure 9. Use the Browse Physical Devices dialog to verify device support.
Available (and supported) devices will have a pin number value entered in the main device availability grid as well as
information made available in the Selected Device region of the dialog. Devices that do not exist are represented by a hyphen
character ‘-‘.
Alternatively click on the Device Support Report button, at the bottom-left of the dialog, to generate a full report
(AltiumDesignerDeviceSupport.Txt) listing all physical devices supported by Altium Designer. Devices are listed by
vendor and device family. You will be given the option to include or exclude device details (package, pin count, user I/O pins,
etc) for the report as required. Once generated, the report will open as the active document in the main design window.
The component placed on the schematic sheet has to be verified against the list of supported devices in some way, before it is
recognized and displayed in the FPGA Workspace Map dialog. This is achieved using the Design Item ID field, in the Library
Link region of the Component Properties dialog for the FPGA component symbol on the PCB schematic. To be a recognized
device, the entry in this field must be identical to that in the Device field for the corresponding device in the Browse Physical
Devices dialog (Figure 10).
Figure 10. The placed component is verified using its Design Item ID.
Once recognized as a supported device, the FPGA component on the schematic sheet and PCB (if it exists at this stage) will be
displayed in the FPGA Workspace Map dialog, as shown in Figure 11.
Figure 11. FPGA component recognized in PCB project (schematic and PCB).
As can be seen in Figure 11, the two projects exist, but they have yet to be linked. The entry No linked configuration is
displayed under the FPGA project's entry in the dialog. Indeed, it is the use of a configuration that supplies the key when linking
the projects.
To purely disassociate a constraint file from a configuration, simply drag the entry for the constraint into free space within the
lower region of the panel.
Double-clicking on a configuration entry will launch the Configuration Manager dialog for the parent FPGA project.
Linking of the two projects is achieved in one of the following ways:
• Dragging a configuration defined for the FPGA project from the lower region of the Projects panel and dropping it onto the
entry for the FPGA component in the PCB project
• Dragging the FPGA project – from either the upper or lower regions of the panel – and dropping it onto the FPGA
component entry in the PCB project
• Right-clicking on the entry for the FPGA component in the PCB project and choosing the Set Sub Project command from
the pop-up menu that appears. This will open the Select Sub Project dialog, from where you can browse to and open the
desired FPGA sub-project. This method is particularly useful if the desired sub-project is not currently open in the Projects
panel.
When using the drag-and-drop methods, the possible FPGA component entries (that reside on schematic sheets within one or
more PCB projects) that you can validly drop onto are highlighted in pale blue. As the cursor passes onto a valid 'drop zone' it
will change from a no-entry symbol to a document symbol as shown in Figure 13.
If you choose to drag the entire FPGA project entry onto the target schematic FPGA component and more than one valid
configuration exists for that project – i.e. more than one configuration contains an associated constraint file targeting the FPGA
device – the Select Configuration dialog will appear (Figure 14), from where you can choose which specific configuration to use.
When the required configuration has been assigned, the parent FPGA project will become linked to the PCB project and is
shown in the structure hierarchy as a sub-design of the schematic FPGA component (Figure 15).
The configuration used in the linking (the linked configuration) is identified next to the name of the FPGA project, in the format:
FPGAProjectName / LinkedConfigurationName
To break the link between the two projects, simply click and drag the FPGA project entry into free space within the panel (below
the last entry).
Now that a configuration has been linked, the FPGA and PCB projects become linked and the FPGA Workspace Map dialog will
display a link between the schematic component in the PCB project and the FPGA project (Figure 16). The name of the
configuration appears in the FPGA Projects region of the map.
Figure 16. Successful manual linking of the PCB and FPGA projects.
The projects are now linked, but they have yet to be synchronized.
Figure 17. Use the Synchronize dialog to determine changes required to fully synchronize the linked PCB and FPGA projects.
Note: The Synchronize dialog can be accessed irrespective of the state of the link – fully synchronized or out of date.
How the dialog is populated depends on the extent of net naming in the FPGA component schematic. The following is a
summary of the possibilities:
• A net label has been assigned to a pin with the same name as that used for the corresponding port in the FPGA project. The
pin number is different to that (if specified) in the associated constraint file and/or the electrical type for the pin is different to
that of the port. As the port and pin have the same signal name, they will appear in the Matched Signals list. The entry will
be highlighted in red as the pin number and/or electrical type is different
• A net label has been assigned to a pin with the same name as that used for the corresponding port in the FPGA project. The
pin number is identical to that in the associated constraint file and the electrical type for the pin is identical to that of the port.
As the port and pin have the same signal name, they will appear in the Matched Signals list. The entry will be highlighted in
green as the pin number and electrical type are also the same
• A net label has been assigned to a pin with a different name to any of the ports in the FPGA project. An entry for the signal
name will appear in the Unmatched PCB Signals list.
• All ports that have not been matched to pins with the same name, will appear in the Unmatched FPGA Signals list.
The aim now is to get all ports and pins matched by the same name, pin number and electrical type – i.e. to get the Matched
Signals list fully populated and Green.
This is achieved by manually adding and removing nets/ports to/from the PCB project schematic and FPGA project schematic,
and changing pin/port electrical properties and pin assignments as required. The Synchronize dialog enables you to create To
Do Items so that you can easily remember what needs to be done by checking the To-Do panel.
If the signal naming and electrical types are made identical to start with, the pin numbering can be pushed quickly from one
project to the other, depending on whether the master numbering is defined on the PCB or in the constraint file.
At this stage, both FPGA and PCB projects have been created and linked. All ports on the FPGA project are linked, by net
name, to the PCB project pins and there are no changes needing to be pushed in either direction. The question now is how to
manage any design changes that are made – either in the FPGA project or in the PCB project.
At any given time during the design process, the status of the linking between FPGA and PCB projects can be readily checked,
simply by launching the FPGA Workspace Map dialog. Access to this dialog is provided by choosing the command of the same
name from the Projects menu, or by pressing the button on the Projects panel.
As illustrated by the example of Figure 18, the dialog displays the relationships (links) between various elements of FPGA and
PCB projects and the status of these links – whether the two sides of a link are synchronized and up-to-date or whether some
action is required to resynchronize them.
Figure 18. The FPGA Workspace Map dialog (showing linked and fully synchronized FPGA and PCB projects).
The various elements in the two project types are linked in a logical flow – from a soft core microcontroller placed within an
FPGA project, to a PCB design document within a linked 1 PCB project. Each of the links are summarized as follows:
1
Entries in the schematic and/or PCB regions of the PCB project will appear if they contain recognized and supported FPGA components.
However, the Schematic-FPGA Project link will only appear if the FPGA project has been linked to the PCB project.
A link can appear in one of two colors and hovering over a link will produce a textual description of its status:
- The Green link signifies up to date (i.e. both sides are synchronized). No action is
required.
- The Red link signifies that the two sides of the link are not fully synchronized (i.e. a design
change has been made on one side but has yet to be passed to the other). Clicking on a
Schematic-FPGA Project link with this status will open the Synchronize dialog, from
where you can browse and match any unmatched ports and pins.
When two elements of the map are shown to be un-synchronized (i.e. the link between them is red), clicking on the link or its
associated icons will give access to a number of synchronization options. The hint that appears when hovering over the link will,
where possible, provide information on which directions updates should be made in order to achieve synchronization.
Before passing on any design changes over a link, you can view the differences. Changes are made using Engineering Change
Orders (ECOs). From within the FPGA Workspace Map dialog, you have full control over what gets updated and when, all from
one convenient location.
The FPGA Workspace Map dialog gives you the ability to check the state of the design across linked FPGA and PCB projects
and the means to propagate design changes between the two. The following sections consider some of the more common
design changes that might be made and that require use of this dialog to detect such changes and ensure synchronization of
the entire design.
In each case, it is assumed that the two, full design projects are local to the designer – stored on the one machine and in the
same directory structure.
Selecting Standards
I/O standards, slew rates and drive
strengths for each pin of an FPGA
device can be defined in the FPGA
Signal Manager dialog (Figure 19).
This dialog is accessed by choosing
the FPGA Signal Manager entry
under the Tools menu, from any
schematic document within the
PCB or FPGA project.
When accessed from a schematic
in the PCB project, if more than one
FPGA component is present a
dialog will appear beforehand listing
the components from which to
choose. Figure 19. Define I/O standards, slew rates and drive strengths in the FPGA Signal Manager dialog.
When accessed from a schematic
in the FPGA project, if more than one configuration exists in the project that targets the physical device, the Select Configuration
dialog will appear beforehand listing all such configurations from which to choose.
Note: The list of available I/O standards are context sensitive - only standards that are applicable for that particular FPGA
device will be available.
After defining the characteristics for the appropriate pins of the device as required, click OK to close the dialog. The Engineering
Change Order dialog will appear (Figure 20), with the settings you define listed as a series of parameters to be added to the
affected port constraint entries in the linked constraint file.
Figure 20. Example generated ECO for changes made to signals in the FPGA Signal Manager dialog.
These changes are to signal characteristics only – not pin-specific changes. As such, they affect only the relevant entries in the
associated constraint file. The schematic representation of the FPGA component is not affected and launching the FPGA
Workspace Map dialog will show the link between the schematic component and the FPGA project still green, highlighting the
fact that the two sides are fully synchronized.
The changes will be stored as constraints on the ports in the constraint file. Each required change will be performed via an ECO
and by executing the changes, the new I/O standards will be saved in the constraint file. Any future synthesis/build process will
then use these constraints for programming the FPGA. (These constraints would also be used when performing a Signal
Integrity analysis on the PCB project).
For a tutorial that looks at how Altium Designer's Signal Integrity Analyzer can be used to determine optimum slew and drive
settings for specific pins of an FPGA device, refer to the document TU0126 Checking Signal Integrity on an FPGA Design.
Figure 21. Top-level summary of component swap information (as accessed from the PCB editor).
The dialog lists all components in the design (or library) along with their current swap settings. Double-clicking on a component
entry will give access to the Configure Pin Swapping dialog for that component, from where you can define the swap settings for
pin swapping accordingly. Alternatively, access the dialog directly for a given component by right-clicking on that component in
the schematic or PCB workspace and choosing the command to configure pin swapping from the Part Actions or Component
Actions context menu respectively.
Figure 22 illustrates an example of this dialog. Set up Pin Groups as required. For example, you may have one group for
general IO pins, another for global clock pins, and additional distinct groups for input pins and output pins.
Figure 22. Providing swap control through the assignment of pins to specific Pin Groups.
All pins within the same Pin Group can be freely swapped. The group identifier itself is simply a text string – you can assign any
alphanumeric value to it. For example, to enhance readability, the Pin Group assigned to the input pins in Figure 22 could have
been called Input.
Assign each I/O pin on the device to the required Pin Group. Either type
the identifier for the group directly in the Pin Group field, or use the right
click menu to assign groups based on any of the Pin Status or FPGA
Attributes fields. Alternatively, select a group of pins and use the right-
click menu to add them to an existing or new group.
Once all Pin Groups have been defined as required, click OK to commit
the changes to the schematic component. If the Configure Pin Swapping
dialog was accessed from the Configure Swapping Information In
Components dialog, you will return to that dialog. The Pin Swap Data
field will be marked as modified and reflect the total number of pins
assigned to pin groups for swapping purposes.
It is important to first define the Pin Group information, since it may not be
desirable (or allowable) for all pins to be swapped with one another. While
all I/O pins within an FPGA can theoretically be swapped to give a better
layout for routing, conditions may dictate otherwise. Firstly, some pins
have additional special functions (clock pins, config pins and VREF pins
to name a few) and it may be preferable to reserve these for their special
purpose. Secondly, setting limitations here will allow any swapping
process to obey the banking and I/O standards requirements as
described earlier. For this reason, it may be desirable for pins in a certain Figure 23. Use the dialog's right-click menu to quickly
bank to only be swappable with each other (or perhaps other banks with assign pins to Pin Groups.
• Access the properties dialog for the PCB component footprint. In the Swapping Options region, enable the Enable Pin
Swaps option.
• Select the component footprint in the workspace and enable the Enable Pin Swapping option, using either the PCB
Inspector or PCB List panels.
In addition to enabling pin swapping, you must also specify the method(s) used to
execute the swapping with respect to the FPGA component on the schematic (in the
PCB project). These can be found on the Options tab of the Options for PCB Project
dialog (Project » Project Options) and are illustrated in Figure 24.
Both options are enabled by default, although it is advisable to disable the Changing
Schematic Pins option. Use of this option is more of a 'hardwired' approach and does Figure 24. Define method(s) by which pin
swapping is executed on the schematic.
not lend itself to future updates of the schematic symbol from the source library. The
Adding / Removing Net Labels option is far more suited to FPGA components and
essentially just means that net labels are swapped, rather than the pins themselves. (Note that this is only possible provided
that connectivity to the pins of the FPGA on the schematic is made using net labels, and not fixed wiring!).
It is advisable to have the linked FPGA and PCB projects fully synchronized prior to performing any pin swapping operations
on the PCB. This allows subsequent pin swap data to be passed between projects in a pain-free, efficient fashion.
During a pin swap operation, Altium Designer analyses the net assigned to the chosen pin and dynamically reassigns the net on
any connected routing as well as the pin. This level of functionality means that partially routed nets and pre-routed multilayer
escapes from complex BGA devices can be swapped. Differential pairs can also be swapped, taking advantage of the
knowledge about differential pin-pairs on FPGAs.
Automatic pin swapping can be carried out for any or all FPGA components in a document, dependent on whether pin swapping
is enabled for those components or not. This functionality is provided courtesy of a powerful automatic Optimizer, invoked using
the Automatic Net/Pin Optimizer command.
The Optimizer uses a two-stage process – a Fast optimization pass followed by an Iterative pass. You have control over
whether to run the iterative pass, but generally it is a good idea to do so in order to achieve optimum results.
The Optimizer will attempt to find the optimal pin allocations for routing, while obeying the defined Pin Group settings. The total
routing length and the number of net crossovers are key factors when routing the PCB, and the optimizer will focus on keeping
both the routing length and the number of crossovers down to a minimum.
Figure 25 shows an example of an FPGA device on a PCB, which has been rotated by 180 Degrees to create a chaotic
connection pattern.
Figure 26 shows how the automatic Optimizer tool can be used to great effect to obtain an optimized set of pin allocations from
which to route. The results of the optimization are presented, prior to committing the update to the PCB.
Figure 26. Connections for the same FPGA device after pin swapping optimization.
For a more hands-on, manually controlled approach, interactive pin swapping functionality is provided. Invoked using the
Interactive Pin/Net Swapping and Interactive Differential-Pair Swapping commands, this functionality allows for fine tuning
and gives the power to make any number of individual pin swaps – again, in accordance with the Pin Groups already
configured. In fact, a sequence of swapping processes might typically be performed. For example, the automatic Optimizer tool
may be run initially and then the interactive tool(s) used afterwards to fine tune a couple of out of place nets/pins.
If any FPGA components in the design are linked, due to the design being multi-channel in nature, (e.g. U1_X1, U1_X2), they
must be optimized together. When using an interactive pin swapping tool, swapping can not be carried out on the linked
component and a dialog will appear alerting you to this fact. For example, if U1_X2 is linked to U1_X1, both components must
be optimized together, but interactive pin swapping can only be carried out on U1_X1.
Figure 27. Execution of ECO to resynchronize the PCB document with the source schematics of the parent project.
Executing the changes will result in the linked FPGA and PCB projects becoming unsynchronized, as indicated by the
Schematic-FPGA Project link, in the FPGA Workspace Map dialog, displaying in red (Figure 28).
Figure 28. The linked FPGA and PCB projects are unsynchronized, now that the FPGA component schematic in the PCB project has been
updated with the pin swapping data.
Clicking on this link will bring up the Synchronize dialog, with the affected (swapped) pins highlighted in red (Figure 29).
Figure 29. The Synchronize dialog now reflects the differences that exist between the two linked projects.
Click on the Update To FPGA button to push the changes to the FPGA project, or more specifically, the appropriate FPGA
Constraint file. The update is performed using an ECO, with the required changes appearing as a series of Change
Parameter Value modifications in the Engineering Change Order dialog (Figure 30).
Figure 30. Execution of ECO to resynchronize the FPGA and PCB projects, passing the pin swap data to the relevant constraint file.
With the design changes created through use of the pin swapping tools now passed from the PCB project to the FPGA project,
the FPGA Workspace Map dialog will show both projects as now being fully synchronized (Figure 31).
Figure 31. The linked FPGA and PCB projects are again fully synchronized, now that pin swap data has been propagated to the relevant
constraint file in the FPGA project.
After pin swapping has been carried out on the PCB, the changes pushed through to the FPGA project and the projects re-
synchronized, the Vendor Place & Route tools must be run again (Build stage in the Devices view). This is because the pin
swap information has been updated in the constraint file only and now needs to be physically applied to the FPGA device.
Running the Place & Route tools again will ensure the new pin assignments are used in an updated FPGA programming file.
Figure 32. The Synchronize dialog now reflects the pin assignment differences between the linked projects.
Click on the Update To PCB button to push the changes to the PCB project – specifically the FPGA component schematic. The
update is performed using an ECO, with the required changes appearing as a series of Move Pins To Different Nets
modifications in the Engineering Change Order dialog (Figure 33).
Figure 33. Execution of ECO to resynchronize the FPGA and PCB projects, passing the pin swap data to the FPGA component schematic.
Performing these changes will then make the PCB-Schematic link out of date (if PCB components exist at this stage). Clicking
the relevant link will update the PCB document using an ECO, with the required changes appearing as a series of Remove
Pins From Nets and Add Pins To Nets modifications in the Engineering Change Order dialog (Figure 34). Note that
further changes may still be required to the PCB document if these pins/nets contained any routing.
Figure 34. Execution of ECO to resynchronize the schematic and PCB documents in the PCB project.
project and the component on the schematic in the PCB project. Clicking the link will open the Synchronize dialog, with an entry
for the newly added port in the Unmatched FPGA Signals region of the dialog (Figure 36).
The corresponding net can be added to the FPGA component schematic sheet (in the PCB project) either manually – by
creating a To Do Item and adding it at a later stage – or automatically, by regenerating the auto-generated FPGA schematic
sheet (where one exists). The following sections take a look at these two methods more closely.
Figure 39. The To Do item, exported from the Synchronize dialog, will appear listed in the To-Do panel.
If a physical pin number has already been assigned in the constraint file, for
the new port in the FPGA project, you can simply add a net label with the
same name as the port, to the corresponding pin of the FPGA component.
Ensure that the pin electrical type is set to be the same as the I/O Type
specified for the port. Figure 40 illustrates this for the assigned pin G18.
The port and pin signals will be matched automatically by the fact they have Figure 40. Net label "STATUS" added to pin G18 of
the FPGA component and the pin electrical type set to
the same net name. The new matched signal entry will appear in the
Output.
Synchronize dialog. As long as the electrical type for the pin matches that
defined for the port, the entry will appear highlighted in Green and the FPGA
Workspace Map dialog will show the link as fully synchronized (Green).
If a physical pin number had not been assigned in the constraint file, or no constraint entry had been made at all (the port was
added to the FPGA Project schematic alone), simply add the net label to the required pin of the FPGA component (in the PCB
project) as detailed previously. The constraint group entry, including the physical pin number parameter can then be passed
back to the FPGA project through the Synchronize dialog and subsequent Engineering Change Order dialog.
Figure 41. Passing the required pin information to the constraint file in the FPGA project.
Figure 42. Recreating an auto-generated sheet will automatically add the required information based on the port in the FPGA project.
Other sheet(s) using a sheet symbol to link to the FPGA component schematic sheet will need to be updated, manually, as
appropriate. If an auto-generated sheet was not used, the pin will need to be connected as appropriate.
If a PCB document exists at this stage, the PCB-Schematic link will also now show as being out of date (Red). Pass the
changes from the schematic component to the PCB footprint to obtain full synchronicity between the projects.
Entering the FPGA Workspace Map dialog will show the Schematic-FPGA Project link as out of date. Clicking the link will open
the Synchronize dialog, with an entry for the removed port’s corresponding net in the PCB project, in the Unmatched PCB
Signals region of the dialog. Figure 43 illustrates this for the removed port TEST_BUTTON.
The signal on the FPGA Component schematic sheet can be removed in much the same way as one was added – either
manually, through the use of a To Do Item, or automatically by recreation of the auto-generated schematic sheet, where one
exists.
If the sheet was auto-generated (using the FPGA To PCB Project Wizard), the net label and port will be removed from the
sheet. It will be marked as an unused I/O pin and configured using the rules set up when the sheet was first generated. If the
sheet was not auto-generated, connections to this pin should be removed manually.
Figure 44. Detection of a port whose name has changed from TEST_BUTTON to TST_BTN.
The original signal can simply be renamed, manually, on the FPGA Component schematic sheet in the PCB project. An
appropriate Rename Net To Do item for the PCB project can be created as a reminder, simply by clicking the button, to
the right of the unmatched signals lists.
In a similar fashion when a net label is renamed for a component pin on the PCB side, it is detected in the Synchronize dialog
as though a new net has been added and the existing net removed. There will therefore be an entry for the new signal name in
the Unmatched PCB Signals list and an entry for the original signal name in the Unmatched FPGA Signals list.
The original signal can simply be renamed, manually, on the top-level sheet of the FPGA project. An appropriate Rename Port
To Do item for the FPGA project can be created as a reminder, simply by clicking the button, to the right of the
unmatched signals lists.
It is often the case that the PCB and FPGA projects are not designed by the same person. Indeed, they might not be developed
on the same computer or even in the same locale. In such cases, a method of passing design changes between projects is
needed, whereby only relevant information is passed, without the need to send the entire project – PCB or FPGA – back and
forth between locations and designers. The answer to remote development of projects that need to be kept synchronized, with a
view to bringing them together at a future date, is the Stub.
The Stub is essentially a satellite FPGA project that is initially produced by the PCB designer. It is used to pass changes made
to the PCB project on to the FPGA designer, who imports changes from the Stub FPGA project into the full FPGA design
project. Any changes made by the FPGA designer are passed back into the stub, which in turn is sent back to the PCB designer
who, to all intents and purposes, treats the Stub as if it were the real, full-blown FPGA project.
Figure 45 illustrates the two processes of maintaining design changes between linked PCB and FPGA projects – with and
without the use of a Stub FPGA project.
FPGA Design
PCB Design FPGA
Project
Project Workspace
FPGA Master
FPGA
PCB Design Design Project
Workspace
Project
Stub
FPGA Import FPGA
Project Project
Changes
Figure 45. Use of a Stub FPGA project to keep remote projects synchronized.
The name Stub does not actually appear anywhere, rather it is a term of reference used to reflect the fact that the schematic
sheet in the FPGA project does not contain a complete design – no FPGA components, processors, virtual instruments, or
wiring – it simply contains the top-levels ports for the full FPGA design.
The Stub FPGA project is automatically linked to the PCB project, provided you
enabled the option to do so in the Wizard. The projects are linked by the
configuration defined in the Wizard when creating the FPGA project. This is
reflected in the Projects panel, when in Structure Editor mode, by the FPGA
project / Linked Configuration entry appearing as a sub-design of the
PCB project's FPGA component.
Figure 48 illustrates this for the example Stub FPGA project considered
previously. In this case, the FPGAStub.PrjFpg / Stub entry appears as a
sub-design of the FPGA device, U1.
Figure 50. Pin swap data in PCB passed through schematic to Stub FPGA project.
In this case, the pins of two output signals – AUDIO_MIC_EN and SPI_CLK – have been swapped (or rather, the net labels for
the two signals moved between the two pins Y7 and AA6).
When the relevant design change to the PCB project has been passed to the
linked Stub FPGA project, this Stub project can now be sent to the FPGA
Designer who has the full, Master FPGA design project. Remember, the two
design projects may be under development a few offices apart in the same
building, or maybe even on opposite sides of the globe. Using the Stub FPGA
project in order to synchronize changes in either design breaks down the
distance barrier.
When the Stub FPGA project is received by the FPGA Designer, it should be
opened, alongside the Master FPGA design project, in the Projects panel.
Ensure that the top-level schematic for the Master FPGA project is open as the
active document in the main design window, and that the Master FPGA project
has focus in the Projects panel.
From the main Project menu, choose the Import Changes From FPGA
Project command. The Import FPGA Project Changes Wizard will appear
(Figure 52 on the following page).
The Wizard is the key to passing design changes from the (remote) PCB project, through the Stub FPGA project and into the full
(Master) FPGA design project.
Figure 53. Specify which configuration to use for the Stub and Master projects, where multiple configurations exist.
A configuration will be compatible if it contains a constraint file targeting the physical FPGA device in the FPGA project. Simply
choose the configuration that is to be used for both Stub and Master.
The configuration chosen should be the one which contains the relevant constraint file that:
• Contains the design changes synchronized from the PCB project, in the case of the Stub and
• Is required to take the imported design changes, in the case of the Master.
Note: If there is only one configuration in both the Stub and Master projects, this page of the Wizard will not be displayed.
Note: It is possible that the same constraint file is used in multiple configurations. Although only one compatible configuration
would be chosen, all configurations are effectively 'chosen' in this case, although only one constraint file will be updated.
Figure 54. Use this page of the Wizard to match signal names between the Stub and Master projects.
Comparison is made using the port names on the top-level schematic sheet in each project. The entries in the relevant
constraint files are not used, nor are any net labels on the schematic sheets.
To be linked, the signals must be matching with respect to their names. Those signals in both projects whose names are
identical, are automatically matched and entered into the Matched Nets region of the page with a green equality sign.
Those signals that have different names and cannot be automatically matched are entered into their respective regions:
• Nets not to be added – these are signals in the Stub FPGA project that by default will not be added into the Master project
• Nets to be removed – these are signals in the Master project that by default will be removed from the project.
Use these two regions to specify the matching of signals between the projects as required. Use the buttons at the bottom of
each region to effect a matching decision. The following sections consider each of the possible matching decisions.
Manually match the signals as required using these buttons. Each matched pairing will have the precedent signal name entered
into the Matched Nets region, along with a blue Greater Than sign, marking the entry as being a manual match.
Note: You cannot proceed any further in the Wizard until the pin allocations between the two projects are completely matched.
As design changes are only passed unidirectionally (in this case from Stub project to Master project), any discrepancies in pin
allocations must first be resolved by pressing the corresponding button (the name of which
reflects the chosen configuration in the Master FPGA project). This will pass the pin assignment from the Stub project into the
Master project by updating the configuration in the Master project or, more specifically, the relevant constraint file associated to
it.
Figure 60. Example modifications implementing the design changes imported from the Stub FPGA project.
Revision History