주요 경력
삼성전자 DS부문 / CHIP 회로설계 6년 차 출신
아날로그 IP / 디지털 시나리오 설계
A급 특허 출원
글로벌 기업 엔지니어 기술 대응
이전 경력
前 스타트업 하드웨어 엑셀러레이터
MCU Firmware 설계
前 대기업 가전제품 업체
All-in-One 정수기 생산기술
前 중견기업 의료기기 업체
PCB HW, CIS, DDI ASIC 설계
멘토 활동
『직무별 현직자가 말하는 반도체 직무 바이블』 회로설계 Part 저자
한국반도체산업협회 SEMI-MOOC
회로설계 핵심이론 및 시뮬레이션 강사
이공계 취업 1위 렛유인 & 커리어 커뮤니티 코멘토
회로설계 직무 멘토
연세대학교, 한양대학교, 건국대학교 등 10개 이상의 대학에서
회로설계 직무부트캠프 / 직무특강 진행
회로설계 직무 관련
이력서 / 자기소개서 / 면접 컨설팅 200회 이상
K-디지털 기초역량훈련 강사
「어려운 회로 공식 그만, 눈으로 하는 반도체 회로(CHIP) 설계」
유튜브 채널 운영
「회로설계 직무의 패스파인더 삼코치」
강의
클립
전체 3한 권으로 끝내는 SVA(System Verilog Assertion) 실무 핸드북
12개의 챕터 中 1챕터를 무료 공개합니다.→ 1챕터 다운받기(Click!)💻 취업 준비 + 현업에서 필요할 때마다 꺼내 쓰세요.왜 Assertion인가? RTL 검증의 현실반도체 회로설계를 공부하신 분들은 많습니다.SystemVerilog로 테스트벤치 작성, Ran
회로설계 멘토 삼코치
10월 15일

로드맵
전체 1수강평
- PCB HW설계 실무 : STM32를 활용한 Mixed-signal 보드 설계 프로젝트
- High-Speed 임베디드 Board 설계 프로젝트 (feat. 스마트폰)
- 디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
게시글
질문&답변
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 / (2pif*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 / (2piR*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
- 조회수
- 13
질문&답변
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
- 조회수
- 29
질문&답변
과제 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
- 조회수
- 39
질문&답변
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
- 조회수
- 34
질문&답변
디버거 관련하여 질문있습니다.
안녕하세요, 답변 남겨드립니다.디버거는 메인 MCU의 프로그램을 대신 실행하는 장치라기보다, PC와 MCU 내부의 디버그 회로를 연결해 주는 통역기라고 보시면 됩니다. STM32의 Cortex-M 코어 내부에는 ARM CoreSight 계열의 디버그 회로가 들어 있고, 외부 디버거는 SWD 또는 JTAG 신호를 통해 이 회로에 접근합니다. PC에서 중단점을 설정하거나 한 줄씩 실행하면 디버거가 MCU의 CPU를 정지시키고, 현재 PC 값과 범용 레지스터, SRAM, 주변장치 레지스터를 읽어 IDE에 전달합니다. 변수 값을 강제로 변경하거나 Flash를 지우고 새로운 펌웨어를 기록하는 것도 같은 경로로 처리합니다.STM32 프로젝트에서는 보통 SWD 방식을 사용합니다. 핵심 신호는 SWDIO와 SWCLK 두 개이며, 실제 커넥터에는 GND, Target Voltage Reference, NRST를 더해 보통 5개 신호를 연결합니다. 실행 추적이 필요하면 SWO까지 추가하여 6개 정도를 사용합니다. Target Voltage Reference는 디버거가 보드의 I/O 전압이 1.8 V인지 3.3 V인지 판단하기 위한 신호이지, 반드시 디버거가 보드에 전원을 공급한다는 의미는 아닙니다. 양산 보드에서 이 부분을 잘못 연결하면 보드 전원이 꺼진 상태에서 SWD 핀을 통해 역전류가 유입되는 문제가 생길 수 있어, 전원 공급과 전압 감지 기능을 구분해서 설계해야 합니다.디버거 안에 별도의 MCU가 들어가는 이유는 USB 통신 처리, SWD/JTAG 타이밍 생성, Reset 제어, Flash Programming 알고리즘 실행을 실시간으로 담당해야 하기 때문입니다. 예를 들어 PC는 USB 패킷 단위로 명령을 전달하지만 SWD는 수 MHz 단위의 클럭과 비트 순서에 맞춰 응답을 주고받아야 하므로, 중간에서 이를 처리할 컨트롤러가 필요합니다. 개발 보드에 탑재된 ST-LINK 부분을 보면 별도의 STM32가 하나 더 들어 있는 경우가 많은데, 이 MCU는 제품 기능을 수행하는 메인 MCU가 아니라 디버거 역할만 담당합니다.비용 측면에서는 최종 제품 PCB마다 디버거 MCU를 넣을 필요가 없습니다. 강의에서 디버거를 선택한 것은 보드 BOM에 항상 포함시키라는 의미가 아니라, 개발과 검증에 사용할 외부 장비를 정하는 과정입니다. 실제로는 PCB에 SWDIO, SWCLK, GND, VTref, NRST를 커넥터나 테스트 패드 형태로 빼고, 외부 ST-LINK나 J-Link, CMSIS-DAP 디버거 한 대를 여러 장의 보드에 번갈아 연결합니다. 커넥터 공간이 부담된다면 2.54 mm 헤더 대신 1.27 mm 헤더나 포고핀용 테스트 패드를 사용하여 면적을 수십 mm2 수준으로 줄일 수 있습니다. 강의에서도 MCU 부품 선택 이후 별도로 STM32 Debugging Pin 회로를 설계하도록 구성한 이유가 바로 이 개발용 인터페이스와 양산 BOM을 분리해서 이해시키기 위해서입니다.MCU를 전혀 사용하지 않고 펌웨어를 넣는 방법은 있습니다. STM32 내부 ROM Bootloader를 이용하면 BOOT 핀 설정 후 UART, USB DFU, CAN 등의 지원 인터페이스로 프로그램을 기록할 수 있습니다. 다만 이것은 Programming 방법이지 Debugging 방법은 아닙니다. 프로그램을 다운로드할 수는 있어도 원하는 코드 위치에서 CPU를 멈추거나, 레지스터와 메모리를 실시간으로 확인하거나, Watchpoint를 설정하는 기능은 제한됩니다. UART printf, LED, GPIO 토글, 로직 애널라이저를 이용한 디버깅도 가능하지만, HardFault처럼 CPU가 갑자기 예외에 진입한 경우 원인을 찾는 데 걸리는 시간이 SWD 디버거 대비 몇 배 이상 늘어날 수 있습니다.외부 디버거 내부에서도 반드시 범용 MCU만 사용해야 하는 것은 아닙니다. 전용 USB-to-JTAG/SWD 컨트롤러, FPGA, CPLD 또는 PC의 GPIO Bit-Banging 방식으로 구현할 수 있습니다. 하지만 소량의 교육용·개발용 장비에서는 32-bit MCU 한 개로 USB와 SWD를 모두 처리하는 방식이 비용, 펌웨어 업데이트, 호환성 측면에서 가장 현실적입니다. FPGA를 사용하면 타이밍 성능은 좋아질 수 있지만 부품 가격과 전원 회로, 구성 메모리까지 포함되어 오히려 BOM이 증가합니다.이번 STM32 Mixed-signal 보드에서는 디버거 MCU를 본체 보드에 추가하기보다 외부 디버거를 사용하고, 본체에는 SWD 테스트 포인트를 남기는 구성이 적절합니다. 개발 단계에서는 NRST와 SWO까지 포함해 문제를 빠르게 찾고, 양산 단계에서는 제품의 부팅 방식과 제조 공정에 따라 SWD 패드를 유지할지 ROM Bootloader만 사용할지 결정합니다. 보통 디버그 패드는 생산 후 불량 분석과 펌웨어 복구에도 사용되기 때문에, 원가 절감을 위해 완전히 삭제하기보다는 포고핀 접근이 가능한 형태로 남겨 두는 편이 유지보수 리스크를 줄여줍니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 33
질문&답변
LT스파이스 라이브러리 다운이 안됩니다.
안녕하세요, 해당 사이트가 최근에 막혔습니다.https://drive.google.com/file/d/1bOjhy_lTI3w6vo6dOoFZnMuVag-aotol/view?usp=sharing이 드라이브에서 다운받으시면 되겠습니다!
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 26
질문&답변
어떤 방식으로 이 강의를 듣고 공부를 해야 하는지 고민 됩니다.
안녕하세요, 답변 남겨드립니다.지금처럼 input, output 신호를 먼저 적고 제공된 RTL 코드를 한 줄씩 따라가며 “이 신호가 왜 필요한가”를 보는 방식은 틀린 공부가 아닙니다. 오히려 처음 RTL을 배울 때 반드시 한 번은 거쳐야 하는 과정입니다. 다만 이 방식만 2주, 3주 계속 가져가면 말씀하신 것처럼 나무는 자세히 보이는데 전체 구조가 흐려지는 문제가 생깁니다. 실무에서도 신입이 IP 코드를 처음 받을 때 모든 line을 처음부터 끝까지 해석하지 않습니다. 먼저 block diagram, interface, state machine, data path, control path를 잡고, 그 다음에 중요한 always block과 assign 구문을 추적합니다.이 강의에서 Cache, DRAM Controller, FIFO, AMBA, UART 같은 내용을 다루는 이유는 단순히 문법을 많이 보라는 뜻이 아니라, “스펙을 RTL 구조로 바꾸는 사고방식”을 익히기 위해서입니다. 특히 DRAM 쪽은 Pre-charge, Sensing, Restore 과정이 그냥 이론 단어로 끝나는 게 아니라 command sequence, timing interval, state transition으로 바뀌어야 합니다. 예를 들어 ACTIVATE 이후 READ/WRITE가 가능해지고, PRECHARGE 이후 bank가 닫히는 식으로 동작 순서가 생기죠. 이런 부분은 코드 한 줄보다 FSM 그림 하나가 먼저입니다. 이 수업 안에서도 SRAM, DRAM Interface, DRAM Controller, FIFO, AMBA, AXI, I2C, SPI, UART까지 설계 과제로 연결되도록 구성해둔 이유가 여기에 있습니다.앞으로는 코드를 읽는 시간을 전체 공부 시간의 30% 정도로 제한하는 게 좋습니다. 나머지 70%는 직접 작은 버전으로 다시 짜보는 데 써야 RTL 실력이 늘어납니다. 예를 들어 Cache 코드를 2주 동안 분석했다면, 그 다음에는 제공 코드 없이 direct-mapped cache의 최소 버전을 직접 짜보는 식입니다. 처음부터 완성도 높은 cache를 만들 필요는 없습니다. address를 tag/index/offset으로 나누고, hit = valid && (tag_array[index] == addr_tag) 정도의 핵심 조건을 직접 RTL로 구현해보는 게 먼저입니다. 이 정도만 해도 “읽은 코드”가 “내가 쓸 수 있는 구조”로 바뀌기 시작합니다.학습 순서는 크게 바꾸시는 게 좋습니다. 첫날에는 해당 IP의 역할을 한 문장으로 정의하고, input/output 신호를 표처럼 정리합니다. 둘째 날에는 FSM state를 5개 이하로 줄여서 직접 그립니다. 셋째 날에는 제공 코드 없이 아주 작은 RTL을 작성합니다. 넷째 날에는 testbench를 만들어 최소 10개 이상의 test vector를 넣고 waveform을 봅니다. 다섯째 날에야 제공 코드를 열어서 내가 짠 코드와 비교합니다. 이렇게 해야 “코드 분석”이 목적이 아니라 “내 설계의 빈틈을 찾는 리뷰”가 됩니다.CPU나 UART를 본인 프로젝트로 가져가겠다는 목표는 아주 좋습니다. 다만 처음부터 CPU 전체를 프로젝트로 잡으면 datapath, control FSM, register file, ALU, memory interface가 한꺼번에 들어와서 진도가 막힐 가능성이 큽니다. 실무 기준으로도 CPU는 작은 구조라도 검증 포인트가 많습니다. instruction 5개만 지원해도 reset, fetch, decode, execute, writeback, branch, memory access까지 확인해야 해서 testbench가 최소 20~30개 케이스는 필요합니다. 그래서 RTL 실력 향상이 목적이면 UART를 먼저 추천드립니다. UART는 baud rate generator, tx FSM, rx FSM, shift register, parity 정도로 구조가 분리되고, tx_start가 들어왔을 때 tx_busy가 올라가고 start bit, data bit 8개, stop bit가 순서대로 나가는 waveform을 눈으로 확인하기 좋습니다.UART 프로젝트를 잡는다면 목표를 작게 쪼개야 합니다. 처음에는 8N1, 즉 data 8bit, parity 없음, stop 1bit만 구현하세요. baud tick은 실제 115200 bps를 바로 맞추기보다 simulation에서는 divider를 4나 8 정도로 줄여서 파형을 빠르게 확인하는 게 낫습니다. 그 다음 tx만 구현하고, 이후 rx를 붙이고, 마지막에 loopback으로 tx_data가 rx_data로 돌아오는지 확인하면 됩니다. 이 과정에서 always @(posedge clk) 안에서 register가 갱신되는 감각, non-blocking assignment인 Cache에서 2주가 걸린 것은 이상한 일이 아닙니다. Cache는 초보자 입장에서는 RTL 문법 문제가 아니라 컴퓨터 구조 문제에 가깝습니다. tag, index, offset, valid bit, dirty bit, hit/miss, refill, write-through, write-back 개념이 동시에 들어옵니다. 여기에 memory latency까지 들어가면 state가 IDLE, TAG_CHECK, MISS_REQ, REFILL, UPDATE처럼 늘어납니다. 그러니 2주 동안 코드를 읽었는데도 불안한 건 실력이 부족해서가 아니라, 처음부터 난도가 꽤 높은 블록을 너무 정밀하게 파고든 겁니다. 이 경우에는 cache를 잠시 내려놓고 SRAM, FIFO, UART처럼 입출력과 상태 전이가 선명한 블록으로 RTL 근육을 먼저 만드는 게 효율적입니다.실무에서 RTL 엔지니어를 볼 때 “남의 코드를 오래 읽었다”보다 더 강하게 보는 건 본인이 만든 산출물입니다. 최소한 module spec, RTL code, testbench, waveform, synthesis report, timing report까지 있어야 설계 경험으로 인정받기 쉽습니다. 예를 들어 UART 프로젝트라면 “8N1 UART TX/RX를 Verilog로 설계했고, 50MHz clock 기준 baud divider를 parameter화했으며, 20개 test vector로 tx/rx loopback을 검증했고, FPGA 합성 후 LUT 사용량과 Fmax를 확인했다” 정도로 정리되어야 합니다. 여기서 Fmax가 100MHz 이상인지, critical path가 counter 쪽인지 FSM decode 쪽인지까지 적으면 단순 수강생 느낌이 아니라 설계자 느낌이 납니다.DRAM Interface 강의도 같은 방식으로 접근하시면 됩니다. Pre-charge, Sensing, Restore를 물리 동작으로만 외우지 말고 command FSM으로 바꿔보세요. 예를 들어 IDLE에서 ACTIVATE로 가고, 일정 cycle을 기다린 뒤 READ나 WRITE로 넘어가고, 이후 PRECHARGE를 거쳐 다시 IDLE로 돌아오는 구조입니다. 실제 DRAM timing은 tRCD, tCL, tRP, tRAS 같은 제약이 붙기 때문에, 처음 학습용 RTL에서는 각 timing을 parameter로 두고 wait_counter >= tRCD 같은 형태로 구현하면 됩니다. 이 정도만 직접 짜도 DRAM Controller의 뼈대를 이해하는 데 충분합니다.조바심이 날 때 기준을 “오늘 몇 줄을 이해했나”로 잡으면 계속 불안해집니다. 기준을 “이번 주에 내가 직접 만든 module이 몇 개 생겼나”로 바꾸셔야 합니다. 4주 기준으로 보면 첫 주는 counter, mux, register file, simple SRAM을 직접 작성하고, 둘째 주는 FIFO와 UART TX를 작성하고, 셋째 주는 UART RX와 testbench를 붙이고, 넷째 주는 작은 CPU나 DRAM Controller의 FSM skeleton을 만드는 흐름이 좋습니다. 이 정도 속도면 빠르지도 느리지도 않습니다. 복잡한 cache를 2주 동안 완벽히 해석하는 것보다, 작은 RTL 4~5개를 직접 작성하고 waveform으로 검증하는 쪽이 실력 상승은 훨씬 큽니다.제가 이 강의를 공부하실 때 기대하는 모습은 제공 코드를 필사하듯 분석하는 것이 아니라, 제공 코드를 “내 코드와 비교하는 기준선”으로 쓰는 것입니다. 처음에는 코드 품질이 낮아도 괜찮습니다. state 이름이 투박하고, testbench가 단순하고, waveform이 지저분해도 직접 돌려본 설계는 머리에 남습니다. 현업에서도 첫 RTL은 대부분 수정됩니다. 중요한 건 reset이 제대로 들어가는지, 모든 state에서 next_state가 정의되는지, latch가 생기지 않는지, valid와 ready가 끊기지 않는지, setup timing을 깨는 긴 combinational path가 없는지를 반복해서 보는 습관입니다. 이 습관이 생기면 CPU, UART, AMBA, DRAM Controller 모두 같은 방식으로 확장됩니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 30
질문&답변
쿼터스 스케메틱에 대한 질문
안녕하세요, 답변 남겨드립니다.이게 리소스를 많이 쓸수록(플립플롭이나 메모리 등)그만큼 라우팅이 복잡해지기 떄문에 시간이 오래 걸리는데,이건 또 PC 연산속도에 비례해서 PC성능을 따라갑니다.따라서 레지스터의 개수를 낮추는 방향으로 시도해보셔야 할텐데요,이해도가 높으시다면 직접 수정하셔도 되지만AI 활용해서 개수를 줄여서 잘 되는지 확인해보시는것을 추천드립니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 29
질문&답변
실행 시 node or model name expected.
안녕하세요, 답변 남겨드립니다.model 관련 에러가 뜬건 라이브러리를 잘못 물렸을때 나오는 오류라서해당 라이브러리가 경로에 잘 있는지, 오타는 없는지 등 확인해보시고만약 계속 안되시면 경로나 파일 위치 등 캡쳐해서 올려주시면 봐드리겠습니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 27
질문&답변
Biasing 저항
안녕하세요, 답변 남겨드립니다.질문 주신 포인트가 맞습니다. ADS122C04에서 thermocouple처럼 floating에 가까운 센서를 AIN0/AIN1 차동 입력으로 받을 때는 ADC 입력이 완전히 떠 있지 않도록 DC bias path를 만들어줘야 합니다. TI reference 회로에서 RB1, RB2를 넣는 이유도 그 부분입니다. PGA를 사용할 경우 AIN0/AIN1의 differential voltage만 보는 것이 아니라 각 입력 핀이 AVSS와 AVDD 사이의 허용 입력 범위 안에 있어야 하므로, common-mode를 AVDD/2 근처로 잡아주는 설계가 필요합니다. 예를 들어 AVDD = 3.3 V라면 common-mode를 약 1.65 V 근처에 두는 식입니다.강의 회로에서 RB1, RB2가 별도로 표시되지 않은 부분은 thermocouple 전용 입력단을 TI 예제 회로 그대로 고정해서 그린 것이 아니라, ADS122C04의 ADC 입력 채널을 범용 차동 입력 구조로 먼저 잡아둔 형태로 봐주시면 됩니다. 즉 AIN0/AIN1에 어떤 센서를 붙이느냐에 따라 입력단 앞쪽의 bias, protection, filtering 구성이 달라질 수 있어서, thermocouple을 실제 측정 대상으로 확정해서 가져가는 경우에는 RB1, RB2에 해당하는 biasing path를 추가해서 설계하는 것이 맞습니다. 이 부분은 단순 연결보다 한 단계 더 들어간 application circuit 설계 포인트입니다.실제 적용에서는 AIN0 쪽을 고저항으로 AVDD에, AIN1 쪽을 고저항으로 GND에 연결해서 두 입력의 common-mode가 가운데 전압으로 형성되도록 잡습니다. 값은 보통 1 Mohm에서 10 Mohm 이상 범위에서 검토하는데, 실습 보드나 일반적인 실내 환경에서는 10 Mohm 정도가 출발점으로 무난합니다. AVDD = 3.3 V이고 RB1 = RB2 = 10 Mohm이면 흐르는 전류는 I = 3.3 V / 20 Mohm = 165 nA 정도라서 thermocouple 측정에 주는 영향을 작게 가져갈 수 있습니다. 반대로 산업 현장처럼 습도, 오염, 플럭스 잔류물, 긴 케이블 영향이 큰 환경에서는 10 Mohm이 너무 높게 느껴질 수 있고, 이때는 1 Mohm에서 4.7 Mohm 정도로 낮춰서 입력 common-mode를 더 단단하게 잡는 판단을 하기도 합니다.여기서 주의할 점은 RB1, RB2를 무조건 크게 잡는다고 좋은 설계가 아니라는 점입니다. 10 Mohm급 저항은 ADC 입력 부하를 줄이는 데는 유리하지만, PCB 표면 leakage가 수십 nA만 생겨도 온도값이 흔들릴 수 있습니다. K-type thermocouple은 대략 41 uV/°C 수준이라 입력단에서 100 uV 정도만 흔들려도 약 2.4°C 오차처럼 보일 수 있습니다. 그래서 회로도에서는 RB1, RB2 값만 보는 게 아니라, 입력 커넥터 주변 세척 상태, guard pattern 필요 여부, 아날로그 GND return path, EMI 유입 경로까지 같이 봐야 합니다.또 하나 실무적으로 RB1, RB2는 단선 감지에도 도움이 됩니다. thermocouple이 끊어졌을 때 AIN0/AIN1이 완전히 floating으로 남으면 ADC code가 애매하게 흔들릴 수 있는데, bias path가 있으면 한쪽은 AVDD 방향, 다른 한쪽은 GND 방향으로 끌려가면서 정상 온도 범위를 벗어난 값을 만들 수 있습니다. 펌웨어에서는 이 값을 기준으로 open thermocouple 상태를 판정할 수 있습니다.따라서 이 회로를 thermocouple 측정용으로 완성해서 가져간다면 AIN0/AIN1 앞단에 RB1, RB2 biasing 저항을 추가하는 방향으로 이해하시면 됩니다. 강의에서 그린 ADS122C04 블록은 ADC 채널 연결의 기본 골격이고, thermocouple 입력으로 실제 제품 수준까지 끌고 가는 단계에서는 biasing resistor, differential/common-mode RC filter, ESD 보호, connector leakage까지 포함해서 입력단을 마무리해야 합니다.
- 좋아요수
- 0
- 댓글수
- 2
- 조회수
- 37






