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)으로 수렴합니다.

함께 보기 ​