AIDT 온디바이스 STEM 방사광 X선 나노프로브 주사 나노회절(Scanning Nano-XRD) 격자 변형률(Strain) 매핑 및 빔 위치 피에조 피드백 서보 제어기

2nm 이하 나노집속 빔 반도체 3D FinFET/GAA 채널 국소 변형률 텐서 실시간 역산, 빔 위치 표류(Drift) 보정, 10,000Hz C# 엔진

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}\) 정의식은 다음과 같습니다:

\[ \lambda = 2 d_{hkl} \sin\theta_B \implies \varepsilon_{hkl} = \frac{d_{hkl} - d_0}{d_0} = -\cot(\theta_{B,0}) \cdot \Delta\theta_B \]

여기서 \(\Delta\theta_B = \theta_B - \theta_{B,0}\)는 무응력 기준 격자 대비 회절각 편위량입니다.

2차원 픽셀 검출기 상의 브래그 피크 중심 좌표 \((u, v)\)와 시료-검출기 거리 \(D_{det}\), 픽셀 크기 \(p\)로부터 산출되는 산란 벡터 편위 \(\Delta\mathbf{q}\) 및 3차원 변형률 텐서 성분 \(\varepsilon_{xx}, \varepsilon_{yy}, \varepsilon_{zz}\) 역산식은 다음과 같습니다:

\[ \Delta\theta_B \approx \frac{\sqrt{(u - u_0)^2 + (v - v_0)^2} \cdot p}{2 D_{det} \cos\theta_{B,0}} \]
\[ \varepsilon_{xx} = -\cot(\theta_{B,0}) \frac{(u - u_0) p}{2 D_{det} \cos\theta_{B,0}}, \quad \sigma_{xx} = \frac{E}{(1+\nu)(1-2\nu)} \left[ (1-\nu)\varepsilon_{xx} + \nu(\varepsilon_{yy} + \varepsilon_{zz}) \right] \]

집속 광학계(FZP)의 2축 나노 위치 표류 오차 \(\mathbf{e}_{drift}(t) = [e_x, e_y]^T\)에 대한 피에조 스테이지 폐루프 보정 제어 법칙은 다음과 같습니다:

\[ \mathbf{u}_{pzt}[k] = K_p \mathbf{e}_{drift}[k] + K_i \sum_{m=0}^k \mathbf{e}_{drift}[m] \Delta t + K_d \frac{\mathbf{e}_{drift}[k] - \mathbf{e}_{drift}[k-1]}{\Delta 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세대 방사광가속기 나노프로브 빔라인 반도체 웨이퍼 결함·응력 매핑 서보 실장.