samcoach
受講者数
4,208
レビュー数
398
評価
5.0
이력 사항
現) 반도체 대기업 (CHIP 회로설계 4년차)
아날로그 IP / 디지털 시나리오 설계
A급 특허 출원
글로벌 외국 기업 엔지니어 기술 대응
前) 스타트업 인큐베이팅 업체 (MCU Firm-ware 설계)
前) 대기업 가전제품 업체 (All-in-one 정수기 생산 기술)
前) 중견기업 의료기기 업체 (CIS, DDI ASIC 설계)
CHIP 설계 취업/이직 충분히 도전할 수 있습니다.
저와 함께 CHIP 설계 취업/이직에 가까워지세요!
"반도체 아날로그/디지털 회로설계를 꿈꾸시나요?
대기업 S전자 현직자의 눈으로 기초부터 도와드립니다!"
반갑습니다! S전자에서 시스템반도체를 설계하고 있는 삼코치 입니다 :)
저는 스타트업에서부터 회로설계 직무에 도전하면서 많은 시행착오를 겪어왔습니다.
PCB 설계, F/W 설계, FPGA 설계, CHIP 설계를 구먹구구 식으로 경험했죠.
그런데 한 가지 아쉬움이 있었습니다.
'왜 회로설계 분야는 체계화된 실습 기회와 취업에 대한 정보가 적을까?'
반도체 공정, 프로그래밍 등의 분야는 콘텐츠가 많았지만, 회로설계는 정보가 적다보니 그저 '숨겨진 세상'이었습니다.
이 글을 읽는 회로설계 취준생분들 또한 저와 같은 답답한 심정을 느껴보셨을 겁니다.
그래서 현직자와 면담도 해보고, 교수님께 물어보고, IDEC 강의를 수강해보기도 하죠.
하지만 알들말듯 여전히 잘 모르는 경우가 대부분 입니다.
그.래.서! 제가 직접 취업까지 연결되는 체계화된 강의를 제작해 버렸습니다!
저는 [아날로그 회로-> 디지털 시스템 -> MCU 펌웨어 -> 드라이버 설계 -> 소프트웨어]를 모두 경험하면서,
'Top-down / Bottom-up'스킬을 통해 제품과 회로를 완벽히 설명해낼 수 있게 되었습니다.
그리고 인프런에서 실무적인 회로를 다루면서 '아날로그/디지털 회로'에 대해 저만의 직관적 해석 방법부터 Trade-off를 따지는 방법까지 모두 풀어드리려 합니다.
저와 함께 기초를 닦고, 실무 역량을 쌓아 자신만의 Chip 설계 Story를 만들어 가봅시다!
講義
受講レビュー
- PCB HW設計実務:STM32を活用したMixed-signal ボード設計プロジェクト
- 製品から始まるインウの半導体CHIP回路設計物語
- デジタル回路設計実務:Computer ArchitectureとSoCプロトコルDigital IP設計
- PCB HW設計実務:STM32を活用したMixed-signal ボード設計プロジェクト
- PCB HW設計実務:STM32を活用したMixed-signal ボード設計プロジェクト
投稿
Q&A
SPICE Output Log에 대한 질문
안녕하세요, 답변 남겨드립니다.지금 보신 SPICE Output Log에서의 Vth 값은 잘못 나온 것이 아니라, 강의에서 “대략 300 mV”라고 두고 계산하던 이상적인 Vth와 정의가 조금 다른 값이라고 보셔야 합니다. 그리고 회로 안에 실제로 들어가 있는 트랜지스터의 바이어스 상태 때문에 400~500 mV 수준으로 올라가는 것이 자연스러운 상황입니다.우선 로그 화면을 그대로 해석해 보면, BSIM3 MOSFET 테이블에서Vth 행에 M1, M4는 약 5.34e-01 ≒ 0.534 V,M5, M6는 약 4.0e-01 ≒ 0.40 V 정도로 표시되어 있고,그 바로 위 Vbs 행을 보면 M1, M4는 Vbs ≒ -4.78e-01 V, M5, M6는 0 V로 보입니다.여기서 Vbs는 바디전압(Vb) – 소스전압(Vs) 입니다. NMOS 기준으로 바디는 0 V에 붙어 있고, 소스 쪽 노드가 0.48 V 정도로 떠 있다면 Vbs ≒ -0.48 V가 됩니다. 바디 입장에서 보면 VSB = Vs – Vb = 0.48 V가 되는 셈이죠.MOSFET의 문턱전압은 단일 상수가 아니라, 바디 효과 때문에 실제 동작점에서 다음과 같이 바뀝니다.Vth(VSB) = Vth0 + gamma ( sqrt(2 phi_f + VSB) - sqrt(2 * phi_f) )여기서 Vth0는 VSB = 0 일 때의 기본 문턱전압, gamma는 바디효과 계수, phi_f는 공핍층과 관련된 파라미터입니다. 강의에서 “Vth ≒ 0.3 V”라고 둔 값은 보통 이 Vth0에 대응되는, 긴 채널 + VSB = 0 가정의 이상적인 값이라고 보시면 됩니다.대략적인 숫자로 예를 들면, 공정에서Vth0 = 0.30 V, 2*phi_f ≒ 0.6 V, gamma ≒ 0.7 V^(1/2)라고 가정하고, 지금 회로처럼 VSB = 0.48 V 라고 두면sqrt(2phi_f + VSB) = sqrt(0.6 + 0.48) = sqrt(1.08) ≒ 1.039sqrt(2phi_f) = sqrt(0.6) ≒ 0.775따라서 바디 효과로 증가하는 문턱전압 증가분은delta_Vth = gamma (1.039 - 0.775) ≒ 0.7 0.264 ≒ 0.185 V이렇게 되면 실제 동작점에서의 문턱전압은Vth_eff = Vth0 + delta_Vth ≒ 0.30 V + 0.185 V = 0.485 V정도가 됩니다. 로그에 찍힌 0.53 V와 오차 50 mV 이내 수준이라, “VSB 때문에 Vth가 0.3 V에서 0.5 V 정도로 올라갔다”고 해석할 수 있습니다. 반대로 M5, M6처럼 Vbs가 0인 트랜지스터는 Vth가 약 0.4 V로 더 낮게 나오고 있지요. 같은 모델을 쓰더라도, 각 소자의 VSB, 길이, 폭, 전압 조건에 따라 SPICE가 내부적으로 계산한 “유효 문턱전압”이 조금씩 달라집니다.즉, 지금처럼 .op로 보고 있는 Vth 값은 “해당 바이어스에서 BSIM 모델이 계산한 유효 문턱전압”입니다. 강의에서 가정한 300 mV는 손계산을 하기 위해 단순화한 기준값이고, 실제 회로에 올려놓고 나면 보디 효과, 짧은 채널 효과 때문에 400~500 mV로 바뀌는 것은 매우 자연스러운 현상입니다.Vth를 확인하는 방법 관점에서 말씀드리면, 회로 전체의 .op 결과에서 Vth 행을 보는 방식도 맞는 방법이지만, 이 값은 어디까지나 “그 회로 안에서 그 소자가 현재 놓여 있는 상태의 Vth”입니다. 공정 자체의 기준 Vth0를 보고 싶다면, 별도의 테스트 벤치를 만들어서 소스와 바디를 0 V에 두고, 간단한 단일 트랜지스터 회로로 .op를 돌리거나, 모델 파일의 VTH0 파라미터를 직접 보는 식으로 확인하는 게 좋습니다.예를 들어 LTspice에서 NMOS 하나만 놓고,소스와 바디를 GND에 묶고, 드레인은 VDD에, 게이트에 어떤 바이어스를 줘 .op를 돌린 다음, 그때 Vbs = 0인 상태에서 출력되는 Vth를 보면 “이 공정 NMOS의 기본 문턱전압이 어느 정도인지”를 깔끔하게 볼 수 있습니다. 같은 모델이라도 회로 안에서 VSB가 0.5 V, 1 V 이렇게 올라가면 방금 계산한 것처럼 그때그때 Vth가 달라지기 때문에, 이 둘을 헷갈리면 지금처럼 혼동이 오게 됩니다.이제 두 번째 질문, “그렇다면 Vth가 0.5 V라면 W를 키워서 Vgs를 552 mV까지 낮춰도 되나?”에 대해 정리해 보겠습니다.아날로그 설계에서 트랜지스터를 강한 포화 영역에서 쓰는 경우, 단순화해서Id ≒ (1/2) mu Cox (W / L) (Vgs - Vth)^2라고 두고 계산합니다. 여기서 (Vgs - Vth)를 보통 Vov, overdrive voltage라고 부르는데, 동작 여유, gm, 노이즈, 스윙 등을 결정하는 핵심 변수입니다.Id를 일정하게 유지한 채로 W를 두 배로 키운다고 가정해 보겠습니다. 그러면 식에서 (W/L) 항이 두 배가 되므로, 같은 Id를 만들기 위해서는 Vov가 줄어들어야 합니다. 수식으로 보면Id = (1/2) k W (Vov)^2 (여기서 k = mu Cox / L 로 묶었습니다)W를 2W로 바꾸고 Id를 동일하게 두면Id = (1/2) k 2W (Vov_new)^2 = k W * (Vov_new)^2이 값이 기존 Id = (1/2) k W * (Vov_old)^2 와 같아야 하므로k W (Vov_new)^2 = (1/2) k W (Vov_old)^2(Vov_new)^2 = (1/2) (Vov_old)^2Vov_new = Vov_old / sqrt(2)즉 W를 두 배로 키우면, 같은 전류에서 Vov는 약 0.707배로 줄어듭니다. 예를 들어 Vth_eff = 0.5 V, Vov_old = 150 mV (즉 Vgs_old = 0.65 V)로 설계되어 있던 소자를 W 2배로 키우면, Id가 같을 때 Vov_new는 약 106 mV가 되고 Vgs_new는 0.5 V + 0.106 V = 0.606 V 수준으로 떨어집니다. 질문에서 말씀하신 “Vgs를 552 mV까지 낮춘다”라는 것도 이와 같은 맥락의 조정이라고 보시면 됩니다. 전류를 유지한 채 W를 키우면 Vgs는 내려가고, 그만큼 overdrive가 줄어드는 것이죠.문제는 “얼마까지 내려도 되는가”입니다. 이건 단순히 Vgs 수치만 보는 게 아니라,Vov = Vgs - Vth가 충분히 남아서 Vds(sat) ≒ Vov 조건을 만족해야 하는지,다단 구조에서 위·아래 트랜지스터의 헤드룸 합이 공급전압 안에 들어오는지,gm/Id, 노이즈, 선형성, 스윙 등 설계 사양에 맞는지를 종합적으로 따져야 합니다.예를 들어 동일 전류에 대해 Vov = 150 mV에서 동작하던 차동쌍을 Vov = 50 mV까지 낮추면, gm/Id는 올라가서 이득은 좋아질 수 있지만, 각 트랜지스터가 포화 영역에서 버틸 수 있는 Vds 여유가 줄어들어 위쪽 미러나 캐스코드가 쉽게 triode로 떨어질 수 있습니다. 또 너무 Vov를 줄이면 트랜지스터가 약한/중간 인버전 영역에 들어가서 우리가 가정한 단순 제곱법칙과 실제가 많이 어긋나기도 합니다.실무에서는 그래서 “Vth 숫자 하나”보다는 “현재 바이어스에서의 Vov, gm/Id”를 기준으로 봅니다. 지금과 같이 .op 결과에서 각 소자의Vgs, Vth, gm, Id를 동시에 볼 수 있으므로, 예를 들어 M1에 대해Vov = Vgs - Vthgm/Id = gm / Id를 직접 계산해 보시면, 이 소자가 강한 인버전인지, 중간 인버전인지 감이 잡힙니다. 예를 들면 Id = 10 uA, gm = 200 uS 라면 gm/Id = 20 V^-1 정도라 중간~강한 인버전 영역으로 보고, 이 정도면 아날로그 증폭기로 쓸 때 적당한 영역이라고 판단하는 식입니다. 강의에서 “Vth ≒ 300 mV, Vov ≒ 100~150 mV”를 기준으로 손계산을 하는 이유도, 이런 gm/Id와 헤드룸 감각을 잡기 위한 것이지, 실제 SPICE에서 Vth가 딱 0.300 V로 나와야 한다는 의미는 아닙니다.정리해서 말씀드리면,지금처럼 .op 로그의 Vth를 보는 방법은 맞지만, 그것은 “해당 바이어스, 해당 VSB에서의 유효 Vth”이고, VSB가 0.5 V 가까이 생기면 0.3 V였던 기준 Vth가 0.4~0.5 V로 올라가는 것이 정상입니다.W를 키워 Id를 고정한 채 Vgs를 내리면, 결국 Vov = Vgs - Vth가 줄어드는 방향으로 바이어스가 이동하므로, 헤드룸과 포화 조건, gm/Id를 기준으로 “어디까지 줄일지”를 결정해야 합니다.설계할 때는 강의에서처럼 Vth0 ≒ 0.3 V를 가정해 손계산으로 초기 값들을 잡고, 이후 SPICE에서 나온 실제 Vth_eff, Vgs, gm/Id를 보면서 W, L, 바이어스를 조금씩 조정해 가는 것이 일반적인 실무 흐름입니다.
- 0
- 2
- 16
Q&A
섹션4 BOOT0 핀 설정
안녕하세요, 답변 남겨드립니다.BOOT0 핀을 GND에 바로 쇼트시키지 않고 100 kΩ 저항을 거쳐서 GND로 당겨 주는 데에는 실무적인 이유가 있습니다. 한 줄로 요약하면, “기본값은 항상 0으로 두되, 나중에 필요하면 강제로 1로 올릴 수 있도록 여지를 남겨두기 위해서”라고 보시면 됩니다. 이 강의에서 사용하는 STM32F103 보드도 동일한 개념을 따르고 있습니다.먼저 BOOT0의 역할을 다시 짚어보면, 리셋 시점에 BOOT0 레벨에 따라 다음과 같이 부트 경로가 결정됩니다.BOOT0 = 0 → 사용자 Flash에서 부트BOOT0 = 1 → 시스템 메모리(ROM 부트로더) 또는 SRAM 부트 (옵션에 따라)양산 보드는 대부분 “항상 Flash에서 부트”가 기본이기 때문에, BOOT0를 0으로 묶어 두는 게 맞습니다. 여기서 선택지가 두 가지입니다.BOOT0를 GND에 직접 접지BOOT0를 저항을 통해 GND로 풀다운1번처럼 GND에 직접 연결해 버리면 회로는 단순해지지만, 나중에 BOOT0를 1로 만들 수 있는 방법이 사실상 없어집니다. 예를 들어 펌웨어가 망가져서 부팅이 안 되거나, 사용자가 플래시를 잠가 버려 SWD가 정상 동작하지 않는 상황에서, ROM 부트로더(USART, USB DFU 등)를 이용해서 다시 살리고 싶을 때가 있습니다. 이때 BOOT0를 1로 강제로 올릴 수 있어야 ROM 부트로더로 진입이 가능한데, 핀이 GND에 직접 쇼트되어 있으면 외부에서 3.3 V를 물리는 순간 VDD와 GND를 직결시키는 꼴이 되어 버립니다. 심하면 보드가 타거나 보호회로가 동작합니다.반대로 2번처럼 100 kΩ을 거쳐서 GND에 연결하면, “기본 상태에서는 논리 0으로 확실하게 잡혀 있으면서도, 필요할 때는 외부에서 고레벨을 인가해서 모드를 바꿀 수 있는” 구조가 됩니다. 예를 들면 다음과 같은 방식이 가능합니다.개발 초기에만 사용하는 2.54 mm 핀헤더를 BOOT0 핀과 3.3 V 사이에 하나 빼 두고, 점퍼를 꽂으면 3.3 V로 강제 High, 점퍼를 빼면 100 kΩ을 통해 GND로 Low 유지.ICT(테스트 장비)나 JTAG/Serial 프로그래머에서 BOOT0 테스트 패드를 집게로 물고, 테스트 시에만 High로 강제.이때 전류를 정량적으로 보면, 외부에서 BOOT0를 3.3 V로 직접 구동하고, 보드 쪽에는 100 kΩ 풀다운만 걸려 있다고 가정하면, 저항을 통해 흐르는 전류는I = V / R = 3.3 V / 100 kΩ ≒ 33 µA정도로 아주 작습니다. 외부 드라이버 입장에서는 33 µA 정도만 더 내면 되고, 보드 전력 소모도 사실상 무시 가능한 수준입니다. 만약 풀다운을 10 kΩ으로 설계했다면 I = 3.3 / 10 kΩ = 330 µA가 되는데, 이것도 절대값으로는 작지만, 저전력 시스템에서는 불필요한 누설 전류를 줄이기 위해 100 kΩ 수준으로 올리는 경우가 많습니다.“그러면 왜 아예 내부 Pull-down만 믿고 외부 저항도 안 달면 안 되나요?”라는 질문도 많이 나오는데, STM32F1의 BOOT0는 리셋 시점 부트모드 결정에 매우 중요해서, 데이터시트/앱노트에서도 외부에서 확실한 레벨을 잡아 주는 것을 권장합니다. 전원 인가 순간의 노이즈, 주변 신호에 의한 커플링 등을 고려하면, 고정값이 필요한 핀은 외부 풀업/풀다운으로 확정해 두는 것이 안전합니다.현업 보드에서 자주 쓰는 패턴을 예로 들면 다음과 같습니다.양산 제품: BOOT0 – 100 kΩ – GND, 그리고 패널이나 내부에 숨겨진 Test Pad를 BOOT0 핀에 하나 빼 둠. 양산 단계에서는 항상 0으로 동작하지만, RMA(고장 분석)나 펌웨어 복구 시에는 엔지니어가 그 패드를 집게로 찝어서 High로 만들어 ROM 부트로더 진입.개발 보드: BOOT0 – 100 kΩ – GND, 그리고 점퍼 셀렉터 [GND – BOOT0 – VDD] 구조. 사용자가 점퍼 위치를 바꿔서 수 초 안에 부트 모드를 바꿀 수 있도록 설계. STM32 Nucleo/Discovery 보드들이 거의 이 패턴을 따릅니다.또 하나의 실무적인 이유는 “핀 재사용 가능성”입니다. 일부 STM32 라인업에서는 부트핀을 GPIO로 재활용하기도 하는데, 이 경우에도 저항을 통해 기본값만 정해 주고, 실제 동작 중에는 GPIO로 사용하면서도, 리셋 시에는 원하는 부트모드가 유지되도록 설계하는 패턴이 많이 쓰입니다. BOOT0가 완전 전용 핀인 경우에도, 나중에 동일 보드를 다른 MCU나 다른 리비전으로 교체할 때 이런 유연성이 도움이 됩니다.정리하면, BOOT0를 GND에 바로 연결해도 동작 자체에는 문제가 없지만,펌웨어 복구 및 ROM 부트로더 진입 경로 확보개발·양산 테스트에서 부트모드 강제 설정전원/드라이버 충돌 없이 외부에서 High를 인가할 수 있는 안전한 회로 구성저전력 관점에서 누설 전류를 제한하면서도 안정적인 기본값 확보이 네 가지 관점 때문에, 현업에서는 100 kΩ 정도의 풀다운 저항을 두고 GND에 연결하는 방식을 많이 사용합니다.
- 0
- 2
- 18
Q&A
디버거에 대한 질문입니다.
안녕하세요, 답변 남겨드립니다.질문 주신 내용을 하나씩 나눠서 설명드리겠습니다.먼저 “F407의 디버거로 F103을 설계했다”는 부분은, 강의에서 사용한 STM32F407 보드(NUCLEO, Discovery 혹은 ST-LINK 기능이 포함된 보드)의 디버거 기능을 떼어다가, STM32F103이 달린 여러분의 메인 보드를 디버깅·프로그램하는 용도로 활용한다는 의미입니다. 즉 F407은 실제 제품의 기능을 수행하는 메인 MCU 역할이 아니라, PC ↔ F103 사이에서 “USB–SWD/JTAG 디버그 브리지” 역할을 하는 전용 디버거/프로그래머로 동작하게 됩니다. 이런 보드에는 ST-LINK V2/V3가 온보드로 구현되어 있고, USB를 통해 PC와 통신하면서 SWDIO, SWCLK, NRST, GND, VTREF(타겟 전압 인식용) 신호를 F103 쪽으로 보내게 됩니다. 실제로는 SWD 클럭이 수 MHz(예: 1~4 MHz 정도)로 동작하면서, 수십 kB~수백 kB의 펌웨어를 몇 초 이내에 다운로드하고, 그 이후에는 실시간 디버깅(브레이크포인트, 레지스터 읽기/쓰기, 메모리 확인, Run/Stop 제어 등)을 수행합니다.디버거의 핵심 역할을 정리하면, 첫째, Flash 프로그램 다운로드입니다. F103의 Flash에 펌웨어를 굽는 일을 전담합니다. 예를 들어 128 kB 정도의 펌웨어를 2~5초 이내 수준으로 반복 다운로드 가능하게 해줍니다. 둘째, 디버깅 인터페이스 제공입니다. PC의 IDE(STM32CubeIDE, Keil, IAR 등)에서 C 소스 단위로 Breakpoint를 걸고, 한 줄씩 Step-into/Step-over 하면서 레지스터 값, 메모리 맵(예: 0x2000_xxxx RAM, 0x4001_xxxx Peripheral) 등을 실시간으로 확인할 수 있게 해줍니다. 셋째, Chip 상태 제어입니다. 디버거를 통해 하드웨어 Reset을 걸거나, Low-power 모드에 들어간 이후에도 다시 깨워서 상태를 확인할 수 있어서, 저전력 설계나 Fault 상황(예: HardFault) 분석에 매우 유용합니다. 실무에서도 보드 Bring-up 시 거의 100% 필수로 사용하는 장비가 이 디버거입니다.두 번째로 질문 주신 “F103 설계 내에 따로 디버깅 핀을 부여하고 커넥터를 연결해 둔 이유”는, 디버거 기능을 특정 보드(F407 보드) 하나에만 의존하지 않고, 표준화된 디버그 포트를 보드에 남겨두기 위해서입니다. 강의의 “STM32F103 schematic – Debugging pin 설계” 파트에서도 별도의 Debug 커넥터(예: 2x5 1.27mm Cortex Debug Connector나 1x6/1x10 2.54mm 핀 헤더)를 배치하는 흐름을 잡습니다.이 커넥터에는 일반적으로 다음과 같은 신호들이 연결됩니다. 타겟 전원 기준 전압(VTREF, 예: 3.3 V), GND, SWDIO(PA13), SWCLK(PA14), NRST(하드웨어 리셋), 필요시 SWO(Trace 출력) 혹은 추가 UART Tx/Rx 핀 등이 함께 나갈 수 있습니다. 예를 들어 Cortex 10핀 커넥터를 쓴다고 하면, 실제 핀 구성은 다음과 같이 될 수 있습니다: Pin1 VTREF(3.3 V), Pin3 GND, Pin5 SWCLK, Pin7 SWDIO, Pin9 SWO, 나머지 핀들은 NC 또는 Reset, 특정 Vendor 정의 핀으로 사용. 이런 식으로 구성해 두면, 외부에서 ST-LINK V2 독립형 디버거, J-LINK, CMSIS-DAP 디버거, 혹은 양산 라인의 프로그래밍 장비를 그대로 꽂아서 사용할 수 있습니다.“이 커넥터는 어디에 연결되나요?”라는 질문을 현업 관점에서 답변드리면, 기본적으로는 “외부 디버거/프로그래머”에 연결된다고 보시면 됩니다. 개발 단계에서는 USB가 달린 상용 디버거 박스(예: ST-LINK V2 동글, Segger J-LINK)를 이 커넥터에 꽂고, PC에 연결해서 F103의 펌웨어를 다운로드하거나 디버그를 수행합니다. 예를 들어 개발 초기에는 F407 보드를 디버거처럼 사용하다가, 이후에는 사내 표준 J-LINK 디버거를 사용하고 싶을 수 있는데, 이때도 같은 커넥터 핀맵만 유지하면 디버거만 교체해서 바로 사용 가능합니다.양산 관점에서는 이 커넥터가 ‘프로그램 포트’가 됩니다. 예를 들어 생산 라인에서 ICT(In-Circuit Tester)나 간단한 Jig에 ST-LINK 여러 개를 달아서, 보드를 컨베이어로 흘려보내며 자동으로 펌웨어를 굽고, 검사하는 식의 공정을 구성합니다. 이때 Jig에는 이 디버그 커넥터와 대응되는 테스트 핀(POGO 핀)이 배치되어 있고, 보드가 내려앉으면 VTREF / GND / SWDIO / SWCLK / NRST가 자동 접촉되어, 한 번에 수십 개 보드에 동시에 펌웨어를 굽기도 합니다. 이처럼 디버그 커넥터를 설계 단계에서 확보해 두면, 개발–디버깅–양산까지 전 흐름에서 동일 포트를 재활용할 수 있어 실무 효율이 매우 높습니다.또 하나 중요한 포인트는, F407 디버거 보드가 항상 붙어 있을 수는 없다는 점입니다. 예를 들어 실제 고객에게 납품하는 최종 제품에는 F407 보드를 같이 넣지 않겠죠. 하지만 필드에서 문제가 생겼을 때, RMA로 회수된 보드에 다시 디버거를 꽂고 상태를 분석해야 하는 경우가 있습니다. 이런 상황에서 디버그 커넥터가 보드 상에 남아 있으면, 외부에서 별도의 디버거만 들고 가서 SWD로 연결해 펌웨어 버전 확인, Fault 발생 시점 레지스터 값 확인, 부트로더 재플래시 등 다양한 작업을 할 수 있습니다. 실무에서는 필드 디버깅을 고려해 이 디버그 포트를 숨기거나(케이스 내부에 배치), 혹은 서비스용 포트로 별도 관리하는 경우도 있습니다.정리하자면, F407의 디버거는 PC와 F103 사이를 중계하는 “USB–SWD 디버그 장비” 역할을 하고, F103 설계 내의 디버깅 핀+커넥터는 이 SWD 신호들을 보드 밖으로 꺼내서, F407 보드든 ST-LINK V2든 J-LINK든 어떤 디버거든 자유롭게 연결할 수 있도록 해주는 “표준 디버그 인터페이스”라고 이해하시면 됩니다. 개발 단계에서는 F407을 임시 디버거로 쓰고, 장기적으로는 그 디버그 커넥터를 통해 다양한 디버거/양산 프로그래머를 꽂을 수 있도록 확장성을 확보했다고 보시면 됩니다.
- 0
- 2
- 19
Q&A
GPIO 에 대한 질문입니다.
안녕하세요, 답변 남겨드립니다.영상에서 말씀하신 “GPIOA~E가 있고, 각각이 16개 기능이 있어서 총 80개 핀이 칩에 담겨 있다”는 표현은, 조금 더 정확하게 말하면 “GPIO 포트가 5개 있고, 각 포트가 16개의 비트(라인)를 가진다 → 내부적으로 최대 80개의 GPIO 라인이 설계되어 있다”는 뜻이라고 이해하시면 좋습니다.먼저 용어를 하나씩 정리해 보겠습니다.STM32F103 같은 MCU에서 GPIOA, GPIOB, GPIOC … 이런 이름은 “포트(Port)” 이름입니다. 하나의 포트는 16비트 레지스터로 구성되어 있고, 그 16비트 각각이 하나의 GPIO 핀에 대응됩니다. 그래서Port A → PA0, PA1, …, PA15 (총 16개)Port B → PB0, PB1, …, PB15 (총 16개)…이런 식으로 최대 포트 A~E까지 있으면 이론적으로는5개 포트 × 16비트 = 80개즉, 내부 설계 관점에서 80개의 GPIO 라인이 존재한다고 말할 수 있습니다. 여기서 강의에서 “16개 기능”이라고 표현한 부분은 엄밀히 말하면 “16개의 GPIO 라인(=핀, 비트)”라고 보시는 게 더 정확합니다.다만 중요한 포인트는, 데이터시트 상에 이렇게 80개의 GPIO가 “논리적으로” 정의되어 있다고 해서, 여러분이 쓰는 패키지(LQFP48, LQFP64, BGA 등)에 실제로 80개의 물리 핀이 다 나와 있다는 뜻은 아니라는 점입니다. 예를 들어 LQFP48 패키지를 쓰면, 내부에는 PA0~PE15까지 라인이 설계돼 있어도, 그 중 일부만 실제 패키지 패드에 연결되고 나머지는 “unbonded”라서 밖으로 안 나옵니다. 그래서 CubeMX에서 핀맵을 볼 때 어떤 포트 비트는 회색으로 막혀 있거나, 해당 패키지에서는 사용 불가로 표시되는 경우가 생깁니다.또 하나 헷갈리기 쉬운 부분이 “하나의 PAx 핀이 여러 기능을 가진다”는 개념입니다. STM32에서는 각 핀이 기본적으로는 GPIO(일반 입출력)로 동작하지만, 같은 핀을 USART, SPI, I2C, TIM(타이머 채널) 같은 주변장치의 Alternate Function으로도 쓸 수 있습니다. 예를 들어 데이터시트에서PA9 → GPIO 기능 + USART1_TX 기능PA10 → GPIO 기능 + USART1_RX 기능PB6 → GPIO 기능 + I2C1_SCL 기능PB7 → GPIO 기능 + I2C1_SDA 기능이런 식으로 표시됩니다. 이때 중요한 것은 “핀 개수가 늘어나는 것”이 아니라 “하나의 물리 핀에 여러 주변기능이 멀티플렉서로 매달려 있다”는 것입니다. 실제로는 PA9이라는 한 개 패드가 있고, 내부에서 “지금은 GPIO로 쓸래?”, “지금은 UART TX로 쓸래?”를 레지스터 설정으로 선택하는 구조입니다. 그래서내부 GPIO 라인 수: 최대 80개 (포트 A~E × 16비트)각 GPIO 라인에 매달린 주변 기능: 핀마다 2~4개 정도 Alternate Function이 붙어 있음이렇게 보시면 됩니다.현업 PCB 설계 관점에서 정량적으로 감을 잡으려면, 다음 순서를 머릿속에 그려보시면 좋습니다. 예를 들어 STM32F103 LQFP64 패키지를 써서 보드를 설계한다고 가정하겠습니다. 데이터시트 기준으로 이 패키지는 대략 51개 내외의 I/O가 외부로 나옵니다(숫자는 패키지에 따라 조금씩 다릅니다). 논리적으로는 80개의 GPIO 라인이 정의돼 있지만, 실제로는 그 중 50개 남짓만 패드로 나옵니다. 이 50개 중 일부는 전용 기능(전원, 그라운드, NRST, OSC_IN/OUT, BOOT0 등)으로 잡혀 있으니, 애플리케이션에서 걸 수 있는 “실질적인 GPIO/주변 핀 수”는 예를 들어 40개대 중반 정도가 됩니다. 이 40여 개 핀 각각에 대해 “여기는 UART TX/RX, 여기는 SPI, 여기는 ADC 입력, 남는 곳은 GPIO” 식으로 CubeMX에서 매핑하면서, 어떤 포트/비트가 실제로 쓰이는지 정리하는 것이 MCU Pin Mapping 작업입니다.실제로 프로젝트를 하나 예로 들면,모터 제어 PWM 출력에 6핀(3상 하이/로우)UART 디버깅용 2핀(USART1_TX/RX)I2C 센서용 2핀(SCL/SDA)ADC 센싱용 4핀LED 제어용 4핀버튼 입력용 3핀Ethernet, DAC, 기타 인터페이스 추가이런 식으로 요구사항을 나열한 뒤, CubeMX에서“PWM은 TIM1_CH1~3 / CH1N~3N이 있는 PA8~PA11 등”“UART는 PA9/PA10 또는 PB6/PB7 중 패키지에서 가능한 조합”“ADC는 ADC1_IN0~INx에 해당하는 PA0, PA1, PB0 …”같은 식으로 배치를 합니다. 이 때 화면에서 보이는 PA0~PE15가 바로 강의에서 말한 “총 80개의 논리 GPIO 라인”이고, 그 중 회색으로 막힌 비트는 현재 패키지에서는 외부로 안 나온 비트라고 이해하시면 됩니다.정리하면,GPIOA~E가 있다 → 최대 5개의 GPIO 포트 모듈이 있다각 포트는 16비트 폭이다 → PA0~PA15처럼 16개의 GPIO 라인이 있다따라서 내부적으로는 5 × 16 = 80개의 GPIO 라인이 설계되어 있다하지만 실제 패키지에서 외부로 나오는 물리 핀 수는 패키지에 따라 더 적을 수 있고, 각 핀은 GPIO 외에도 여러 Alternate Function을 선택해서 쓸 수 있다이렇게 이해하시면 강의에서 하신 설명이 훨씬 자연스럽게 느껴지실 겁니다.
- 0
- 1
- 22
Q&A
TI 홈페이지 Block Diagram 관련 질문드립니다.
안녕하세요, 답변 남겨드립니다.질문을 두 가지로 나눠서 보시면 이해가 훨씬 잘 되십니다.(1) TI 홈페이지 Block Diagram의 “현실성”이 어느 정도인지,(2) 과제 예시로 드린 블록 다이어그램이 어떤 시스템을 가정하고 있는지 입니다.먼저 TI 홈페이지 Block Diagram이 실제 회사에서 사용하는 것과 얼마나 비슷한지부터 말씀드리겠습니다.TI가 사이트에 올려놓는 블록 다이어그램은 두 가지 성격이 섞여 있습니다.하나는 “마케팅용”이고, 다른 하나는 “실제로 현업에서 자주 쓰는 구조를 요약한 교육용/레퍼런스용”입니다.완전히 광고만을 위한 허구는 아니고, 실제로 돌아가는 전형적인 구조를 상당히 충실하게 반영합니다.예를 들어 Automotive Sensor Node, BMS, 인버터, AC/DC 전원, 산업용 센서 노드 같은 시스템 블록을 보시면12 V 혹은 24 V 메인 전원 → 보호 소자 → DC-DC → LDO → MCU/센서/통신칩이라는 흐름이 거의 빠짐없이 들어가 있습니다. 이런 전원 트리 형태는 실제 자동차 ECU, 산업용 컨트롤러, IoT 게이트웨이 보드에서도 그대로 등장합니다. 현업에서 회로를 설계하면, 최상위 시스템 다이어그램 한 장에 대략 10~30개 정도의 블록이 들어가는데, TI가 그려놓은 시스템 블록도 비슷한 스케일을 유지합니다.다만 실제 회사 내부에서 쓰는 블록 다이어그램과 비교했을 때 차이점이 몇 가지 있습니다.첫째, 상세도입니다.TI 사이트의 다이어그램은 고객이 한눈에 이해할 수 있도록 블록을 꽤 크게 묶어놓습니다. 예를 들어 실제 시스템에서는“프론트 엔드 보호 회로(ESD, TVS, EMI 필터) → 커넥터 → DC-DC 컨버터 1차 → DC-DC 보조 레일 → 여러 개의 LDO → 전류 센싱”처럼 다 쪼개서 그리는 경우가 많은데, TI 블록 다이어그램에서는 이것을 “Protection & Power Management” 정도로 하나의 큰 상자로 묶어버리는 식입니다.둘째, 부품 벤더 편향입니다.실제 양산 보드에는 TI, NXP, ST, Infineon, ADI 등 여러 벤더의 칩이 섞여 들어가지만, TI 사이트의 블록에는 당연히 TI 부품만 들어갑니다. 예를 들어 “Automotive Sensor Node” 예시도 실전에서는 DC-DC는 TI, MCU는 ST, 센서는 Bosch, 통신은 NXP 조합이 흔하지만, TI 다이어그램에서는 MCU까지 TI 제품으로 제안하는 식입니다. 구조는 맞지만, 실제 BOM 구성은 회사마다 훨씬 다채롭습니다.셋째, 누락된 현실 요소들입니다.실제 회사 내부 블록 다이어그램에는 종종 다음과 같은 것들이 별도 블록으로 나타납니다.ASILD 레벨 대응을 위한 이중화 센서, 듀얼 MCU, 독립 Watchdog온라인 진단 회로, 자체 Test 모드, 공장 보정(Trim) 회로안전 규격(ISO 26262, IEC 61508 등)을 만족시키기 위한 모니터링 전원 레일TI 블록 다이어그램은 이런 안전·품질 관련 블록을 대부분 생략하고 “핵심 동작 플로우”에 집중합니다. 동작 원리 자체는 맞지만, 실제 양산 시스템에서 요구되는 안전·진단 구조까지는 다 반영되어 있지 않은 경우가 많습니다.그래서 정리하면, TI 시스템 Block Diagram은동작 원리와 전원/신호 흐름 관점에서는 현실과 매우 유사하고,부품 구성과 안전/테스트/진단 같은 디테일은 축약된 “교육 + 마케팅용” 그림이라고 보시면 됩니다.과제를 하실 때는 그래서 다음처럼 받아들이시는 것이 좋습니다.“이 블록 다이어그램은 실제로 동작 가능한 전형적인 구조를 보여준다. 다만 현업에서 쓰는 것보다 약간 단순화되어 있고, 일부 보호/진단/안전 블록이 빠져 있다.”즉, 과제에서는 TI 다이어그램을 그대로 가져와서 전원 흐름, 신호 흐름을 이해하시고, 강의에서 배운 내용에 따라 “여기에는 사실 ESD/TVS가 더 들어가야겠구나, 여기 DC-DC 뒤에 LDO를 하나 더 두는 이유는 노이즈 때문이겠구나” 하는 식으로 현실적인 요소를 덧붙여 보시면 좋습니다.이제 두 번째 질문, 과제 예시로 드린 블록 다이어그램이 어떤 시스템인지에 대해 설명드리겠습니다.과제 예시에서 설정한 시스템은 TI에서 제공하는 Automotive Sensor Node 레퍼런스 디자인을 기반으로 한 “자동차용 센서 노드 ECU”입니다. 즉, 차량의 12 V 배터리를 전원으로 사용하면서 온도, 압력 같은 센서 데이터를 측정하고, 이를 MCU가 처리해서 CAN 통신으로 메인 ECU나 다른 모듈로 전송하는 소형 ECU를 가정한 것입니다.조금 더 시스템적으로 풀어보면 다음과 같습니다.차량에서 제공되는 전원은 12 V Nominal이지만 실제로는 시동 크랭킹 시 약 6~9 V까지 떨어지고, 로드 덤프 상황에서는 순간적으로 40 V 근처까지 튈 수 있습니다. 예시 시스템에서는 이 9~16 V(또는 그 이상 스파이크)를 EMI/ESD 보호 회로로 먼저 한번 걸러주고, AEC-Q100 등급의 자동차용 DC-DC 컨버터로 약 5 V 레일을 만듭니다. 이 DC-DC의 효율이 85~90% 정도라고 가정하면, 예를 들어 5 V 레일에서 100 mA를 소모할 때 입력 전류는 대략I_in ≈ (V_out I_out) / (η V_in) = (5 V 0.1 A) / (0.9 12 V) ≈ 46 mA정도가 됩니다.그 다음 단계에서 5 V 레일을 LDO로 3.3 V로 낮춰 MCU, CAN Transceiver, 일부 디지털 센서를 구동합니다. LDO는 효율만 보면 손해처럼 보이지만, 출력 노이즈와 PSRR 관점에서 DC-DC의 스위칭 리플을 상당 부분 필터링해 주기 때문에, ADC를 쓰는 MCU나 민감한 센서가 있는 Mixed-signal 보드에서는 5 V → 3.3 V 구간에 LDO를 넣는 구성이 현업에서도 자주 사용됩니다. 예를 들어 3.3 V에서 60 mA를 쓰면 LDO에서 소모하는 전력은P_LDO ≈ (5 V - 3.3 V) * 0.06 A ≈ 0.102 W정도이고, 이 정도는 보드 내에서 열 관리가 크게 부담되지 않는 수준이라 “노이즈 이득 > 효율 손실”이라고 판단해서 선택하는 구조입니다.신호 흐름 관점에서 보면, 센서는 보통 두 가지 유형을 가정합니다.하나는 아날로그 출력 센서로, 0~5 V 또는 0.5~4.5 V 범위의 전압을 내보내고, MCU의 ADC(예: 12-bit, 1 ksps ~ 10 ksps 정도)로 샘플링합니다. 샘플링 주기를 10 ms로 잡으면 초당 100 Sample, 센서 하나당 데이터 속도는 대략 12 bit * 100 Hz = 1.2 kbit/s 정도라서 속도 요구사항은 낮지만, 노이즈 민감도는 높습니다.다른 하나는 디지털 센서(I2C/SPI)로, 예를 들어 I2C 400 kHz 또는 SPI 몇 MHz 수준에서 데이터를 전송합니다. 이 경우 배선 길이가 짧고, 통신 대상이 MCU 하나라서 속도는 비교적 느슨해도 되지만, 풀업 저항 값과 라인 커패시턴스에 의해 Signal Integrity가 영향을 받기 때문에 PCB 레이아웃에서 라우팅이 중요합니다.MCU는 이 센서 데이터를 주기적으로 읽고, 예를 들어 100 ms마다 CAN 메시지 하나를 보내도록 설계할 수 있습니다. CAN 통신 속도가 500 kbps라고 하면, 1 프레임이 대략 수십 bit~백수십 bit 수준이므로 100 ms에 한 프레임 정도 보내면 전체 Bus 사용률은 1% 미만으로 매우 낮은 수준입니다. 이런 설계는 자동차 전체 네트워크 부하에 거의 영향을 주지 않으면서도 센서 값을 충분히 자주 업데이트할 수 있다는 장점이 있습니다.이 과제 예시는 그래서 “매우 전형적인 소형 Automotive Sensor ECU”를 모델로 삼고 있습니다. 실제 자동차 회사나 1차 벤더에서 설계하는 도어 모듈, 시트 모듈, 공조 센서 모듈 등도 구조를 뜯어보면12 V 입력 → 보호 및 필터 → DC-DC → LDO → MCU/센서 → CAN/LIN 통신이라는 동일한 패턴을 공유합니다. 차이는 센서 개수, 통신 속도, 전류 용량, 안전 기능(예: 듀얼 센서, 듀얼 MCU) 같은 스펙적인 부분입니다.정리해서 말씀드리면,TI Block Diagram은 “대략 이런 구조로 동작하고, 이런 자리에 TI 부품들을 꽂아 쓸 수 있다”를 보여주는 동시에, 실제 현업에서도 거의 그대로 쓰이는 전형적인 전원·신호 구조를 반영합니다. 과제를 하실 때는 TI 다이어그램을 신뢰해도 되지만, 그 위에 ESD/TVS, 필터, 추가 전원 레일, 저전력 모드 등 강의에서 다룬 현실적인 요소를 한두 단계 더 얹어서 스스로 블록을 세분화해 보시는 것이 좋습니다.과제 예시로 드린 시스템은 “자동차 12 V 배터리를 이용해 센서 데이터를 측정하고 CAN으로 상위 ECU에 전송하는 소형 Sensor Node ECU”를 가정한 것이고, 실제 TI Automotive Sensor Node 레퍼런스 디자인의 구조와 거의 동일합니다. 따라서 전원 흐름에서는 12 V → DC-DC → LDO → MCU/센서/통신, 신호 흐름에서는 센서 → MCU → CAN Transceiver → CAN Bus라는 큰 줄기만 정확히 잡으셔도 시스템 관점에서 충분히 좋은 과제 답안을 작성하실 수 있습니다.
- 0
- 1
- 27
Q&A
PCB Artwork 질문드립니다!
회로설계 질문 답변의 말:안녕하세요, 답변 남겨드립니다.우선 System-level이라는 말을 강의 맥락에서 정리해보면, 개별 부품이나 회로 단위가 아니라 “제품 전체 관점”에서 전원과 신호 흐름, 기능 블록, 인터페이스 관계를 보는 설계 레벨을 의미합니다. 예를 들어 이 강의에서처럼 STM32 MCU, Ethernet PHY, Motor Driver, ADC, DAC, LDO, MIC 등이 한 보드에 섞여 있을 때, 각 블록을 개별 회로로 보는 것이 아니라 “전력이 어디서 들어와서 어떤 레귤레이터를 거쳐 어떤 칩에 얼마의 전류가 분배되는지”, “어떤 신호가 어느 블록을 지나서 최종 출력까지 어떻게 이동하는지”, “노이즈가 어디서 발생해서 어디로 돌아가는지”를 한 번에 그려보는 단계가 System-level입니다. 그래서 섹션 2에서 System-level 이해, 섹션 7의 과제에서 Power & Signal Flow Exploration을 따로 강조하는 이유가 여기에 있습니다.조금 더 구체적으로 말하면, MCU가 최대 100 mA, Motor Driver가 피크 2 A, ADC/DAC/MIC가 합쳐서 수십 mA를 쓴다고 할 때, 전체 보드에서 “5 V 어댑터 하나로 이걸 다 감당할 수 있는지, Surge가 걸릴 때 버틸 수 있는지, 각 레귤레이터별 Margin을 얼마나 줄지, GND를 아날로그/디지털로 어떻게 분리해서 리턴을 어떻게 태울지”를 정량적으로 검토하는 게 System-level 설계입니다. 이 레벨에서 전류 합, 전압 Margin, 노이즈 Budget을 숫자로 정의해두면, 이후의 개별 회로/레이아웃 설계가 훨씬 명확해집니다.이제 질문 주신 PCB Artwork 이후 외주 제작과 칩 실장(솔더링) 방식에 대해 말씀드리겠습니다.현업에서 “외주 제작된 PCB에 칩을 따로 사서 엔지니어가 직접 솔더링” 하는 경우는 분명 존재하지만, 이것은 주로 프로토타입이나 소량 개발 단계에서 많이 쓰는 방식입니다. 예를 들어 R&D 팀에서 보드 3장만 만들어 보는 EVT(Engineering Validation Test) 단계라고 하면, 보통은 Gerber 파일만 PCB 공장에 보내서 ‘Bare PCB’만 받아온 뒤, 사내에서 다음과 같이 처리하는 케이스가 많습니다. 엔지니어 한 명이 하루에 수작업으로 0402 저항·커패시터 기준 약 100~200개의 솔더 Joint를 안정적으로 작업할 수 있다고 가정하면, 부품 수가 300~400개 정도인 Mixed-signal 보드 한 장을 완전히 수동 솔더링하는 데 대략 3~5시간 정도가 걸립니다. 이렇게 2~3장 수준만 필요할 때는 사내 온도조절 납땜 인두, 핫에어, 소형 리플로우 오븐 등을 활용해서 직접 SMD를 실장하는 편이 비용과 일정 면에서 효율적일 수 있습니다.반대로 양산 단계나 수십 장 이상이 넘어가는 파일럿 생산 단계부터는 거의 항상 “PCB + SMT 실장까지 외주(EMS/Assembly 업체)”로 진행합니다. 이유는 세 가지 정도로 요약할 수 있습니다. 첫째, 작업 시간과 인력 비용입니다. 예를 들어 부품 수 500개, 솔더 Joint가 약 800~1000개인 보드를 50장 만든다고 하면, 수동 솔더링으로는 사람 한 명이 아무리 빨라야 1장당 4시간 × 50장 = 200시간, 즉 한 사람이 순수 작업만 잡아도 한 달 가까이 필요합니다. 둘째, 품질과 수율입니다. 수작업은 숙련자라도 1000 Joint 기준 1~2% 수준의 불량 가능성은 거의 피하기 어렵지만, 잘 갖춰진 SMT 라인에서는 AOI, X-Ray 검사까지 포함해 99.9% 이상의 초기 조립 수율을 노릴 수 있습니다. 셋째, 공정 이력 관리와 신뢰성입니다. 의료·자동차·산업용 제품은 납땜 프로파일, 플럭스 종류, 세척 여부, Baking 이력 등이 모두 품질 문서화 대상이라 사내에서 “연구소 작업자 개인 손기술에 의존하는 방식”을 허용하지 않는 경우가 많습니다.강의에서 “원래는 칩들은 존재하지 않지만 외주 업체에서 해주는 곳도 있다”라고 설명한 것은, 기본적으로 PCB 업체는 Gerber만 받아 Bare PCB만 만들어 주는 게 원칙이지만, 요즘은 PCB 제작과 동시에 SMT Assembly까지 같이 해주는 원스톱 업체들도 많다는 뜻입니다. 이런 업체들은 보통 다음 세 가지 방식 중 하나로 일을 받습니다. 첫째, 고객이 BOM과 Pick&Place 파일만 주고 부품 구매까지 전부 업체가 대행하는 Full Turn-key 방식. 이 경우 부품 단가에 일정 마진이 붙고, 납기와 EOL 관리까지 업체가 어느 정도 책임집니다. 둘째, 고객이 주요 IC 같은 고가/긴 납기 부품은 직접 구매해서 보내고, 패시브와 범용 커넥터 등은 업체가 구매하는 Partial Turn-key 방식. 예를 들어 STM32, 고가 Motor Driver, PHY, 고정밀 ADC 같은 것만 고객이 미리 확보해서 보내고, 0402 패시브는 업체가 조달합니다. 셋째, PCB는 외주로 만들고 부품은 전부 고객이 보내는 Consignment 방식으로, 업체는 순수 조립 공정만 수행합니다. 이 방식은 단가 관리가 좋은 대신, 부품 재고관리와 Shortage 책임이 대부분 고객 쪽에 있습니다.실제 회사에서는 이 세 가지를 단계별로 섞어서 씁니다. 예를 들어 스타트업이나 소규모 팀의 초기 프로토타입에서는, 첫 버전은 Bare PCB만 외주 제작하고 핵심 IC와 주변 부품을 직접 솔더링하여 기능을 빠르게 검증합니다. 여기서 발견된 설계 이슈를 반영해 Rev.B를 만들 때는, BGA 패키지나 Fine-pitch QFP처럼 수작업 난이도가 높은 칩들은 PCB 업체에서 먼저 실장해 오고, 커넥터나 테스트 핀 같은 Through-hole 부품은 사내에서 손납땜으로 채우는 식으로 나누기도 합니다. 그리고 양산이 확정된 뒤에는 BOM 확정, 대체 부품 리스트, 조립 공정서까지 포함한 자료를 EMS 업체에 넘겨 “PCB+Assembly+검사”를 한 번에 외주로 돌립니다.연구소/사내 개발 환경이 잘 갖추어진 대기업 R&D의 경우에는 조금 다릅니다. 사내에 소형 SMT 라인이나 프로토타입 전용 라인이 있는 경우도 많습니다. 이런 곳에서는 다음과 같이 진행합니다. PCB는 여전히 외주 fab에서 제작하지만, 조립은 사내 SMT 라인에 올려서 부품 실장, Reflow, AOI까지 내부에서 처리합니다. BGA나 QFN 같은 부품의 리워크를 위한 리워크 스테이션, X-Ray 검사 장비도 사내에 있는 경우가 많습니다. 이런 환경에서는 “칩을 따로 사서 직접 솔더링”이라고 해도, 엔지니어가 인두를 들고 일일이 붙이는 수준이 아니라, 생산기술팀에 조립을 의뢰하는 형태가 됩니다.정리하자면, 질문 주신 “외주제작된 PCB에 칩만 따로 구매해 직접 솔더링하는 경우”는 다음과 같은 상황에서 많이 발생합니다. 첫째, 1~5장 수준의 극소량 프로토타입, 혹은 개인/학생 프로젝트. 둘째, 부품 조달이 까다롭거나 기밀 이슈로 인해 특정 칩은 외주 업체에 넘기기 어려운 경우. 셋째, 회로가 자주 변경될 때라 SMT 라인 세팅과 스텐실 제작 비용을 매번 지불하기 아까운 경우입니다. 반대로 현업에서 본격적인 제품 개발과 양산을 한다고 하면, 대부분은 PCB Artwork 이후에 Bare PCB만 받는 게 아니라, BOM, Pick&Place, Assembly Drawing까지 넘겨서 “PCB 제작 + SMT 조립”을 함께 외주 주거나, 사내 SMT 라인에서 조립하는 방식이 일반적이라고 보시면 됩니다.
- 0
- 2
- 30
Q&A
I2C SCL_Synched, SDA_Synched 질문
안녕하세요, 답변 남겨드립니다. 1. 이 코드에서 값이 언제 / 어떻게 보이는지핵심 포인트 하나만 잡고 가면 됩니다:always @(posedge clk) SCLSynch 여기서 는 논블로킹 할당이라서,posedge clk 순간에레지스터 내부 값은 새 값으로 캡처되지만,그 클럭에서 조합논리(wire) 가 보는 값은 직전 클럭에 있던 값입니다.즉,SCL_posedge 는 “직전 클럭까지의 SCLSynch[2:1]”을 보고 계산되고,SDA_synched 도 “직전 클럭까지의 SDASynch[2:0]”을 보고 계산됩니다.그리고 상태머신이나 data_in 레지스터는 그 두 신호를 보고 같은 posedge clk 에서 동작합니다.그래서 질문하신 것처럼“SCL_posedge가 1이 되는 바로 그 순간 SDASynch[0]이 0→1로 바뀌는 중이라서 둘이 섞여서 메타가 되는 것 아닌가요?”라는 상황은 시간축 상으로 동시에 관측되지 않습니다.SCL_posedge == 1 이라는 사실은 “한 클럭 이전까지 이미 결정돼 있던 SCLSynch[2:1]의 패턴” 때문이고,이번 클럭에서 막 metastable 이 되는 건 SCLSynch와 SDASynch의 “새 값”인데,그 “새 값”은 다음 클럭에서야 SCL_posedge / SDA_synched 계산에 쓰입니다.2. metastability 자체는 어디서 생기고 어떻게 처리되나진짜 메타가 생길 수 있는 곳은 여기뿐입니다:always @(posedge clk) SDASynch[0] SDA가 clk의 setup/hold 타이밍 근처에서 바뀌면 SDASynch[0]은 metastable 이 될 수 있습니다.하지만 한 클럭 주기 동안 시간이 지나면서 대부분 0 또는 1로 수렴하고,다음 클럭에서 SDASynch[1]가 그 값을 받고, 또 그 다음 클럭에서 SDASynch[2]가 받습니다.그래서:“아날로그적으로 애매한 중간값”이 조합로직을 타고 data_in까지 그대로 퍼지는 구조는 아니고,결국은 0 또는 1로 결정된 값만 논리 AND에 들어갑니다.문제가 될 수 있는 건 “언제 샘플링했느냐(타이밍)”이지,data_in이 ‘메타 상태 그 자체’를 받는 건 아닙니다.3단 동기화 체인을 쓰는 이유는metastability가 다음 스테이지까지 살아남을 확률을 쭉 떨어뜨리고,동시에 아주 짧은 글리치/스파이크도 여러 클럭 동안 반복되지 못하게 해서노이즈 필터 역할도 하려는 겁니다.3. SCL_posedge 의 타이밍을 말로 풀어보기SCL이 실제 버스에서 0에서 1로 올라갔다고 생각해봅시다.SCLSynch는 매 클럭마다 오른쪽에서 SCL을 하나씩 밀어넣는 구조라서,클럭이 지날 때마다 대략 이런 식으로 변합니다 (숫자 대신 말로 설명):처음에는 SCLSynch가 예를 들어 000 이었다고 합시다. (SCL도 0)버스에서 SCL이 1로 바뀐다.다음 clk 엣지에서 SCLSynch가 001 이 된다.이때 상위 두 비트는 00 이므로 SCL_posedge는 아직 0.그 다음 clk 엣지에서 SCLSynch가 011 이 된다.이제 상위 두 비트 2:1이 01 패턴이므로, 이 클럭에서 SCL_posedge가 1이 된다.또 한 번 지나면 SCLSynch는 111 이 되고, 상위 두 비트는 11 이므로 다시 SCL_posedge는 0.즉:실제 SCL이 1이 된 뒤, 최소 두 번의 clk를 거쳐야만 SCL_posedge가 1로 올라옵니다.I²C 규격상 SDA는 SCL rising 전에 어느 정도 setup time을 가져야 하기 때문에,내부 clk 기준으로 보면 우리가 데이터를 샘플하는 시점(SCL_posedge==1)에는 SDA가 굉장히 오래 전에 이미 안정적이었어야 합니다.4. SDA_synched = [2] & [1] & [0] 이 의미하는 것SDA도 똑같은 식으로 밀어 넣습니다.SDA가 0에서 1로 바뀌었다고 해볼게요.처음에는 SDASynch가 000.SDA가 1로 바뀐다.첫 번째 clk 이후: 001.세 비트 AND는 아직 0.두 번째 clk 이후: 011.세 비트 AND는 아직 0.세 번째 clk 이후: 111.이때 비로소 세 비트 AND가 1이 된다.즉,SDASynch[2] & SDASynch[1] & SDASynch[0] 이 1이 되려면SDA가 최소 3클럭 동안 연속으로 1 이어야 합니다.질문에서 제안하신wire SDA_synched = SDASynch[2] & SDASynch[1]; 로 바꾸면,SDA가 1로 바뀌고 2클럭 연속 1일 때 1이 됩니다.그러니까 한 클럭 더 빨리 반응하는 대신, 필터링은 조금 약해집니다.metastability 관점에서는둘 다 “이전 클럭까지의 레지스터 값”을 보기 때문에어떤 쪽도 “막 메타가 된 비트와 조합돼서 알 수 없는 상태로 가는” 위험성은 비슷합니다.차이는 “몇 클럭 연속 같은 값이어야 신뢰하겠냐” 라는 필터 강도입니다.5. SCL_posedge 와 SDA_synched 을 같이 쓰는 순간일반적인 슬레이브 수신부는 보통 이렇게 씁니다:always @(posedge clk) begin if (SCL_posedge) data_in 이때도SCL_posedge와 SDA_synched 모두이번 클럭에서 갱신되기 “직전”의 SCLSynch/SDASynch 값에 의해 결정됩니다.이번 클럭에서 막 metastable 이 된 SDASynch[0]의 상태는아직 SDA_synched 계산에 사용되지 않습니다.그건 다음 클럭에서야 반영됩니다.그래서 “SCL_posedge==1 이 되는 그 클럭에서 SDA_synched AND 안에 metastable 비트가 끼어들어 와서 data_in이 메타 상태로 가는” 시나리오는설계 구조상 성립하지 않습니다.
- 0
- 1
- 34
Q&A
LDO의 common source buffer와 관련해서 질문이 있습니다.
안녕하세요, 답변 남겨드립니다.핵심은 VB 노드의 출력 임피던스가 단순 소자들의 ro 합성으로 결정되지 않고, M3와 M7이 만드는 로컬 피드백 루프 때문에 크게 낮아진다는 점입니다. 따라서 책에서 제시한 식은 단순히 VB 노드의 저항을 바라보는 방식으로는 절대 얻을 수 없으며, 루프 이득만큼 출력 임피던스가 감소한 형태로 나타납니다.우선 책에서 말하는 출력 임피던스는 RO ≈ RZ + 1 / ( gm3 gm7 ( ro3 // ro5 ) ) 형태인데, 여기서 ro3 // ro5 는 두 소자의 병렬 조합을 의미하며 ( ro3 * ro5 ) / ( ro3 + ro5 ) 로 표현할 수 있습니다. 이 식은 M3와 M7로 이루어진 피드백 경로가 VB 노드의 작은 신호 전압 변화에 대해 강한 negative feedback을 제공함으로써 얻어지는 결과입니다.VB 노드에 테스트 전류 i_test 를 주입하면 VB에 v_test 가 생성되는데, 출력 임피던스는 RO = v_test / i_test 로 정의됩니다. 하지만 VB는 단순히 M2 게이트에 연결된 출력 노드가 아니라 M7의 gm7, M3와 M5의 ro, 그리고 M3의 gm3를 따라 다시 VB로 되돌아오는 하나의 루프 내부에 있습니다. 작은 신호 관점에서 이 경로는 VB → M7 → (ro3 // ro5) → M3 → 다시 VB 로 이어지는 하나의 완전한 루프이고, 따라서 이 루프의 small-signal loop gain을 반드시 포함하여 임피던스를 계산해야 합니다.이때 루프이득 L 은 gm7 ( ro3 // ro5 ) gm3 로 정량적으로 나타낼 수 있습니다. 즉 입력측 트랜스컨덕턴스 gm7, 중간의 고저항 노드 ro3 // ro5, 그리고 반대쪽에서 다시 VB로 피드백을 주는 트랜스컨덕턴스 gm3 가 곱해진 값이 루프 이득입니다. 출력 임피던스가 피드백 루프에 의해 감소되는 기본적인 원리는 RO_internal ≈ RO_no_feedback / ( 1 + L ) 인데, RO_no_feedback 은 매우 큰 값이므로 1 + L 은 거의 L 로 근사됩니다. 따라서 내부 출력 임피던스는 약 1 / L 로 표현됩니다. 바로 이 결과가 책에서 표현한 1 / ( gm3 gm7 ( ro3 // ro5 ) ) 항입니다.이 항은 M3–M7 루프가 없었다면 매우 큰 저항이었을 VB 출력 임피던스가 로컬 피드백 덕분에 크게 줄어든다는 점을 의미합니다. 또한 최종 출력 임피던스 RO에는 RZ가 직렬로 들어가 있는데, RZ는 compensation zero를 만들기 위한 위상 보상 저항이므로 RO = RZ + RO_internal 형태가 됩니다. 즉 VB 노드의 출력 임피던스는 보상저항 RZ에 내부 루프에 의해 결정된 작은 값 RO_internal이 더해진 구조입니다.정리하면 VB 노드 기준으로 출력 임피던스를 계산하려 하신 접근 방향은 옳으나, 피드백 루프의 존재를 반영하지 않은 단순 저항 계산 방식으로는 책의 식이 절대 나오지 않습니다. 반드시 VB에서 시작하여 M7의 gm7을 지나고, M3·M5의 ro 병렬을 거친 뒤 다시 M3의 gm3를 통해 VB로 되돌아오는 루프를 포함한 small-signal 폐루프 해석을 해야만 책에서 제시한 출력 임피던스 식이 도출됩니다.
- 0
- 2
- 40
Q&A
LDO 버퍼 관련해서 질문이 있습니다.
안녕하세요, 답변 남겨드립니다.먼저 결론부터 말씀드리면, 질문 주신 해석에는 방향이 반대로 잡힌 부분이 있고, 그 때문에 “VEA가 올라가면 VG가 내려간다”는 결과가 나온 것입니다. 실제로는 이 구조가 잘 설계되어 있으면 VEA가 올라갈 때 VG도 올라가는, 즉 소스팔로워(버퍼)처럼 동작합니다.이 회로는 클래스-AB 형태의 push-pull 버퍼입니다. M4(상단 PMOS)와 M2(하단 NMOS)가 실제로 패스 트랜지스터 게이트를 위/아래로 당겨주고, M3-I1, M1-I2가 각각 pull-up, pull-down 쪽의 바이어스를 잡아주면서 “국부 피드백 루프 두 개”를 형성합니다. 하지만 두 루프가 완전히 독립적인 것이 아니라, VG와 I2 노드를 통해 강하게 결합되어 하나의 버퍼로 동작합니다.질문 주신 해석에서 핵심 오류는 두 가지입니다.첫째, I1, I2를 VEA에 따라 변하는 전류처럼 생각하신 점입니다. 이상적인 LDO 버퍼 설계에서는 I1, I2는 거의 일정한 참조 전류입니다. 따라서 VEA가 변할 때 “전류가 줄어든다/늘어난다”기보다는, 전류는 거의 고정되어 있고 그 전류를 맞추기 위해 노드 전압들이 움직인다고 보는 것이 정확합니다. 실제 회로 해석에서는 dI ≈ 0, dV ≠ 0라고 두고 small-signal을 잡는 식입니다.둘째, PU 루프에서 M3 드레인 노드(=M4 게이트)가 어느 방향으로 움직이는지가 반대로 잡혀 있습니다. 간단히 방향만 정리해보겠습니다.예를 들어 NMOS M3의 게이트는 VB0에 고정, 소스는 VEA입니다. PU 루프만 놓고 small-signal으로 보면VEA가 ΔVEA 만큼 상승합니다.그러면 M3의 Vgs3 = VB0 − VEA 이므로 ΔVgs3 하지만 I1은 이상 전류원이라 ΔI1 ≈ 0입니다. M3 드레인 노드(=M4 게이트)의 KCL을 쓰면ΔI1 + ΔIM3 ≈ 0이 되어야 하므로, M3 전류가 줄어든 만큼을 상쇄하기 위해 이 노드 전압이 움직여서 다시 IM3가 I1과 맞춰져야 합니다.VB0는 고정이고 VEA는 이미 올라갔기 때문에, IM3를 다시 키우려면 M3 드레인 전압을 “내려서” Vds를 줄이거나, 아예 M3를 triode 쪽으로 몰아가는 방향으로 노드가 이동합니다. 즉, M3 드레인 노드(=M4 게이트) 전압은 내려가는 방향(ΔVG4 M4는 PMOS로, 소스는 VDD, 게이트는 방금 말한 노드입니다. Vsg4 = VDD − VG4 이므로 VG4가 내려가면 ΔVsg4 > 0, 즉 M4가 더 세게 켜지고 상단에서 더 큰 전류를 끌어내립니다. 그 결과 출력 노드 VG가 위쪽으로 당겨져서 ΔVG > 0, 즉 VEA가 올라갈 때 VG도 같이 올라가게 됩니다.즉 PU 루프에 대한 올바른 흐름은VEA ↑ → M3 전류 ↓ → M4 게이트 전압 ↓ → |Vsg4| ↑ → M4 전류 ↑ → VG ↑와 같은 “양의 전달(버퍼)”입니다. 질문에서 쓰신 “M4 게이트 전압이 상승해서 M4 드레인 전류가 줄어들고, VG가 감소한다”는 부분이 이와 정반대 방향입니다.PD 루프도 비슷한 관점으로 보시면 됩니다. M1은 VEA를 보는 트랜스컨덕터 역할, M2는 NMOS pull-down 디바이스로, I2를 기준으로 M1+M2 전류 합이 맞도록 VG와 하단 노드 전압이 결정됩니다.VEA가 증가하면 M1 gate가 올라가서 M1이 더 많은 전류를 끌어가려 합니다. 그러면 VG 노드의 전류 밸런스가 깨지고 VG가 어느 한쪽으로 움직는데, 그때 M2게이트 = VG도 같이 움직여 M2의 전류가 바뀌고, 최종적으로는 “I2 = IM1 + IM2” 조건을 만족하는 새로운 VG를 찾게 됩니다. 이때 루프 이득과 바이어스를 적절히 설계하면, PD 루프 역시 “VEA가 올라갈 때 VG도 올라가는 방향”으로 동작하도록 만들 수 있습니다. 즉 M1이 더 많이 끌어가려 하면 VG가 약간 내려가면서 M2가 더 꺼지고, I2의 상당 부분을 M1이 가져가게 되어 하단 노드 전압이 변하고, 그에 따라 다시 VG가 조정되는 식의 음의 피드백 구조입니다. 국부 루프를 한 단만 잘라서 보면 순간적으로는 VG가 내려가는 방향인 것처럼 보이지만, 최종 정상상태(루프가 수렴한 상태)에서는 전체적으로 “입력과 같은 방향”으로 움직입니다.실무에서 이 구조를 사용할 때는 다음과 같이 정량적으로 확인합니다.DC 스윕으로 VEA를 예를 들어 0.6 V → 0.8 V 범위에서 스윕하고, VG의 DC 값을 같이 플롯합니다. 정상적인 버퍼라면 VG vs VEA 그래프는 기울기 dVG/dVEA ≈ 0.9~1.0 정도의 직선으로 나옵니다. 즉 gain ≈ 1 follower behavior입니다.같은 바이어스에서 작은 신호 AC 해석을 돌려서, 입력 VEA에 1 V_ac를 걸고 VG의 AC gain을 보시면, 0 dB 근처에서 충분한 위상 여유(> 60° 정도)를 확보하는 방향으로 소자 W/L과 I1, I2를 조정합니다. 이때 push-pull 구조 덕분에 effective gm ≈ gm_PU + gm_PD 수준으로 커지기 때문에, pass transistor 게이트 쪽 pole을 LDO 루프 설계에 유리한 위치로 옮길 수 있습니다.Large-signal transient에서 load를 0 → Iload_max 같은 스텝으로 걸었을 때, VG가 얼마나 빠르게 올라갔다 내려오는지를 보고 slew-rate와 과도 오버슈트를 조정합니다. push-pull 버퍼를 쓰는 이유가 바로 “소스 공급 시에는 M4가, 싱크 시에는 M2가 적극적으로 밀고 당겨서” 수십 mA~수백 mA 단계의 부하 변동에도 수 µs 수준의 응답 속도를 확보하기 위함입니다.정리하면,질문에서의 방향성 해석(“VEA 증가 → PU 루프에서 VG 감소, PD 루프에서 VG 증가”)은 전류원과 노드 움직임 방향을 반대로 잡으신 데서 나온 결과이고, 제대로 KCL과 디바이스 특성을 적용하면 두 루프 모두 VEA와 VG가 같은 방향으로 움직이는, 즉 버퍼(소스팔로워)로서 동작합니다. 실제로 LDO 문헌이나 공정 PDK 예제 회로에서도 거의 동일한 구조의 push-pull 버퍼가 널리 쓰이고 있습니다.따라서 회로 자체의 토폴로지는 소스팔로워 버퍼로서 타당하고, 지금은 “각 노드에서 어떤 전류가 고정이고, 그 전류를 맞추기 위해 어느 전압이 움직이는지”를 작은 신호 관점에서 다시 한 번 정리해 보시면, 직관이 훨씬 깔끔해지실 것 같습니다.
- 0
- 2
- 43
Q&A
LDO Bulk cap 사용가능 여부
안녕하세요, 답변 남겨드립니다.LD1117 계열과 같은 LDO(Low Dropout Regulator)는 입력 및 출력단의 커패시터 용량과 ESR(Equivalent Series Resistance)에 매우 민감하게 반응하는 구조를 가지고 있습니다. 내부 보상 루프(Compensation Loop)가 출력 커패시터의 위상응답에 맞춰 설계되어 있기 때문에, 데이터시트에서 권장된 용량과 ESR 범위를 크게 벗어나면 발진(oscillation)이나 과도응답 불안정 문제가 생길 수 있습니다.LD1117S33CTR의 데이터시트를 보면 입력단에는 0.1uF 이상의 세라믹 커패시터를 권장하고, 출력단에는 10uF 탄탈 또는 저ESR 전해 커패시터를 권장합니다. 이는 LDO 내부 제어루프의 안정성을 위한 최소 요구 조건입니다. 따라서 강의에서 출력단에 10uF를 사용한 것은 데이터시트와 동일하며, 이는 적정한 설계입니다.문제는 입력단 Bulk Capacitor를 얼마까지 확장해도 되는가입니다. 일반적으로 LDO 입력단의 커패시터는 전원선의 노이즈와 트랜지언트 부하에 대응하는 목적을 가지므로, 데이터시트의 최소 권장값(예: 0.1uF)은 단지 내부 루프 안정성 확보용이고, 실제 회로에서는 노이즈 여유를 두기 위해 1uF~10uF 수준으로 확장하는 것이 일반적입니다.47uF 정도의 커패시터를 병렬로 두어 Bulk Cap 역할을 하게 만드는 것은 EMC/EMI 대응 측면에서는 효과적일 수 있습니다. 다만 다음 두 가지를 반드시 고려해야 합니다.첫째, LDO 입력단 커패시터의 ESR과 충전 전류입니다. 입력에 47uF 전해 커패시터를 두면 전원 인가 시 충전 전류가 순간적으로 커지므로, 보호 다이오드(MBRS130LT3G)의 Surge Current Rating을 초과하지 않도록 해야 합니다. LD1117의 입력 전류는 보통 수십 mA 수준이지만, 전원 인가 순간에는 Inrush Current가 1~2A까지 치솟을 수 있습니다.둘째, 대용량 입력 커패시터를 사용할 경우, 출력단의 위상 여유(Phase Margin)에 영향을 줄 수 있습니다. LDO 내부 루프가 입력 임피던스의 변화에 간섭받을 수 있기 때문입니다. 일반적으로 LD1117 계열은 입력단 용량이 100uF 이하에서는 안정성이 유지되는 것으로 보고되어 있으며, 따라서 47uF는 안정성 범위 내입니다.정리하면, 입력단에 47uF Bulk Capacitor를 추가하는 것은 EMC/EMI 필터링이나 전원 라인의 임피던스 저감에 도움이 되며, LD1117의 동작 안정성에도 큰 문제가 없습니다. 다만, 이 커패시터는 반드시 저ESR 세라믹보다는 약간의 ESR(수십 mΩ~수백 mΩ)을 가지는 전해 또는 탄탈 계열이 더 안정적입니다. 또한, 입력단 0.1uF 세라믹을 병렬로 남겨두는 것이 고주파 노이즈 억제에 효과적입니다.즉, 실무적으로는입력단: 0.1uF (세라믹) + 47uF (전해 또는 탄탈) 병렬 구성,출력단: 10uF (저ESR 전해 또는 세라믹)이 구성이 가장 안정적이며, 이는 LD1117의 루프 보상 조건을 충족하면서 EMC/EMI 노이즈 저감에도 효과적인 조합입니다.예를 들어 자동차 전원(12V) 환경처럼 노이즈가 심한 라인에서는 MBRS130LT3G 다이오드 뒤에 LC 필터 또는 Ferrite Bead를 추가하고, 그 뒤에 47uF Bulk Cap을 둠으로써 LDO 입력의 리플을 20~30dB 수준으로 감쇠시킬 수 있습니다. 이 방식은 강의에서 언급된 “EMC/EMI 대응 Bulk Cap 활용” 실무 예시에 해당합니다.
- 0
- 2
- 39






