19#include "hurricane/Commons.h"
20#include "hurricane/Error.h"
21#include "hurricane/DbU.h"
22#include "hurricane/Box.h"
23#include "hurricane/Collection.h"
24#include "hurricane/Slot.h"
25#include "crlcore/Utilities.h"
40 , PowerSupply = (1 << 5)
42 , LocalOnly = (1 << 7)
44 , BottomPowerSupply = (1 << 9)
62 using Hurricane::JsonObject;
63 using Hurricane::JsonStack;
64 using Hurricane::Initializer;
65 using Hurricane::GenericCollection;
66 using Hurricane::GenericLocator;
67 using Hurricane::GenericFilter;
68 using Hurricane::Record;
71 using Hurricane::Layer;
81 class RoutingLayerGauge {
98 inline bool isHorizontal ()
const;
99 inline bool isVertical ()
const;
100 inline bool isUsable ()
const;
122 inline void setRoutingGauge ( RoutingGauge* );
124 inline void setType ( uint32_t );
126 void toJson ( JsonWriter* )
const;
127 virtual string _getTypeName ()
const;
128 virtual string _getString ()
const;
129 virtual Record* _getRecord ()
const;
133 RoutingGauge* _routingGauge;
135 const Layer* _blockageLayer;
148 RoutingLayerGauge (
const Layer* layer
159 RoutingLayerGauge (
const RoutingLayerGauge& ) =
delete;
160 virtual ~RoutingLayerGauge ();
161 virtual void _preDestroy();
162 RoutingLayerGauge& operator= (
const RoutingLayerGauge& ) =
delete;
165 friend class RoutingGauge;
170 typedef map<Layer*,RoutingLayerGauge*> RoutingLayerGaugeMap;
187 and (_type != Constant::LayerGaugeType::LocalOnly); }
198 inline DbU::Unit RoutingLayerGauge::getPWireWidth ()
const {
return (_pwireWidth) ? _pwireWidth : _wireWidth; }
202 inline DbU::Unit RoutingLayerGauge::getObstacleDw ()
const {
return _obstacleDw; }
203 inline DbU::Unit RoutingLayerGauge::getTrackPosition ( DbU::Unit start,
long index )
const
204 {
return index * _pitch + _offset + start; }
206 {
return getTrackPosition( start,
getTrackIndex(start,stop,position,mode) ); }
207 inline void RoutingLayerGauge::setPWireWidth (
DbU::Unit pwidth ) { _pwireWidth = pwidth; }
209 inline void RoutingLayerGauge::setRoutingGauge (
RoutingGauge* rg ) { _routingGauge = rg; }
212 inline DbU::Unit RoutingLayerGauge::getTrackPosition (
const Box& ab,
DbU::Unit position,
unsigned mode )
const
214 if (isHorizontal())
return getTrackPosition( ab.getYMin(), ab.getYMax(), position, mode );
215 return getTrackPosition( ab.getXMin(), ab.getXMax(), position, mode );
221 class JsonRoutingLayerGauge :
public JsonObject {
223 static void initialize ();
224 JsonRoutingLayerGauge (
unsigned long flags );
225 virtual string getTypeName ()
const;
226 virtual JsonRoutingLayerGauge* clone (
unsigned long flags )
const;
227 virtual void toData ( JsonStack& );
245 if (s !=
"Horizontal")
246 std::cerr <<
Hurricane::Error(
"::from(Direction&,string&): Unknown value \"%s\"."
247 , s.c_str() ) << std::endl;
254inline std::string getString<const Constant::Direction*>
257 switch ( *direction ) {
261 return "Unknown Constant::Direction";
266inline std::string getString<Constant::Direction>
269 switch ( direction ) {
273 return "Unknown Constant::Direction";
286 if (s ==
"Unusable" ) type = Constant::Unusable;
288 else if (s ==
"LocalOnly" ) type = Constant::LocalOnly;
289 else if (s ==
"PowerSupply" ) type = Constant::PowerSupply;
290 else if (s ==
"PowerSupply|Bottom") type = Constant::BottomPowerSupply;
293 std::cerr <<
Hurricane::Error(
"::from(LayerGaugeType&,string&): Unknown value \"%s\"."
294 , s.c_str() ) << std::endl;
301inline std::string getString<const Constant::LayerGaugeType*>
304 switch ( *layerGaugeType ) {
305 case Constant::Bottom:
return "Bottom (error)";
306 case Constant::Unusable:
return "Unusable";
308 case Constant::LocalOnly:
return "LocalOnly";
310 case Constant::PowerSupply:
return "PowerSupply";
311 case Constant::BottomPowerSupply:
return "PowerSupply|Bottom";
313 return "Unknown Constant::LayerGaugeType";
318inline std::string getString<Constant::LayerGaugeType*>
320{
return getString<const Constant::LayerGaugeType*>(layerGaugeType); }
324inline std::string getString<const Constant::LayerGaugeType>
327 switch ( layerGaugeType ) {
328 case Constant::Bottom:
return "Bottom (error)";
329 case Constant::Unusable:
return "Unusable";
331 case Constant::LocalOnly:
return "LocalOnly";
333 case Constant::PowerSupply:
return "PowerSupply";
334 case Constant::BottomPowerSupply:
return "PowerSupply|Bottom";
336 return "Unknown Constant::LayerGaugeType";
341inline std::string getString<Constant::LayerGaugeType>
343{
return getString<const Constant::LayerGaugeType>(layerGaugeType); }
Gauge for the detailed routing.
Definition RoutingGauge.h:46
Gauge of a Layer for the detailed routing.
Definition RoutingLayerGauge.h:81
Constant::Direction getDirection() const
Definition RoutingLayerGauge.h:191
DbU::Unit getHalfViaWidth() const
Definition RoutingLayerGauge.h:201
unsigned int getDepth() const
Definition RoutingLayerGauge.h:189
double getDensity() const
Definition RoutingLayerGauge.h:193
DbU::Unit getOffset() const
Definition RoutingLayerGauge.h:194
DbU::Unit getHalfWireWidth() const
Definition RoutingLayerGauge.h:199
const Layer * getLayer() const
Definition RoutingLayerGauge.h:188
DbU::Unit getPitch() const
Definition RoutingLayerGauge.h:195
const Layer * getBlockageLayer() const
Definition RoutingLayerGauge.h:190
DbU::Unit getHalfPitch() const
Definition RoutingLayerGauge.h:196
DbU::Unit getWireWidth() const
Definition RoutingLayerGauge.h:197
void divide(DbU::Unit dividend, long "ient, long &modulo) const
unsigned int getTrackNumber(DbU::Unit start, DbU::Unit stop) const
DbU::Unit getViaWidth() const
Definition RoutingLayerGauge.h:200
static RoutingLayerGauge * create(const Layer *layer, Constant::Direction direction, Constant::LayerGaugeType type, unsigned int depth, double density, DbU::Unit offset, DbU::Unit pitch, DbU::Unit wireWidth, DbU::Unit pwireWidth, DbU::Unit viaWidth, DbU::Unit obsDw)
Constant::LayerGaugeType getType() const
Definition RoutingLayerGauge.h:192
long getTrackIndex(DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode) const
The namespace of Coriolis Core.
Definition AcmSigda.h:28
Store various constants.
Definition RoutingLayerGauge.h:32
LayerGaugeType
Definition RoutingLayerGauge.h:38
@ Default
Definition RoutingLayerGauge.h:43
@ PinOnly
Definition RoutingLayerGauge.h:41
Round
Definition RoutingLayerGauge.h:47
@ Nearest
Definition RoutingLayerGauge.h:49
@ Inferior
Definition RoutingLayerGauge.h:48
@ Superior
Definition RoutingLayerGauge.h:47
@ Exact
Definition RoutingLayerGauge.h:50
Direction
Definition RoutingLayerGauge.h:34
@ Vertical
Definition RoutingLayerGauge.h:35
@ Horizontal
Definition RoutingLayerGauge.h:34