안녕하세요, 답변 남겨드립니다. 네, 현재 Two-stage Op Amp까지 학습하신 상태라면 Comparator → Oscillator → Charge Pump 순서로 필요한 부분을 먼저 골라서 들으셔도 괜찮습니다. 제가 이 강의를 구성할 때 BGR → AMP → LDO → Level-Shifter → Comparator → Oscillator → Charge-Pump 순으로 배치한 것은 처음 아날로그 IP를 접하는 분들이 앞의 회로에서 사용한 개념을 뒤에서 반복해서 만나도록 하기 위한 흐름이지, 앞의 모든 IP를 완전히 설계해야만 다음 IP를 이해할 수 있도록 강하게 종속시킨 구조는 아닙니다. 실제 커리큘럼에서도 Comparator는 기본 설계 이후 High-speed 개선과 Low-Offset 설계, Oscillator는 Ring-Oscillator 이후 Noise/Jitter 개선, Charge-Pump는 기본 설계 이후 Power-Efficiency와 Area 최적화로 각각 하나의 IP 단위로 구성해 두었습니다. 오히려 지금처럼 CDR 설계라는 명확한 목적이 있다면 필요한 IP를 먼저 보는 방식이 효율적입니다. CDR 관점에서는 세 블록의 중요도가 조금 다릅니다. Comparator는 입력 데이터의 전압 차이를 빠르게 판별하는 slicer나 decision circuit을 이해하는 데 연결되고, 여기서는 propagation delay, input-referred offset, regeneration speed가 중요합니다. 예를 들어 데이터 주기가 1 ns인 1 Gb/s 환경이라면 Comparator가 판단에 300~400 ps를 소모하는 구조와 50~100 ps 안에 판단하는 구조는 CDR의 timing margin에서 완전히 다른 결과를 만듭니다. 그래서 강의의 Comparator 기본 설계뿐 아니라 High-speed 개선 파트까지 같이 보시는 것을 권합니다. CDR을 하신다면 Oscillator는 세 가지 중에서도 특히 집중해서 보셔야 합니다. PLL 기반 CDR에서는 VCO의 주파수 범위, gain인 Kvco, phase noise와 jitter가 recovered clock의 품질에 직접 연결됩니다. 강의에서 Ring-Oscillator를 다룬 뒤 Noise + Jitter 개선까지 이어지도록 구성한 이유도 단순히 발진시키는 것이 끝이 아니기 때문입니다. 예를 들어 1 GHz가 나왔다고 설계가 끝나는 것이 아니라 PVT에 따라 700 MHz~1.3 GHz처럼 주파수가 크게 움직이는지, control voltage에 대한 Kvco가 지나치게 큰지, supply noise가 clock jitter로 얼마나 변환되는지를 봐야 합니다. CDR을 목표로 하신다면 Oscillator 파트에서는 schematic 자체보다 왜 delay cell의 전류가 바뀌면 주파수가 변하는지, fosc ≈ 1/(2 N td) 관계와 td를 결정하는 gm, load capacitance, bias current를 연결해서 이해하는 데 시간을 많이 쓰시면 좋습니다. Charge Pump도 PLL/CDR 구조를 사용한다면 중요합니다. 다만 여기서 한 가지 구분하셔야 하는데, 강의의 Charge-Pump 파트는 NAND Flash나 Pixel Driver처럼 전압을 승압하는 switched-capacitor 계열 Charge Pump를 중심으로 이해하는 부분이고, PLL/CDR에서 말하는 Charge Pump는 PFD 출력에 따라 UP/DN current를 loop filter에 공급하는 current-steering 성격의 회로입니다. 이름은 같지만 설계 목표가 상당히 다릅니다. CDR의 CP에서는 Iup과 Idn mismatch, current source output resistance, charge sharing, leakage, switching transient가 더 중요합니다. 예를 들어 Iup = 100 uA인데 Idn = 95 uA라면 이미 5% mismatch가 생기고, 이것이 static phase error와 reference spur 쪽 문제로 이어질 수 있습니다. 그래서 강의의 Charge-Pump를 통해 스위칭, capacitor charging, 효율과 non-ideal effect의 감각을 익히는 것은 도움이 되지만, 그 파트만으로 PLL용 Charge Pump 설계를 모두 커버한다고 생각하시면 안 됩니다. 현재 Two-stage Op Amp까지 하셨다면 Comparator로 넘어가는 데 필요한 differential pair, current mirror, biasing, MOSFET operating region, DC/Transient simulation에 대한 기반은 어느 정도 갖춰졌다고 보고 있습니다. LDO와 Level-Shifter를 먼저 끝내지 않았다고 Comparator 이해가 막히지는 않을 겁니다. BGR도 마찬가지로 지금 당장 CDR을 설계하는 데 필수 선행 과정은 아닙니다. 다만 회로에서 bias current를 직접 잡아야 하는 단계가 오면 BGR와 current reference 개념이 다시 필요해질 수 있으므로, CDR의 주요 블록을 먼저 설계해보고 나중에 돌아와 채우셔도 됩니다. 제가 수강생 입장에서 지금 순서를 잡는다면 Two-stage Op Amp에서 배운 differential pair와 frequency response 감각을 가지고 바로 Comparator의 기본 설계와 High-speed, Low-Offset까지 본 뒤 Oscillator 기본 설계와 Noise/Jitter 파트를 깊게 보겠습니다. 그 상태에서 본인의 CDR architecture가 PLL-based인지, DLL-based인지, oversampling인지 확인하고 필요한 Charge Pump 개념을 연결하는 쪽이 낫습니다. 강의를 처음부터 끝까지 순서대로 완주하는 것보다 지금 진행하고 있는 CDR 회로에서 “왜 이 블록이 필요한가”를 가지고 강의를 보면 같은 30분을 들어도 훨씬 많이 남습니다. CDR 설계를 진행하면서 필요한 부분부터 건너뛰어 들으셔도 내용 이해에는 큰 문제 없습니다.
답변이 늦었습니다. 죄송합니다. 제가 드린 말씀의 근거부터 정확히 적겠습니다. 메모리사업부 평가및분석은 공채로 뽑는 인원이 적고 산학장학생으로 주로 채운다는 이야기가 현직자들 사이에서 여러 건 나옵니다. 지난 회차에 상위권 대학 석사에 삼성 인턴 경력이 있는 지원자가 메모리 평가및분석 서류에서 떨어진 사례도 전해집니다. 제가 직접 인원수를 확인한 것은 아니고 여러 사람이 같은 이야기를 하는 수준입니다. 회사는 직무별 인원을 공개하지 않으니 정확한 숫자는 아무도 모릅니다. 메모리만 그런지 물으셨는데, 사업부마다 평가및분석이 따로 있고 하는 일이 다릅니다. 글로벌인프라총괄 쪽 평가및분석은 이름은 같지만 실제로는 팹 오염 분석에 가까워서 분자시뮬레이션이나 화공 전공이 더 맞는다는 현직 이야기가 있습니다. 다른 사업부의 채용 규모에 대해서는 제가 확인한 근거가 없어서 같다고도 다르다고도 말씀드릴 수 없습니다. 그런데 질문을 조금 바꾸시는 게 좋겠습니다. 삼성은 한 접수 기간에 한 공고, 한 직무만 낼 수 있습니다. 그러니 평가및분석을 지원할지 말지보다, 무엇 하나를 낼지를 정하는 문제가 됩니다. 그리고 아직 삼성 하반기 공고가 안 나왔습니다. 사업부와 직무 목록은 회차마다 바뀝니다. 이번 상반기에는 메모리 평가및분석과 패키징이 크게 줄어 지원자들이 놀랐다는 반응이 있었고요. 지금 정하지 마시고 공고가 뜨면 그때 사업부별 평가및분석 직무기술서를 같이 펼쳐놓고 보세요. 담당 업무와 우대사항에 선생님이 하신 일이 몇 개 이름으로 적혀 있는지 세시면 됩니다. 하나씩 세어 비교하면 어디에 가장 많이 해당하는지 나옵니다. 한 가지는 미리 알려드릴 수 있습니다. 선생님 재료는 평가및분석에 안 맞는 쪽이 아닙니다. 600도와 800도와 1000도로 가속 열화시험을 직접 설계하시고 초기 강도의 50퍼센트를 고장 기준으로 잡아 Weibull로 분포 적합성을 보시고 Arrhenius로 300도에서 18.7년을 예측하신 것, 이건 신뢰성 평가 그 자체입니다. 불량 Lot의 원인을 공정과 설계와 소재로 나눠 확인하고 설계 변경이 안 되니 공정 조건으로 우회하신 것도 마찬가지고요. 문이 좁은 것과 본인이 안 맞는 것은 다른 이야기입니다. 문이 좁다는 사실을 알고 쓰는 것과 모르고 쓰는 것도 다릅니다. 알고 쓰시면 하이닉스 품질보증처럼 재료가 더 정면으로 해당하는 곳을 같이 준비하시게 되니까요. 이미 그렇게 하고 계십니다.
안녕하세요, 답변 남겨드립니다. 계산하신 방향이 맞습니다. PD = (VIN - VOUT) x IOUT로 보면 PD = (12 - 3.3) x 0.475 = 약 4.13W가 나옵니다. RthJA = 110C/W를 그대로 적용하면 온도 상승은 Delta T = 4.13 x 110 = 약 454C가 되기 때문에 정상적인 연속 동작 조건으로 볼 수 없습니다. 실제로는 그렇게 온도가 올라가기 전에 thermal shutdown이 걸리거나 출력전압을 정상적으로 유지하지 못하게 됩니다. 여기서 데이터시트에 출력전류가 수백 mA 이상 가능하다고 적혀 있다고 해서, 12V에서 3.3V로 크게 강하하면서 그 전류를 그대로 흘릴 수 있다는 뜻은 아닙니다. LDO의 출력전류 정격과 실제 사용할 수 있는 출력전류는 발열 조건을 같이 봐야 합니다. 강의에서 정리한 475mA는 Power Budget 단계에서 각 부하의 최대 소비전류를 합산해서 3.3V Rail에 어느 정도 용량이 필요한지를 확인하기 위한 값으로 이해하시면 됩니다. Power Budget의 합계가 실제 회로에서 항상 475mA가 흐른다는 의미는 아닙니다. MCU, PHY, ADC, DAC, 인터페이스 IC 등이 각자의 최대전류를 항상 동시에 소비하는 것은 아니기 때문입니다. 실제 제품이라면 Normal, Peak, Startup, Sleep 같은 operating mode별로 다시 나누고, continuous current와 순간적인 peak current를 따로 확인합니다. 그렇다고 해서 Power Budget이 475mA인데 “실제로는 적게 흐를 것 같다”라고 가정하고 바로 작은 LDO를 선정하면 안 됩니다. 동시 최대부하가 발생하지 않는다는 근거가 있어야 합니다. 예를 들어 MCU가 60mA, Ethernet PHY가 100mA, Analog block이 40mA 정도 소비하고 나머지 부하가 특정 동작 조건에서만 활성화된다면 정상 운전 시 150~200mA 수준일 수 있습니다. 반대로 부팅 순간이나 Ethernet 송수신, ADC/DAC 및 주변회로가 동시에 활성화되는 조건에서 300mA 이상 올라갈 수도 있기 때문에 Power Budget 이후에 반드시 load profile을 한 번 더 확인해야 합니다. 질문하신 핵심으로 돌아가면, 475mA가 실제 3.3V Rail의 연속 최대부하라면 12V에서 LD1117 하나로 직접 3.3V를 만드는 구조는 적절하지 않습니다. 이 조건으로 실제 양산 회로를 설계한다면 저는 그대로 진행하지 않습니다. LDO의 이상적인 효율만 계산해도 Efficiency = VOUT / VIN = 3.3 / 12 = 27.5% 정도입니다. 출력에는 POUT = 3.3 x 0.475 = 약 1.57W가 전달되는데, LDO에서는 약 4.13W를 열로 버려야 하는 구조입니다. 전력 효율과 발열 모두 좋지 않습니다. 열 관점에서 역산해 보면 더 명확합니다. Ta = 25C, Tj,max = 125C, RthJA = 110C/W라고 두면 허용 가능한 소모전력은 PD,max = (125 - 25) / 110 = 약 0.91W입니다. 이 값도 Junction Temperature를 125C까지 꽉 채워 사용하는 계산이라 실제 설계에서는 마진이 부족합니다. 12V에서 3.3V로 강하할 경우 IOUT = 0.91 / 8.7 = 약 104mA 정도가 됩니다. 주변온도를 50C로 올리면 PD,max = (125 - 50) / 110 = 약 0.68W가 되고, 전류로 환산하면 약 78mA입니다. 실무에서는 Tj를 최대 정격 바로 아래까지 사용하는 식으로 설계하지 않습니다. 예를 들어 보드 주변온도가 50C까지 올라갈 수 있고 Junction을 100C 안쪽에서 관리하고 싶다면 허용 가능한 온도 상승은 50C 정도입니다. 이때 PD = 50 / 110 = 약 0.45W 수준이고, 12V에서 3.3V로 내린다면 IOUT = 0.45 / 8.7 = 약 52mA 정도입니다. 그래서 12V 입력에서 LD1117로 3.3V를 직접 만드는 경우 수십 mA 수준의 부하라면 검토할 수 있지만, 100mA를 넘어가기 시작하면 발열 계산을 상당히 신중하게 보게 됩니다. PCB copper area를 넓히면 열 특성이 개선되는 것은 맞습니다. SOT-223의 TAB 주변에 충분한 copper를 확보하고 thermal spreading을 해주면 실제 RthJA를 낮출 수 있습니다. 하지만 4.13W는 단순히 copper area를 조금 넓히는 방법으로 해결할 수 있는 수준이 아닙니다. 예를 들어 PCB 설계를 상당히 잘해서 유효 열저항을 50C/W 수준까지 낮춘다고 가정해도 Delta T = 4.13 x 50 = 약 207C가 됩니다. 이 정도 차이라면 Layout으로 버티기보다 Power Tree 자체를 바꾸는 것이 맞습니다. 실제 Mixed-signal Board라면 12V에서 수백 mA급 3.3V Rail을 만들 때 Buck DC-DC Converter를 먼저 검토합니다. 12V → 3.3V Buck을 효율 90%라고 가정하면 475mA 부하에서 출력전력은 약 1.57W이고 입력전력은 약 1.74W 정도이므로 Converter 손실은 약 0.17W 수준입니다. 4W 이상을 LDO에서 태우는 것과는 발열 차이가 매우 큽니다. Mixed-signal 보드에서는 여기서 한 단계 더 나눠 생각합니다. MCU나 Ethernet PHY처럼 수십~수백 mA를 소비하는 Digital 3.3V Rail은 Buck으로 공급하고, ADC, DAC, Reference, Analog Front-End처럼 noise에 민감하면서 소비전류가 작은 Rail은 Buck 뒤에 LDO를 추가해서 정리하는 방식을 많이 사용합니다. 예를 들어 12V → 3.3V Buck으로 Digital Rail을 만들고, 별도의 3.3V 또는 3.0V 저잡음 Analog Rail에 20~50mA 정도만 LDO를 사용하는 식입니다. 이렇게 하면 효율, 발열, EMI, Analog noise를 함께 관리하기가 훨씬 수월합니다. 12V → 5V Buck → 3.3V LDO 같은 2단 구조도 가능합니다. 다만 이 경우에도 475mA 전체를 5V에서 3.3V로 LDO가 받으면 PD = (5 - 3.3) x 0.475 = 약 0.81W입니다. 25C 실험실 환경에서는 동작할 가능성이 있지만, 보드 내부 온도가 50~60C까지 올라가거나 enclosure에 들어가고 copper 조건이 나빠지면 여전히 여유가 크지 않습니다. 그래서 5V → 3.3V 전체 Rail을 LDO로 처리할 것인지도 실제 부하와 주변온도를 보고 결정해야 합니다. LD1117의 dropout도 같이 봐야 합니다. 발열을 줄이려고 앞단 Buck 출력을 3.6V나 3.8V까지 낮춘 뒤 LD1117로 3.3V를 만들고 싶어질 수 있는데, 부하전류가 커질수록 dropout voltage에 필요한 여유도 커집니다. 그래서 이런 구조라면 LD1117을 고집하기보다 dropout이 수백 mV 이하인 현대적인 LDO를 선택하는 편이 더 적절할 수 있습니다. 이번 질문에서 가장 중요하게 보신 부분은 Power Budget과 실제 Regulator의 Thermal Design을 연결했다는 점입니다. 강의에서 Power Budget을 먼저 작성하고 이후 LDO 선택과 schematic 설계로 넘어가는 이유도 단순히 전류 합계를 작성하는 데 목적이 있는 것이 아닙니다. 그 숫자를 가지고 부품의 전류 정격, dropout, efficiency, power dissipation, junction temperature까지 연결해서 설계가 실제 제품 조건에서도 성립하는지 검토해야 합니다. 따라서 475mA가 단순한 worst-case 합산값인지 실제 continuous current인지 먼저 구분하시면 됩니다. 실제 연속부하가 50mA 정도라면 12V → 3.3V LDO도 thermal calculation을 해보고 사용할 수 있습니다. 100~200mA 수준이면 PCB 온도와 copper 조건까지 상당히 신중하게 봐야 하고, 300~475mA가 실제 연속부하라면 Buck Converter를 사용하는 방향으로 Power Tree를 변경하는 것이 적절합니다. 교육용 회로에서 LDO의 선정과 동작을 익히는 것과, 해당 회로를 그대로 양산용 Power Tree로 Sign-off하는 것은 구분해서 봐주시면 됩니다.
안녕하세요, 답변 남겨드립니다. 질문에 적어주신 PB14, PB12, PB13, PB0가 실제 STM32F103의 GPIO 포트 번호를 의미한다면, 해당 연결은 STM32F103의 기본 JTAG 핀 구성과 맞지 않습니다. STM32F103의 JTAG 핀은 임의의 GPIO로 선택하는 구조가 아니라 MCU 내부의 디버그 회로에 직접 연결된 전용 핀으로 고정되어 있습니다. STM32F103에서 JTMS는 PA13, JTCK는 PA14, JTDI는 PA15, JTDO는 PB3, NJTRST는 PB4에 연결해야 합니다. SWD 방식으로 디버깅할 때도 SWDIO는 PA13, SWCLK는 PA14를 사용합니다. 따라서 JTMS를 PB14나 PB12에 연결하거나 JTCK를 PB0에 연결하면, 핀 이름을 단순히 net label로 붙이는 것만으로는 디버거 신호가 MCU 내부의 JTAG 회로까지 전달되지 않습니다. 강의 회로에서 PB14, PB12, PB13, PB0로 보였다면 먼저 MCU 포트 번호인지, 디버거 커넥터의 핀 번호인지 구분해서 확인해야 합니다. 예를 들어 회로도에서 JTAG 커넥터의 12번, 13번, 14번 핀을 의미하는 표기라면 MCU의 PB12, PB13, PB14와는 전혀 다른 의미입니다. 커넥터 핀 번호와 MCU GPIO 이름이 함께 표시되면서 혼동했을 가능성이 있습니다. 반대로 회로도상 MCU 핀이 실제로 PB14, PB12, PB13, PB0에 연결되어 있다면 수정이 필요합니다. STM32F103에서 디버그 핀을 다른 GPIO로 완전히 옮기는 기능은 제공되지 않습니다. AFIO 설정을 통해 전체 JTAG를 사용하거나, JTAG를 비활성화하고 SWD만 유지하는 선택은 가능합니다. 이 설정을 사용하면 PA15, PB3, PB4를 일반 GPIO로 다시 사용할 수 있지만, SWDIO인 PA13과 SWCLK인 PA14는 계속 디버깅용으로 사용해야 합니다. 즉, 디버그 기능을 줄여서 일부 핀을 확보할 수는 있어도 JTMS나 JTCK를 PB0, PB12, PB14 같은 임의의 핀으로 재배치할 수는 없습니다. 실무에서는 전체 JTAG보다 SWD 방식을 더 많이 사용합니다. 전체 JTAG는 JTMS, JTCK, JTDI, JTDO, NJTRST까지 최소 5개의 신호가 필요하지만, SWD는 SWDIO와 SWCLK 두 개의 디버그 신호만 있으면 됩니다. 여기에 NRST, 3.3 V 기준전압, GND를 포함하면 안정적으로 다운로드와 디버깅이 가능합니다. GPIO가 부족한 STM32F103 보드에서는 SWD를 사용해 PA15, PB3, PB4 세 핀을 다른 기능으로 확보하는 편이 설계 효율이 좋습니다. NJTRST와 MCU의 NRST도 구분해야 합니다. NJTRST는 JTAG 내부 상태머신을 초기화하는 신호이고, NRST는 MCU 전체를 리셋하는 신호입니다. 일반적인 SWD 디버깅에서는 NJTRST가 없어도 되지만 NRST는 커넥터에 연결해 두는 것이 좋습니다. 펌웨어가 저전력 모드에 들어가거나 디버그 핀 설정을 잘못 변경했을 때, 디버거가 reset 상태에서 MCU에 접속할 수 있기 때문입니다. 제가 보드를 설계한다면 PA13은 SWDIO, PA14는 SWCLK, PB3는 선택적으로 SWO에 연결하고 NRST, 3.3 V, GND를 포함한 10핀 Cortex Debug 커넥터 또는 간소화된 6핀 커넥터를 사용합니다. SWDIO와 SWCLK에는 필요하면 MCU 가까이에 22~47 ohm 직렬저항을 배치할 수 있도록 옵션을 남겨두고, 배선 길이는 가능하면 50 mm 이하로 짧게 유지합니다. 디버거 속도를 1~4 MHz 정도로 사용할 일반적인 보드라면 이 정도 구성이 신호 무결성과 유지보수 측면에서 충분합니다. 정리하면 STM32F103의 디버그 핀은 기능이 고정되어 있으므로 데이터시트에 지정된 PA13, PA14, PA15, PB3, PB4를 사용해야 합니다. 질문에 적어주신 번호가 MCU의 PB 포트를 의미한다면 다른 곳에 연결한 이유가 있는 것이 아니라, 회로도 표기나 연결을 다시 확인해야 하는 상황으로 보입니다.
안녕하세요, 답변 남겨드립니다. 수강생분께서 해석하신 방향이 맞습니다. STM32F103에서 HSE 크리스털을 사용할 때 OSC_IN과 OSC_OUT에 연결하는 외부 커패시터는 일반적으로 5~25 pF 범위에서 검토합니다. 강의에서 30 pF를 별도의 조건 설명 없이 고정값처럼 전달했다면, 이 부분은 제가 설명을 보완해야 합니다. 여기서 크리스털 데이터시트에 적힌 Load Capacitance인 CL과 회로도에 실제로 배치하는 두 개의 외부 커패시터 CL1, CL2는 같은 값이 아닙니다. 크리스털이 실제로 바라보는 부하용량은 CL = CL1 CL2/(CL1+CL2)+Cstray로 계산합니다. CL1과 CL2를 동일한 값인 Cext로 사용한다면 CL = Cext/2+Cstray가 되고, 이를 정리하면 Cext = 2 (CL-Cstray)가 됩니다. 예를 들어 사용한 크리스털의 CL이 18 pF이고 MCU 핀, 패턴, 패드에 의한 기생용량 Cstray를 약 3 pF로 가정하면 Cext = 2*(18-3) = 30 pF가 됩니다. 이 조건에서는 양쪽에 30 pF를 사용하는 계산이 성립합니다. 반대로 크리스털의 CL이 12.5 pF이고 기생용량이 3 pF라면 Cext = 2*(12.5-3) = 19 pF이므로 18 pF 또는 20 pF가 더 적절합니다. 따라서 30 pF라는 값이 무조건 잘못된 것은 아니지만, 모든 크리스털에 공통으로 적용하는 값도 아닙니다. 사용한 크리스털의 CL, ESR, Drive Level과 PCB 기생용량을 기준으로 계산해야 합니다. 특히 CL이 10~12.5 pF인 크리스털에 30 pF를 사용하면 부하가 과도하게 커져 발진 주파수 오차가 증가하거나 발진 시작 시간이 길어질 수 있습니다. 실온에서는 정상 동작하더라도 저온, 저전압, 부품 편차가 동시에 겹치는 양산 조건에서는 간헐적인 부팅 불량으로 나타날 가능성이 있습니다. 실무에서는 계산값 하나만 확정하기보다 18 pF, 22 pF, 27 pF, 30 pF 정도를 교체할 수 있도록 설계해 두고, 초기 시제품에서 발진 시작 시간과 주파수 오차를 확인합니다. 커패시터는 용량 변화가 작은 C0G 또는 NP0 계열을 사용하는 편이 좋고, 허용오차는 5% 이하로 잡는 것이 안정적입니다. 크리스털과 MCU 사이의 배선은 짧게 유지하고, 주변에 고속 스위칭 신호나 DC-DC 스위칭 노드를 배치하지 않는 것도 중요합니다. 오실로스코프로 크리스털 핀을 직접 측정할 때도 주의해야 합니다. 일반 프로브의 입력용량이 10~15 pF 수준이면 프로브 자체가 추가 부하로 들어가 발진 주파수가 변하거나 발진이 멈출 수 있습니다. 가능하면 1 pF 이하의 저용량 프로브를 사용하거나 MCU의 MCO 핀으로 클럭을 출력해 확인하는 방식이 안전합니다. 강의에서 사용한 회로가 8 MHz HSE 기준이라면 30 pF는 특정 크리스털의 CL과 기생용량을 기준으로 계산된 값으로 이해하시면 됩니다. 다만 사용하려는 크리스털의 CL이 다르다면 그대로 복사하지 않고 Cext = 2*(CL-Cstray) 식으로 다시 계산해야 합니다. 32.768 kHz LSE 크리스털을 의미한 경우라면 30 pF는 일반적인 권장 범위보다 큰 값이므로 사용하지 않는 쪽이 맞습니다.
안녕하세요, 답변 남겨드립니다. 질문하신 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 요청을 유지한다는 제어 조건이 포함되어 있다고 이해하시면 됩니다.
안녕하세요, 답변 남겨드립니다. 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는 유지하셔야 합니다.
안녕하세요, 답변 남겨드립니다. 먼저 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 차이로 보는 것이 맞습니다.