47 TRANSLINE_CALCULATION_BASE( {
TCP::H,
55 void Analyse()
override {}
58 double GetSoldermaskDeltaQ(
double aWOverH,
double aCOverH )
const override
60 if( m_useMicrostripDeltaQ )
62 const double q2Coated = WanHoorfarQ2( aWOverH, 1.0 + aCOverH );
63 const double q2Base = WanHoorfarQ2( aWOverH, 1.0 );
64 return std::max( 0.0, q2Coated - q2Base );
70 std::pair<double, double> CallPair(
double aEpsEffUncoated,
double aTanDSub,
double aEpsRSub,
71 double aWOverH )
const
73 return ApplySoldermaskCorrection( aEpsEffUncoated, aTanDSub, aEpsRSub, aWOverH, 1.0e9 );
77 void SetAnalysisResults()
override {}
78 void SetSynthesisResults()
override {}
81 bool m_useMicrostripDeltaQ{
false };
82 double m_fixedDeltaQ{ 0.0 };
126COPLANAR MakeFr4Cpw(
bool aBackMetal )
147 double aTanD = 0.025 )
165 PROBE_TRANSLINE probe;
166 probe.SetParameter(
TCP::H, 1.0e-3 );
171 probe.m_fixedDeltaQ = 0.1;
173 const auto result = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
184 PROBE_TRANSLINE probe;
185 probe.SetParameter(
TCP::H, 1.0e-3 );
190 probe.m_fixedDeltaQ = 0.1;
192 const auto result = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
203 PROBE_TRANSLINE probe;
204 probe.SetParameter(
TCP::H, 1.0e-3 );
209 probe.m_fixedDeltaQ = 0.0;
211 const auto result = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
240 PROBE_TRANSLINE probe;
241 probe.SetParameter(
TCP::H, 1.0e-3 );
246 probe.m_useMicrostripDeltaQ =
true;
248 const auto result = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
252 const double deltaQ = q2Coated - q2Base;
253 const double expected = 3.3 + deltaQ * ( 3.5 - 1.0 );
259 BOOST_CHECK_CLOSE_FRACTION(
result.first, 3.4166, 1.0e-3 );
260 BOOST_CHECK_CLOSE_FRACTION( deltaQ, 0.0466, 2.0e-3 );
270 PROBE_TRANSLINE probe;
271 probe.SetParameter(
TCP::H, 1.0e-3 );
276 probe.m_useMicrostripDeltaQ =
true;
278 const double epsEffUncoated = 3.3;
279 const double epsRSub = 4.4;
280 const auto result = probe.CallPair( epsEffUncoated, 0.02, epsRSub, 1.75 );
282 const double qSub = ( epsEffUncoated - 1.0 ) / ( epsRSub - 1.0 );
283 const double limit = qSub * epsRSub + ( 1.0 - qSub ) * 3.5;
290 BOOST_CHECK_CLOSE_FRACTION(
result.first, limit, 5.0e-2 );
306 EnableMask( withMaskOff, 25.0e-6 );
343 const double drop1 = z0Open - z0One;
344 const double drop2 = z0Open - z0Two;
383 COPLANAR open = MakeFr4Cpw(
false );
387 COPLANAR tracesOnly = MakeFr4Cpw(
false );
393 COPLANAR gapsFilled = MakeFr4Cpw(
false );
423 BOOST_TEST( ( aLossy - aLossless ) > 1.0e-6 );
433 PROBE_TRANSLINE probe;
434 probe.SetParameter(
TCP::H, 1.0e-3 );
439 probe.m_useMicrostripDeltaQ =
true;
441 const double epsEffUncoated = 3.3;
442 const double epsRSub = 4.4;
443 const double tanDSub = 0.02;
445 const auto result = probe.CallPair( epsEffUncoated, tanDSub, epsRSub, 1.75 );
449 const double deltaQ = q2Coated - q2Base;
450 const double epsEffCoated = epsEffUncoated + deltaQ * ( 3.5 - 1.0 );
451 const double qSub = ( epsEffUncoated - 1.0 ) / ( epsRSub - 1.0 );
452 const double expectedTanD =
453 ( qSub * epsRSub * tanDSub + deltaQ * 3.5 * 0.025 ) / epsEffCoated;
455 BOOST_CHECK_CLOSE_FRACTION(
result.first, epsEffCoated, 1.0e-9 );
456 BOOST_CHECK_CLOSE_FRACTION(
result.second, expectedTanD, 1.0e-9 );
468 PROBE_TRANSLINE probe;
469 probe.SetParameter(
TCP::H, 1.0e-3 );
473 probe.m_useMicrostripDeltaQ =
true;
476 const auto losslessMask = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
479 const auto lossyMask = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
482 BOOST_TEST( lossyMask.second > losslessMask.second );
485 const auto losslessSub = probe.CallPair( 3.3, 0.0, 4.4, 1.75 );
496 PROBE_TRANSLINE probe;
497 probe.SetParameter(
TCP::H, 1.0e-3 );
501 probe.m_useMicrostripDeltaQ =
true;
504 auto r1 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
509 auto r2 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
514 auto r3 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
519 auto r4 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
527 PROBE_TRANSLINE probe;
528 probe.SetParameter(
TCP::H, 1.0e-3 );
532 probe.m_useMicrostripDeltaQ =
true;
535 auto r1 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
540 auto r2 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
545 auto r3 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
555 COPLANAR cpwOpen = MakeFr4Cpw(
false );
557 COPLANAR cpwCoated = MakeFr4Cpw(
false );
563 COPLANAR cbcpwOpen = MakeFr4Cpw(
true );
565 COPLANAR cbcpwCoated = MakeFr4Cpw(
true );
Coplanar waveguide (CPW) and conductor-backed coplanar waveguide (CBCPW) calculation.
void Analyse() override
Analyse trace geometry to produce Z0, electrical length, effective permittivity, and losses.
void Analyse() override
Analyse track geometry parameters to output Z0 and Ang_L.
void Analyse() override
Analyse track geometry parameters to output Z0 and Ang_L.
The base class for all transmission line calculations.
double GetParameter(const TRANSLINE_PARAMETERS aParam) const
Gets the given calculation property.
void SetParameter(const TRANSLINE_PARAMETERS aParam, const double aValue)
Sets the given calculation property.
static double WanHoorfarQ2(double aU, double aHBarTop)
Wan-Hoorfar 2000 eq.
std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > & GetAnalysisResults()
Gets the output parameters following analysis.
constexpr double UNIT_MIL
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_AUTO_TEST_SUITE_END()
BOOST_TEST(netlist.find("R_G1 ARM_OUT1 DIE_B R='0.001 / ((SW_STATE)") !=std::string::npos)
VECTOR3I expected(15, 30, 45)
BOOST_AUTO_TEST_CASE(MaskAbsentReturnsInputsUnchanged)
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")
SYNTHESIZE_OPTS
Options for specifying synthesis inputs, targets, or strategies.
TRANSLINE_PARAMETERS
All possible parameters used (as inputs or outputs) by the transmission line calculations.