Gunjan FPGA
Gunjan FPGA
GUNJAN SHARMA
1
OUTLINE
• Introduction
• FPGA Architecture
• Xilinx Virtex-E
• Design Flow
• Specifications of Design
• Design Entry
• Design Synthesis
• Mapping the Design
• Placing the Design
• Routing the Design
• Bit-stream Generation
• Assigning pins
• Design reports
Why FPGA?
• Custom ICs sometimes designed to replace the large amount of glue logic:
Pros: a. Reduced system complexity.
b. Improved performance.
Cons: a. Very expensive to develop.
b. Delay introduction of product to market (time to market)
because of increased design time.
• The custom IC approach was only viable for products with very high volumes
(where NRE could be amortized), and which were insensitive vis-à-vis time to
market.
• FPGA Manufacturers:
• Xilinx (50%)
• Altera (33%)
• Actel, Atmel, Cypress, Lattice, ..
• An FPGA is an array of
programmable logic elements
that can be connected to inputs
or outputs.
6
But first, what is inside an FPGA? (Continues…)
output
a
b FF
c
d
LUT
clk
Logical Cell
Simple Circuit
LUT Configuration bits
0 0 0 1 0 0 0 ............ 1 1 1
LUT LUT
a ..... 1 0 0 ..... a
b
c FF . . b FF
d c
d
..... 1 .....
. .
0 1 1 1 1 0 0 ............ 1 0 1
LUT LUT
a a
b FF ..... 0 1 0 .....
b
c FF
c d
d . .
Example: FPGA from Xilinx
• Basic blocks are logical cells.
• A slice comprise of two logic cells.
• A configurable logic block (CLB) may have up to 4 slices:
• CLB of XC4000 series have 1 slice.
• CLB of virtex series have 2 or 4 slices.
CIN
Source: xilinx.com
Interconnections
Source: xilinx.com
Programmable Interconnects
• Connection box
• Connects input/output of logic block to interconnect channels.
• Switch box
• Enables the connection of two interconnect lines.
Direct Interconnect
General
- Connects Purpose
Interconnection
adjacent
Long line CLBs
Interconnect
through direct
--interconnects
Connects
Time criticalgeneral
signals
interconnections and
-without going
Horizontal,
passes through vertical
one&or
throughlong
Global switch
more switchlinesboxes
boxes very fast
-slow
Global long lines for
clocks and resets
Source: xilinx.com
Xilinx : Virtex-E (Floorplan)
Source: xilinx.com
Virtex-E Configurable Logic Block (CLB)
Source: xilinx.com
Details of Virtex-E Slice
COUT
CIN
Source: xilinx.com
Virtex-E Input/Output Block (IOB) Detail
Source: xilinx.com
DESIGN FLOW
Specifications
• Specifications of Design.
• Synthesize Design
• Map design Technology
Mapping
• Placing design inside FPGA
• Routing design inside FPGA
• Convert final design into a bit stream for Place&Route Simulation
programming PFGA
cout
64
a
64
64-BIT sum
64 ADDER
b
cin
Specifications
Specifications
HDL
(Behavioral)
Synthesis
Schematic Technology
Technology Mapping
Mapping
Place&Route
Place&Route Simulation
FPGA
Bit-file
Bit-file
FPGA
FPGA
How do we go from
This… To This…
library IEEE;
library
use IEEE;
IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use
use IEEE.STD_LOGIC_ARITH.ALL;
IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity add_g is
entity add_g
generic is
(x : natural := 63);
generic (x : natural := 63);
port (a : in std_logic_vector (x downto 0);
b port (a : in std_logic_vector
: in std_logic_vector (x downto
(x downto 0); 0);
b : in std_logic_vector
cin : in std_logic; (x downto 0);
cin :: out
sum in std_logic;
std_logic_vector (x downto 0);
sum
cout : out: out std_logic_vector (x downto 0);
std_logic);
cout : out std_logic);
end entity add_g;
end entity add_g;
architecture behavior of add_g is
architecture
begin -- behavior behavior of add_g is
begin -- behavior
adder: process(a,b,cin)
adder: carry
variable process(a,b,cin)
: std_logic;
variable
variable isum carry : std_logic;
: std_logic_vector(x downto
variable
0); isum : std_logic_vector(x downto
0);
begin
begin
carry := cin;
carry
for i in := cin;
0 to x loop
for i in
isum(i) :=0 toa(i)
x loop
xor b(i) xor carry;
carry := (a(i)a(i)
isum(i) := andxor b(i)orxor
b(i)) carry;
(a(i) and
carry := (a(i) and
carry) or (b(i) and carry);b(i)) or (a(i) and
carry)
end loop; or (b(i) and carry);
end<=
sum loop;
isum;
cout <=<=
sum isum;
carry;
cout <=
end process adder; carry;
end
end process adder;
architecture behavior;
end architecture behavior;
Design Entry
• It means analyzing the whole design, and selecting which logic resources
available in the FPGA will be used to perform the task.
library IEEE;
library
use IEEE;
IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use
use IEEE.STD_LOGIC_ARITH.ALL;
IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity add_g is
entity add_g
generic is
(x : natural := 63);
generic (x : natural := 63);
port (a : in std_logic_vector (x downto 0);
b port (a : in std_logic_vector
: in std_logic_vector (x downto
(x downto 0); 0);
b : in std_logic_vector
cin : in std_logic; (x downto 0);
cin :: out
in std_logic;
sum
sum : out
std_logic_vector (x downto 0);
std_logic_vector (x downto 0);
After synthesis,
cout : out std_logic);
cout : out std_logic);
end entity add_g;
we get:
end entity add_g;
architecture behavior of add_g is
architecture
begin -- behavior behavior of add_g is
begin -- behavior
adder: process(a,b,cin)
adder: carry
variable process(a,b,cin)
: std_logic;
variable
variable isum carry : std_logic;
: std_logic_vector(x downto
variable
0); isum : std_logic_vector(x downto
0);
begin
begin
carry := cin;
carry
for i in := cin;
0 to x loop
for i in
isum(i) :=0 toa(i)
x loop
xor b(i) xor carry;
carry := (a(i)a(i)
isum(i) := andxor b(i)orxor
b(i)) carry;
(a(i) and
carry := (a(i) and
carry) or (b(i) and carry);b(i)) or (a(i) and
carry)
end loop; or (b(i) and carry);
end<=
sum loop;
isum;
cout <=<=
sum isum;
carry;
cout <=
end process adder; carry;
end
end process adder;
architecture behavior;
end architecture behavior;
Mapping the design
• Once the design has been converted into the logic resources of the FPGA,
we find a location for these within the FPGA.
Placing the design (Continues…)
• Once logic resources have been assigned a location within the FPGA, we
need to interconnect the logic resources using internal buses inside the
FPGA.
Routing the design (Continues…)
Bit-stream Configuration
Assigning pins
• When implementing an entity in FPGA, the input and output ports are
mapped to pins of the FPGA
entity add_g is
entity add_g
generic is
(x : natural := 63);
generic (x : natural := 63); a(63:0) cin
port (a : in std_logic_vector (x downto
0);port (a : in std_logic_vector (x downto b(63:0) FPGA
b 0);
: in std_logic_vector (x downto 0);
b ::in
cin in std_logic_vector
std_logic; (x downto 0); cout
cin : in std_logic;
sum : out std_logic_vector (x downto 0); sum(63:0)
sum
cout : out: out std_logic_vector (x downto 0);
std_logic);
cout : out
end entity add_g; std_logic);
end entity add_g;
Assigning pins (Continues…)
• A file called a UCF (User Constraint File) is used to define which pin will be
connected to a particular input or output.
• Within Xilinx Project manager, the “assign package pin” function can be
used to easily define input and output pin location.
Design Summary