Skip to content

메탈 그리드 효과

이 레시피는 컬러 필터(color filter) 서브 픽셀 사이의 텅스텐(tungsten) 메탈 그리드(metal grid)가 QE 및 광학적 크로스토크(optical crosstalk)에 미치는 영향을 보여줍니다.

배경

메탈 그리드는 인접한 컬러 필터 요소 사이에 위치합니다. 컬러 필터 층을 통해 인접 픽셀로 빛이 유입되는 것을 차단하여 광학적 격리를 제공합니다. 그러나 다음과 같은 영향도 있습니다:

  • 유효 개구(effective aperture)가 감소합니다 (각 픽셀에 도달하는 빛이 줄어듦)
  • 그리드 가장자리에서 회절(diffraction) 효과가 발생할 수 있습니다
  • 일부 빛을 흡수합니다 (텅스텐은 손실성 물질)

이 레시피는 메탈 그리드가 있는 경우와 없는 경우의 두 가지 시뮬레이션을 실행하고 결과를 비교합니다.

BSI 픽셀 단면 구조

레이어를 선택하면 강조 표시되고 아래에 상세 설명이 나타납니다. 애니메이션 광선이 광학 경로를 추적합니다.

입사광 (-z)공기마이크로렌즈평탄화층GR컬러 필터금속 격자BARL (반사방지층)실리콘PDPD포토다이오드DTI (깊은 트렌치 격리)z
다이어그램에서 레이어를 선택하여 픽셀 스택에서의 역할을 알아보세요.

설정

python
import copy
from compass.runners.single_run import SingleRunner
from compass.analysis.solver_comparison import SolverComparison
from compass.visualization.qe_plot import plot_qe_comparison, plot_crosstalk_heatmap
import matplotlib.pyplot as plt

base_config = {
    "pixel": {
        "pitch": 1.0,
        "unit_cell": [2, 2],
        "bayer_map": [["R", "G"], ["G", "B"]],
        "layers": {
            "air": {"thickness": 1.0, "material": "air"},
            "microlens": {
                "enabled": True, "height": 0.6,
                "radius_x": 0.48, "radius_y": 0.48,
                "material": "polymer_n1p56",
                "profile": {"type": "superellipse", "n": 2.5, "alpha": 1.0},
                "shift": {"mode": "none"},
            },
            "planarization": {"thickness": 0.3, "material": "sio2"},
            "color_filter": {
                "pattern": "bayer_rggb",
                "red": {"material": "cf_red", "thickness": 0.62, "contact_angle": 66.0},
                "green": {"material": "cf_green", "thickness": 0.60, "contact_angle": 72.0},
                "blue": {"material": "cf_blue", "thickness": 0.65, "contact_angle": 62.0},
                "grid": {"enabled": True, "width": 0.05, "thickness": 0.47, "material": "tungsten"},
            },
            "barl": {
                "layers": [
                    {"thickness": 0.010, "material": "sio2"},
                    {"thickness": 0.025, "material": "hfo2"},
                ]
            },
            "silicon": {
                "thickness": 3.0, "material": "silicon",
                "photodiode": {"position": [0, 0, 0.5], "size": [0.7, 0.7, 2.0]},
                "dti": {"enabled": True, "width": 0.1, "material": "sio2"},
            },
        },
    },
    "solver": {
        "name": "torcwa", "type": "rcwa",
        "params": {"fourier_order": [11, 11]},
        "stability": {"precision_strategy": "mixed", "fourier_factorization": "li_inverse"},
    },
    "source": {
        "wavelength": {"mode": "sweep", "sweep": {"start": 0.40, "stop": 0.70, "step": 0.01}},
        "polarization": "unpolarized",
    },
    "compute": {"backend": "auto"},
}

실행: 메탈 그리드 포함

python
config_with_grid = copy.deepcopy(base_config)
config_with_grid["pixel"]["layers"]["color_filter"]["grid"]["enabled"] = True

result_with = SingleRunner.run(config_with_grid)
print("With grid: done")

실행: 메탈 그리드 미포함

python
config_no_grid = copy.deepcopy(base_config)
config_no_grid["pixel"]["layers"]["color_filter"]["grid"]["enabled"] = False

result_without = SingleRunner.run(config_no_grid)
print("Without grid: done")

QE 스펙트럼 비교

python
fig, ax = plt.subplots(figsize=(10, 6))
plot_qe_comparison(
    results=[result_with, result_without],
    labels=["With grid", "No grid"],
    ax=ax,
)
ax.set_title("Metal Grid Effect on QE")
plt.tight_layout()
plt.savefig("metal_grid_qe_comparison.png", dpi=150)
plt.show()

차이 정량화

python
comparison = SolverComparison(
    results=[result_with, result_without],
    labels=["with_grid", "no_grid"],
    reference_idx=0,
)
summary = comparison.summary()

for key, val in summary["max_qe_diff"].items():
    print(f"{key}: max |dQE| = {val:.4f}")

크로스토크 비교

python
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))

plot_crosstalk_heatmap(result_with, ax=ax1)
ax1.set_title("Crosstalk: With Grid")

plot_crosstalk_heatmap(result_without, ax=ax2)
ax2.set_title("Crosstalk: No Grid")

plt.tight_layout()
plt.savefig("metal_grid_crosstalk.png", dpi=150)
plt.show()

인터랙티브 픽셀 크로스토크 히트맵

파장과 픽셀 피치가 인접 픽셀 간 광학 크로스토크에 미치는 영향을 살펴보세요. 중앙 픽셀이 조명되며, 주변 픽셀은 크로스토크 강도를 나타냅니다.

흡수 깊이 (Si):1.56 um
인접 픽셀 크로스토크:3.8%
전체 크로스토크:55.2%
1.3%(0,0)R1.8%(0,1)G2.1%(0,2)R1.8%(0,3)G1.3%(0,4)R1.8%(1,0)G3.0%(1,1)B3.8%(1,2)G3.0%(1,3)B1.8%(1,4)G2.1%(2,0)R3.8%(2,1)G소스(2,2)R3.8%(2,3)G2.1%(2,4)R1.8%(3,0)G3.0%(3,1)B3.8%(3,2)G3.0%(3,3)B1.8%(3,4)G1.3%(4,0)R1.8%(4,1)G2.1%(4,2)R1.8%(4,3)G1.3%(4,4)R0%4%크로스토크

예상 관측 결과

  1. 그리드에 의한 QE 감소: 메탈 그리드는 일부 빛을 차단하고 에너지를 흡수하므로 피크 QE를 약간 감소시킵니다 (일반적으로 2-5%).
  2. 크로스토크 개선: 그리드는 인접 픽셀 간의 광학적 크로스토크를 크게 줄여줍니다. 특히 비축(off-axis) 조명에서 효과가 두드러집니다.
  3. 파장 의존성: 그리드 폭 대비 회절 효과가 더 뚜렷한 짧은 파장에서 그리드 효과가 더 강합니다.

그리드 폭 스윕

그리드 폭이 QE/크로스토크 트레이드오프에 미치는 영향을 연구합니다:

python
import numpy as np

grid_widths = [0.0, 0.03, 0.05, 0.08, 0.10]
results_vs_width = []

for width in grid_widths:
    cfg = copy.deepcopy(base_config)
    cfg["pixel"]["layers"]["color_filter"]["grid"]["enabled"] = width > 0
    cfg["pixel"]["layers"]["color_filter"]["grid"]["width"] = width
    r = SingleRunner.run(cfg)
    results_vs_width.append(r)
    print(f"Grid width {width*1000:.0f} nm: done")

# Plot
fig, ax = plt.subplots(figsize=(10, 6))
plot_qe_comparison(
    results=results_vs_width,
    labels=[f"w={w*1000:.0f}nm" for w in grid_widths],
    ax=ax,
)
ax.set_title("QE vs Metal Grid Width")
plt.tight_layout()
plt.savefig("grid_width_sweep.png", dpi=150)

재현성 안내

위에 표시된 수치는 특정 실행에서 얻은 예시 값입니다. 솔버 버전, 재료, 하드웨어(GPU/CPU, fp32/fp64), 설정에 따라 달라집니다. 결론을 내리기 전에 자신의 환경에서 직접 레시피를 다시 실행하여 검증하세요.

CF 모서리 라운딩 (Rounded rectangle)

실제 CF 포토리소그래피 공정에서는 각 컬러 필터 셀의 네 모서리가 둥글게 형성됩니다. grid.corner_radius를 지정하면 각 CF 셀이 네 모서리 모두 동일한 반경 r을 갖는 rounded rectangle로 모델링되고, 메탈 격자는 단위 셀에서 그 보집합으로 채워집니다. corner_radius = 0이면 기존 직각 격자와 동일합니다.

python
corner_radii = [0.0, 0.05, 0.10, 0.15]
results_vs_radius = []

for r in corner_radii:
    cfg = copy.deepcopy(base_config)
    cfg["pixel"]["layers"]["color_filter"]["grid"]["enabled"] = True
    cfg["pixel"]["layers"]["color_filter"]["grid"]["width"] = 0.05
    cfg["pixel"]["layers"]["color_filter"]["grid"]["corner_radius"] = r
    results_vs_radius.append(SingleRunner.run(cfg))
    print(f"corner_radius {r*1000:.0f} nm: done")

fig, ax = plt.subplots(figsize=(10, 6))
plot_qe_comparison(
    results=results_vs_radius,
    labels=[f"r={r*1000:.0f}nm" for r in corner_radii],
    ax=ax,
)
ax.set_title("QE vs CF 모서리 반경 (sharp -> rounded)")
plt.tight_layout()
plt.savefig("grid_corner_radius_sweep.png", dpi=150)

r이 커질수록 4-픽셀 교차 지점 부근의 메탈 면적이 늘어나므로, 대체로 유효 격자 폭이 살짝 커진 것과 비슷한 경향이 나타납니다 — 피크 QE가 약간 감소하고, 대각 이웃(diagonal neighbor) 크로스토크 감소 폭이 변(edge) 이웃보다 더 큽니다. r(pitch - grid.width) / 2로 자동 클램프되며, 이 한계에서는 CF가 내접원(inscribed circle)으로 수렴합니다.

함께 보기