arm946es sintesi script - condividere con voi!

A

arm946es_softcore

Guest
#------------------------------------------------- ---------------------------

# Impostare l'opzione valori

impostare verbose 1; # 1 verbose per fonte e change_names comandi

impostare rtl_language verilog; # Verilog o VHDL fonte RTL

impostare rundc 1; # 1 a partire da RTL, 0 per i db
impostare rtl2pg 0; # 1 per RTL messo a porte flusso, 0 per RTL per cancelli

impostare use_clock_gating 0; #
usa RTL orologio gate con Power Compilatore
impostare integrated_cell 0; # dice Power Compilatore utilizzare integrato CG cella

impostare scan_ready 1; # pronto compilare un test saranno effettuati
impostare scan_insertion 1; # Può causare la scansione catene essere cucita
impostare numscanchains 4; # Il numero di catene di scansione da attuare

serie ultra 0; # Abilita DC-Ultra (richiede licenza)
impostare use_physopt 0; # Abilita PhysOpt comandi
impostare use_boundary_opt 0; # Abilita l'ottimizzazione di confine
impostare force_wireload 0; # Usare uno personalizzato Wire carico modello
impostare appiattire 0; # Rimuovere tutti gerarchia dal design

impostare clk_period 5,5; # Target orologio nel periodo ns
impostare io_clk_period 5,5; # Target di I / O orologio periodo ns
impostare clk_uncertainty 0,20; # attesi orologio inclinata in ns
impostare min_latency 0; # minima di clock di latenza sotto WCS
impostare max_latency 0; # massima di clock di latenza sotto WCS

impostare apply_name_rules 1; # Cambia il nome, secondo la regola verilog nomi
impostare perled 0; # Si applica la PERLED_MUX costante quando il parsing RTL

# ---------------------------

# Leggi nella tecnologia specifica script
se () ($ verbose
source-eco-verbose ./scripts/tsmc18.tcl
source-eco-verbose. / scripts / dont_use.tcl
Else ()
fonte ./scripts/tsmc18.tcl eco -
source-echo. / scripts / dont_use.tcl
)

# Definire il progetto di biblioteca
define_design_lib lavoro-path. / lib

se ultra) ($ (
set_ultra_optimization vera forza
)

se rundc $ () (
# Analizza la fonte RTL

impostare verilog_files (A946ESConstants.v A946ESParams.v \
a9esClkBlk.v a9esWRegDecoder.v a9esREG.v a9esFwd.v a9esRegC.v a9esIMM.v \
a9esIPipe.v a9esISyncr.v a9esMASeq.v a9esMainSeq.v a9esMem.v a9esPSR.v \
a9esPipeCtl.v a9esRegFwd.v a9esShALUADec.v a9esShALUTDec.v \
a9esShALUSeq.v a9esShALUCtl.v a9esWRegDec.v a9esMulCtl.v a9esCoreCtl.v \
a9esLU.v a9esSat.v a9esAU.v a9esArmShifter.v a9esShifter.v \
a9esSatTimes2.v a9esCLZ.v a9esExecute.v a9esRam3r2wSDff.v a9esByteRot.v \
a9esDAOut.v a9esIAOut.v a9esRegBank.v a9esMulDP.v a9esCoreDP.v \
a9esWptctl.v a9esDbgCommsctl.v a9esICEctl.v a9esTapScanctl.v \
a9esDbgctl.v a9esWptdp.v a9esDbgCommsdp.v a9esICEdp.v a9esTapScandp.v \
a9esDbgdp.v a9esDbg.v ARM9ES.v A946ESRegFile16x40.v A946ESFifo.v \
A946ESAHBBiuWb.v A946ESCPIntf.v A946ESCaRepl.v A946ESProtUnit.v \
A946ESClkGate.v A946ESETMBuf.v A946ESHitDet.v A946ESDaCntrl.v \
A946ESInsCntrl.v A946ESIntClken.v A946ESLdmStmTrk.v A946ESCp15.v \
A946ESCaTCMCntrl.v A946ESCore.v A946ESDValidMux.v A946ESIValidMux.v \
A946ESDValid.v A946ESIValid.v A946ESRBistShell.v A946ESDCache.v \
A946ESDTag.v A946ESDDirty.v A946ESICache.v A946ESITag.v A946ESRBistCtl.v \
ARM946ES.v)

impostare vhdl_files (a9esComponents.vhd a9esConstants.vhd a9esSat.vhd \
a9esArmShifter.vhd a9esDbgCommsctl.vhd a9esWptctl.vhd \
a9esDbgCommsdp.vhd a9esWptdp.vhd a9esISyncr.vhd a9esFwd.vhd \
a9esREG.vhd a9esRegC.vhd a9esShALUTDec.vhd a9esShALUSeq.vhd \
a9esShALUADec.vhd a9esWRegDecoder.vhd a9esAU.vhd a9esCLZ.vhd \
a9esLU.vhd a9esSatTimes2.vhd a9esShifter.vhd a9esRam3r2wSDff.vhd \
a9esICEctl.vhd a9esTapScanctl.vhd a9esICEdp.vhd a9esTapScandp.vhd \
a9esIMM.vhd a9esIPipe.vhd a9esMASeq.vhd a9esMainSeq.vhd \
a9esMem.vhd a9esMulCtl.vhd a9esPSR.vhd a9esPipeCtl.vhd \
a9esRegFwd.vhd a9esShALUCtl.vhd a9esWRegDec.vhd a9esByteRot.vhd \
a9esDAOut.vhd a9esExecute.vhd a9esIAOut.vhd a9esMulDP.vhd \
a9esRegBank.vhd a9esDbgctl.vhd a9esDbgdp.vhd a9esDbg.vhd \
a9esCoreDP.vhd a9esCoreCtl.vhd a9esClkBlk.vhd ARM9ES.vhd \
A946ESParams.vhd A946ESConstants.vhd A946ESFunctions.vhd \
A946ESComponents.vhd A946ESFifo.vhd A946ESAHBBiuWb.vhd \
A946ESHitDet.vhd A946ESCaRepl.vhd A946ESProtUnit.vhd \
A946ESDaCntrl.vhd A946ESInsCntrl.vhd A946ESIntClken.vhd \
A946ESLdmStmTrk.vhd A946ESCp15.vhd A946ESCaTCMCntrl.vhd \
A946ESCPIntf.vhd A946ESETMBuf.vhd A946ESClkGate.vhd \
A946ESCore.vhd A946ESRAMComponents.vhd A946ESICache.vhd \
A946ESITag.vhd A946ESDCache.vhd \
A946ESDTag.vhd A946ESDDirty.vhd A946ESDValidMux.vhd \
A946ESIValidMux.vhd A946ESDValid.vhd A946ESIValid.vhd \
A946ESRBistShell.vhd A946ESRBistCtl.vhd ARM946ES.vhd)

se ($ rtl_language == "verilog") (
se perled $ () (
analizzare verilog-f-definire PERLED_MUX $ verilog_files
Else ()
analizzare verilog-f $ verilog_files
)
Else ()
se perled $ () (
analizzare-f-VHDL definire PERLED_MUX $ vhdl_files
Else ()
analizzare VHDL-f $ vhdl_files
)
)

se use_clock_gating $ () (
se scan_ready $ () (
se integrated_cell $ () (
set_clock_gating_style-sequential_cell fermo \
(-positive_edge_logic integrato: TLATNTSCAX8) \
control_point-prima-control_signal scan_enable \
max_fanout-8
Else ()
set_clock_gating_style-sequential_cell fermo \
control_point-prima-control_signal scan_enable \
max_fanout-8
)
Else ()
set_clock_gating_style-sequential_cell fermo setup-0-tenere 0
)
elaborare-update-gate_clock ARM946ES
Else ()
elaborare-update ARM946ES
)

# Uniquify collegamento e la progettazione
current_design ARM946ES
uniquify
collegamento

# Identificare il tipo di scansione e il collegamento testports di tutti gli elementi di clock gating
se scan_ready $ () (
set_scan_configuration-metodologia full_scan stile multiplexed_flip_flop
set_scan_signal test_scan_enable-porto SCANEN
create_net SCANEN
connect_net SCANEN [trovare porto SCANEN]
se use_clock_gating $ () (
hookup_testports
)
)

reindirizzare ./report/ARM946ES.check_design () check_design

create_clock periodo $ clk_period CLK
set_clock_uncertainty-setup $ clk_uncertainty CLK
set_clock_uncertainty-hold $ clk_uncertainty CLK
set_clock_transition 0 CLK

create_clock periodo $ clk_period UnGatedCLK
set_clock_uncertainty-setup $ clk_uncertainty UnGatedCLK
set_clock_uncertainty-hold $ clk_uncertainty UnGatedCLK
set_clock_transition 0 UnGatedCLK

# Identifica l'alta fanout reti e impostare il contesto per la progettazione
impostare high_fanout [elenco CLK UnGatedCLK SCANEN HRESETn DBGnTRST DBGTCKEN]
set_ideal_net $ high_fanout

set_load $ load_value [elenco [all_outputs]]
set_driving_cell-cell-pin driving_cell_name $ $ driving_cell_pin [\
elenco [remove_from_collection [all_inputs] $ high_fanout]]

# Impostare il calendario IO
se () ($ verbose
source-eco-verbose scripts/arm946es_constraints.tcl
Else ()
fonte scripts/arm946es_constraints.tcl eco -
)

# Identificare filo modello di carico e le condizioni operative
se force_wireload $ () (
set_wire_load_model-nome-libreria wireload_model $ $ wireload_library
set_wire_load_mode top
Else ()
impostare auto_wire_load_selection vero
set_wire_load_mode top
)

# Impostare le condizioni di funzionamento
set_operating_conditions lento

# Impostare specifiche opzioni di compilazione
set_max_area 0
set_max_transition 1 ARM946ES
set_resource_implementation use_fastest
foreach_in_collection design [get_designs "*"] (
current_design $ design
set_fix_multiple_port_nets-tutti-buffer_constants
echo "** Impostazione set_fix_multiple_port_nets-tutti-buffer_constants **"
)
current_design ARM946ES
set_critical_range 0,2 ARM946ES

# Propagare vincoli se si utilizza l'orologio gate
se use_clock_gating $ () (
propagate_constraints-gate_clock
)

# Crea prova le porte per la scansione e la scansione di
current_design ARM946ES
se scan_insertion $ () (
per impostare i (1) ($ i <= $ numscanchains incr i) () (
impostare port_name [formato "% s% s" SCANIN $ i]
create_port $ port_name direzione in -
set_scan_signal test_scan_in-port $ port_name
)
per impostare i (1) ($ i <= $ numscanchains incr i) () (
impostare port_name [formato "% s% s" SCANOUT $ i]
create_port $ direzione port_name-out
set_scan_signal test_scan_out-port $ port_name
)
)

Compila i ARM946E # S-top-down
current_design ARM946ES

reindirizzare ./report/ARM946ES.check_timing () check_timing

se appiattire) ($ (
separare-tutto-appiattire
)

se rtl2pg $ () (
read_pdef ./floorplan/ARM946ES.pdef
se scan_ready $ () (
compile_physical-scan
Else ()
compile_physical
)
Else ()
se scan_ready $ () (
se use_boundary_opt $ () (
compilazione boundary_optimization-map_effort medio-scan-area_effort nessuno
Else ()
compilare-scan-map_effort medie area_effort nessuno
)
Else ()
se use_boundary_opt $ () (
compilazione boundary_optimization-map_effort medio-area_effort nessuno
Else ()
compilazione map_effort medie area_effort nessuno
)
)
)

Else ()

# Leggi esistenti PB
read_db ./db/ARM946ES-existing.db
current_design ARM946ES
collegamento
)

se use_physopt $ () (
# Assicurarsi che abbiamo PhysOpt licenza
remove_license PhysOpt
impostare PhysOpt_status [get_license PhysOpt]
mentre PhysOpt_status == ($ 0) (
reindirizzamento / dev / null (PhysOpt_status impostare [get_license PhysOpt])
)
read_pdef ./floorplan/ARM946ES.pdef
physopt_pnet_partial_blockage_layer_names impostare METAL1 METAL2 ()
physopt-timing_driven_congestion-area_recovery
# Togliere PhysOpt licenza
remove_license PhysOpt
)

# Inserire la scansione in fase di progettazione
se scan_insertion $ () (

set_test_hold 1 TESTMODE
set_scan_configuration-metodologia full_scan stile multiplexed_flip_flop \
-chain_count $ numscanchains-dedicated_scan_ports vero-add_lockup vero \
-clock_mixing-mix_clocks_not_edges sostituire false

impostare test_default_delay 0
impostare test_default_bidir_delay 0
90 set test_default_strobe
impostare test_default_period 100

impostare test_stil_multiclock_capture_procedures vero

impostare test_stil_netlist_format verilog

create_test_clock [elenco UnGatedCLK CLK]-100-periodo di forma d'onda (45 55)

# Riapplicare set_fix_multiple_port_nets
foreach_in_collection design [get_designs "*"] (
current_design $ design
set_fix_multiple_port_nets-tutti-buffer_constants
echo "** Impostazione set_fix_multiple_port_nets-tutti-buffer_constants **"
)
current_design ARM946ES

reindirizzare ./report/ARM946ES-preinsert.dft () check_dft

se use_physopt $ () (
# Assicurarsi che abbiamo PhysOpt licenza
remove_license PhysOpt
impostare PhysOpt_status [get_license PhysOpt]
mentre PhysOpt_status == ($ 0) (
reindirizzamento / dev / null (PhysOpt_status impostare [get_license PhysOpt])
)
insert_dft-fisico-map_effort alta
physopt-eco-incr
# Togliere PhysOpt licenza
remove_license PhysOpt
Else ()
insert_dft-map_effort alta
# eseguire incrementale per rimuovere assegnare compilare le dichiarazioni
compilazione incremental_mapping-map_effort basso area_effort nessuno
)reindirizzare ./report/ARM946ES-physical.dft () check_dft
reindirizzare ./report/ARM946ES.scanpath (report_test-scan_path)
)

se use_physopt $ () (
# Assicurarsi che abbiamo PhysOpt licenza
remove_license PhysOpt
impostare PhysOpt_status [get_license PhysOpt]
mentre PhysOpt_status == ($ 0) (
reindirizzamento / dev / null (PhysOpt_status impostare [get_license PhysOpt])
)
check_legality
# Togliere PhysOpt licenza
remove_license PhysOpt
)

se apply_name_rules $ () (
se () ($ verbose
change_names-regole-verilog gerarchia-verbose> ./report/ARM946ES.change-names
Else ()
change_names-regole-verilog gerarchia> ./report/ARM946ES.change-names
)
)

# Salva la progettazione
write-db-f-o gerarchia ./db/ARM946ES.db
scrivere verilog-f-o-gerarchia ./db/ARM946ES.v
write_sdc-versione 1.2 ./db/ARM946ES.sdc

# Relazione sulla progettazione

#
Genera una zona di relazione per ciascun modulo
reindirizzare ./report/ARM946ES.area (echo "")
foreach_in_collection design [get_designs "*"] (
current_design $ design
reindirizzare-append ./report/ARM946ES.area) (report_area
)
current_design ARM946ES

# Genera relazioni generali
reindirizzare ./report/ARM946ES.hier () report_hierarchy
reindirizzare ./report/ARM946ES.qor () report_qor
reindirizzare ./report/ARM946ES.path-group () report_path_group
reindirizzare ./report/ARM946ES.detail () report_design
reindirizzare-append ./report/ARM946ES.detail (report_clock-attributi-skew)
reindirizzare ./report/ARM946ES.port (report_port-verbose)

# Fanout Generare rapporti per l'alta fanout reti
reindirizzare ./report/ARM946ES.fanout (report_transitive_fanout-da-nosplit CLK)
reindirizzare-append ./report/ARM946ES.fanout (report_transitive_fanout-nosplit-da UnGatedCLK)
reindirizzare-append ./report/ARM946ES.fanout (report_transitive_fanout-nosplit-da HRESETn)
reindirizzare-append ./report/ARM946ES.fanout (report_transitive_fanout-nosplit-da DBGnTRST)
reindirizzare-append ./report/ARM946ES.fanout (report_transitive_fanout-nosplit-da DBGTCKEN)
reindirizzare-append ./report/ARM946ES.fanout (report_transitive_fanout-nosplit-da SCANEN)

# Se vuoi inserire serrature e loop combinational
reindirizzare ./report/ARM946ES.latches (all_registers-level_sensitive)
reindirizzare ./report/ARM946ES.loops (report_timing-loop)

# Genera tempi relazioni
reindirizzare ./report/ARM946ES.input-max-timing (report_timing ritardo max-500-da max_paths [all_inputs])
reindirizzare ./report/ARM946ES.output-max-timing (report_timing ritardo max_paths max-500-a [all_outputs])
reindirizzare ./report/ARM946ES.reg2reg-max-timing (report_timing ritardo max-500-da max_paths [all_registers-clock_pins] a [all_registers-data_pins])
reindirizzare ./report/ARM946ES.vio (report_constraint-all_violators)

se use_physopt $ () (
# Assicurarsi che abbiamo PhysOpt licenza
remove_license PhysOpt
impostare PhysOpt_status [get_license PhysOpt]
mentre PhysOpt_status == ($ 0) (
reindirizzamento / dev / null (PhysOpt_status impostare [get_license PhysOpt])
)
reindirizzare ./report/ARM946ES.congestion (report_congestion medio-congestion_effort)
# Togliere PhysOpt licenza
remove_license PhysOpt
)

se use_physopt $ () (
# Assicurarsi che abbiamo PhysOpt licenza
remove_license PhysOpt
impostare PhysOpt_status [get_license PhysOpt]
mentre PhysOpt_status == ($ 0) (
reindirizzamento / dev / null (PhysOpt_status impostare [get_license PhysOpt])
)
impostare pdefin_use_nameprefix falsi
write_pdef-v3.0-output ./db/ARM946ES.pdef
# Togliere PhysOpt licenza
remove_license PhysOpt
)

chiudere

 
Sono ancora nuovo di sintesi fisica e vorrei porre una domanda.Il file viene generato automaticamente ARM946ES.pdef?

Potete per favore, se possibile, dare un esempio di pdef file.

Grazie

 
Nel vostro script, è illustrare come sintesi ARM946, ma vorrei sapere perché non usare nocciolo duro o netlist. In questo metodo, l'unica cosa che è di fondere la struttura.Potete dirmi il motivo?

 
grazie!
Recentemente, ho studio PKS, potrebbe fornire con PKS script in questo flusso ~ ~ ~

 

Welcome to EDABoard.com

Sponsor

Back
Top