저는 지난 20여년 동안 대기업, 중소기업에서 개발자로 일해왔고
현재는 작은 기업의 대표로 있습니다.
주요 경력사항은
Verilog HDL을 이용한 FPGA 설계
CCTV용 ISP ASIC 개발 (약 10년)
OLED Display 검사장비 개발 (약 3년)
FPGA를 이용한 장비 개발
MCU FW
STM32
PIC32
AVR, ATMEGA
DSP (TI)
Windows Application Program
Visual Studio MFC, C++
입니다.
Khóa học
Đánh giá khóa học
- Thực hiện FFT trên STM32
- Cơ bản sử dụng FPGA bằng Verilog
- Chương trình FPGA Verilog 1 (Zynq mini 7020)
- Thực hiện STM32 FreeRTOS
- Thực hiện FFT trên STM32
Bài viết
Hỏi & Đáp
UART 구현 관련 질문
안녕하세요.UartLite, Uart16550 IP는 Uart Controller IP 입니다. 즉 Uart의 모든 내용이 구현된 IP 입니다. 제가 강의에서 설명 드린 내용은 Uart Controller를 로직으로 직접 구현하는 내용입니다. 내용 중에 FIFO를 사용한 것은 Uart Controller 내부에 송,수신 Buffer 용으로 사용한 것입니다.Uart를 추가해서 사용하려면 UartLite, Uart16550 IP를 사용하면 됩니다. 강의 내용은 uart controller를 직접 구현해 봄으로써 로직(verilog program)을 사용하는 스킬을 향상하려는데 목적이 있습니다.감사합니다 ~!!
- 0
- 2
- 17
Hỏi & Đáp
simulation 질문
simulation은 제공되는 ip를 이용하기 때문에 특별이 동작이 안되는 경우는 잘 없습니다.저의 경우는 clock입력이나 reset 입력을 잘 못해서 종종 에러가 발생하곤 합니다. 입력되는 clock, reset 이 잘 설정되어 있는지 확인해 보시길 바랍니다.강의에 설명된 내용을 잘 살펴보시면 크게 어렵지 않을 것 같습니다.감사합니다~!!
- 0
- 1
- 23
Hỏi & Đáp
UART
넵 맞습니다~!!
- 0
- 2
- 17
Hỏi & Đáp
Verilog 코딩 스타일
안녕하세요.코딩 스타일은 생각보다 매우 중요합니다.자신에게 맞는 코딩 스타일을 만들어 가는 것이 좋습니다.강의에 설명된 코딩 스타일은 제가 오랫동안 일을 진행하고여러 코딩스타일을 접해보면서 나름 정리된 내용입니다.이를 기반으로 많은 프로젝트를 진행했습니다. 차이가 나는 것은 크게 2가지 정도 입니다. 1) next_state 를 사용하는냐 사용하지 않느냐?많은 분들이 next_state 를 사용합니다.fpga를 구현하는 것은 크게 mux 와 flip-flop(register)로 구성됩니다.mux는 combinational 로직으로 if, switch, assign, 기타 등등이고, register는 flip-flop 을 거치면서 1-clock delay가 발생합니다.어떤 분들은 mux (combinational logic)을 구현할 때,always (*) + switch (or if) 문을 사용합니다.저는 always (*) 문 대신에 wire (assign) + 3항 연산자를 사용합니다.제가 오랫동안 일을 하면서 3항 연산자를 이용하는 것이 가장 좋다고 생각했습니다.always 문을 combinational 로직과 register 로직과 함께 사용할 때 여러가지오류가 발생하거나 원치 않는 동작을 하는 경우가 많습니다.이로 인해 systemverilog 에서는 combinational logic을 위해서는 always_comb 를 사용하고register 로직에서는 always_ff 를 사용합니다.저는 always 문에서는 combinational 로직을 사용하지 않고, 오직 register 로직에서만 사용합니다. 2) fsm 을 구현할 때, 각 상태별로 신호들을 묶어서 처리하느냐, 아니면각 신호별로 상태에 따라서 구현하느냐 의 차이입니다.저도 처음에는 각 상태별로 신호들을 묶어서 처리하였습니다. 다른 고급 언어들이 이처럼 구현합니다.그러나 많은 코드들을 접해보면서, 각 신호별로 구현하는 것이 더 좋은 것이라 생각하였습니다.여러가지 이유가 있겠지만,fpga 구현하는 것은 clock과의 싸움입니다.clock에 맞게 신호들일 처리되는지 simulation을 통하여 확인하고,clock이 안 맞으면, 1-clock, 2-clock, ** delay를 추가하여 타이밍을 맞추어야 합니다.코드 중에 xxx_1d, xxx_2d 신호들은 생각만으로 구현된게 결코 아닙니다.처음에는 대충 구현하고, simulation을 하면서 clock에 맞게 timing을 맞추어 주어야 합니다.아무리 간단한 로직이라 해도, 수십번의 simulation을 해야만 timing을 다 맞출수 있습니다.비교적 간단한 spi 로직도 수십번의 simulation을 하면서 1d, 2d 신호들을 추가하면서 타이밍을 맞추게 됩니다. 질문 내용이 답변하기에는 내용이 많아서 두서없이 답변드렸습니다.제가 전에 저의 코드를 ChatGPT에게 물어보았던 적이 있습니다.매우 훌륭한 코드라고 답변을 받았습니다.저도 실무에서 20년 넘게 이 코드 스타일로 프로젝트를 진행하고 있습니다.코딩 스타일이 문제가 되었던 적은 없었습니다.또한 나중에 SystemVerilog를 접하게 된다면 저의 코딩 스타일이 SystemVerilog에서도 잘 맞는 것을 알 수 있을 것입니다. fpga를 배우는 것이 단시간에 되는 것은 결코 아닙니다.많은 시간이 필요하고, 코딩하고 simulation으로 검증하고, 보드에서 확인하고이러한 작업을 하다보면 조금씩 배우게 됩니다. 아무튼 강의 통해 많은 도움되시길 바랍니다.감사합니다~!!
- 0
- 2
- 46
Hỏi & Đáp
xilinx 권고와 차이
안녕하세요.reset 관련된 내용 답변드립니다.xilinx 문서에는 async 대신에 sync를 사용하라고 권면합니다. 그러나 저의 경험상 sync로 해서 문제가 발생했던 적이 있습니다. 예전에 async로 항상 사용하다가 문서의 내용을 발견하고, sync로 모두 바꾸어서 진행했었는데, block memroy를 사용하는 중에 오류가 발생했습니다. simulation에서는 아무리 해도 정상동작하는데, 보드에서는 동작하지 않았습니다. 많은 시간 허비하다가 reset을 sync로 사용해서 발생한 문제로 결론이 났습니다. 그 후부터는 reset은 항상 async로 동작하게끔 구현합니다.대부분 reset 을 POR(power-on-reset)회로로 동작합니다. 그러나 fpga의 경우 한번 더 생각해 봐야 합니다. 전원을 인가하면 por 에서 잠깐 동안 reset을 active 하고 바로 풀어줍니다. 그러나 fpga는 전원이 인가되면 Memory에서 Bitstream을 다운로드 하고 그 후에 Logic이 동작합니다. Logic이 동작할 때에는 이미 por이 끝난 상태이기 때문에 reset이 동작하지 않습니다. 이에 대해서는 FPGA 내부 동작 Sequence을 알아야 합니다. FPGA는 configuration을 진행할 때 내부 레지스터나 메모리를 초기상태로 만들고 진행합니다. 외부에서 별도의 reset 신호를 인가하지 않아도 자체적으로 reset을 구현한다는 의미입니다.Reset이 아주 중요한 경우에는 어떻게 하나요? 이런 경우에는 다른 Processor에서 fpga을 reset 하도록 합니다. 즉 configuration이 완료된 후에 Processor에서 reset 신호를 만들어 인가해 줍니다. 또는 PLL IP를 사용한다면, PLL의 출력 신호 중에 locked 신호를 reset 신호로 사용하는 경우도 있습니다.DDR Memory를 사용하는 경우에는, ddr IP에서 출력해주는 user interface reset 신호를 사용하는 것도 좋은 방법입니다. ddr과 연관이 있는 로직은 ddr과 sync를 맞추어 동작시키는 게 좋습니다.저의 경험에 비추어 볼 때, FPGA 1개로 구현하는 경우에는 reset을 크게 신경 쓰지 않아도 됩니다. 저는 통상적으로 Active High, Async로 구현합니다. 이로 인해 문제가 발생했던 적은 없었던 것 같습니다. HW 적으로 초기값(reset 값)을 꼭 맞추어 주어야 하는 경우에는 주의해서 설계할 필요가 있을 수 있습니다.감사합니다 ~!!
- 0
- 2
- 68
Hỏi & Đáp
강의자료
안녕하세요.강의 자료는 다운로드 링크에서 받으시면 됩니다~감사합니다~!!
- 0
- 1
- 65
Hỏi & Đáp
TTL 연결 없이 프로그램 창에서 메세지 확인 하는 방법도 있을까요?
안녕하세요.necleo 보드는 다운로드와 usb-uart 포트가 같이 있어서 보드의 CN1을 PC와 연결하면 Com Port가 잡힐 것입니다. 이 포트를 이용하여 디버깅 메시지를 확인할 수 있습니다. 프로그램에서는 UART 포트를 UART1 -> UART2로 변경해야 합니다.UART2 (PA2 : UART2_TX, PA3 : UART2_RX)4.2.3 UART 설정에서 USART1 대신에 USART2를 사용해야 합니다.프로그램 다운로드 후에 디버깅 메시지가 안나오면, 디버기용 Windows 프로그램에서 Serial port를 close후에 다시 open 해 보시길 바랍니다.감사합니다 ~!!아래 링크 참조하세요.링크 : https://mcutry.tistory.com/8
- 0
- 2
- 62
Hỏi & Đáp
준비물 도움 요청
안녕하세요.[그림 2-5]에 나와 있듯이 준비하시면 됩니다.1) 보드 (STM32F446) 2개2) Can Transceiver 2개 (참조 : https://cafe.naver.com/worshippt/128)3) ST-LINK/V24) RS232 to TTL 모듈 : 2개5) USB to RS232 Cable : 2개6) 기타 점퍼 케이블 (2.54mm 헤더핀 점퍼 케이블) 3)번 대신 저렴한 "ST LINK V2 MINI 미니" 구매하셔도 됩니다.(사진)4) - 5) 대신에 저렴한 "USB to TTL 컨버터 모듈" + USB 2.0 Cable 구매하셔도 됩니다.(사진) 유익한 강의 되시길 바랍니다.감사합니다. ~!!
- 0
- 2
- 117
Hỏi & Đáp
보드 차이
안녕하세요.HIL-A35T 보드는 Aritx7 시리즈를 사용합니다.ZYNQ는 FPGA내부에 Processor가 포함되어 있습니다. PS(Processing System) 영역과 PL (Programable Logic)영역으로 구성되어 있습니다. Zynq는 Soc(System on Chip)를 구현하는 fpga입니다. Artix7 시리즈에서는 프로그램에서 MicroBlaze를 추가하여 Soc를 구성할수는 있지만, Zynq는 HW적으로 Processor가 포함되어 있습니다.Zynq와 일반적인 FPGA(Artix7 등)의 차이로 이해하시면 됩니다.감사합니다 ~!!
- 0
- 2
- 104
Hỏi & Đáp
uart1 인터럽트 관련
안녕하세요.아래 인프런 AI 인턴 답글도 좋은 답글이네요.1) 무작위 쓰레기 값 : RS232 to TTL 모듈 문제일 수 있습니다. 요즘 판매하는 RS232 to TTL 모듈에 문제가 많은 것 같습니다. 우선 해결 방법으로는 Baudrate 속도를 낮추어서 해 보세요. 9600 정도 (or 2400) 정도로 낮추어서 해보세요. fw 프로그램에서 uart 속도를 변경하고, WinIDT에서 해당 속도로 Open하면 됩니다. 아니면 "uart to usb converter" 를 별도로 구매하시는 것도 방법일 것 같습니다.2) 개행이 되지 않는 문제 : page-34 페이지를 보면 그렇게 나오는게 맞습니다.페이지 상단의 소스를 보면, (116 - 121 라인) 한문자를 출력하고 "\r\n"을 출력하기 때문에 한문자씩 라인별로 출력되는 게 맞습니다.제 경험으로는 printf() 문은 뒤에 "\r\n"을 추가하지 않으면 해당 문자열이 출력되지 않았던 것 같습니다. 그래서 한문자씩 출력하고 뒤에 "\r\n"을 추가한 것 같습니다.감사합니다 ~!!
- 0
- 2
- 113