소개
안녕하세요. 설계독학의 맛비입니다.
현) Global Top10 Fabless 기업에서 HW IP 설계하고 있습니다.
반도체 설계관련 이야기들을 주제로 영상과 글을 쓰고 있습니다.
설계독학 유튜브, 설계독학 블로그, 맛비 블로그 (네이버)
강의
전체4로드맵
전체1수강평
- .......
Seokmin Hong
2024.03.06
1
게시글
질문&답변
2024.03.28
AXI4-Lite vs APB
안녕하세요 🙂 AXI4-Lite 는 Xilinx 에서 채택한 I/F 일 뿐이에요. 그래서 Xilinx FPGA 에서 적극 사용했습니다. (출처 : https://www.xilinx.com/products/intellectual-property/axi.html ) APB 가 AXI4-Lite 보다 포트수도 적고 기능도 적고 단순합니다. 따라서 Reg setting 및 read 가 주 목적인 상황에서 가장 simple 한 AMBA APB 는 ASIC 에서 많이 사용합니다. APB AXI4-Lite 양쪽 converting 이 가능하고요. 비교하는 자료는 저도 잘 모르겠는데, 결국 스펙문서를 보시면 대략 감이 오시지 않을까 싶어요. 즐공하세요 🙂 ====================================== GPT 는 실제 현업은 잘 모르지만, 기본 이론 답변은 잘해줘서 첨부해 보았습니다. (저도 한번 읽어봤는데 괜찮은 답변입니다. 결국 핵심은 비용차이 입니다. 단순할수록 로직이 작겠죠. ) AXI4-Lite와 APB는 시스템 온 칩(SoC) 내부에서 컴포넌트 간의 통신을 위해 사용되는 두 가지 인터페이스 프로토콜입니다. 이들은 ARM에 의해 정의되었으며, 각각 다른 용도와 특성을 가지고 있습니다. AXI4-Lite AXI4-Lite는 Advanced eXtensible Interface 4의 경량 버전으로, AMBA(Arm Microcontroller Bus Architecture) 표준의 일부입니다. AXI4의 간소화된 버전이며, 주로 간단한 제어 및 상태 레지스터 인터페이스에 사용됩니다. 이 프로토콜은 속도와 유연성이 요구되는 곳에 적합합니다. 통신 방식 : 포인트 투 포인트. 지원 기능 : 읽기 및 쓰기 작업을 위한 별도의 채널을 제공합니다. 각 채널은 요청과 응답을 위해 별도로 구성됩니다. 복잡성 : AXI4에 비해 간단하지만, APB에 비해서는 복잡합니다. 다중 채널을 사용하여 비동기식 데이터 전송을 지원합니다. 사용 사례 : 중간 수준의 복잡성을 가진 데이터 전송이 필요한 경우. 예를 들어, 고속 데이터 처리나 제어가 필요한 주변장치에 적합합니다. APB (Advanced Peripheral Bus) APB는 간단한 주변장치에 사용되도록 설계된 인터페이스 프로토콜입니다. AMBA 표준의 일부로, 주로 저속의 데이터 전송에 적합합니다. 이 프로토콜은 단순함과 낮은 구현 비용에 중점을 둡니다. 통신 방식 : 공유 버스. 지원 기능 : 주로 읽기 및 쓰기 작업에 사용됩니다. 간단한 인터페이스를 통해 주변장치와의 통신을 수행합니다. 복잡성 : AXI4-Lite보다 단순합니다. 시계 주기당 하나의 작업만 처리할 수 있으며, 주로 단순한 데이터 전송에 사용됩니다. 사용 사례 : 저속의 주변장치 연결에 이상적입니다. 예를 들어, 타이머, 인터럽트 컨트롤러, 간단한 입출력 장치 등의 제어에 사용됩니다. 차이점 요약 복잡성 및 기능성 : AXI4-Lite는 복잡하고 유연성이 높으며, 고속 데이터 전송과 복잡한 통신 패턴을 지원합니다. 반면, APB는 간단하고 저비용으로, 저속 데이터 전송에 적합합니다. 통신 방식 : AXI4-Lite는 포인트 투 포인트 통신을, APB는 공유 버스 기반 통신을 사용합니다. 적용 분야 : AXI4-Lite는 더 높은 데이터 처리량이 필요한 중간 수준의 복잡성을 가진 시스템에 적합하고, APB는 간단한 제어 작업이 필요한 저속 주변장치에 적합합니다. 이러한 차이점들로 인해, 시스템 설계자는 자신의 필요에 맞는 프로토콜을 선택하여 시스템의 효율성과 비용을 최적화할 수 있습니다.
- 3
- 1
- 25
질문&답변
2024.03.28
안녕하세요 맛비님 simple_bram_ctrl.v 모듈에 질문이 있습니다!
안녕하세요 🙂 (사진)위 그림과 같습니다. 현업에 가시면 모듈의 input 을 바로 output 에 assign 하는 행위를 "lint" 관련 tool 을 이용해서 잡을 수 있고요. 이 부분은 우려하시는 대로 문제 가 될 여지가 있어요. 하지만 설계자가 보장한다면, 사용가능합니다. 실제로 FPGA 에 올려서 동작시켜본 코드에요. (zynq 에서 100 MHz 정도 까지 합성되는 것으로 기억나요) 해당 예제 코드는 Timing 이슈를 제가 보장 했고요. 그래서 사용하셔도 됩니다. 하지만 현업에서 문제를 삼는다고 하시면, 직접 판단하시어 수정하셔도 되겠습니다. 즉 따라서 이 문제는 상황에 따른 선택이 있을 뿐 정답은 없습니다. 즐공하세요 🙂 ==================== 어떤 문제가 있는지는 제가 GPT4 에 물어보았고요. (GPT 는 현업을 모르지만, 기본적인 이론은 답변을 잘해줍니다. 제 생각도 같아요. ) 참고 부탁드립니다. 모듈의 입력(input)을 바로 출력(output)에 할당(assign)하는 행위는 간단해 보일 수 있지만, 디지털 회로 설계에서는 몇 가지 고려해야 할 문제가 있습니다. 이러한 행위가 문제를 일으킬 수 있는 주요 이유는 다음과 같습니다: 1. 신호 지연(Delay) 지연 문제 : 모든 디지털 회로 요소는 신호를 전달하는 데 있어 일정한 지연을 가집니다. 입력 신호를 바로 출력 신호에 연결하면, 이 지연이 명시적으로 관리되지 않습니다. 실제 하드웨어에서는 이러한 지연이 예측하지 못한 타이밍 문제를 일으킬 수 있습니다. 동기화 문제 : 특히 클럭 동기화 디자인에서 입력 신호를 직접 출력에 연결하면, 클럭 도메인 간의 올바른 동기화 없이 신호가 전달되어 메타스테이블 상태(metastable state)를 유발할 수 있습니다. 이는 시스템의 안정성과 신뢰성을 저하시킬 수 있습니다. 2. 신호 무결성(Signal Integrity) 무결성 문제 : 입력 신호를 바로 출력에 연결하는 것은 신호의 무결성을 저하시킬 수 있습니다. 예를 들어, 긴 전선이나 고속 신호의 경우, 신호 반사(reflection)나 감쇠(attenuation)와 같은 현상이 발생할 수 있으며, 이러한 현상은 설계에서 고려되어야 합니다. 3. 설계 의도의 명확성 의도의 불명확성 : 입력을 바로 출력에 연결하는 행위는 때때로 설계 의도를 명확하게 전달하지 못할 수 있습니다. 설계자는 왜 이러한 연결이 필요한지, 이 연결이 어떤 기능을 하는지 명확히 문서화해야 할 필요가 있습니다. 4. 합성과 최적화 합성 도구의 최적화 : 합성 도구는 회로를 최적화하는 과정에서 입력과 직접 연결된 출력을 제거하거나 변경할 수 있습니다. 이러한 최적화는 때로 예기치 않은 결과를 초래할 수 있으며, 설계 의도와 다르게 작동할 수 있습니다. 해결책과 고려 사항 버퍼링과 레지스터 사용 : 문제를 해결하기 위해, 입력 신호를 출력에 직접 연결하는 대신 적절한 버퍼링 또는 레지스터링을 고려할 수 있습니다. 이러한 방법은 신호 지연을 관리하고, 신호 무결성을 보장하는 데 도움이 됩니다. 신호 경로 분석 : 신호의 전파 경로를 면밀히 분석하여, 타이밍 문제나 신호 무결성 문제를 사전에 예측하고 대응할 수 있습니다. 설계 의도 명확화 : 설계 문서에는 모든 신호 연결의 목적과 이유가 명확하게 기술되어야 합니다. 이는 추후 분석이나 최적화 과정에서 중요한 참고 자료가 됩니다. 결론적으로, 입력을 바로 출력에 연결하는 것이 단순해 보일 수 있지만, 디지털 회로 설계에서는 여러 복잡한 요소를 고려해야 합니다. 설계 의도를 명확히 하고, 신호 지연과 신호 무결성 문제를 해결하기 위한 적절한 기법을 적용하는 것이 중요합니다.
- 1
- 1
- 14
질문&답변
2024.03.28
설치 후 오류로 인해 재설치
안녕하세요 🙂 AI 인턴이 열심이 달았는데, 제가 답변을 달자면. 먼저 정상적으로 설치하셨지만 Tool 관련 문제는 저도 해결해드리기 어려울 것 같아요. PC 의 문제일 가능성이 높고 제가 Xilinx 직원이 아니기 때문에... 양해를 부탁 드립니다 ㅠ 이 부분은 Xilinx 커뮤니티를 통해서 해결해보시는 것도 방법일 것 같습니다. https://support.xilinx.com/s/topiccatalog?language=en_US 그리고 현재 제 강의의 FPGA 는 Windows 에서 다루고 있어요. (리눅스에 이슈가 워낙많아서.. 대응이 어려워서 그렇고요) Simulator 는 linux 환경이 좋아서 그대로 사용하고 있습니다. 실제로 현업가시면 linux 환경이 정말정말...정말 도움이 되실꺼에요. 불편하시더라도 포기하지 않고 쓰시면 금방 익숙해 지실꺼에요. "리눅스 기본 명령어" 를 구글에 검색하시어 이것저것 해보는 것도 익숙해지는 것에 도움이 되실꺼에요. 참고 부탁드릴께요. ============ 재설치를 하신다고 하시면, WSL 에 설치된 Vivado tool 만 지웠다가 설치하시면 될 것 같은데요. Tool 설치 하신 폴더를 바로 지우시면 되겠습니다. 이후 설치 과정은 다시 영상을 보고 따라하시면 될 것 같아요. rm -rf Xilinx 위 명령어는 Xilinx 폴더를 삭제하는 겁니다. 즐공하세요 🙂
- 1
- 2
- 38
질문&답변
2024.03.28
직접 만든 파일 실행하기
안녕하세요 🙂 직접수정하신 내용은 제가 봐드리기 어려워서, 직접 에러메세지를 찾아보시면서 해결하셔야 할 것 같아요. 전달드린 실습코드들의 build 파일과 .v 를 잘 파악하시어 수정하시면 되겠습니다. 양해부탁드릴께요. 즐공하세요 🙂
- 1
- 2
- 38
질문&답변
2024.03.28
F/F BRAM delay 질문
안녕하세요 🙂 먼저 Season1 의 20 장에서 BRAM 은 F/F 이 아닙니다. 물리적인 BRAM 이 존재합니다. (FPGA 시간에 다룹니다.) 전달 드린 memory code 는 모델링 코드입니다. Xilinx 에서는 이 modeling code 를 인지해서 물리적인 BRAM 에 mapping 시켜줍니다. 이 물리적인 BRAM 내부에는 1 cycle delay 가 존재하고, modeling code 로 모사되어 있습니다. 그 점을 먼저 아시면 좋겠어요. ==================== 그렇다면 마찬가로 우리가 axi4-lite 의 register 는 flip flop 으로 구성되어있으므로 바로 준비가 되는것이 아닌 1cycle delay 가 있어야 하는 것 아닌가요? 다시 말해 BRAM 의 write, BRAM 의 read 그리고 AXI4-lite read 모두 flip flop 으로 구성 되어있으므로 address 가 들어오면 다음 posedge clk (1cycle delay) 에서 data 를 보내는것 (세가지 각각 we == 1, we ==0, AR HS == 1 인경우) 아닌가요? 이거는 F/F 이 맞습니다. 왜 위에꺼는 BRAM 이고, 이거는 F/F 인지는.. 학교에서 디지털 회로 설계 시간에 배우는 내용이고요. 혹시 처음 들으신다면 디지털 회로 설계 이론 에 대해서 공부를 해보시면 좋을 것 같아요. (해당강의는 8년차 수준을 목표로 해서.. 꼭 알고 계셨으면 좋겠습니다. 디지털 회로의 이론 지식 없이 Verilog 를 설계하는건 회로설계의 10% 도 못하는 거라고 생각해요) 저보다 교수님이 더 잘 가르칠 수 있는 내용이라 강의에서 다루지는 않고요. (알고있다고 가정) Verilog HDL 문법책인데요. (저랑 아무 관련없습니다) 회로설계엔지니어를 위한 입문서로 추천합니다. 1독 하시면 도움이 되실꺼에요. https://search.shopping.naver.com/book/catalog/35307420470?cat_id=50010921&frm=PBOKPRO&query=%EB%94%94%EC%A7%80%ED%84%B8+%EC%84%A4%EA%B3%84&NaPm=ct%3Dlubc8l34%7Cci%3D78522cb67e73874cc34569419b9cb408f1a26d5e%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D7b133f3d4552dd7cac027812d94f25a2c9518c97 따라서 코드 그 자체로 이해하시면 됩니다. 1cycle delay 가 없이 설계 되었다면, 그게 맞는거에요. 확인 부탁드려요 🙂
- 1
- 1
- 35