Posts
Q&A
FSM과 CORE logic 분리 설계..?!
안녕하세요 🙂코딩 스타일의 질문으로 이해했는데요.제가 겪은 경험으로는 회사마다, 그리고 개인마다 FSM 로직을 어떻게 가져가는지 다르더라고요.가독성을 따라가고 싶고요. 나누는 기준은 현업에 가셔서 선배분께 여쭤보시거나, 기존의 코드를 보시면 더 정확할 것 같습니다.저는 어떤 스타일을 추천하는가로 답변을 이어가면 될 것 같아요.간단한 거라면, 하나의 모듈내에 fsm 과 연산을 같이 두고 싶어요. (counter 예제)복잡하다면, 나눠주시는 것도 좋겠습니다.현업에 rule 이 있다면, 그 룰을 따라가시는 것이 가장 좋겠죠..?! (가장 좋은 답)즐공하세요!
- 1
- 2
- 21
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
- 20
Q&A
예외처리 관련 질문
안녕하세요 🙂여러가지 방법이 있을 것 같은데요.검증 차원에서는 assertion 이 발생할 수 있도록 추가를 하면 좋을 것 같고요.Driver 단에서는 말씀해주신대로, SW 의 입력을 막는 방법도 있고요. 그럴려면.. 문서에 잘 적혀있어야하는데, 이런방법은 IP 설계하는 입장에서는 추천드리지는 않아요. HW 설계 입장에서 overflow 의 처리 방법을 별도로 규정해서 구현하면 될 것 같아요.예를들어서 overflow 발생시clipping (max 값으로 치환)0 으로 순환. 등등 이 있을 것 같아요.즐공하세요!
- 1
- 2
- 14
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
- 22
Q&A
Vivado 버전문의드립니다.
안녕하세요 🙂설계독학 커뮤니티에 올려주셨었군요! 그래도 답변은 해야하니까, 그대로 복붙할께요. 즐공하세요!빌드 스크립트는 2022 ~ 현재 전부 정상동작 합니다. 따라서 재설치 안하셔도 될 것 같아요 🙂
- 1
- 2
- 29
Q&A
Assign 문의 유/무에 따른 합성 결과 문의
안녕하세요 🙂 질문 주셔서 감사합니다.질문하신 내용을 요약하면,assign o_variable = r_flipflop;이와 같은 continuous assignment가 합성 시 리소스 사용이나 Timing에 영향을 주는지에 대한 궁금증으로 이해했습니다.결론부터 말씀드리면, assign 문 자체는 논리적으로 와이어 연결 역할만 수행하기 때문에,합성 결과에서 별도의 로직 (LUT 등)을 추가로 소비하지 않습니다.즉, assign o_variable = r_flipflop;은그냥 o_variable이 r_flipflop의 다른 이름(alias)처럼 동작하는 것이고,결국엔 둘이 같은 넷(net)에 연결되는 것입니다.다만 assign 문에서 다음 상황이면 합성결과에 영향이 발생할 수 있습니다.이 assign이 복잡한 조합 논리를 포함한다면 (예: assign o = a & b | c;)→ 이때는 당연히 해당 조합 논리에 따라 LUT나 delay가 생깁니다.o_variable이 다른 always 블록에서 또 assign되는 경우→ 의도치 않은 multiple driver 문제로 합성 오류 혹은 경고가 납니다.o_variable이 top-level port라면assign으로 연결할지, 직접 always 블록에서 assign할지에 따라클럭 도메인 처리, FPGA I/O constraint 등에 영향을 줄 수 있습니다. 순수한 assign? 은 합성기에서 영향이 없을 것으로 기대하고 있어요.당연히.. 설계독학의 Verilog 문법강의를 추천하고요. (learning time 이.. 40 시간.. 이라 좀 길어요. 제대로 다루느라..) https://zero-base.co.kr/pages/66840?_token=test_token&(사진) 설계하신 로직의 schematic 을 같이 확인해보는 과정도 포함되어 있으니, 많은 도움 되시리라 자부합니다. 즐공하세요!
- 1
- 2
- 31
Q&A
Hw 가속기의 총 연산 속도
안녕하세요 🙂정확하게 파악하셨습니다.System 에서 한 부분이라도 performance drop 이 생기는 부분이 발생한다면, 전체 system 의 속도는 bottleneck 부분에 align 됩니다. (느린쪽으로 속도가 맞춰짐)따라서 core 연산 속도만 빠르다고 될 것이 아니라 data 를 core 에 전달해주는 속도도 중요합니다.AI 강의는 Core 연산에 초점을 맞춘 강의이고요.Verilog HDL S2 (AMBA AXI 강의) 는 Data 를 어떻게 빠르게 전달할 것인가에 초점을 맞춘 강의입니다.이 두 부분이 해소 되어야, 원하는 performance 를 갖추실 수 있을꺼에요.공부하시는 내용의 난이도는 현업 4~8년차를 타겟으로 만들었습니다. 그만큼 어렵지만 배우실 수 있는 내용이 많을꺼에요.즐공하세요 🙂
- 1
- 2
- 27
Q&A
AXI의 ID의 역할은?
안녕하세요. 🙂우선 결론부터 말씀드리면, 질문에서 언급하신 두 설명은 모두 AXI ID에 대한 일부 상황을 잘 설명하고 있지만, 전자 쪽 설명이 AXI 프로토콜의 본질에 더 가깝습니다.AXI에서 ID는 기본적으로 트랜잭션을 구분하기 위한 목적으로 설계된 신호입니다. 하나의 마스터가 동시에 여러 트랜잭션을 발행할 수 있는데, 이때 각 트랜잭션에 서로 다른 ID를 부여해 두고, 나중에 응답을 받을 때 해당 ID로 어떤 요청에 대한 응답인지 구분합니다. 즉, 하나의 마스터가 여러 개의 outstanding transaction을 날릴 수 있게 해주는 메커니즘입니다. 이게 AXI ID의 핵심적인 용도입니다.후자의 설명처럼 ID를 마스터별로 고정해서 사용하는 경우도 분명 존재합니다. 특히 interconnect 구조에서 어떤 요청이 어떤 마스터로부터 왔는지 구분해야 할 필요가 있을 때, ID 신호를 고정해서 사용하는 방식이 현실 시스템에서 종종 사용됩니다. 다만 이건 AXI 프로토콜의 기본 정의라기보다는 시스템 설계자가 ID를 어떻게 활용하느냐에 따라 달라지는 부분입니다.강의에서는 상대적으로 단순한 구조를 기반으로 설명을 드리다 보니, ID를 마스터 식별자처럼 고정해서 사용하는 흐름으로 보였을 수도 있을 것 같습니다. 하지만 좀 더 복잡한 SoC나 멀티스레드 마스터 환경에서는 하나의 마스터가 여러 ID를 사용해 다양한 트랜잭션을 동시에 처리하는 구조로 동작합니다.따라서 정리하면, AXI ID는 기본적으로 트랜잭션 단위로 동작하며, 시스템 설계에 따라 마스터 식별 목적으로도 활용될 수 있습니다. 따라서 전자의 개념이 우선이고, 후자는 실무에서의 활용 방식 중 하나라고 이해하시면 될 것 같습니다.즐공하세요!
- 1
- 2
- 34
Q&A
Vitis IDE 에러 발생
안녕하세요 🙂현재 vivado 에서 vitis 실행을 하시려다가 에러가 발생하는 것으로 이해를 했습니다.저의 경우에는, "Vitis" 라는 폴더가 별도로 존재하고요. (HLS 는 다른겁니다.) (사진)tool 이 미설치여서 발생하시는 에러 같아요.참고로 FPGA 는 드라이버 이슈로 Windows 에서 진행하였습니다.리눅스에서 정상 동작 확인은 드라이버 이슈를 해결하셔야 가능할 것 같아요.즐공하세요 🙂
- 1
- 2
- 37
Q&A
USB 케이블
안녕하세요 🙂AI 인턴이 답을 잘 달아주었는데요.다음 링크 참고하시면 될 것 같아요.https://inf.run/zEZAY즐공하세요!
- 1
- 2
- 26