안녕하세요. 설계독학의 맛비입니다.
현) Global Top5 Fabless기업에서 HW IP 설계하고 있습니다.
세상에 없던 그리고 여러분들의 현업 생활에 도움이 되는, 반도체 설계 실무 강의를 만들고 있습니다.
설계독학과 함께할 수 있는 링크입니다. 함께 즐공하고 성장해요!
講義
受講レビュー
- 設計独学味比の本番 Verilog HDL Season 2 (AMBA AXI4 完全征服)
- 設計独学味比の本番 Verilog HDL Season 2 (AMBA AXI4 完全征服)
- 設計独学맛비's 実戦 Verilog HDL Season 1 (クロックから内部メモリまで)
- 設計独学味比の実戦FPGAを用いたHWアクセラレータ設計(LED制御からFully Connected Layerアクセラレータ設計まで)
- 設計独学味比の実戦FPGAを用いたHWアクセラレータ設計(LED制御からFully Connected Layerアクセラレータ設計まで)
投稿
Q&A
테스트 벤치 이슈
안녕하세요!먼저 툴 버전으로 인해서 시뮬레이션이 틀어지는 경우는.. 정말 극히 드물기 때문에,코드를 의심해보라고 하고 싶어요.그리고.. 굉장히 어려운? 질문인데요. (크로스..? 로 해본적은 저도 없기 때문에)이럴때는 diff 를 해보시는 것을 추천드립니다.15장, 16장의 TB 코드와 mover 코드의 diff 를 해보시겠어요?거기서 답을 찾으셨으면 좋겠네요.즐공하세요!
- 1
- 2
- 20
Q&A
Vitis 관련
안녕하세요 🙂버전이 다르다고 해서, 제가 드린 실습 코드가 변경될 일은 (거의..?!) 없다고 생각을 하고요.다만 버전의 차이로 인한 GUI 의 부분에 있어서는 따라오시는데 불편함이 있으실 것 같아요.버전이 지식을 쌓는데 장애물이 되면 안되기에..처음 해보시기 때문에 불편하신 부분이 있다면, 버전을 완벽하게 맞춰서 시작하시는 것을 추천드립니다.https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html(사진)
- 1
- 2
- 22
Q&A
[HDL 38장: RDMA 코드 실습편] MOR fifo에서 "ARLEN_r" 존재의 이유가 궁금합니다
안녕하세요 🙂예제코드 작성시 "일반화 룰" 을 적용해서 하다보니 남아있는 코드로 생각이 들고요.사용하지 않은 상태에서 동작을 잘 하고 있으니 (즉, 불필요하니) 삭제하셔도 무방해 보입니다.즐공하세요!
- 1
- 2
- 24
Q&A
[HDL 35장 AXI-Stream I/F 실습편] sync_fifo 사용 이유
안녕하세요 🙂sync fifo 를 중간에 두는 이유는 data 의 latency 을 보완하고 pipeline 을 유지하기 위함입니다.그렇다면 왜 4 냐?이 질문의 답은 예제 코드에서는 충분히 4로 준거고요. 알고계신대로 depth 값이 1 혹은 2가 충분하다면 그렇게 변경하셔도 되겠습니다. 모든 상황에서 고정으로 숫자를 가져가지는 않아서, 설계자의 생각이 반영된 자유도가 높은 값 선택이라고 생각하시면 되겠습니다.실제 현업에서도 이런 fifo 의 depth 를 정하는 과정이 존재해요. 초반에 확정지어서 가지는 않습니다.즐공하세요!
- 1
- 1
- 19
Q&A
bram read 주소 설정
안녕하세요 🙂12장 33분 41초 쯤 근방을 봤는데, 질문을 정확하게 이해를 못해서요."read 주소 초기화" 가 어떤것을 말씀하시는 건지 설명해주실 수 있을까요?그걸 알면 "read 주소는 어떻게 초기화 & 선택 하나요?" 의 답을 드릴 수 있을 것 같아요.그림도 같이 주시면 최선을 다해서 이해해보겠습니다.즐공하세요!
- 1
- 2
- 20
Q&A
FSM과 CORE logic 분리 설계..?!
안녕하세요 🙂코딩 스타일의 질문으로 이해했는데요.제가 겪은 경험으로는 회사마다, 그리고 개인마다 FSM 로직을 어떻게 가져가는지 다르더라고요.가독성을 따라가고 싶고요. 나누는 기준은 현업에 가셔서 선배분께 여쭤보시거나, 기존의 코드를 보시면 더 정확할 것 같습니다.저는 어떤 스타일을 추천하는가로 답변을 이어가면 될 것 같아요.간단한 거라면, 하나의 모듈내에 fsm 과 연산을 같이 두고 싶어요. (counter 예제)복잡하다면, 나눠주시는 것도 좋겠습니다.현업에 rule 이 있다면, 그 룰을 따라가시는 것이 가장 좋겠죠..?! (가장 좋은 답)즐공하세요!
- 1
- 2
- 40
Q&A
always와 assign 문
안녕하세요 🙂AI 답변이 답을 잘 달아줬는데요.핵심은, coding style 은 다르지만, timing 까지 고려한 function 결과가 정확하게 일치한다면, 합성기에서는 같은 HW 를 만들어낼 가능성이 높습니다.따라서 코딩 스타일의 변경으로 HW 효율 측면이 변경되느냐의 저의 답은 no 입니다. (정말 완벽하게 timing + function 동일해야함)코딩 스타일에 따른 효율 비효율을 논할 수 있는 가장 확실한 방법은 합성을 통한 schematic 을 뽑아보는 방법도 좋을 것 같아요. (이게 가장 옳은 답일 것 같네요)현재 제작중인 강의 내용을 보시면, schematic 을 뽑는 과정이 있고요.참고하셔서, 코딩 스타일을 바꿔보시면 되겠습니다. 변경 전, 후가 동일한 schematic 이 나오면 "영향이 없다" 로 이해하시면 되겠습니다.영상 : https://www.youtube.com/watch?v=dgi8cD8eb3E&t=20s실습자료 : https://github.com/semisgdh/SGDH-Design-interview-question/tree/main/Practical_interview_answer/LEVEL_0/L0_P1_Basic_Gate즐공하세요!
- 1
- 2
- 33
Q&A
예외처리 관련 질문
안녕하세요 🙂여러가지 방법이 있을 것 같은데요.검증 차원에서는 assertion 이 발생할 수 있도록 추가를 하면 좋을 것 같고요.Driver 단에서는 말씀해주신대로, SW 의 입력을 막는 방법도 있고요. 그럴려면.. 문서에 잘 적혀있어야하는데, 이런방법은 IP 설계하는 입장에서는 추천드리지는 않아요. HW 설계 입장에서 overflow 의 처리 방법을 별도로 규정해서 구현하면 될 것 같아요.예를들어서 overflow 발생시clipping (max 값으로 치환)0 으로 순환. 등등 이 있을 것 같아요.즐공하세요!
- 1
- 2
- 31
Q&A
Latch에 관련한 질문
안녕하세요 🙂Latch 개념에서 혼란스러울 수 있는 지점들을 하나 씩 정리해 드릴게요.1. "Latch가 발생하면 안된다"는 말의 의미디지털 설계에서 latch는 조합 논리 안에서 조건문(if, case 등)을 사용할 때 모든 경우를 완전히 명시하지 않으면 암묵적으로 생기는 비동기 기억소자입니다.즉, clock이 없는 상태에서 특정 조건이 충족되지 않을 때 값을 유지하려는 구조가 되면, synthesis 도구가 "아 이거 값을 유지해야 하니까 latch로 만들자"라고 판단하게 됩니다. 그래서 의도치 않게 latch가 생성되는 것이 문제입니다.2. 질문 예제 분석if( r_test[9] == 1 ) begin r_test = r_test;endelse begin r_test = r_test + 1;end 이 구조는 clock block 안이라면, r_test = r_test;는 아무 의미 없는 self-assignment입니다.그런데 이 구조가 combinational block (always @(*)) 안에 들어가 있다면,r_test[9] == 1 조건이 거짓일 때만 값이 갱신되고, 참일 때는 값을 유지하게 되므로 synthesis tool은 이를 latch로 처리하게 됩니다.즉, clock에 기반하지 않은 reg가 값을 유지하려고 하면 latch가 생깁니다.3. clock 기반 reg가 특정 값일 때 고정되는 경우는 latch인가?아닙니다.예를 들어 다음과 같은 구조는 clock 기반 flip-flop입니다.always @(posedge clk) begin if (r_test[9] == 1) r_test else r_test end 이건 r_test 라고 해도 latch가 아닙니다.항상 clock에 반응해서 동작하고 있으므로 latch로 synthesis 되지 않습니다.다만 이런 코드가 실질적으로는 아무 일도 안 하므로 불필요한 코드이며, 혼동을 줄 수 있으니 피하는 것이 좋습니다. 써도 문제가 되지는 않아요.4. 결론적으로 latch가 발생하는 경우는?always @(*) 같은 combinational 블록에서if나 case로 모든 조건을 명시하지 않고, 특정 조건에서 값을 유지하려는 경우synthesis tool이 그걸 latch로 판단하고 생성함5. 질문에서 말한 52~62줄은 latch인가요?질문 주신 16장 예제 기준으로 보면:만약 해당 라인이 always @(posedge clk) 내부라면 latch 아님하지만 always @(*) 내부에서 어떤 조건에서 c_state 값을 유지하려는 구조라면 latch 발생 가능성 있음핵심은 블록이 clock 기반인지 여부 + 모든 조건을 다 명시했는지 여부입니다.질문처럼 latch라는 단어가 "비동기 메모리 소자"와 "값 유지하려는 상태"를 혼용해서 쓰이다 보니 헷갈릴 수 있어요.하지만 디지털 설계에서는 '의도치 않은 비동기 기억소자(latch)가 합성되는 걸 방지하자'는 게 핵심입니다. 즐공하세요 🙂
- 1
- 2
- 34
Q&A
Vivado 버전문의드립니다.
안녕하세요 🙂설계독학 커뮤니티에 올려주셨었군요! 그래도 답변은 해야하니까, 그대로 복붙할께요. 즐공하세요!빌드 스크립트는 2022 ~ 현재 전부 정상동작 합니다. 따라서 재설치 안하셔도 될 것 같아요 🙂
- 1
- 2
- 40