inflearn logo
講義

講義

知識共有

samcoachさんの投稿

samcoach samcoach

@samcoach

受講生
5,666
受講レビュー
537
講義評価
5.0

投稿 303

Q&A

cache에서 data miss가 나고 메모리에서 read data할때 이해가 안가는 신호가 있어서 질문 드립니다.

안녕하세요, 답변 남겨드립니다. 질문하신 wire mem_rd = miss & ~i_cpu_write; 에서 miss 는 N+1 클럭의 신호이고 i_cpu_write 는 N 클럭의 신호라고 해석하셨는데, 제가 작성한 코드에서는 두 신호를 서로 다른 명령의 정보로 사용한 것이 아닙니다. 이 Cache는 한 번에 하나의 요청을 처리하는 Blocking Cache 구조를 전제로 작성했습니다. CPU에서 Read 또는 Write 요청이 들어온 뒤 Cache miss가 발생하면 해당 요청의 처리가 끝날 때까지 CPU 진행을 정지시키기 때문에 주소와 i_cpu_write 를 포함한 요청 정보가 그대로 유지됩니다. 따라서 miss = 1 인 시점의 i_cpu_write 도 다음 명령의 값으로 변경되는 것이 아니라 현재 miss가 발생한 동일한 요청의 Read 또는 Write 정보를 나타냅니다. 파이프라인 CPU라고 해서 Cache miss가 발생한 상태에서도 다음 메모리 요청을 계속 Cache로 보내는 것은 아닙니다. 예를 들어 5-stage Pipeline에서 Load 명령이 MEM Stage에서 Cache miss를 발생시키면 PC와 앞단 Pipeline Register에 Stall을 걸어 현재 명령을 유지합니다. 메모리 응답이 10클럭 뒤에 도착하더라도 해당 기간에는 i_cpu_write = 0 과 요청 주소가 유지되므로 mem_rd = miss & ~i_cpu_write 는 정상적으로 메모리 Read 요청을 발생시킵니다. 여기서 한 가지 짚고 넘어가야 하는 부분은 wire 신호가 자동으로 한 클럭 지연되는 것은 아니라는 점입니다. miss 가 Tag와 Valid Bit 비교 결과로 만들어지는 조합논리라면 현재 입력에 대해 같은 사이클에 계산됩니다. always @(posedge clk) 블록에서 miss 를 레지스터에 저장했을 때만 실제로 N 클럭 요청에 대한 결과가 N+1 클럭에 나타납니다. 따라서 파형을 볼 때는 신호 이름만으로 클럭 차이를 판단하지 않고, miss 가 어느 always 블록에서 생성되는지까지 확인해야 합니다. 물론 실무에서 여러 요청을 연속으로 받을 수 있는 Non-blocking Cache나 AXI처럼 VALID/READY Handshake를 사용하는 구조라면 처리 방법이 달라집니다. 요청을 수락하는 시점에 req_write_q , req_addr_q 처럼 Transaction 정보를 내부 레지스터에 저장하고, 이후에는 mem_rd = miss & ~req_write_q 와 같이 저장된 정보를 사용해야 합니다. 그렇지 않으면 이전 요청의 miss 와 다음 요청의 i_cpu_write 가 섞이는 문제가 실제로 발생합니다. 이번 과제에서는 Dual-port와 Two-port RAM의 Port 구조와 동시 접근을 이해하는 데 초점을 맞추기 위해 Cache를 Blocking 방식으로 단순화했습니다. 이후 CPU Pipelining과 Hazard를 다룰 때 Cache miss에 따른 Stall 제어를 함께 연결하게 됩니다. 따라서 현재 코드가 파이프라인 CPU와 연결되기 때문에 오류가 되는 것은 아니며, Cache miss가 해소될 때까지 동일한 CPU 요청을 유지한다는 제어 조건이 포함되어 있다고 이해하시면 됩니다.

いいね数
0
コメント数
1
閲覧数
10

Q&A

pcb 제작 주문 질문입니다.

안녕하세요, 답변 남겨드립니다. PCB 주문 비용이 높게 나온다면 먼저 PCB 기판 제작비와 부품비, SMT 조립비를 분리해서 확인해 보셔야 합니다. 처음 제작할 때는 이 세 가지가 한 견적서에 묶여 있어서 PCB 자체가 비싼 것처럼 보이지만, 실제로는 부품 소량 구매 비용과 SMT 초기 세팅비가 큰 비중을 차지하는 경우가 많습니다. 특히 수량이 1~2장일 때는 메탈 마스크, 장비 프로그램 설정, 부품 피더 세팅 같은 고정비가 그대로 들어가기 때문에 1장당 가격이 상당히 높아지네요. 강의 프로젝트처럼 STM32, Ethernet PHY, ADC, DAC, Motor Driver가 들어간 Mixed-signal 보드는 우선 PCB만 5장 정도 제작하고, 그중 1~2장만 직접 조립하거나 부분 조립을 맡기는 방식이 현실적입니다. PCB는 4층, 1.6 mm 두께, 1 oz 동박, 일반 FR-4, HASL 또는 무연 HASL 같은 제조사 표준 사양으로 주문하면 비용을 줄일 수 있습니다. 임피던스 제어, 특수 적층, ENIG 표면처리, 비아 인 패드, 블라인드 비아를 추가하면 견적이 2배 이상 올라갈 수 있으므로 Ethernet 차동 신호 때문에 반드시 필요한 조건인지부터 판단해야 합니다. 100 Mbps Ethernet과 일반적인 STM32 클럭 수준이라면 제조사 표준 4층 적층에서도 충분히 구현 가능한 경우가 많습니다. 부품을 하나하나 직접 구매하는 방식은 모든 부품을 무조건 직접 구매한다기보다, 핵심 부품과 범용 부품을 나누는 것이 좋습니다. STM32, PHY, ADC, DAC, Motor Driver처럼 단가가 높거나 재고 변동이 큰 부품은 직접 구매해 확보하고, 100 nF 디커플링 커패시터, 10 kΩ 저항처럼 수량이 많은 범용 부품은 조립 업체의 기본 부품 재고를 사용하는 방식이 효율적입니다. 저항과 커패시터를 각각 10개씩 구매하면 부품 가격보다 포장비와 배송비가 더 커질 수 있지만, 0603 저항·커패시터 키트를 구매해 직접 조립한다면 이후 디버깅과 값 변경에도 활용할 수 있네요. 직접 납땜이 가능한 0603 이상 수동소자와 LQFP 패키지 위주라면 PCB만 주문한 뒤 부품을 직접 구매하는 방법이 가장 저렴합니다. 다만 QFN, DFN, 작은 피치의 PHY, 패드가 아래에 있는 전력 IC가 포함되어 있다면 인두 납땜만으로는 브리지나 미납 불량을 잡기 어렵습니다. 이 경우 핵심 IC만 SMT 조립을 맡기고 커넥터, 헤더, 대형 커패시터는 직접 후납땜하는 부분 조립 방식이 비용과 품질 사이에서 균형이 좋습니다. 첫 보드는 회로 오류 가능성이 있으므로 5장을 모두 조립하기보다 1~2장만 조립해 전원 인가, MCU 부팅, SWD 연결, 각 전원 레일 확인을 마친 뒤 나머지를 조립하는 편이 안전합니다. 실제 주문 전에는 Gerber와 Drill 파일만 보내지 말고 BOM과 부품 좌표 파일까지 함께 준비하셔야 합니다. BOM에는 제조사 부품번호, 패키지, 수량, 대체 가능 여부를 넣고, 품절 시 사용할 대체 부품도 지정해 두는 것이 좋습니다. 강의에서도 최종 단계에서 BOM, Gerber, Drill 파일을 추출하는 흐름을 다루고 있으니, 이번 제작은 단순히 보드를 받는 과정이 아니라 제조 데이터가 실제 업체에서 문제없이 해석되는지 검증하는 단계로 보시면 됩니다. 현재 단계에서는 PCB 5장 제작, 핵심 IC 직접 구매, 범용 수동소자는 업체 재고 사용, SMT는 1~2장만 부분 조립하는 구성이 가장 무난합니다. 비용을 더 줄이려면 보드 크기를 줄이고, 부품 종류를 통합하고, 0402보다 0603을 사용하며, 제조사의 표준 공정 안에서 설계하는 것이 효과적입니다. 보드 면적을 100 mm x 100 mm 이하로 맞추면 제조사의 저가 프로토타입 규격에 들어가는 경우가 많지만, 회로 블록을 무리하게 압축해서 ADC 입력과 Motor Driver 스위칭 노이즈가 가까워지면 제작비 몇 만 원을 아끼고 디버깅에 며칠을 쓰는 상황이 생길 수 있으니 Mixed-signal 영역 분리와 Return Path는 유지하셔야 합니다.

いいね数
0
コメント数
2
閲覧数
36

Q&A

LDO 설계, 그대로 따라해보기 부하 전류 관련 질문 있습니다.

안녕하세요, 답변 남겨드립니다. 먼저 90dB와 80dB의 차이는 일반적인 “컴퓨터 성능 차이”로 보기는 어렵습니다. 10dB 차이는 전압 이득 기준으로 약 3.16배 차이이기 때문에 단순한 CPU, 메모리, 그래픽카드 차이에서 발생할 수준은 아닙니다. 같은 LTspice 버전, 같은 netlist, 같은 MOSFET model, 같은 temperature, 같은 solver option과 같은 operating point를 사용했다면 결과는 거의 동일하게 나와야 합니다. 수치해석 오차로 0.1dB 내외나 위상 1도 전후가 달라질 수는 있지만, 10dB 정도라면 테스트벤치 조건이나 파일 revision이 달라졌다고 판단하는 편이 맞습니다. 강의 촬영 시점의 파일과 현재 가지고 계신 파일 사이에 저장 상태나 설정 차이가 있을 가능성도 확인해 봐야 합니다. 회로도 모양만 비교하지 마시고 LTspice의 View SPICE Netlist를 열어 실제 netlist를 비교해 주세요. 특히 MOSFET의 W, L, multiplicity, model name, bias current, output capacitor와 ESR, load current, input voltage, temperature, AC source의 amplitude를 확인해야 합니다. LTspice Control Panel에서 Normal Solver와 Alternate Solver가 다르거나 reltol, abstol, gmin 같은 값이 변경된 경우에도 결과가 조금 달라질 수 있지만, 이 경우에도 저주파 이득이 정확히 10dB씩 달라지는 현상은 흔하지 않습니다. Stability simulation에서 저주파 이득은 사실상 loop의 DC gain을 의미합니다. 저주파 이득이 90dB에서 80dB로 낮아지면 unity-gain frequency가 이동하고, 그 위치에서 만나는 pole과 zero가 달라지기 때문에 phase margin도 함께 달라질 수 있습니다. 강의에서도 DC gain은 저주파 loop gain, phase margin은 loop gain이 0dB를 지나는 주파수에서의 위상 여유로 정의하고 있으며, PM 45도 이상을 기본적인 안정 조건으로 설명하고 있습니다. 다만 실제 제품에서는 PVT와 Monte Carlo, post-layout parasitic까지 고려해야 하므로 TT 25도 nominal 조건에서 PM을 겨우 45도로 맞추기보다는 대체로 55도에서 70도 정도를 확보하는 편이 안전합니다. 강의 커리큘럼에서도 LDO를 단순 동작 확인으로 끝내지 않고 phase margin 개선과 dominant pole, second pole 최적화까지 이어서 다루는 이유가 여기에 있습니다. 부하 전류가 시뮬레이션마다 다른 것은 ChatGPT가 답변한 것처럼 각 항목에서 확인하려는 현상과 불리한 조건이 다르기 때문입니다. 다만 “Stability는 무조건 10uA가 최악이고, Line Transient는 무조건 100uA가 최악이다”라는 뜻은 아닙니다. 강의에서 사용한 0uA, 10uA, 100uA는 각 현상을 분리해서 이해하기 위한 대표 조건이며, 실제 sign-off에서는 최소 부하부터 최대 부하까지 sweep해야 합니다. Stability test에서 10uA를 사용한 것은 거의 무부하에 가까운 light-load 조건을 만들면서도 완전한 0A 조건에서 발생할 수 있는 floating node나 operating point 수렴 문제를 피하기 위한 목적이 큽니다. LDO는 부하 전류에 따라 pass transistor의 gm과 output resistance가 바뀌고, output pole은 대략 fp,out = 1/(2 pi Rout*Cout)로 이동합니다. 부하가 증가하면 등가 부하저항 Rload = Vout/Iload가 감소하므로 output pole의 위치가 달라지고 phase margin도 변합니다. 어떤 LDO는 light load에서 가장 불안정하고, 어떤 LDO는 heavy load에서 가장 불안정합니다. Output capacitor의 ESR zero와 내부 compensation 구조까지 영향을 주므로 실무에서는 10uA 한 점만 보는 것이 아니라 0uA 또는 최소 보장 부하, 10uA, 100uA, 1mA, 최대 부하처럼 log scale로 나눠 확인합니다. Input Voltage Range simulation에서 0uA를 사용한 것은 외부 부하에 의한 voltage drop 영향을 최대한 제거하고, 회로 자체가 어느 입력 전압부터 regulation을 시작하는지 보기 위한 조건입니다. 다만 dropout voltage까지 제대로 평가하려면 최대 부하 조건을 반드시 별도로 확인해야 합니다. Pass transistor에서 필요한 VDS 또는 VSD headroom은 부하 전류가 커질수록 증가하므로 VIN(min) = VOUT + VDO에서 VDO는 보통 heavy-load 조건에서 가장 커집니다. 따라서 no-load input range와 maximum-load dropout은 같은 그래프처럼 보여도 검증 목적이 서로 다릅니다. Line Transient에서 100uA를 사용한 것은 입력 전압만 step으로 변화시키고 부하는 고정하여 line response만 분리해 보기 위해서입니다. 완전 무부하에서는 pass transistor가 거의 꺼진 상태에 가까워져 입력 변화에 대한 응답이 정상적인 regulation 상태와 다르게 보일 수 있습니다. 반대로 최대 부하를 사용하면 dropout이나 current-limit 영향이 섞일 수 있죠. 그래서 100uA처럼 회로가 정상적인 closed-loop regulation 영역에 머물 수 있는 대표 부하를 사용한 것입니다. 실제 기업에서는 nominal load뿐 아니라 minimum load와 maximum load에서도 line transient를 돌리고, overshoot와 undershoot, settling time을 각각 측정합니다. V8과 같은 0V 전압원은 전압을 공급하기 위한 부품이 아니라 전류를 측정하기 위한 current probe로 사용합니다. SPICE에서는 전압원을 통과하는 branch current를 I(V8) 형태로 직접 읽을 수 있기 때문에, 전원 공급 경로에 0V 전압원을 직렬로 넣어 quiescent current를 측정합니다. 외부 부하가 0A라면 Iq는 대략 Iq = Iin으로 볼 수 있고, 부하가 연결돼 있다면 Iq = Iin - Iload로 구분해야 합니다. V8을 기존 wire 대신 직렬로 정확하게 삽입했다면 DC와 transient에서는 이상적인 0옴 연결과 거의 같으므로 앞선 결과를 10dB 바꿀 가능성은 낮습니다. AC 값이 비어 있거나 0이어도 AC 해석에서 0V 전압원은 이상적인 short로 동작합니다. 다만 V8을 기존 wire와 병렬로 달았거나, loop gain을 측정하기 위한 AC injection source와 병렬 또는 잘못된 위치에 연결했다면 이야기가 달라집니다. 이 경우 AC injection 신호가 V8에 의해 short되거나 feedback loop를 끊으려던 지점이 다시 연결될 수 있어 gain과 phase가 완전히 다르게 측정될 수 있습니다. “0V니까 아무 영향이 없다”가 아니라, 전압을 0V로 강제하는 이상적인 source라는 점을 보셔야 합니다. 따라서 현재 결과는 V8을 모두 삭제해서 판단하기보다, Stability testbench에서는 강의와 동일하게 AC injection source의 위치와 V8의 연결 위치를 먼저 맞추고, V8이 전원 rail에 직렬로만 들어갔는지 확인하는 것이 정확합니다. 그다음 load를 10uA로 고정하고 VIN, temperature, capacitor ESR, MOS model, solver를 맞춘 뒤 다시 실행해 보세요. 이 상태에서도 80dB가 나온다면 View SPICE Netlist 기준으로 두 파일을 비교해야 하며, 그때는 컴퓨터 차이가 아니라 model 또는 testbench revision 차이로 보는 것이 맞습니다.

いいね数
0
コメント数
1
閲覧数
27

Q&A

gm 그래프 plot

안녕하세요, 답변 남겨드립니다. 확인하신 방향이 맞습니다. LTspice 파형창의 d()는 현재 x축 변수에 대한 수치 미분입니다. x축이 VGS라면 d(Id(M1))는 dId/dVGS가 되어 gm으로 볼 수 있지만, x축이 W라면 d(Id(M1))는 dId/dW가 됩니다. 따라서 W를 x축으로 두고 같은 수식을 적용하면 gm이 아니라 전혀 다른 물리량이 계산됩니다. 첫 번째 그래프에 입력하신 식은 gm이 아니라 gm/Id입니다. 식의 마지막에 /Id(M1)이 들어가 있기 때문입니다. 세로축이 약 20~27 V^-1에서 시작해 VGS가 증가하면서 10 V^-1 이하로 내려가는 모습은 약한 반전 영역에서 강한 반전 영역으로 이동할 때 나타나는 일반적인 gm/Id 형태입니다. 다만 Id가 수 nA 이하로 작아지는 구간에서는 수치 미분 결과를 다시 작은 Id로 나누기 때문에 노이즈나 급격한 변화가 나타날 수 있습니다. 현재 사용하신 d(Id(M1))/d(V(vinp)-V(n002)) 식은 x축에 대한 Id 변화량을 x축에 대한 VGS 변화량으로 나눈 형태입니다. x축이 입력 전압이고 소스 전압이 고정되어 있다면 dVGS/dx가 거의 1이므로 gm을 얻을 수 있습니다. 반대로 x축이 W라면 VGS는 거의 변하지 않으므로 dVGS/dW가 0에 가까워집니다. 이 작은 값으로 나누는 과정에서 큰 오차나 음수가 발생한 것이며, 두 번째 그래프는 gm으로 해석하면 안 됩니다. W에 따른 gm/Id를 비교하려면 W를 직접 DC sweep의 x축으로 두지 않고, W는 .step으로 변경하면서 VGS를 DC sweep해야 합니다. MOSFET의 W 항목을 {Wn}으로 설정하고 회로도에 .param Wn=1u, .step param Wn 1u 20u 1u, .dc VGS 0 3.3 1m을 넣으시면 됩니다. 여기서 VGS는 게이트에 연결한 DC 전압원의 이름입니다. 이렇게 하면 x축은 항상 VGS로 유지되고, 색깔별 곡선이 W=1 um부터 20 um까지의 결과를 의미합니다. 소스 전압이 고정되어 있다면 gm은 abs(d(Id(M1)))로 확인하시면 됩니다. 소스 전압도 같이 변하는 구조라면 abs(d(Id(M1))/d(V(vinp,n002)))를 사용하는 편이 정확합니다. gm/Id는 abs(d(Id(M1))/d(V(vinp,n002)))/abs(Id(M1))로 입력하시면 됩니다. abs()는 PMOS나 소자 핀 방향에 따라 Id 부호가 반대로 표시되는 문제를 피하기 위한 것입니다. 동일한 L, VGS, VDS 조건에서는 Id와 gm이 모두 W에 거의 비례하기 때문에 gm/Id는 W를 1 um에서 20 um까지 바꾸더라도 대부분 비슷하게 겹치는 것이 정상입니다. W 변화에 따라 gm/Id가 크게 달라진다면 VDS 변화, body effect, 소스 전압 변화, narrow-width effect 또는 모델의 수치 오차를 확인해야 합니다. AREA 최소화 과제에서는 gm/Id만 보는 것보다 Id/W를 같이 확인하는 것이 더 중요합니다. AMP의 면적을 줄일 때는 필요한 gm을 먼저 계산하고, gm/Id로 필요한 전류를 정한 뒤, Id/W 곡선으로 W를 결정하는 순서로 접근하시면 됩니다. 예를 들어 GBW=10 MHz, CL=1 pF라면 gm_target ≈ 2 pi GBW*CL이므로 약 62.8 uS입니다. gm/Id=15 V^-1을 선택하면 Id≈62.8 uS/15 V^-1≈4.2 uA가 됩니다. 시뮬레이션에서 Id/W=5 uA/um가 나왔다면 W≈4.2 uA/(5 uA/um)≈0.84 um로 잡을 수 있습니다. gm/Id를 20~25 V^-1 정도로 높이면 필요한 전류는 감소하지만 같은 전류를 만들기 위한 W가 커지고 기생 커패시턴스가 증가할 수 있습니다. 반대로 gm/Id를 5~8 V^-1로 낮추면 W는 줄어들 수 있지만 소비전류가 증가합니다. AREA 최소화가 우선이라면 gm/Id, Id/W, 기생 커패시턴스, GBW를 함께 보면서 보통 10~18 V^-1 부근에서 타협점을 찾는 방식이 현실적입니다.

いいね数
0
コメント数
2
閲覧数
44

Q&A

툴 사용

안녕하세요, 답변 남겨드립니다. 네, Virtuoso와 HSPICE로 진행하셔도 괜찮습니다. 오히려 학연생 환경에서 TSMC 28nm PDK까지 접근 가능하다면, 툴 경험 자체는 상당히 좋은 자산이 됩니다. 제 강의에서는 수강생들이 동일한 환경에서 따라올 수 있도록 TSMC 180nm 공정 라이브러리를 기준으로 DC operating point, DC sweep, AC sweep, transient, noise 분석과 Single-Stage amp, BGR, AMP, LDO, Level-Shifter, Comparator, Oscillator, Charge-Pump 같은 Analog IP 설계를 다루고 있습니다. 다만 그대로 28nm에 옮겨서 수치까지 1:1로 맞추려고 하면 무리가 생길 수 있습니다. 180nm에서는 1.8V 또는 3.3V 계열 동작을 전제로 잡는 경우가 많고, 채널 길이도 어느 정도 길게 가져가면서 ro, gm, gain을 확보하기가 상대적으로 편합니다. 28nm에서는 VDD가 보통 0.9V에서 1.0V 근처로 낮아지고, intrinsic gain인 gmro가 작아지는 방향이라 같은 Single-stage amp를 설계해도 DC gain이 40dB 이상 나오던 구조가 20dB대에서 막히는 상황이 충분히 나옵니다. 그래서 W/L 값을 강의와 똑같이 따라 하기보다, 회로 토폴로지와 분석 순서를 따라가고 sizing은 28nm에 맞춰 다시 잡는 방식이 맞습니다. 실무 관점에서는 이게 더 좋은 훈련이기도 합니다. 예를 들어 LDO를 설계할 때 180nm에서는 pass device 크기와 compensation cap을 키워서 phase margin 60도 이상을 맞추는 식으로 접근할 수 있지만, 28nm에서는 낮은 VDD 때문에 error amp의 output swing, dropout margin, load transient에서 훨씬 빨리 한계가 보입니다. 이때 DC gain, UGB, phase margin, PSRR, load regulation을 각각 따로 보는 게 아니라, “Vout 오차 1퍼센트 이내, phase margin 55도 이상, load step 0mA to 10mA에서 undershoot 50mV 이하”처럼 본인 기준을 잡고 조정해야 합니다. 면접에서도 단순히 “28nm로 했습니다”보다 “180nm 기준 강의 회로를 28nm PDK로 포팅하면서 VDD 감소와 intrinsic gain 저하 때문에 compensation과 device sizing을 재조정했습니다”라고 말하는 쪽이 훨씬 설득력이 있습니다. Virtuoso와 HSPICE 조합도 문제 없습니다. 강의의 핵심은 특정 버튼 위치를 외우는 게 아니라 schematic 구성, testbench 구성, OP point 확인, AC 안정도 확인, transient 응답 확인, corner별 worst-case를 잡는 흐름입니다. Virtuoso ADE에서 시뮬레이션을 돌리든, netlist를 뽑아서 HSPICE로 돌리든 최종적으로 보는 값은 Id, Vgs, Vds, Vth, gm, gds, gain, pole, zero, phase margin 같은 실무 지표입니다. 다만 강의 화면과 메뉴가 다를 수 있으니, 초반에는 강의와 동일한 회로를 180nm 기준 개념으로 이해하고, 이후 본인 환경의 28nm PDK에서 netlist include, model corner, device name, supply 조건을 맞춰가는 식으로 병행하시면 됩니다. 제가 추천드리는 방식은 강의 회로를 그대로 “복붙 구현”하려고 하기보다, 각 블록마다 목표 스펙을 하나씩 다시 잡는 겁니다. AMP라면 gain 30dB 이상, UGB 10MHz 이상, phase margin 60도 근처, power 100uW 이하처럼 잡고, Comparator라면 offset 5mV 이하, delay 1ns에서 10ns 범위, current 수십 uA 수준처럼 현실적인 기준을 세워보세요. 28nm에서는 mismatch, leakage, short-channel effect 영향이 커지기 때문에 Monte Carlo나 PVT corner까지 같이 보면 훨씬 좋습니다. 특히 TT만 맞는 회로는 실무에서 거의 의미가 없고, SS/FF와 온도 -40C to 125C, supply +/-10퍼센트 정도를 흔들었을 때 성능이 얼마나 무너지는지가 설계자의 실력으로 보입니다. 정리해서 말씀드리면, 수강 자체에는 전혀 무리 없습니다. 오히려 TSMC 28nm와 Virtuoso/HSPICE를 쓸 수 있는 환경이면 강의 내용을 더 실무적으로 확장할 수 있습니다. 다만 강의의 180nm 수치와 본인 28nm 결과가 다르게 나오는 건 정상이고, 그 차이를 “공정 스케일링에 따른 VDD, ro, gain, headroom, leakage 변화”로 설명할 수 있게 만드는 것이 제일 중요합니다. 이 방향으로 진행하시면 단순 수강이 아니라, 면접에서 꽤 강하게 어필할 수 있는 Analog IP 포팅 경험으로 가져가실 수 있습니다.

いいね数
0
コメント数
1
閲覧数
56

Q&A

섹션 강의 자료 문의

안녕하세요, 문의 감사드립니다. 섹션 2의 교안이 누락되어있어서 추가해두었습니다. 6,7은 면접세션쪽인데, 5세션에 통합되어있기떄문에 확인해보시면 다 이어져있을거에요! 일단 제가 확인했을때는 모두 올린듯한데 혹시 또 확인이 안되는게 있다면 문의 부탁드려요. 감사합니다.

いいね数
0
コメント数
2
閲覧数
70

Q&A

49. DAC Schematic 설계하기 강의에서 질문있습니다

안녕하세요, 답변 남겨드립니다. 질문하신 HP/LINE_OUTA, HP/LINE_OUTB 쪽의 저항과 커패시터 직렬 연결은 단순한 디커플링 커패시터라기보다, 오디오 출력단의 고주파 노이즈를 줄이면서 출력 드라이버의 안정성을 깨지 않기 위한 damping용 RC 네트워크로 보는 게 맞습니다. 이 강의에서는 STM32 Mixed-signal 보드 프로젝트 안에서 DAC schematic 설계를 다루고 있고, 앞단에서 DAC/MIC/I2C 인터페이스 선택과 DAC schematic 설계가 이어지도록 구성되어 있습니다. 다른 핀에 커패시터를 GND로 붙이는 경우는 전원 핀, 기준전압 핀, 바이어스 핀처럼 해당 노드가 거의 DC에 가깝거나 내부 회로가 그 커패시터 부하를 전제로 설계된 경우가 많습니다. 그런데 HP/LINE_OUTA, HP/LINE_OUTB는 이름 그대로 headphone 또는 line output 성격의 아날로그 출력 핀입니다. 이 핀은 내부 DAC 출력 버퍼나 오디오 앰프가 외부 부하를 직접 구동하는 노드라서, 커패시터를 바로 GND에 붙이면 출력단 입장에서는 주파수가 올라갈수록 거의 short에 가까운 capacitive load를 보게 됩니다. 커패시터 임피던스는 Xc = 1 / (2 pi f*C)로 계산합니다. 예를 들어 1 nF 커패시터는 20 kHz에서 약 7.96 kOhm이라 오디오 대역에서는 큰 부담이 없어 보이지만, 10 MHz에서는 약 15.9 Ohm까지 떨어집니다. 100 nF를 바로 붙이면 10 MHz에서 약 0.16 Ohm 수준이라 사실상 고주파 성분을 GND로 강하게 당기는 구조가 됩니다. 출력 드라이버가 이런 부하를 직접 만나면 phase margin이 줄고, ringing, 발진, THD 증가, pop noise, 소비전류 증가 같은 문제가 생길 수 있습니다. 여기서 직렬 저항의 역할이 중요합니다. 커패시터가 고주파에서 낮은 임피던스가 되더라도, 출력 핀이 보는 최소 임피던스를 저항값 이상으로 제한해 줍니다. 예를 들어 47 Ohm과 1 nF를 직렬로 GND에 연결하면 고주파에서 커패시터는 거의 짧아지지만, 출력단은 최소 47 Ohm 정도의 경로를 보게 됩니다. 3.3 V 계열 신호 기준으로 단순 계산하면 I = V/R이므로 47 Ohm이면 최대 약 70 mA 수준의 순간 경로가 되고, 100 Ohm이면 약 33 mA 수준으로 제한됩니다. 실제 오디오 출력은 AC swing이 더 작기 때문에 이보다 낮지만, 설계자는 이런 식으로 출력 드라이버의 허용 전류와 발열, 왜곡 마진을 같이 봅니다. RC 직렬 네트워크는 주파수 선택적으로 동작합니다. 대략 fc = 1 / (2 pi R*C)로 감을 잡을 수 있는데, 47 Ohm과 1 nF면 약 3.4 MHz 근처부터 커패시터 경로가 의미 있게 열리기 시작합니다. 즉 20 Hz에서 20 kHz 정도의 오디오 신호는 거의 건드리지 않고, MHz 대역의 DAC switching noise, digital coupling noise, cable로 나가는 EMI 성분을 줄이는 쪽에 더 가깝습니다. 그래서 이 구조는 “오디오 품질은 유지하면서 고주파 성분만 적당히 죽이는” 타협안이라고 보시면 됩니다. 커패시터만 사용하면 안 되냐는 질문에는, 실무에서는 대부분 권장하지 않는다고 답변드리는 게 맞습니다. 커패시터만 GND로 붙이는 순간 출력단은 순수 capacitive load를 보게 되고, 이때 내부 op-amp나 charge-pump 기반 headphone driver가 안정적으로 동작한다는 보장이 없습니다. 데이터시트에서 “maximum capacitive load 50 pF” 또는 “stable with Cload up to 100 pF”처럼 조건을 주는 경우가 있는데, 여기에 1 nF, 10 nF 같은 값을 직접 달아버리면 스펙을 10배에서 100배 이상 넘기는 상황이 생길 수 있습니다. 회로도상으로는 노이즈가 줄어들 것처럼 보여도, 실제 보드에서는 오히려 1 MHz에서 20 MHz 사이에 작은 발진이 생기고, 그게 오디오 대역에서는 “찌익” 하는 잡음이나 THD+N 악화로 나타나는 경우가 있습니다. 제품 관점에서는 더 현실적인 이유도 있습니다. HP/LINE_OUT 라인은 보드 안에서 끝나는 신호가 아니라 커넥터, 케이블, 외부 앰프, 이어폰 같은 외부 세계와 만나는 신호입니다. 케이블은 길이에 따라 수십 pF에서 수백 pF 정도의 기생 커패시턴스를 만들고, 사용자가 꽂는 부하도 16 Ohm headphone부터 10 kOhm line input까지 넓게 바뀝니다. 이런 조건에서 커패시터만 크게 붙여버리면 특정 부하에서는 괜찮다가, 양산 후 특정 이어폰이나 특정 케이블에서만 노이즈나 발진이 생기는 골치 아픈 불량이 나옵니다. 그래서 저항을 넣어 출력단과 외부 capacitive 환경 사이를 완충시키는 겁니다. 강의 회로처럼 HP/LINE_OUTA/B에만 R-C 직렬 구성을 둔 이유는, 그 핀이 일반 GPIO나 전원 핀처럼 “조용하게 고정해야 하는 노드”가 아니라 “신호 품질을 유지하면서 외부로 내보내야 하는 아날로그 출력 노드”이기 때문입니다. 전원 디커플링에서는 커패시터가 GND로 빠르게 전류를 공급하고 노이즈를 잡는 게 목적이라 저항 없이 붙이는 경우가 많지만, 오디오 출력에서는 커패시터 하나로 잡는 방식이 출력 버퍼 안정도와 음질을 해칠 수 있습니다. 회로설계에서는 이 차이를 구분하는 게 꽤 중요합니다. 값을 잡을 때는 보통 22 Ohm에서 100 Ohm 정도의 저항, 수백 pF에서 수 nF 정도의 커패시터를 놓고 시작하는 경우가 많습니다. 너무 작은 저항은 damping 효과가 약하고, 너무 큰 저항은 출력 레벨이나 부하 구동 능력에 영향을 줄 수 있습니다. 커패시터도 너무 작으면 EMI 저감 효과가 약하고, 너무 크면 오디오 대역 근처까지 영향을 주거나 출력단 부하를 무겁게 만들 수 있습니다. 실제 제품에서는 오실로스코프로 1 kHz sine 출력, 20 kHz 출력, 무신호 idle 상태의 고주파 발진 여부를 보고, 가능하면 spectrum analyzer나 FFT로 100 kHz 이상 노이즈까지 확인합니다. 설계 의도를 한 문장으로 잡으면, HP/LINE_OUTA/B의 직렬 저항은 커패시터가 출력단을 직접 때리지 않도록 전류와 위상 영향을 제한하는 보호막이고, 커패시터는 오디오 출력에 섞인 고주파 노이즈와 EMI 성분을 GND로 빼주는 역할입니다. 커패시터만 붙이는 방식은 회로도상 부품 수는 줄어들지만, 실제 보드 검증 단계에서 발진, 왜곡, EMI 재시험 같은 비용을 만들 수 있어서 현업에서는 저항 하나를 추가해 안정성 마진을 확보하는 쪽을 더 선호합니다.

いいね数
0
コメント数
2
閲覧数
59

Q&A

Kicad Global Label shape 질문

안녕하세요, 답변 남겨드립니다. KiCad에서 Global Label의 Shape 옵션 중 Passive는 “이 신호가 입력인지 출력인지 방향성을 굳이 표현하지 않겠다”는 표시로 이해하시면 됩니다. 여기서 먼저 잡고 가야 할 부분은, Global Label의 Shape는 회로도에서 보이는 모양을 정하는 성격이 강하고, 실제 전기적 동작이나 ERC 판단을 직접 바꾸는 옵션은 아니라는 점입니다. 그래서 Passive를 선택한다고 해서 해당 Net이 전기적으로 수동 소자가 된다거나, ERC 에러가 자동으로 해결되는 것은 아닙니다. Passive는 저항, 커패시터, 필터 중간 노드, 테스트 포인트, 옵션 저항 양단, 아날로그 센싱 라인처럼 “누가 명확하게 신호를 구동한다”고 말하기 애매한 Net에 사용하면 좋습니다. 예를 들어 STM32 보드에서 ADC 입력 앞단에 R-C Low-pass Filter를 구성하고 ADC_IN0_FILTERED 같은 Net을 만들었다고 보면, 이 노드를 Output으로 표시하면 마치 이 Net이 능동적으로 신호를 내보내는 것처럼 보일 수 있습니다. Input으로 표시하면 외부에서만 들어오는 신호처럼 읽힐 수도 있고요. 이런 경우 Passive로 두면 “이 라벨은 연결 이름을 명확히 하기 위한 것이고, 방향성 의미를 강하게 주려는 것은 아니다”라는 의도가 자연스럽게 전달됩니다. 반대로 USART_TX , SPI_MOSI , ETH_TXD0 처럼 데이터 흐름이 명확한 신호는 Output이나 Input 형태를 쓰면 회로도 리뷰할 때 가독성이 좋아집니다. I2C_SDA 처럼 한 선에서 양방향으로 동작하는 신호는 Bidirectional이 더 자연스럽고, 버스가 Hi-Z 상태를 가질 수 있는 구조라면 Tri-state가 어울립니다. 다만 이 선택은 주로 사람이 회로도를 읽을 때의 의미 전달에 가깝습니다. 실제 검증에서 더 중요한 것은 라벨 모양보다 Symbol Pin의 Electrical Type입니다. 많이 헷갈리는 지점이 바로 이 부분입니다. Global Label Shape의 Passive와 Symbol Pin Electrical Type의 Passive는 다르게 보셔야 합니다. Symbol Pin의 Electrical Type은 ERC에 영향을 줍니다. 예를 들어 MCU의 입력 핀이 아무 곳에서도 구동되지 않거나, 전원 입력 핀이 적절한 Power Output 또는 PWR_FLAG 없이 연결되면 ERC 경고가 날 수 있습니다. 이때 Global Label 모양만 Passive로 바꾼다고 문제가 해결되지는 않습니다. 이런 경우에는 심볼 핀 타입, 전원 심볼, PWR_FLAG, 실제 드라이버 연결을 확인해야 합니다. STM32 Mixed-signal 보드 기준으로 보면 3V3 , VDDA , VREF+ 같은 전원 레일은 Power Symbol을 우선 사용하고, 페이지 간 연결을 보조하는 용도로 Global Label을 쓸 수 있습니다. ADC 전처리 노드, MIC Bias 주변 노드, DAC 출력 후단의 R-C Filter 노드, Motor Driver의 Sense 저항 주변 노드처럼 아날로그 성격이 강하고 방향성을 강하게 표현하기 애매한 곳은 Passive가 깔끔합니다. 반면 MCU에서 외부 IC로 나가는 제어 신호, 클럭, SPI Chip Select 같은 신호는 방향성을 드러내는 편이 나중에 회로도 리뷰나 디버깅 때 유리합니다. 실무에서는 Label Shape보다 Net 이름의 일관성이 더 큰 리스크가 됩니다. 예를 들어 같은 ADC 입력을 ADC_IN1 , ADC1_IN , AN_IN1 처럼 섞어서 쓰면 ERC는 통과하더라도 리뷰자가 놓치기 쉽고, PCB Layout 단계에서 Net Class 지정이나 라우팅 우선순위 관리가 꼬일 수 있습니다. 특히 Mixed-signal 보드에서 ADC 입력이 수 mV에서 수십 mV 단위의 노이즈 마진을 다루는 상황이라면 Label Shape보다 Return Path, AGND 연결 방식, R-C Filter 위치, 100 nF + 1 uF 디커플링 배치가 훨씬 중요합니다. 그래서 Passive는 “문제를 해결하는 기능”이라기보다 “회로도에서 의도를 덜 오해하게 만드는 표시”로 사용하시면 됩니다.

いいね数
0
コメント数
2
閲覧数
52

Q&A

과제 3. Power budget 관련 질문

안녕하세요, 답변 남겨드립니다. Q1에서 가장 먼저 잡아야 할 기준은 동작 비율은 데이터시트에서 직접 찾아내는 값이 아니라는 점입니다. 데이터시트는 Run, Sleep, Standby, ADC 동작, 통신 송수신 같은 각 모드에서 소비전류가 어느 정도인지 알려주는 자료이고, 각 모드를 하루나 1초 동안 몇 퍼센트 사용하는지는 실제 시스템의 사용 시나리오와 펌웨어 동작에서 결정됩니다. 이번 과제는 Power Budget 작성 단계이므로 데이터시트의 전류 조건을 읽는 연습과 함께, 보드가 어떻게 동작할지를 합리적으로 가정하는 것이 핵심입니다. 강의에서도 Power Budget 작성과 STM32의 전압·최대전력 항목을 연결해서 다루고 있습니다. 예를 들어 MCU가 100 ms 주기로 센서를 읽는 시스템이라면 100 ms 중 10 ms 동안 Run mode, 나머지 90 ms 동안 Sleep mode라고 가정할 수 있습니다. 이때 Run 비율은 10%, Sleep 비율은 90%가 됩니다. 평균전류는 Iavg = Irun x 0.1 + Isleep x 0.9로 계산합니다. Run 전류가 30 mA이고 Sleep 전류가 1 mA라면 Iavg = 30 mA x 0.1 + 1 mA x 0.9 = 3.9 mA입니다. 반대로 모터 제어 보드처럼 MCU가 계속 연산하고 통신하는 제품이라면 Run mode를 80~100%로 잡는 것이 더 현실적입니다. 사용 시나리오가 주어지지 않은 과제에서는 Active 70%, Idle 20%, Sleep 10%처럼 가정을 먼저 적고 계산하면 됩니다. 중요한 것은 비율 자체를 맞히는 것이 아니라, 왜 그 비율을 선택했는지 설명할 수 있어야 한다는 점이네요. 데이터시트에서 동작 모드별 전류를 가져올 때도 조건을 같이 봐야 합니다. MCU 전류는 VDD, 시스템 클럭, 주변장치 활성화 여부, GPIO 부하, 온도에 따라 달라집니다. 같은 Run mode라도 8 MHz에서의 전류와 72 MHz에서의 전류가 다르고, ADC·USB·Ethernet·타이머가 켜지면 소비전류가 증가합니다. 따라서 과제 표에는 단순히 Run current라고 적기보다 “VDD = 3.3 V, fCLK = 72 MHz, peripherals enabled 조건에서 35 mA”처럼 데이터시트의 시험 조건을 함께 기록해 주세요. 이 조건이 빠지면 나중에 전원회로를 검토할 때 20~40% 정도의 오차가 발생해도 원인을 찾기 어렵습니다. Q2에서 이해하신 평균전력과 피크전력의 구분은 큰 방향에서는 맞습니다. 평균전력은 각 모드의 소비전력에 동작 비율을 곱한 값이고, 피크전력은 실제 동작 중 가장 큰 전류가 흐르는 순간을 기준으로 계산합니다. Pavg = V x Iavg이고, Ppeak = V x Ipeak입니다. 다만 피크전류는 일반적으로 Absolute Maximum Ratings의 전류를 의미하지 않습니다. 데이터시트의 Electrical Characteristics에 제시된 정상 동작 조건의 최대 소비전류, 또는 모터 기동전류·무선 송신전류·커패시터 충전전류처럼 시스템에서 실제 발생하는 순간 전류를 사용해야 합니다. Absolute Maximum Ratings는 정상적으로 사용해도 되는 동작점이 아니라, 그 값을 넘으면 소자가 손상될 수 있는 한계값입니다. 예를 들어 MCU 데이터시트에 VDD 전원핀의 최대 허용전류가 150 mA라고 적혀 있더라도, 이것은 MCU가 정상 동작할 때 항상 150 mA를 소비한다는 의미가 아닙니다. 내부 로직 소비전류뿐 아니라 GPIO에서 공급하거나 흡수하는 전류까지 포함한 패키지 한계일 수 있습니다. 이 값을 그대로 Power Budget의 평균전류나 피크전류로 넣으면 전원 용량을 지나치게 크게 산정할 가능성이 높고, 반대로 특정 동작의 실제 돌입전류는 놓칠 수도 있습니다. 동작 모드가 하나뿐이고 그 모드가 전원 인가 후 계속 유지된다면 평균전류는 해당 모드의 정상상태 전류와 거의 같다고 볼 수 있습니다. 이 경우 Iavg ≈ Imode이고, 부하 변화나 기동 구간이 전혀 없다면 평균전력과 정상상태 피크전력이 비슷해질 수 있습니다. 다만 현실에서는 전원을 켤 때의 초기화, 클럭 안정화, 커패시터 충전, 통신 송신, GPIO 동시 스위칭 때문에 수 us에서 수 ms 동안 더 큰 전류가 흐르는 경우가 많습니다. 따라서 “동작 모드가 하나이므로 평균전력 = 피크전력”이라고 자동으로 판단하기보다는, 정상상태 전류가 일정하고 별도의 돌입전류나 순간 부하가 없다는 조건에서만 같다고 보는 것이 정확합니다. 이번 과제에서는 평균 소비전력 계산에는 Typical Current 또는 사용 조건에 가까운 Operating Current를 사용하고, 전원부 용량 검토에는 정상 동작 조건의 Maximum Current를 사용하는 방식이 적절합니다. 예를 들어 계산된 최대 동작전류가 120 mA라면 LDO나 DC-DC의 출력전류를 정확히 120 mA로 선택하지 않고, 온도 상승과 부품 편차, 향후 기능 추가를 고려해 최소 20~30% 정도의 마진을 둬서 150~160 mA 이상으로 검토합니다. 모터, 무선통신 모듈, Ethernet PHY처럼 부하 변동이 큰 장치는 평균전류보다 피크전류와 전원 응답 특성이 더 중요하며, 이때는 전원 IC의 전류 정격뿐 아니라 출력 커패시터, ESR, 전압 강하, 발열까지 함께 확인해야 합니다.

いいね数
0
コメント数
2
閲覧数
55

Q&A

STM32F103 Schematic 설계 관련 질문

안녕하세요, 답변 남겨드립니다. 질문 주신 내용은 강의의 STM32F103 Load Cap, VDD, Power 설계 파트에서 반드시 짚고 넘어가야 하는 부분입니다. 특히 디커플링 커패시터는 단순히 총용량만 맞추는 부품이 아니고, 크리스털 커패시터는 8MHz라는 주파수만 보고 정하는 부품이 아니라는 관점으로 이해하시면 좋겠습니다. 디커플링 커패시터부터 말씀드리면 0.1uF와 100nF는 같은 용량입니다. 다만 데이터시트의 100nF 5개를 0.1uF 1개로 대체할 수 있다는 의미는 아닙니다. 5개를 요구하는 이유는 총용량 500nF를 확보하기 위해서가 아니라, 각각의 VDD-VSS 전원 핀 쌍 바로 옆에서 고주파 스위칭 전류를 공급하기 위해서입니다. ST의 STM32F103 데이터시트는 5 x 100nF와 1 x 4.7uF 구성을 제시하고 있고, 별도의 하드웨어 설계 가이드에서도 VDD 핀마다 100nF 한 개와 최소 4.7uF, 일반적으로 10uF의 벌크 커패시터를 배치하도록 안내합니다. 강의에서 0.1uF 한 개만 표시한 것은 전원 연결 개념을 단순화한 실습 표현이었지만, 실제 PCB 제작 기준으로는 부족합니다. 이 부분은 제가 회로도에서 각 VDD 핀마다 명확히 표시했어야 합니다. 실보드에서는 각 VDD-VSS 쌍마다 100nF를 배치하고, 커패시터와 전원 핀 사이 배선은 가능하면 1~3mm 이내로 짧게 구성하는 쪽을 권장합니다. 여기에 MCU 전체 전원 입력 근처에 4.7~10uF를 추가하고, VDDA에는 100nF와 1uF를 별도로 배치하는 구성이 안전합니다. ST 역시 디커플링 커패시터를 해당 전원 핀에 최대한 가깝게 배치하도록 요구하고 있습니다. 100nF 5개와 500nF 1개는 이상적인 회로에서만 Ctotal = 500nF로 동일합니다. 실제 커패시터 임피던스는 Z ≈ ESR + jωESL + 1/(jωC)로 봐야 하며, 고주파에서는 용량보다 패키지와 배선의 ESL, 즉 기생 인덕턴스가 더 큰 영향을 줍니다. 100nF 5개를 각 전원 핀에 분산하면 전류 루프가 짧아지고 각 핀에서 발생한 순간 전류를 바로 공급할 수 있지만, 500nF 한 개를 MCU 한쪽에 배치하면 반대편 전원 핀까지 전류가 긴 패턴과 비아를 지나가야 합니다. 예를 들어 전원 루프 인덕턴스가 1nH이고 전류 변화율이 di/dt = 50mA/ns라면 V = L x di/dt에 따라 약 50mV가 발생하지만, 루프가 길어져 5nH가 되면 약 250mV까지 증가할 수 있습니다. MCU가 72MHz로 동작하더라도 전원망은 72MHz만 대응하는 것이 아니라 수 ns 수준의 내부 스위칭 에지에서 발생하는 수십~수백MHz 성분까지 대응해야 합니다. 따라서 500nF 또는 0.47uF 한 개를 추가하는 것은 가능하지만, 각 VDD 핀의 100nF를 제거하는 방식으로 사용해서는 안 됩니다. 실무에서는 100nF를 핀별로 배치하고, 필요하면 0.47~1uF를 MCU 근처에 추가하며, 4.7~10uF를 전원 블록의 벌크 용량으로 두는 식으로 주파수 대역을 분담합니다. 같은 100nF 여러 개를 무조건 한곳에 몰아놓는 것보다 전원 핀별로 분산하는 것이 더 중요합니다. Pull-up과 Pull-down 저항은 계산 기준 자체는 동일하고, 보장하려는 기본 논리 상태가 반대일 뿐입니다. Pull-up은 외부 누설전류가 핀을 Low 방향으로 끌어내려도 VIH,min 이상을 유지해야 하므로 Rpullup 예를 들어 3.3V에서 10kΩ을 사용하면 반대 상태로 구동될 때 약 330uA가 흐르고, 47kΩ이면 약 70uA가 흐릅니다. 소비전력만 보면 47~100kΩ이 유리하지만, BOOT0, Enable, Reset처럼 노이즈에 의해 상태가 바뀌면 시스템이 부팅되지 않는 핀은 4.7~10kΩ 정도로 강하게 잡는 편이 안전합니다. STM32F103의 내부 Pull-up과 Pull-down은 약 30~50kΩ 범위이므로 일반 GPIO 기본 상태에는 사용할 수 있지만, 긴 케이블이나 외부 커넥터가 연결되는 신호, 모터 드라이버 주변처럼 EMI가 강한 환경에서는 외부 10kΩ 전후 저항을 두는 편이 양산 재현성이 좋습니다. ST의 STM32F10xxx 예제 역시 Boot와 JTAG 관련 저항에 10kΩ을 사용하고 있습니다. I2C Pull-up은 조금 다르게 보셔야 합니다. I2C는 단순한 기본 상태 고정이 아니라 Open-drain 신호의 상승시간을 저항과 버스 커패시턴스가 결정하므로, 일반적인 GPIO Pull-up처럼 10~100kΩ 범위에서 임의로 선정하면 안 됩니다. 버스 커패시턴스가 커지거나 통신속도가 400kHz 이상으로 올라가면 2.2~4.7kΩ 정도가 자주 사용되며, 최종값은 상승시간과 디바이스의 Low 출력전류 조건으로 검증해야 합니다. 8MHz 크리스털의 30pF에 대해서는 8MHz라는 주파수만으로 값을 결정하면 안 됩니다. 크리스털 제조사가 지정한 Load Capacitance인 CL과 MCU 핀 및 PCB의 기생용량 Cs를 기준으로 CL = C1 x C2/(C1 + C2) + Cs를 계산해야 합니다. C1 = C2 = C라면 C = 2 x (CL - Cs)가 됩니다. 예를 들어 크리스털의 CL이 18pF이고 PCB 및 핀의 기생용량을 3pF로 잡으면 C = 2 x (18pF - 3pF) = 30pF가 되므로 30pF 사용이 계산상 성립합니다. 반대로 CL이 12pF인 크리스털이라면 같은 조건에서 C = 18pF가 적절하므로 30pF는 과도한 값이 됩니다. STM32F103 데이터시트의 5~25pF는 일반적인 권장 범위이며, 특정 크리스털에 대해 계산된 절대값은 아닙니다. ST의 STM32F10xxx 8MHz 레퍼런스 회로는 20pF 두 개를 예시로 사용하지만, 역시 실제 값은 크리스털 특성에 따라 달라진다고 명시합니다. 강의에서 사용한 30pF는 CL이 약 18pF이고 기생용량을 약 3pF로 가정하면 설명 가능한 값이지만, 크리스털 Part Number와 CL 조건을 함께 제시하지 않았다면 설계 근거가 충분히 전달되지 않은 것입니다. 실제 BOM을 작성할 때는 반드시 선택한 크리스털 데이터시트의 CL, ESR, C0, Drive Level을 확인하고 값을 다시 계산해야 합니다. 부하 커패시터가 지나치게 크면 발진 주파수만 이동하는 것이 아니라 발진 시작시간이 길어지고 Gain Margin이 감소하여 저온, 저전압 또는 느린 전원 상승 조건에서 간헐적으로 발진하지 않을 수 있습니다. ST는 Gain Margin을 최소 5 이상으로 검토하도록 권고합니다. 실무에서는 계산값을 기준으로 18pF, 22pF, 27pF, 30pF 정도의 C0G 또는 NP0 커패시터를 교체할 수 있도록 동일 Footprint를 두고, 최소·최대 전압과 온도 조건에서 30~100회의 Cold-start를 반복해 발진 여부와 시작시간을 확인합니다. 30pF를 그대로 사용하는 것보다 해당 8MHz 크리스털의 CL을 먼저 확인하는 것이 정확한 설계 순서입니다.

いいね数
0
コメント数
1
閲覧数
55