BSI 2x2 기본 시뮬레이션
표준 2x2 베이어(Bayer) BSI 픽셀 단위 셀(unit cell)을 시뮬레이션하고 양자 효율(QE, Quantum Efficiency) 스펙트럼을 계산하는 완전한 레시피입니다.
인터랙티브 BSI 픽셀 스택 단면
스택 다이어그램에서 레이어를 선택하면 해당 재료 특성과 픽셀 스택에서의 역할을 확인할 수 있습니다.
스택 다이어그램에서 레이어를 선택하면 속성을 확인할 수 있습니다.
대화형 베이어 패턴 뷰어
다양한 컬러 필터 배열(CFA) 패턴을 탐색해 보세요. 픽셀을 선택하면 세부 정보를 볼 수 있습니다.
패턴
RGGB
단위 셀 크기
2x2
녹색 비율
50%
설명
가장 일반적인 베이어 패턴입니다. 단위 셀당 두 개의 녹색 픽셀이 인간 시각의 민감도를 모방하여 더 높은 휘도 해상도를 제공합니다.
학습 내용
- BSI 픽셀 구성을 처음부터 설정하는 방법
- RCWA를 사용한 파장 스윕 실행
- 채널별 QE 스펙트럼 시각화
- 에너지 수지 검증
사전 요구사항
bash
pip install -e ".[rcwa]"인터랙티브 픽셀 스택 빌더
BSI 픽셀 단면의 각 층 두께를 조정하세요. 패턴 레이어는 z envelope와 실제 마이크로렌즈, 컬러 필터, grid, DTI 재료 영역을 분리해서 표시합니다.
전체 스택 높이:4.58 um
구성 설정
설정 딕셔너리를 생성합니다 (또는 YAML에서 로드):
python
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"},
{"thickness": 0.015, "material": "sio2"},
{"thickness": 0.030, "material": "si3n4"},
]
},
"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": [9, 9], "dtype": "complex64"},
"stability": {
"precision_strategy": "mixed",
"allow_tf32": False,
"fourier_factorization": "li_inverse",
},
},
"source": {
"type": "planewave",
"wavelength": {
"mode": "sweep",
"sweep": {"start": 0.40, "stop": 0.70, "step": 0.01},
},
"angle": {"theta_deg": 0.0, "phi_deg": 0.0},
"polarization": "unpolarized",
},
"compute": {"backend": "auto"},
}시뮬레이션 실행
python
from compass.runners.single_run import SingleRunner
result = SingleRunner.run(config)
print(f"Wavelengths: {result.wavelengths.shape[0]} points "
f"({result.wavelengths[0]*1000:.0f}-{result.wavelengths[-1]*1000:.0f} nm)")
print(f"Pixels: {list(result.qe_per_pixel.keys())}")QE 스펙트럼 시각화
python
from compass.visualization.qe_plot import plot_qe_spectrum
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 5))
plot_qe_spectrum(result, ax=ax)
ax.set_title("BSI 2x2 Bayer (1 um pitch) - QE Spectrum")
plt.tight_layout()
plt.savefig("bsi_2x2_qe.png", dpi=150)
plt.show()에너지 수지 확인
python
from compass.analysis.energy_balance import EnergyBalance
check = EnergyBalance.check(result, tolerance=0.02)
print(f"Valid: {check['valid']}, max error: {check['max_error']:.4f}")에너지 균형: R + T + A = 1
실리콘 두께와 BARL 품질을 조정하여 가시광선 스펙트럼에서 반사, 투과, 흡수가 입사광을 어떻게 분배하는지 확인합니다.
최대 오차:0.00e+0
평균 오차:0.00e+0
검증:✓ 통과
최대 흡수:380 nm
채널별 QE 추출
python
from compass.analysis.qe_calculator import QECalculator
channel_qe = QECalculator.spectral_response(result.qe_per_pixel, result.wavelengths)
for color, (wl, qe) in channel_qe.items():
peak_idx = qe.argmax()
print(f"{color}: peak QE = {qe[peak_idx]:.1%} at {wl[peak_idx]*1000:.0f} nm")예상 출력 (근사값):
B: peak QE = 62.3% at 460 nm
G: peak QE = 71.5% at 540 nm
R: peak QE = 59.8% at 620 nm대화형 QE 스펙트럼 차트
실리콘 두께, BARL 품질, 메탈 그리드 폭이 Red, Green, Blue 채널의 양자 효율 스펙트럼에 미치는 영향을 살펴봅니다.
Blue 최대 QE:46.7%
Green 최대 QE:54.5%
Red 최대 QE:42.8%
평균 QE:48.0%
변형 실험
더 작은 피치 (0.8 um)
python
config["pixel"]["pitch"] = 0.8
config["pixel"]["layers"]["microlens"]["radius_x"] = 0.38
config["pixel"]["layers"]["microlens"]["radius_y"] = 0.38
config["pixel"]["layers"]["silicon"]["photodiode"]["size"] = [0.55, 0.55, 1.6]더 두꺼운 실리콘 (4 um)
python
config["pixel"]["layers"]["silicon"]["thickness"] = 4.0
config["pixel"]["layers"]["silicon"]["dti"]["depth"] = 4.0
config["pixel"]["layers"]["silicon"]["photodiode"]["size"] = [0.7, 0.7, 3.0]마이크로렌즈 없음
python
config["pixel"]["layers"]["microlens"]["enabled"] = False마이크로렌즈 유무에 따른 QE를 비교하여 마이크로렌즈의 기여도를 정량화할 수 있습니다.
재현성 안내
위에 표시된 수치는 특정 실행에서 얻은 예시 값입니다. 솔버 버전, 재료, 하드웨어(GPU/CPU, fp32/fp64), 설정에 따라 달라집니다. 결론을 내리기 전에 자신의 환경에서 직접 레시피를 다시 실행하여 검증하세요.