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)
68 using Hurricane::Record;
98 inline bool isHorizontal ()
const;
99 inline bool isVertical ()
const;
100 inline bool isUsable ()
const;
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;
135 const Layer* _blockageLayer;
161 virtual void _preDestroy();
170 typedef map<Layer*,RoutingLayerGauge*> RoutingLayerGaugeMap;
184 inline bool RoutingLayerGauge::isHorizontal ()
const {
return (_direction == Constant::Direction::Horizontal); }
185 inline bool RoutingLayerGauge::isVertical ()
const {
return (_direction == Constant::Direction::Vertical); }
186 inline bool RoutingLayerGauge::isUsable ()
const {
return (_type != Constant::LayerGaugeType::PinOnly)
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;
254 inline std::string getString<const Constant::Direction*>
257 switch ( *direction ) {
261 return "Unknown Constant::Direction";
266 inline 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;
301 inline 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";
318 inline std::string getString<Constant::LayerGaugeType*>
320 {
return getString<const Constant::LayerGaugeType*>(layerGaugeType); }
324 inline 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";
341 inline 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
DbU::Unit getHalfViaWidth() const
Definition: RoutingLayerGauge.h:201
Constant::Direction getDirection() const
Definition: RoutingLayerGauge.h:191
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
Constant::LayerGaugeType getType() const
Definition: RoutingLayerGauge.h:192
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
long getTrackIndex(DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode) const
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)
The namespace of Coriolis Core.
Definition: AcmSigda.h:28
Store various constants.
Definition: RoutingLayerGauge.h:32
LayerGaugeType
Definition: RoutingLayerGauge.h:38
@ PinOnly
Definition: RoutingLayerGauge.h:41
@ Default
Definition: RoutingLayerGauge.h:43
Round
Definition: RoutingLayerGauge.h:47
@ Inferior
Definition: RoutingLayerGauge.h:48
@ Exact
Definition: RoutingLayerGauge.h:50
@ Superior
Definition: RoutingLayerGauge.h:47
@ Nearest
Definition: RoutingLayerGauge.h:49
Direction
Definition: RoutingLayerGauge.h:34
@ Vertical
Definition: RoutingLayerGauge.h:35
@ Horizontal
Definition: RoutingLayerGauge.h:34