VHDL Guide
VHDL Guide
Quickstart Guide
Over the last 50 years the electronics engineer has had a rapidly changing palette to work with. The
introduction of the transistor in 1947 heralded the arrival of solid-state electronics, fostering the
development of binary or digital electronics. With the implementation of multiple transistors on a
single piece of silicon in 1959 the integrated circuit (IC) was born. With it came the application of
Boolean logic a form of algebra where all values are reduced to true or false giving rise to the
computer age.
The spread of computers throughout the developed world, and the rapid improvements in IC
development capabilities saw more and more transistors being squeezed onto an IC. The result of this
has been more and more powerful devices, identified by the term large scale integration, or LSI
circuits. This process has continued in harmony with the introduction of numerous computer interface
standards. Bringing together LSI fabrication capabilities with these defined standards has resulted in
the development of powerful, application specific integrated circuits (ASICs) for networking,
communications, image processing, computer bus management, and so on.
Typically these components are combined with microprocessors and other logic to form sophisticated
electronic products, capable of performing an incredible variety of tasks each solving some problem
that the engineer set out to resolve.
Along with the growth in the size and functionality of application-specific ICs, there has been a
corresponding growth in the size and capabilities of programmable logic. Larger programmable devices
typically have their functionality arranged as an array of general purpose logic blocks, with
programmable interconnections between them. These are known as Field Programmable Gate Arrays
(FPGAs).
With their ability to operate at high switching frequencies FPGAs have provided an ideal solution for
implementing large amounts of high speed signal processing circuitry, allowing the designer to reduce
the size and cost of a product.
Today these devices have sufficient capacity to implement more than just some of the hardware in a
product they can potentially be programmed to implement an entire digital system, including the
microprocessor, peripheral components and the interface logic.
To do this the engineer needs a design environment that solves the system integration issues where
they can capture the hardware design, write the embedded software for the processor, and implement,
test and debug both the hardware and software on the target FPGA.
Altium Designer brings together the required tools and the necessary communications systems.
Combine this with an FPGA implementation platform the NanoBoard and you have a complete
FPGA design environment. This QuickStart guide will give you an overview of how you can capture
and implement an entire digital system in an FPGA in this design environment.
EDIF
HDL Simulation Download
program file
High-level
FPGA Design FPGA Place
system FPGA EDIF
Capture & Route
specification Synthesis
(Schematic/HDL) (vendor tools)
& partitioning
P
Figure 2. System diagram, showing the flow of the hardware design, embedded software, and PCB design.
Once the hardware design is complete it is synthesized, a process that transforms it from the capture
form into a low-level gate form.
After design synthesis a place and route is performed, a process where device-aware software
implements the design in the target FPGA. The Vendor-specific place and route software required to
synthesize for the target architecture is operated by the Altium Designer environment, which
automatically manages all project and file handling aspects required to generate an FPGA program file.
To test and debug the design the system includes a NanoBoard, an implementation platform that
includes an FPGA, as well as an array of general purpose peripheral components. The software
communicates directly with the NanoBoard via a port on the PC, programming the FPGA and
implementing your design.
Once the design has been implemented on the NanoBoard it can be debugged, using virtual
instruments and boundary scan pin status technology to debug the hardware, and the integrated
debugger for the embedded software. Since debugging is performed live from within the same
environment as the design is captured in, design iterations can be carried out quickly and
software/hardware solutions rapidly explored.
Define constraints
and set up configuration
Select project/configuration
combination in Devices view
Program device
For detailed information on how to create an FPGA project, add schematic sheets, place and
wire components and implement the design in an FPGA, refer to the Getting Started with FPGA
Design tutorial in the Getting Started with Altium Designer book.
For more information on multi-sheet designs, refer to the Connectivity and Multi-sheet Design
article in the System Design, Capture and Analysis book.
instantiated the required number of times. The advantage of multi-channel design is that it allows you
to maintain a single copy of the source channel, even after the design has move to implementation in
the FPGA or on the PCB.
For more information on how to capture a design with repeated sections, refer to the Multi-
Channel Design Concepts article in the System Design, Capture and Analysis book.
Figure 5. Document hierarchy is created by placing sheet symbols to represent the document below.
Note that while the environment supports compiling projects using either a flat or hierarchical
connective structure, FPGA projects must be hierarchical.
Figure 6. Hierarchical net connectivity is from the sheet entries to matching ports on the document below.
For details on placing the wiring, refer to the Getting Started with FPGA Design tutorial in the
Getting Started with Altium Designer book.
For more information on connectivity in multi-sheet designs, refer to the Connectivity and Multi-
sheet Design article in the System Design, Capture and Analysis book.
Note that apart from the JB-type joiner, all bus joiner pins have an IO direction use the correct
joiner to maintain the IO flow. Pin IO can be displayed on sheet, enable the Pin Direction option
on the Schematic General page of the Preferences dialog.
Figure 9. JB-type bus joiner, note that there is no IO direction for a JB component
Read the flow of nets through a JB-type bus joiner by matching from the nets in the attached bus, to
the first index on the bus joiner, to the second index in the bus joiner, to the nets defined in the second
bus net label.
Left Bus IndexA IndexB Right Bus
The rules for matching nets at each of the points are as follows:
Figure 10. An example of using the JB bus joiner to achieve sub-set mapping.
If both bus ranges are descending, match by same bus index (one range must lie within the
other for valid connections). In Figure 10 the matching is:
ADDR9 IndexA9 IndexB9 ROMADDR9, thru to
ADDR0 IndexA0 IndexB0 ROMADDR0
If one bus range is descending and another is ascending, the indices are matched from left to
right. In Figure 12 the matching is:
INPUTS0 IndexA15 IndexB31 PORTB31, thru to
INPUTS15 IndexA0 IndexB16 PORTB16
Figure 13. Another example of using a bus joiner for range inversion.
Model linkage
EDIF model linkage is not handled like standard component model linkage, since the model must be
chosen to suit the target device. For EDIF models the target device family is used to select the correct
folder of EDIF models (for example \Xilinx\Spartan2E), and then the components Library Reference is
used to select the EDIF model file from within that folder. Models included with the system are stored in
a hierarchy of folders under \Program Files\Altium2004\Library\Edif.
As well as system supplied models, user-created pre-synthesized EDIF models are supported. These
can be stored in a user model folder, this folder is specified on the FPGA Synthesis page of the
Preferences dialog (DXP Preferences). User models can also be stored in a hierarchy of folders if
you are developing a model for multiple target devices.
The search sequence for EDIF models is:
$project_dir
$user_edif\$vendor\$family
$user_edif\$vendor
$user_edif
$system_edif\$vendor\$family
$system_edif\$vendor
$system_edif
Pre-synthesized user models are developed by creating a Core project, whose EDIF output becomes
the model for your user-defined component. There are a number of features to support this process,
including commands to synthesize for all targets, publish the EDIF model (package it with all other
required EDIF models), and generate a component symbol to represent the core.
For more details see the Creating a Core Component tutorial. The tutorial also details how to
use that component in an FPGA project while still developing the core.
For an example of a core component project that is linked to an FPGA project, open the design
workspace \Program Files\Altium2004\Examples\FPGA Core Integration\LCD
Controller And Keypad\LCD_Keypad.DSNWRK. To use this example you must define a user
model location first, then generate the model for the keypad scanner before attempting to
process the FPGA design (LCD_Keypad) that uses the model.
The Altium Designer Documentation Library includes both hardware and software reference
manuals for each processor. With the Documentation Library open, navigate to Embedded
Processor Reference Manuals.
Peripheral components
Peripherals can be placed from the \Program Files\Altium2004\Library\Fpga\FPGA
Peripherals.IntLib library. The following peripheral components are available:
CAN Controller parallel to serial interface, implementing a Controller Area Network serial
communications bus on the serial side. The CAN serial bus provides high bit rate, high noise immunity
and error detection. The Controller implements the BOSCH CAN 2.0B Data Link Layer Protocol. 8-bit
Wishbone and non-Wishbone variants available. The CAN controller can be used in conjunction with
the CAN interface hardware on the NanoBoard.
EMAC Controller parallel to serial interface providing 10/100Mbps interface between a host
processor and a standard Physical Layer device (PHY) through support of the IEEE802.3 Media
Independent Interface (MII). 8-bit (Wishbone and non-Wishbone) and 32-bit (Wishbone) variants
available.
FPGA Startup Unit user-definable power-up delay, used to implement power-on reset. An internal
counter starts on power up, counting the number of clock cycles specified by the Delay pin, the output
pin being asserted when the count is reached. Variants available with 8-, 16- and 32-bit delays.
I2C Controller parallel to serial interface, implementing an Inter-Integrated Circuit (I2C) 2-wire serial
bus on the serial side. Controllers only support a single master I2C serial bus system. 8-bit Wishbone
and non-Wishbone variants available. The I2C controller can be used in conjunction with the I2C
interface hardware on the NanoBoard.
Keypad Controller 4 by 4 keypad scanner with de-bounce. Can be used in For help on an FPGA-
a polled or interrupt driven system. Available in either Wishbone or non- ready component, click on
the components entry in
Wishbone variants. The Keypad controller can be used in conjunction with the
the Libraries panel, or
keypad on the NanoBoard. hover over the placed
LCD Controller easy to use controller for a 2 line by 16 character LCD component, and press F1.
module. Available in Wishbone and non-Wishbone variants. Also provides a
variant that caters for non-simultaneous access to both a physical memory device and a target LCD
panel. The LCD controller can be used in conjunction with the LCD display on the NanoBoard.
MAX1104 DAC Controller parallel to serial interface providing a simple interface to the MAX1104 8-
bit CODEC device on the NanoBoard.
PRT Unit simple parallel port interface providing register storage for data to be transferred to/from
another device in a design. Three families of non-Wishbone device are available, offering output only,
I/O and I/O with additional tristate buffer enable for each output port. Within each family, single, two
and four port devices with 8- or 32-bit port widths are available.
PS2 Controller parallel to serial interface providing a bidirectional, synchronous serial interface
between a host processor and a PS/2 device (keyboard or mouse). The PS2 controller can be used in
conjunction with either of the two sets of PS2 interface hardware on the NanoBoard.
SPI Controller provides an SPI Master interface, enabling a Wishbone-compliant host processor to
communicate with a slave SPI peripheral device which resides outside of the physical FPGA device to
which the design is targetd, such as the audio DAC and serial Flash RAM devices located on the
NanoBoard.
SRL0 Unit simple parallel to serial interface, full duplex, single byte buffering. Both Wishbone and
non-Wishbone variants are available. The SRL0 can be used in conjunction with the RS-232 interface
hardware on the NanoBoard.
TMR3 Unit dual timer unit, configurable as either Timer or Counter with four possible modes of
operation for each. Available in Wishbone and non-Wishbone variants.
VGA Controller providing a simple interface between a host processor and any VGA-compatible
monitor. Available in 8-bit (non-Wishbone) and 32-bit (Wishbone-compliant) variants. The VGA
controller can be used in conjunction with the VGA output on the NanoBoard.
WB_DUALMASTER configurable Wishbone device providing a simple means of sharing a slave
Wishbone device between two masters for example, sharing a physical memory device between
either two processors or a processor and a memory-based peripheral, such as a VGA Controller.
WB_INTERCON configurable Wishbone device providing a means of accessing one or more
Wishbone-compliant slave devices over a single Wishbone interface. Connecting directly to either the
External Memory or Peripheral I/O Interfaces of a processor, the device facilitates communication with
physical memory devices or I/O peripherals, respectively.
WB_MEM_CTRL configurable Wishbone memory controller that, depending on its configuration,
provides a simple interface between a 32-bit processor (such as the TSK3000A or PPC405A) and
either Static RAM or 32-bit wide Block RAM (single or dual port).
WB_PRTIO configurable Wishbone parallel port unit, providing a simple register interface for storing
data to be transferred to/from another device in a design. Supports three port types I/O, Output only
and Tristate. Ability to define 1, 2 or 4 port interfaces with port data bus widths of 8-, 16- or 32-bit.
WB_PWMx Wishbone Pulse Width Modulation Controller, capable of generating PWM Counter
and/or Pre-Scaler Counter interrupts and a differential pulse-width-modulated rectangular wave output
signal. Available in standard (8-bit resolution) and extended (software-selectable 8-, 10-, 12- and 14-bit
resolution) variants.
WB_UART8 providing a serial communications port with hardware hand-shake and FIFO buffers.
Full duplex, fixed to no parity, 8 data bits and 1 stop bit. Includes a dedicated, high precision internal
baud rate generator. This device can be used with the RS-232 interface hardware on the NanoBoard.
The Altium Designer Documentation Library includes a hardware reference for each peripheral
device. With the Documentation Library open, navigate to FPGA Core Reference - Peripherals.
Generic components
Generic components can be placed from the \Program Files\Altium2004\Library\Fpga\FPGA
Generic.IntLib library. This library is included to implement the interface logic in your design. It
includes pin-wide and bus-wide versions for many components, simplifying the wiring complexity when
working with buses. As well as a broad range of logic functions, the Generic library also includes pullup
and pulldown components as well as a range of bus joiners, used to manage the merging, splitting and
renaming of buses.
For a definition of the naming convention used in the generic library and a complete listing of
available devices, refer to the FPGA Generic Library Guide in the FPGA Cores book.
For information on working with buses and using bus joiners, refer to the topic Using buses and
bus joiners earlier in this document.
Virtual Instruments
To test the state of internal nodes in the design you can wire in virtual instruments. The hardware
portion of the instrument is placed and wired on the schematic like other components, and then
synthesized into the FPGA. Virtual instruments are placed from the \Program
Files\Altium2004\Library\Fpga\FPGA Instruments.IntLib library.
The interface to each instrument is accessed in the Devices view once the design has been
synthesized and the FPGA programmed.
For information on working in the Devices view, see the Processing the Captured FPGA Design
application note.
The instrument hardware that has been synthesized into the FPGA communicates with its interface
using the Nexus communications standard, over the JTAG link.
Figure 15. Digital IO module, used to monitor and control nodes in the design
The digital I/O is a general purpose tool that can be used for both monitoring and activating nodes in
the circuit. It is available in either 8-bit wide or 16-bit wide variants, with 1 to 4 channels.
Each input bit presents as an LED, and the set of 8 or 16 bits also present as a HEX value. Outputs
can be set on a bit-basis by clicking the appropriate bit in the Outputs display, or a HEX value can be
typed in the HEX field. The Synchronize button can be used to transfer the current input value to the
outputs.
For more detailed information on using the Digital I/O instrument, see the IOB_x Digital I/O
Module core reference.
For more detailed information on using the Frequency Generator instrument, see the CLKGEN
Frequency Generator core reference.
The frequency counter is a dual input counter that can display the measured signal in 3 different modes
as a frequency, period, or number of pulses.
For more detailed information on using the Frequency Counter instrument, see the FRQCNT2
Frequency Counter core reference.
Figure 18. Logic analyzer instrument, with a logic analyzer component shown in the inset. Use the LAX to monitor
multiple nets in the design, then display the results as a digital or an analog waveform.
The logic analyzer allows you to capture multiple snapshots of multiple nodes in your design. The
available logic analyzers support the simultaneous capture of 8 or 16 nodes, or bits captured using
either software or hardware triggering. The number of capture snapshots is defined by the amount of
capture memory, this ranges from 1K to 4K of internal storage memory (using internal FPGA memory
resources). There are also 8-bit and 16-bit external memory variants.
Captured data
The capture results are displayed in the associated LAX
panel for the instrument, which can be accessed by
clicking the Show Panel button on the instrument panel.
Data is listed in terms of its Index - its position within the
sample buffer - and can appear in the following formats,
the display of which is enabled using the corresponding
check boxes in the panel:
Hexadecimal
Binary
Decimal
ASCII Character.
The time at which each sample is captured is also
shown.
The number of samples displayed will be equal to the
size of memory that is connected to the Logic Analyzer
(LAX_8 and LAX_16) or comes predefined as part of the
Logic Analyzer device (1K, 2K and 4K devices).
The LAX panel is also used to set up software triggering for the instrument.
Figure 19. Digital waveform capture results from the logic analyzer
The second waveform mode is an analog mode, where the value on all the logic analyzer inputs is
displayed as a voltage, for each capture event. The voltage range is from zero to the maximum
possible count value, scaled to a default of 3.3V (defined in the Logic Analyzer Options dialog). Click
the Show Waves button associated to analog output on the instrument panel to display the analog
waveform.
Figure 20. Analog waveform capture results from the logic analyzer
For more detailed information on using the Logic Analyzer instrument, see the LAX_x Logic
Analyzer core reference.
Figure 22. the soft devices JTAG chain is implemented by placing the NEXUS_JTAG_PORT (on the left) from the
FPGA Generic library and the NEXUS_JTAG_CONNECTOR from the FPGA NanoBoard Port-Plugin library.
For an overview of the Devices view, refer to the Devices view section later in this guide.
For information on the JTAG chains, see the PC to NanoBoard Communications article.
Superior application software portability, via the use of the OSEK Implementation Language, or OIL
The RTOS panel is a runtime status panel, which can display information such as System Status,
Alarms, Tasks and Resources. Open the RTOS panel via the Embedded button at the bottom right of
the workspace, then enable the required RTOS information by clicking the RTOS button on the Debug
toolbar.
For detailed information on the RTOS, refer to the TSK51x/TSK52x RTOS Guide.
For detailed information on the RTOS panel, press F1 with the cursor over the (focused) panel.
The linkage can also be examined in the Component Properties dialog of the processor component
that the embedded software project is linked to.
Figure 24. The name and location of the linked sub-project is displayed in the Component Properties dialog, of the
processor that the embedded code runs on.
There is an example tutorial that goes through this process in detail, refer to Getting Started with
FPGA Design in the Getting Started with Altium Designer book for more information.
For details about creating your own constraint file and getting to synthesis, see the Re-targeting
the design to the Production Board application note.
For a detailed description of configurations and constraints, and their role in design portability,
see the Design Portability, Configurations and Constraints article.
For details about supported constraints, see the Constraint File Reference.
FPGA
component libraries
Linked to pre-synthesized
EDIF models EDIF
Memory
Synthesizer
Memory size
Vendor Place FPGA
FPGA Project & route Physical JTAG
Schematic & Channel
EDIF Program
HDL Files Hardware
File
Synthesizer
Figure 25. The flow of the embedded software development and the hardware design
Before the design can be implemented in an FPGA there are a number of steps that must be carried
out. These include:
Compiling this process analyzes the design structure and checks for numerous design errors, such
as connectivity.
Synthesizing this process translates the high-level source design files into a low level description,
capable of being read by vendor place and route tools.
Building this is the process of implementing the design in the target FPGA. It requires that you have
appropriate vendor place and route tools installed on your PC, such as Actels Libero, Alteras Quartus,
Lattices ispLEVER, or Xilinxs ISE. Most vendors offer freely downloadable versions of these tools
from their websites.
These steps are all performed in the Devices view. If you have a NanoBoard connected to the parallel
port on your PC when you open the Devices view, the NanoBoard and the FPGA mounted on it will
appear as shown in the upper part of Figure 26. Once the FPGA design has been compiled any
processors or virtual instruments in the design will appear in the soft chain.
For detailed information on connecting and using a third party development board or
custom/production board with the software, see the Using Altium Designer with a 3rd Party Board
application note.
Figure 26. The Devices view, used to process and implement the design in the target FPGA device, then
communicate with it during debugging.
For a detailed description of working in the Devices view, see the Processing the Captured
FPGA Design application note.
Figure 27. Use the NanoBoard controller to set the clock frequency and program the 2 flash RAM devices
Design synthesis
Synthesis is the process of converting the high level schematic / behavioral HDL description to a low-
level gate description, suitable for processing by the FPGA vendor place and route tools. The built-in
synthesis engine first produces a hierarchical HDL netlist of the design, which is then synthesized into
an EDIF description. As well as the EDIF file that describes the design connectivity, the pre-
synthesized EDIF description of each component is also copied into the project sub-folder that is
automatically created under the project folder.
Synthesis options are configured in the Options for Project dialog (Projects menu).
Note: Two built-in synthesis engines are available and can be selected for use from the Synthesis tab
of the Options for Project dialog the Altium Synthesizer and DXP Synthesizer respectively. The
difference between these two is that the Altium Synthesizer supports the synthesis of schematic, VHDL
and Verilog files, whereas the legacy DXP Synthesizer supports only synthesis of schematic and VHDL
files. New FPGA projects will be set, by default, to use the Altium Synthesizer.
Program FPGA
This button downloads the device program file to the device. The download progress is displayed on
the status bar.
Figure 29. Enable the Live Update option in the Instrument Rack Hard Devices panel to monitor the state of the
FPGA pins.
The LED indicators in the panel will display the current state
of the FPGA pins. You can also monitor the pin status back
on the schematic, place a Probe object on any net that
connects to an FPGA pin to see the current status of that
net or bus (Place Directives Probe).
Note that the Instrument Rack - Hard Devices panel must
remain open for this feature to function, and the source
design must be compiled.
Working with an embedded processor Figure 30. Place probes on the schematic.
If your design includes a processor, the Devices view gives
access to embedded software tool features. Right-click on the processor icon to pause or reset the
processor, or to launch a debug session. Refer to the Embedded software development section of this
document for more information.
Figure 31. Use the Workspace map to manage the FPGA to PCB project linkage.
For complete details on creating and maintaining the FPGA to PCB project linkage and
performing PCB pin optimizations, see the Linking an FPGA Project to a PCB Project application
note.
Revision History
Date Version No. Revision