PLD FPGA
ASIC FPGA
Application Specific Field Programmable
Integrated Circuit Gate Array
• designs must be sent • bought off the shelf
for expensive and time and reconfigured by
consuming fabrication designers themselves
in semiconductor foundry
• no physical layout design;
• designed all the way design ends with
from behavioral description a bitstream used
to physical layout to configure a device
Configurable
Logic
Blocks
I/O
Block RAMs
Block RAMs
Blocks
Block
RAMs
Off-the-shelf
High performance
Low development cost
Low power
Short time to market
Low cost in
high volumes Reconfigurability
Programmable
Logic Devices ISE Alliance and Foundation
Series Design Software
Main headquarters in San Jose, CA
Fabless* Semiconductor and Software Company
UMC (Taiwan) {*Xilinx acquired an equity stake in UMC in 1996}
Seiko Epson (Japan)
TSMC (Taiwan)
BX nBX
BX
1
0
=
EWCL
LUT AK O
Ports A
2
A
3
4
• Synchronous/Asynchronous 3
or
AK SP
LUT 0 O
A
read 1
A
2
A
3
DPRA DP
• Accompanying flip-flops used 0
DPRA O
1
DPRA
for synchronous read 2
DPRA3
• Dynamically addressable D Q
delay up to 16 cycles CE
• For programmable
pipeline
• Cascade for greater cycle
LUT
= D Q
CE
OUT
delays
• Use CLB flip-flops to add
depth
D Q
CE
DEPTH[3:0]
YB
G4 Y
G3 S
Look-Up Carry D Q
G2 TableO
G1 &
CK
Control
Logic EC
R
F5IN
BY
SR
XB
X S
F4
F3 Look-Up Carry D Q
F2 TableO
F1
& CK
Control
Logic EC
R
CIN
CLK
CE
SLICE
Carry Logic
Routing
• Increases efficiency and
performance of adders,
subtractors, accumulators,
comparators, and counters
Carry logic is independent of LSB
normal logic and routing
resources
Port B
Port A
Spartan-II
True Dual-Port
Block RAM
Block RAM
• Most efficient memory implementation
• Dedicated blocks of memory
• Ideal for most memory requirements
• 4 to 104 memory blocks
• 18 kbits = 18,432 bits per block
• Use multiple blocks for larger memories
• Builds both single and true dual-port RAMs
ECE 645 – Computer Arithmetic 23
Spartan-3 Block RAM Amounts
8k x 2 4k x 4
4,095
16k x 1 8,191
8+1
0
2k x (8+1)
2047
16+2
0
1023
1024 x (16+2)
16,383
WEB
ENB
Port B In WEB
Port B Out
8K-Bit Depth ENB
1-Bit Width
RSTB DOB[0]
CLKB
GND, ADDR[12:0]
ADDRB[12:0]
DIB[0]
Data_A
(18 bits)
18 x 18 Output
Multiplier (36 bits)
Data_B
(18 bits)
Output D Q
FF Enable EC
Output Path
SR
Direct Input
FF Enable
Input Path
Registered Q D
Input EC
SR
PSM PSM
Programmable
Switch
CLB CLB CLB Matrix
PSM PSM
Block
Block
Logic
I/O
Multipliers 18 x 18
Block RAMs
Virtex-II 1.5V Architecture
Multipliers 18 x 18
Block RAMs
Multipliers 18 x 18
configurations DIA[# : 0]
DIPA[# : 0]
library UNISIM;
use UNISIM.all;
entity RAM_16X1_DISTRIBUTED is
port(
CLK : in STD_LOGIC;
WE : in STD_LOGIC;
ADDR : in STD_LOGIC_VECTOR(3 downto 0);
DATA_IN : in STD_LOGIC;
DATA_OUT : out STD_LOGIC
);
end RAM_16X1_DISTRIBUTED;
end RAM_16X1_DISTRIBUTED_STRUCTURAL;
library UNISIM;
use UNISIM.all;
entity RAM_16X8_DISTRIBUTED is
port(
CLK : in STD_LOGIC;
WE : in STD_LOGIC;
ADDR : in STD_LOGIC_VECTOR(3 downto 0);
DATA_IN : in STD_LOGIC_VECTOR(7 downto 0);
DATA_OUT : out STD_LOGIC_VECTOR(7 downto 0)
);
end RAM_16X8_DISTRIBUTED;
GENERATE_MEMORY:
for I in 0 to 7 generate
RAM_16X1_S_1: ram16x1s generic map (INIT => X"0000")
port map
(O=>DATA_OUT(I),
A0=>ADDR(0),
A1=>ADDR(1),
A2=>ADDR(2),
A3=>ADDR(3),
D=>DATA_IN(I),
WCLK=>CLK,
WE=>WE
);
end generate;
end RAM_16X8_DISTRIBUTED_STRUCTURAL;
library UNISIM;
use UNISIM.all;
entity ROM_16X1_DISTRIBUTED is
port(
ADDR : in STD_LOGIC_VECTOR(3 downto 0);
DATA_OUT : out STD_LOGIC
);
end ROM_16X1_DISTRIBUTED;
component ram16x1s
generic(
INIT : BIT_VECTOR(15 downto 0) := X"0000");
port(
O : out std_ulogic;
A0 : in std_ulogic;
A1 : in std_ulogic;
A2 : in std_ulogic;
A3 : in std_ulogic;
D : in std_ulogic;
WCLK : in std_ulogic;
WE : in std_ulogic);
end component;
signal Low : std_ulogic := ‘0’;
end ROM_16X1_DISTRIBUTED_STRUCTURAL;