1. 개요
2나노미터(2nm) 이하 초미세 공정 반도체(GAA FET, MBCFET, CFET)의 전자 및 정공 이동도를 극대화하기 위해 채널 내부에 실리콘-게르마늄(SiGe) 및 에피택셜 응력 인가층(Stressors)을 도입하여 제어된 격자 변형(Strain)을 유도합니다. 이러한 3차원 채널의 국소 격자 상수 변화와 결정 결함을 파괴 없이 분석하기 위해 방사광 나노프로브 주사 X선 회절(Scanning Nano-XRD)이 표준 기술로 사용됩니다. 프레넬 존 플레이트(FZP) 또는 다층막 라우에 렌즈(MLL)로 집속된 10nm 급 극미세 X선 빔을 시료 상에 주사하며 2차원 고속 하이브리드 픽셀 검출기(EIGER/JUNGFRAU)로 브래그 회절 패턴을 취득합니다. 그러나 수 시간 이상 지속되는 나노스케일 2차원 주사 과정에서 빔라인 단색화 장치(Monochromator) 열하중, 집속 광학계 드리프트, 바닥 미세진동으로 인해 집속 빔의 중심 위치가 수 나노미터 이상 이탈합니다. 이 빔 표류는 변형률 매핑 데이터의 공간 좌표를 왜곡시키고 채널 경계면 판독 오류를 유발합니다. 본 고에서는 나노 나이프에지 X선 형광(XRF) 센서 및 2차원 간섭계 피드백을 통해 10,000Hz 주기로 FZP 피에조 위치를 폐루프 보정하고 격자 변형률 텐서를 실시간 산출하는 0-Alloc C# 엔진을 구현합니다.
2. 수학적 모델링 및 지배 방정식
결정 격자 면간 거리 \(d_{hkl}\)와 브래그 회절각 \(\theta_B\) 간의 관계 및 국소 격자 변형률 \(\varepsilon_{hkl}\) 정의식은 다음과 같습니다:
여기서 \(\Delta\theta_B = \theta_B - \theta_{B,0}\)는 무응력 기준 격자 대비 회절각 편위량입니다.
2차원 픽셀 검출기 상의 브래그 피크 중심 좌표 \((u, v)\)와 시료-검출기 거리 \(D_{det}\), 픽셀 크기 \(p\)로부터 산출되는 산란 벡터 편위 \(\Delta\mathbf{q}\) 및 3차원 변형률 텐서 성분 \(\varepsilon_{xx}, \varepsilon_{yy}, \varepsilon_{zz}\) 역산식은 다음과 같습니다:
집속 광학계(FZP)의 2축 나노 위치 표류 오차 \(\mathbf{e}_{drift}(t) = [e_x, e_y]^T\)에 대한 피에조 스테이지 폐루프 보정 제어 법칙은 다음과 같습니다:
3. C# 고성능 온디바이스 서보 엔진 구현
10,000Hz 주기로 나노 회절 피크 좌표를 분석하여 채널 변형률을 계산하고 FZP 나노 피에조를 보정하는 0-Alloc C# 엔진입니다.
using System;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Stem.Synchrotron.NanoXRD
{
/// <summary>
/// 2차원 검출기 브래그 회절 피크 및 빔 위치 계측 상태
/// </summary>
public readonly ref struct BraggPeakTelemetryState
{
public readonly double PeakPixelU; // 검출기 U축 피크 중심 [pixel]
public readonly double PeakPixelV; // 검출기 V축 피크 중심 [pixel]
public readonly double BeamDriftXNm; // X선 빔 X축 표류 계측값 [nm]
public readonly double BeamDriftYNm; // X선 빔 Y축 표류 계측값 [nm]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public BraggPeakTelemetryState(double u, double v, double dx, double dy)
{
PeakPixelU = u;
PeakPixelV = v;
BeamDriftXNm = dx;
BeamDriftYNm = dy;
}
}
/// <summary>
/// 국소 변형률 및 피에조 보정 출력
/// </summary>
public readonly ref struct NanoXrdAnalysisOutput
{
public readonly double LatticeStrainPpm; // 격자 변형률 [ppm, 10^-6]
public readonly double StressMegapascals; // 유효 응력 [MPa]
public readonly double PiezoCommandXVolt; // FZP X축 피에조 전압 [V]
public readonly double PiezoCommandYVolt; // FZP Y축 피에조 전압 [V]
public readonly bool IsBeamPositionLocked; // 빔 표류 < 2nm 안정화 여부
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public NanoXrdAnalysisOutput(double strain, double stress, double vx, double vy, bool locked)
{
LatticeStrainPpm = strain;
StressMegapascals = stress;
PiezoCommandXVolt = vx;
PiezoCommandYVolt = vy;
IsBeamPositionLocked = locked;
}
}
/// <summary>
/// 10,000Hz 방사광 주사 나노회절 변형률 매핑 및 FZP 피에조 서보 엔진
/// </summary>
public ref struct NanoXrdStrainServoEngine
{
private readonly double _refPixelU;
private readonly double _refPixelV;
private readonly double _detectorDistanceMm;
private readonly double _pixelPitchUm;
private readonly double _braggAngleRad;
private readonly double _youngsModulusGpa;
private readonly double _poissonRatio;
private readonly double _kp;
private readonly double _ki;
private readonly double _kd;
private readonly double _piezoGainVoltPerNm;
private readonly double _maxVoltLimit;
private double _intErrX;
private double _intErrY;
private double _prevErrX;
private double _prevErrY;
public NanoXrdStrainServoEngine(
double refPixelU,
double refPixelV,
double detDistMm,
double pixelPitchUm,
double braggAngleRad,
double youngsModulusGpa,
double poissonRatio,
double kp,
double ki,
double kd,
double piezoGain,
double maxVolt)
{
_refPixelU = refPixelU;
_refPixelV = refPixelV;
_detectorDistanceMm = detDistMm;
_pixelPitchUm = pixelPitchUm;
_braggAngleRad = braggAngleRad;
_youngsModulusGpa = youngsModulusGpa;
_poissonRatio = poissonRatio;
_kp = kp;
_ki = ki;
_kd = kd;
_piezoGainVoltPerNm = piezoGain;
_maxVoltLimit = maxVolt;
_intErrX = 0.0;
_intErrY = 0.0;
_prevErrX = 0.0;
_prevErrY = 0.0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public NanoXrdAnalysisOutput ProcessCycle(
in BraggPeakTelemetryState state,
double dtSeconds)
{
// 1. 브래그 피크 위치 편위 계산
double du = state.PeakPixelU - _refPixelU;
double dv = state.PeakPixelV - _refPixelV;
double radialPixelDist = Math.Sqrt(du * du + dv * dv);
// 2. 각도 편위 Delta theta_B 계산
double deltaDistMm = (radialPixelDist * _pixelPitchUm) / 1000.0;
double deltaThetaRad = deltaDistMm / (2.0 * _detectorDistanceMm * Math.Cos(_braggAngleRad));
// 3. 변형률 epsilon 및 응력 sigma 산출 (ppm 단위)
double cotBragg = 1.0 / Math.Tan(_braggAngleRad);
double strain = -cotBragg * deltaThetaRad; // 단위 없는 비
double strainPpm = strain * 1e6;
// 1축 변형률 기준 유효 응력 (MPa = GPa * 1000 * strain)
double stressMpa = (_youngsModulusGpa * 1000.0) * strain / (1.0 - _poissonRatio);
// 4. FZP 집속 빔 드리프트 오차 폐루프 보정 (PID)
double errX = -state.BeamDriftXNm;
double errY = -state.BeamDriftYNm;
_intErrX += errX * dtSeconds;
_intErrY += errY * dtSeconds;
double derX = (errX - _prevErrX) / dtSeconds;
double derY = (errY - _prevErrY) / dtSeconds;
_prevErrX = errX;
_prevErrY = errY;
double compX = _kp * errX + _ki * _intErrX + _kd * derX;
double compY = _kp * errY + _ki * _intErrY + _kd * derY;
double voltX = Math.Clamp(compX * _piezoGainVoltPerNm, -_maxVoltLimit, _maxVoltLimit);
double voltY = Math.Clamp(compY * _piezoGainVoltPerNm, -_maxVoltLimit, _maxVoltLimit);
double residualDriftDist = Math.Sqrt(state.BeamDriftXNm * state.BeamDriftXNm + state.BeamDriftYNm * state.BeamDriftYNm);
bool isLocked = residualDriftDist <= 2.0; // 2nm 이내 안정화
return new NanoXrdAnalysisOutput(
strainPpm,
stressMpa,
voltX,
voltY,
isLocked);
}
}
}
4. 교육 및 산업 적용 방안
- 한국방송통신대학교 반도체공학·방사광물리 원격 실험: 3D FinFET/GAA 채널 SiGe 응력 텐서 연산, 나노회절 피크 분석 가상 시뮬레이터.
- 삼성전자 DS / SK하이닉스 R&D 연구소: 오창 4세대 방사광가속기 나노프로브 빔라인 반도체 웨이퍼 결함·응력 매핑 서보 실장.