diff --git a/crlcore/etc/scn6m_deep_09/etesian.conf b/crlcore/etc/scn6m_deep_09/etesian.conf deleted file mode 100644 index 3e9270d8..00000000 --- a/crlcore/etc/scn6m_deep_09/etesian.conf +++ /dev/null @@ -1,5 +0,0 @@ -# -*- Mode:Python; explicit-buffer-name: "etesian.conf" -*- - -import helpers - -execfile( helpers.sysConfDir+'/common/etesian.conf' ) diff --git a/crlcore/src/ccore/alliance/ap/ApDriver.cpp b/crlcore/src/ccore/alliance/ap/ApDriver.cpp index b7ae1ce2..5ac39d13 100644 --- a/crlcore/src/ccore/alliance/ap/ApDriver.cpp +++ b/crlcore/src/ccore/alliance/ap/ApDriver.cpp @@ -241,7 +241,8 @@ void DumpContacts(ofstream& ccell, Cell *cell) forEach ( Net*, net, cell->getNets() ) { forEach ( Component*, component, net->getComponents() ) { if ( (rp = dynamic_cast(*component)) ) { - if ( !net->isExternal() ) continue; + if ( not net->isExternal() ) continue; + if ( not cell->isRouted() ) continue; external = true; segment = dynamic_cast(rp->getOccurrence().getEntity()); diff --git a/cumulus/src/plugins/RSavePluginAll.py b/cumulus/src/plugins/RSavePluginAll.py index 82107fa1..b30cb09e 100644 --- a/cumulus/src/plugins/RSavePluginAll.py +++ b/cumulus/src/plugins/RSavePluginAll.py @@ -43,7 +43,9 @@ except Exception, e: sys.exit(2) -# Write back layout to disk if everything has gone fine. +# Write back netlist & layout to disk. Layout is written +# *only* if there is an abutment box otherwise the cell is +# considered as unplaced. # Must write all the sub-blocks of the core but *not* the # standard cell (mainly the feed-through). @@ -54,7 +56,11 @@ def rsave ( cell, depth=0 ): if depth == 0: print ' o Recursive Save-Cell.' print ' %s+ %s (netlist+layout).' % ( ' '*(depth*2), cell.getName() ) - framework.saveCell( cell, CRL.Catalog.State.Views ) + flags = CRL.Catalog.State.Logical + if not cell.getAbutmentBox().isEmpty(): + flags |= CRL.Catalog.State.Physical + + framework.saveCell( cell, flags ) for instance in cell.getInstances(): masterCell = instance.getMasterCell() diff --git a/etesian/src/EtesianEngine.cpp b/etesian/src/EtesianEngine.cpp index a76e04ff..002a6d52 100644 --- a/etesian/src/EtesianEngine.cpp +++ b/etesian/src/EtesianEngine.cpp @@ -799,6 +799,8 @@ namespace Etesian { ( " - RMST", DbU::getValueString( (DbU::Unit)get_RSMT_wirelength(_circuit,_placementUB )*getPitch() ) ) << endl; _placed = true; + + getCell()->setFlags( Cell::Placed ); } diff --git a/hurricane/src/hurricane/hurricane/Cell.h b/hurricane/src/hurricane/hurricane/Cell.h index 099c8fe6..9c1c2cc2 100644 --- a/hurricane/src/hurricane/hurricane/Cell.h +++ b/hurricane/src/hurricane/hurricane/Cell.h @@ -76,6 +76,8 @@ class Cell : public Entity { , CellChanged = 0x0002 // Cell states , FlattenedNets = 0x0001 + , Placed = 0x0002 + , Routed = 0x0004 }; public: typedef Entity Inherit; public: typedef map ExtensionSliceMap; @@ -315,6 +317,8 @@ class Cell : public Entity { public: bool isLeaf() const; public: bool isPad() const {return _isPad;}; public: bool isFlattenedNets() const {return _flags & FlattenedNets;}; + public: bool isPlaced() const {return _flags & Placed;}; + public: bool isRouted() const {return _flags & Routed;}; public: bool isNetAlias(const Name& name) const; // Updators @@ -326,6 +330,8 @@ class Cell : public Entity { public: void setFlattenLeaf(bool isFlattenLeaf) {_isFlattenLeaf = isFlattenLeaf;}; public: void setPad(bool isPad) {_isPad = isPad;}; public: void flattenNets(unsigned int flags=BuildRings); + public: void setFlags(unsigned int flags) { _flags |= flags; } + public: void resetFlags(unsigned int flags) { _flags &= ~flags; } public: void materialize(); public: void unmaterialize(); public: void addObserver(BaseObserver*); diff --git a/kite/src/KiteEngine.cpp b/kite/src/KiteEngine.cpp index 5eefeca1..95360368 100644 --- a/kite/src/KiteEngine.cpp +++ b/kite/src/KiteEngine.cpp @@ -490,80 +490,6 @@ namespace Kite { if (getState() >= Katabatic::EngineGlobalLoaded) throw Error ("KiteEngine::runGlobalRouter(): Global routing already done or loaded."); - // Test signals from . - //DebugSession::addToTrace( getCell(), "aux34" ); - - // Test signals from . - //DebugSession::addToTrace( getCell(), "auxsc37" ); - // Test signals from . - //DebugSession::addToTrace( getCell(), "cout" ); - //DebugSession::addToTrace( getCell(), "acc_reg_ckx" ); - //DebugSession::addToTrace( getCell(), "acc_reg_nckx" ); - //DebugSession::addToTrace( getCell(), "i(0)" ); - //DebugSession::addToTrace( getCell(), "ram_nmux_0_sel0" ); - //DebugSession::addToTrace( getCell(), "ram_adrb_14" ); - //DebugSession::addToTrace( getCell(), "ram_adrb_9" ); - //DebugSession::addToTrace( getCell(), "ram_adra(11)" ); - //DebugSession::addToTrace( getCell(), "ram_adra(7)" ); - //DebugSession::addToTrace( getCell(), "ram_adrb(8)" ); - //DebugSession::addToTrace( getCell(), "alu_carry(1)" ); - //DebugSession::addToTrace( getCell(), "alu_np(0)" ); - //DebugSession::addToTrace( getCell(), "ram_q2(0)" ); - //DebugSession::addToTrace( getCell(), "ram_q1(0)" ); - //DebugSession::addToTrace( getCell(), "ram_i_up" ); - // Test signals from (M1-VLSI). - //DebugSession::addToTrace( getCell(), "zero_to_pads" ); - //DebugSession::addToTrace( getCell(), "shift_r" ); - //DebugSession::addToTrace( getCell(), "cin_from_pads" ); - // Test signals from (R3000,micro-programmed). - //DebugSession::addToTrace( getCell(), "scout" ); - //DebugSession::addToTrace( getCell(), "adr_1_n" ); - //DebugSession::addToTrace( getCell(), "codop_18" ); - //DebugSession::addToTrace( getCell(), "frz_ctl(10)" ); - //DebugSession::addToTrace( getCell(), "ctl_seq_mbk_not_ep_80" ); - //DebugSession::addToTrace( getCell(), "ctl_sts_mbk_not_ctlrw_in_2" ); - //DebugSession::addToTrace( getCell(), "dpt_wm_rf_adr4x" ); - //DebugSession::addToTrace( getCell(), "crsrin_1" ); - //DebugSession::addToTrace( getCell(), "ctl_seq_oa2ao222_x2_2" ); - //DebugSession::addToTrace( getCell(), "dpt_ishifter_muxoutput_81" ); - //DebugSession::addToTrace( getCell(), "ctl_seq_mbk_not_ep_7" ); - //DebugSession::addToTrace( getCell(), "ctl_sts_mbk_not_adel_r" ); - //DebugSession::addToTrace( getCell(), "ctl_seq_no2_x1_88" ); - //DebugSession::addToTrace( getCell(), "ctl_seq_ep_31" ); - //DebugSession::addToTrace( getCell(), "dpt_opyir16ins_mxn1" ); - //DebugSession::addToTrace( getCell(), "dpt_ishifter_muxoutput_132" ); - // Test signals from (R3000,pipeline). - //DebugSession::addToTrace( getCell(), "nb(0)" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_mux32_data_e_sm_sel0" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_lo_rw(16)" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_hi_rw(27)" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_data_e_sm(25)" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_nul_s_eq_z_sd_nul_3" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_shift32_rshift_se_muxoutput(143)" ); - //DebugSession::addToTrace( getCell(), "rsdnbr_sd(19)" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_res_se(14)" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_res_re(0)" ); - //DebugSession::addToTrace( getCell(), "wreg_sw(1)" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_shift32_rshift_se_msb" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_ct_mx2_x2_2_sig" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_mux32_s_mw_se_sel0" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_mux32_badr_sd_sel1" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_addsub32_carith_se_pi_3_21" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_dp_addsub32_carith_se_pi_4_26" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_1m_ct_cause_rx(1)" ); - // Test signals from (R3000,pipeline+chip). - //DebugSession::addToTrace( getCell(), "mips_r3000_core.mips_r3000_1m_dp.banc.reada0" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_core.mips_r3000_1m_ct.i_ri(29)" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_core.mips_r3000_1m_ct.not_opcod_re(4)" ); - //DebugSession::addToTrace( getCell(), "d_out_i(10)" ); - //DebugSession::addToTrace( getCell(), "dout_e_i(0)" ); - //DebugSession::addToTrace( getCell(), "dout_e_i(1)" ); - //DebugSession::addToTrace( getCell(), "dout_e_i(2)" ); - //DebugSession::addToTrace( getCell(), "i_ack_i" ); - //DebugSession::addToTrace( getCell(), "mips_r3000_core.mips_r3000_1m_dp.data_rm(7)" ); - // Test signals from . - //DebugSession::addToTrace( getCell(), "core.snx_inst.not_v_inc_out(9)" ); - Session::open( this ); if (mode & KtLoadGlobalRouting) { @@ -804,6 +730,8 @@ namespace Kite { KatabaticEngine::finalizeLayout(); ltrace(90) << "State: " << getState() << endl; + getCell()->setFlags( Cell::Routed ); + ltraceout(90); }