Академический Документы
Профессиональный Документы
Культура Документы
HDL models
Leonardo (Mentor Graphics), Design Compiler (Synopsys)
ASIC Design Flow
Behavioral
Verify
Model
Function
VHDL/Verilog
Synthesis
Physical
DRC & LVS Verify
Layout
Verification Timing
Map/Place/Route
Technology
Synthesis
Libraries
Leonardo:
Technology-
Level 1 – FPGA
Specific
Level 2 – FPGA + Timing
Netlist
Level 3 – FPGA + ASIC
or ASIC only
VHDL, Verilog, SDF,
EDIF, XNF
Leonardo – ASIC synthesis flow
Synthesis design flow
Leonardo synthesis procedure
1. Invoke leonardo
2. Select & load a technology library (ASIC or FPGA)
ASIC > ADK > TSMC 0.35 micron
3. Read input VHDL/Verilog file(s): count4.vhd
4. Enter any constraints (clock freq, delays, etc.)
5. Optimize for area/delay/effort level
6. Write output file(s)
count4_0.vhd - VHDL netlist
count4.v - Verilog netlist (for IC layout)
count4.sdf - Standard delay format file (for timing)
count4.edf - EDIF netlist (for Xilinx/Altera FPGA)
Synthesis example
Load technology library:
tsmc035 (ASIC), or Xilinx Spartan2 (FPGA)
Load design file: modulo7.vhd
Specify constraints: clock freq, delays, etc.
Optimization: effort, performance vs. area
Write synthesized netlist output(s):
modulo7_0.vhd :VHDL netlist for ModelSim & DFT
modulo7.v :Verilog netlist for import into DA-IC
modulo7.sdf : For ModelSim to study timing
modulo7.edf : EDIF netlist for 3rd party tools
modulo7.xnf : Xilinx netlist for Xilinx ISE
Behavioral model to be synthesized
-- modulo-7 counter with asynchronous reset and synchronous load/count
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;
entity modulo7 is
port( count, load, reset, clk: in std_logic;
I: in unsigned(2 downto 0); -- “unsigned” form of std_logic_vector
Q: out unsigned(2 downto 0)); -- defined in IEEE “numeric_std” package
end modulo7;
architecture Behave of modulo7 is
signal Q_s: unsigned(2 downto 0);
begin
process (reset,clk) begin
if (reset='0') then Q_s <= "000"; -- async reset
elsif (clk'event and (clk='1')) then
if (count = '1') and (Q_s = "110") then Q_s <= "000"; -- count rolls over
elsif (count='1') then Q_s <= Q_s + 1; -- increment count
elsif (load='1') then Q_s <= I; -- synchronous load
end if;
end if;
end process;
Q<=Q_s; -- drive the outputs
end;
Synthesized netlist (1)
-- Definition of modulo7
-- Thu Sep 21 10:48:09 2006
-- LeonardoSpectrum Level 3, 2005a.82
--
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity modulo7 is
port (
count : IN std_logic ;
load : IN std_logic ;
reset : IN std_logic ;
clk : IN std_logic ;
I : IN std_logic_vector (2 DOWNTO 0) ;
Q : OUT std_logic_vector (2 DOWNTO 0)) ;
end modulo7 ;
Synthesized netlist (2)
architecture Behave of modulo7 is
signal Q_2_EXMPLR, Q_1_EXMPLR, Q_0_EXMPLR, NOT_reset, nx4, nx14, nx22,
nx48, nx60, nx169, nx179, nx189, nx202, nx204, nx208, nx212, nx214,
nx218, nx225, nx228, nx230: std_logic ;
begin
Q(2) <= Q_2_EXMPLR ;
Q(1) <= Q_1_EXMPLR ;
Q(0) <= Q_0_EXMPLR ;
ix170 : mux21_ni port map ( Y=>nx169, A0=>nx14, A1=>Q_0_EXMPLR, S0=>nx225);
ix15 : oai22 port map ( Y=>nx14, A0=>Q_0_EXMPLR, A1=>nx202, B0=>nx230,
B1=>count);
ix203 : nand02 port map ( Y=>nx202, A0=>count, A1=>nx204);
ix205 : nand04 port map ( Y=>nx204, A0=>count, A1=>Q_2_EXMPLR,
A2=>Q_1_EXMPLR, A3=>nx228);
ix180 : oai32 port map ( Y=>nx179, A0=>nx208, A1=>count, A2=>load,
B0=>nx212, B1=>nx225);
Q_2_EXMPLR_EXMPLR : dffr port map ( Q=>Q_2_EXMPLR, QB=>nx208, D=>nx179,
CLK=>clk, R=>NOT_reset);
Synthesized netlist (3)
ix211 : inv01 port map ( Y=>NOT_reset, A=>reset);
ix213 : aoi22 port map ( Y=>nx212, A0=>I(2), A1=>nx214, B0=>nx22, B1=>nx4 );
ix216 : inv01 port map ( Y=>nx214, A=>count);
ix219 : nand02 port map ( Y=>nx218, A0=>Q_1_EXMPLR, A1=>Q_0_EXMPLR);
Q_1_EXMPLR_EXMPLR : dffr port map ( Q=>Q_1_EXMPLR, QB=>OPEN, D=>nx189,
CLK=>clk, R=>NOT_reset);
ix190 : mux21_ni port map ( Y=>nx189, A0=>nx60, A1=>Q_1_EXMPLR, S0=>nx225);
ix61 : ao32 port map ( Y=>nx60, A0=>nx48, A1=>nx218, A2=>nx4, B0=>I(1),
B1=>nx214);
ix49 : or02 port map ( Y=>nx48, A0=>Q_0_EXMPLR, A1=>Q_1_EXMPLR);
ix226 : nor02_2x port map ( Y=>nx225, A0=>count, A1=>load);
Q_0_EXMPLR_EXMPLR : dffr port map ( Q=>Q_0_EXMPLR, QB=>nx228, D=>nx169,
CLK=>clk, R=>NOT_reset);
ix231 : inv01 port map ( Y=>nx230, A=>I(0));
ix5 : inv01 port map ( Y=>nx4, A=>nx202);
ix23 : xor2 port map ( Y=>nx22, A0=>nx208, A1=>nx218);
end Behave ;
Synthesis steps
1. Load technology library into database
2. Read HDL models into database
3. Get design constraints (timing, area)
4. Analyze design
5. Elaborate design
6. Compile/optimize design
Repeat as necessary to meet constraints
7. Generate technology-specific netlist(s)
8. Generate simulation timing data (SDF file)
9. Generate reports (cells, area, timing)
Leonardo
Main
Window
Leonardo
Quick Setup Tab
Command
Technology Window
HDL Files
Optimization Effort
Output File
Leonardo commands/scripts
Enter “commands” at the command prompt, or read from
a Tcl script file.
A “variable” specifies a global constraint, directive, etc.
Tcl “set” and “unset” commands change variables
set voltage 3.3
An “attribute” is information attached to an object
(owner of the attribute) in the memory design database.
Allows user to fine-tune the process at the object level.
Set with Tcl “set_attribute” command (also “unset_attribute)
An attribute has: owner, name, value
Example:
set_attribute –net n1 –name max_fanout_load –value 10
Technology library (ASIC)
Load synthesis library for target technology into memory
Command example: load_library tsmc025_typ
Searches for $EXEMPLAR/lib/tsmc025_typ.syn
Technology “variables” affecting delay calculations (“delay
derating factors”)
Use tech library defaults if variables not set
set voltage 2.5 (volts)
set temp 40 (degrees celcius/centigrade)
set process 1 (process variation # – if available)
set max_fanout_load 5
Global limit on max inputs driven by one output
Override with max_fanout_load attribute on a net (prev. slide)
Leonardo splits nets or adds buffers as needed (but buffers add delay)
Technology Tab
(ASIC)
Operating
Choose ASIC library temp/voltage
for delay
calculations
FPGA options include
device family, part,
speed grade and
pin selection
Advanced settings:
Select max fanout
Technology
Tab (FPGA)
Specify:
part,
speed grade,
wire load,
use of IOB registers
Loading a design into the database
Input VHDL/ Verilog source file(s) to memory database
Analyze – syntax check and build database
check dependencies & resolve generics/parameters
Elaborate – synthesize into generic gates and black boxes
technology-independent gates
operators (arithmetic, relational, etc.) recognized and
implemented with “black boxes” (no logic in them yet)
FSM encoding
Run Pre-Optimize
step after Elaborate “Power Tabs” below here
Elaborate & VHDL Options Power Tabs
Elaborate: Select:
top-level design name,
architecture,
work library,
generics,
top-level only
VHDL Options:
Select VHDL 87 instead of 93
- Clock fequency/period
- Max delays
Clock name(s)
D Q
Pin
Clk
Clk
Pin D Q
Clk
Clk