inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

회로설계 멘토 삼코치님의 게시글

회로설계 멘토 삼코치 회로설계 멘토 삼코치

@samcoach

수강생
5,779
수강평
555
강의 평점
5.0

게시글 306

질문&답변

VDDA VSSA 연결 질문드립니다

아 맞습니다. 제가 위치를 확인 안하고 습관적으로 연결했네요. 확인 감사합니다.

좋아요수
0
댓글수
2
조회수
23

질문&답변

JTAG신호를 받는 핀 선택 이유에 대한 질문이 있습니다.

안녕하세요, 답변 남겨드립니다. 질문에 적어주신 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 포트를 의미한다면 다른 곳에 연결한 이유가 있는 것이 아니라, 회로도 표기나 연결을 다시 확인해야 하는 상황으로 보입니다.

좋아요수
0
댓글수
2
조회수
72

질문&답변

oscillator에 30p를 쓰는 이유가 궁금합니다.

안녕하세요, 답변 남겨드립니다. 수강생분께서 해석하신 방향이 맞습니다. 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는 일반적인 권장 범위보다 큰 값이므로 사용하지 않는 쪽이 맞습니다.

좋아요수
0
댓글수
2
조회수
61

질문&답변

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
조회수
41

질문&답변

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
조회수
70

질문&답변

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
조회수
47

질문&답변

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
조회수
56

질문&답변

툴 사용

안녕하세요, 답변 남겨드립니다. 네, 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
조회수
66

질문&답변

섹션 강의 자료 문의

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

좋아요수
0
댓글수
2
조회수
90

질문&답변

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
조회수
73