안녕하세요 맛비님 🙂 정말 하나부터 열까지 많이 배우고 있습니다 ! 맛비님께서 공사가 다망하시고 강의 방향성과 좀 다른 것 같아 답변을 바란다기보단 bug의심 report라고 봐주시면 감사하겠습니다. 늘 많이 배우고 있습니다 *^^* [1. 질문 챕터] : HDL 39장(WMDA) [2. 질문 내용] : 맛비님 코드를 이용하며 이것 저것 바꿔보고 실험도 해보고 있는데요. 실험 중 write_timeout error가 report 되었습니다. 해당 Test case를 dump해보니 다음과 같은 issue가 있었는데요. (아래 그림 참고 부탁 드립니다.) 문제 상황: r_burst_len_aw가 1인 경우 아직 fifo를 거치지 않아 AWLEN_w의 값이 업데이트 되지 않았는데 그 기간 동안 w_hs가 발생하여 is_burst_done_w가 1'b1로 toggle되지 않고 이에 last b chanel transaction이 일어나지 않음.
안녕하세요! 해당 모듈에 대한 테스트벤치 코드를 system verilog 코드로 구현하셨는데 특별히 이유가 있는지 여쭤보고 싶습니다! .v 로 테스트벤치 만들고 싶은데, 다른 수업때처럼 tb_모듈명.v 만들어서 vivado 시뮬레이션 돌려도 무관한지 궁금합니다. 제가 오랜만에 해당 부분(axi4 stream)을 다시 듣는 중입니다. 혹시 이전 수업들에서 설명하셨던 내용이라면 죄송합니다..
안녕하세요 🙂 안녕하세요, 맛비님 강의 잘 듣고 AXI 프로토콜 실습 중인 대학원생입니다. 현재 Xilinx AXI VIP를 사용해 DUT(Master)를 검증하고 있는데, WREADY 신호가 시스템 클록(ap_clk)과 맞지 않게 토글되는 현상을 관찰했습니다. 현상 요약: AXI VIP 환경에서 슬레이브 측 WREADY 신호 생성을 RANDOM 모드를 사용하고 있습니다. " rgen.set_ready_policy(XIL_AXI_READY_GEN_RANDOM);" 이 설정을 사용하자, VIP가 생성하는 m00_axi_wready 신호가 저희 DUT의 시스템 클럭(ap_clk)과 동기화되지 않은 상태로 토글되는 것을 확인했습니다. 즉, WREADY가 클럭 엣지에 맞지 않게 변경되면서, 의도치 않은 시점에 WVALID && WREADY 조건이 만족되어 w_hs (write handshake)가 발생하게 됩니다. 결과적으로 클록 엣지 기준으로는 WREADY = 0이어야 하는데, δ‑사이클(글리치) 동안 1로 인식되는 문제가 생깁니다. 질문: 위와 같은 상황에서 2가지 질문이 있는데요, 1. PS(혹은 PL)의 DRAM 데이터를 AXI를 통해 PL영역(제가 설계한 DMA)으로 전송할 때, 위와 같은 WREADY 글리치가 FPGA 상 혹은 실제 ASIC 칩을 찍는다고 했을 때 실제로 발생하는 현상인가요? 2. 현업에서는 이러한 경우가 발생한 경우에 어떻게 해결하는지 궁금합니다. (AXI4 protocol 사용 혹은 일반적인 signal) (추가로 좀 찾아보니 synchronizer를 사용해 latch한다고 하는데 AXI4 protocol에는 적합하지 않다고 판단됩니다.)
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
rtl viewer를 열면 mux모양 로직 (dout ~0 부터 dout ~ 31이라고 쓰여있음) 이게 책처럼 겹쳐야 하는데 죄다 병렬 회로로 늘어져서 엄청 공간 차지를 많이 합니다. 코드 문제는 아닌 것 같은데 어떻게 해야하나요? rtl viewer에서 netlist navigator 수정이 안되나요? netlist navigator를 보면 always0과 dout~0부터 dout~31까지가 동시에 logic이라는 폴더에 들어 있습니다. 그래서 벡터를 책처럼 못 묶는 것 같습니다.
안녕하세요 🙂 [1. 질문 챕터] : 4강 1:47분쯤 [2. 질문 내용] : 다이어그램이 잘 이해가 되지 않습니다. 좌측이 master가 되는거고 우측이 slave가 되는건가요? 근데 왜 s_valid는 좌측에서 나오고 m_valid는 우측으로 들어가는건가요? [3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.================= 질문 내용을 작성해주실 때, 위의 3단계 로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!! 현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ) 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요) 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ==================
안녕하세요 맛비님, 항상 좋은 강의 감사드립니다. AXI를 혼자 공부하기 정말 어려웠는데, 강의가 많은 도움이 되고 있어 앞으로도 더 advance 강의가 기다려지네요! [1. 질문 챕터] : HDL 38장-2부 에서 다루는 "matbi_rdma.v" (Line: 417~435)에서도 특히 다음 fifo에 관해서 질문이 있습니다. matbi_sync_fifo # ( .FIFO_IN_REG (0), .FIFO_OUT_REG (0), .FIFO_CMD_LENGTH(NUM_ARLEN_BIT), .FIFO_DEPTH (NUM_AXI_AR_MOR_REQ), .FIFO_LOG2_DEPTH(LOG_NUM_AXI_AR_MOR_REQ) ) u_matbi_sync_fifo ( .clk (ap_clk), .reset (ap_rst), .s_valid (ar_hs), .s_ready (ar_fifo_full_n), .s_data (r_burst_len_ar), .m_valid (ar_fifo_empty_n), .m_ready (fifo_read_r), .m_data (ARLEN_r) ); [2. 배경 설명] : 위 fifo는 MOR을 위해 AR channel과 R channel 사이에 둔 sync_fifo로써 transaction된 AR payload마다 fifo에 burst_len을 적어두고, 그 내용을 R 채널에서 RLAST마다 읽어가는 것으로 이해하였습니다. 그런데 코드를 자세히 보다 보니 fifo에서 pop해 가는 데이터인 " ARLEN_r " 가 코드 어디에서도 사용되지 않는 것을 확인하였습니다. 따라서 현재 코드 상으로는, ARLEN_r 라는 값이 유의미에게 사용되기 보다는, fifo에 적힌 데이터를 단순히 여러번 읽어서, fifo_empty이 되어 R 채널에게 더이상 issue된 transaction이 없다고 알려주는 꼴인거 같습니다. 또한, 이전 비슷한 질문에 대한 답변을 찾아보니 코드 상 불필요한 로직이 남아있어서 그런거 같다라고 답변해주셨습니다. [3. 질문 내용] : 혹시 ARLEN_r 가 따로 코드 내에서 사용되지 않는 이유가 있나요? 만약 여러 불필요한 기능을 지우기다 보니, ARLEN_r 가 redundant하게 남아있게 된 것이라면 혹시 원래는 ARLEN_r 가 어떤 기능을 위해 존재했던 것인지 궁금합니다. 아무래도 강의의 내용이 회차를 거듭할 수록 어려워지다보니, 이러한 점에 대해서도 궁금증이 생기는 것 같습니다. 다시 한번 좋은 강의에 감사드리며, 감사의 마음으로 질문 올립니다. 고맙습니다.
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
안녕하세요 삼코치님 9강 timing 분석과 data-path Delay확인하기 강의에서 강의 화면처럼 slack과 delay정보가 나오지 않습니다 사전적으로 강의 그대로 full adder 코드와 simulation 코드 sdc파일을 만들었으며(강의 자료의 코드를 다운로드하였습니다) start버튼도 눌렀습니다. 무엇을 놓쳤는지 잘 모르겠습니다
안녕하세요 🙂 [HDL 35장 AXI-Stream I/F 실습편] 내용 중 sync_fifo 사용의 이유에 대해서 궁금하여 질문 드립니다. 제 짧은 생각으로는 현재 matbi_gradation.v 에서 sync_fifo를 없애고, 바로 AXI-stream output port로 연결해도 동일하게 동작할거라고 생각하였습니다. 그럼에도 지금은 fifio가 depth 4로 선언이 되어 있습니다. [질문 1] 혹시 sync_fifo를 굳이 중간에 두는 이유가 무엇인지 궁금합니다. [질문 2] 현업에서 저런 식으로 output을 내보내기 전에 sync_fifo를 보통 두는 것이 일반적이기 때문이라서 그런 것인지, 맛비님의 의도가 궁금합니다..!! [질문 3] 또한 만약 sync_fifo를 두는 것이 일반적이라고 하더라도, 그러면 fifo depth를 1 혹은 2로 두어도 충분할거 같은데, 4로 설정하신 특별한 이유가 있는지도 궁금합니다! 항상 좋은 강의 감사드립니다.
안녕하세요 🙂 [1. 질문 챕터] : HDL 34장 [2. 질문 내용] : 안녕하세요! 강의 너무 즐겁게 잘 수강하고 있습니다. 강의를 듣던 중 예외처리와 관련하여 궁금증이 생겨서 질문 남기게 되었습니다. 강의 내용 중 pos_x + width 가 1920 보다 커질 경우 존재하지 않는 영역에 대한 픽셀 값을 불러오게 되는데, 이렇게 세팅되지 않도록 하드웨어 차원에서 예외처리를 해야하나요? 다른 IP를 설계하면서도 생길 수 있는 모든 상황에 대한 예외처리(안정성)을 하드웨어 설계 차원에서 수행해야하는지, 현업에서는 어떻게 해결하는지 궁급합니다! 항상 좋은 강의 감사합니다. [3. 시도했던 내용, 그렇게 생각하는 이유] : 이전에 divider 를 설계했던 경험이 있는데, 그때 0으로 나누는 경우에 대한 예외처리를 HW에서 해야하는지, 해당 IP를 사용하는 User가 SW에서 그러한 입력이 생기지 않도록 막아야하는지 의문이 있었는데, 의문을 해결하지 못하였었습니다. 이번 강의를 듣다가 다시 문득 의문이 들어 질문하게 되었습니다.
안녕하세요 맛비님 강의를 수강하는 학부생입니다. [1. 질문 챕터] : 21강 16분 쯤 [2. 질문 내용] : ID에 대해 헷갈리는 점이 있어서 문의 남김니다. ID에 대해 찾아 보다가 다음과 같은 두 개념이 혼동 되는 상황입니다. 전자: "한 쌍의 인터'페이스' 상에서, 하나의 마스터가 여러개의 트랜젝션 요청을 보낼 때 ID를 구분하여, 여러 트랜젝션을 구분한다., 즉 하나의 마스터와 슬레이브 쌍이 여러 아이디를 주고 받으면서 트랜젝션을 구분하는 용도이다." 후자: "interconnection에서 어떤 방식으로 transaction을 다룰지 알려주는 정보이며, transaction의 souce를 나타내는 용도로 사용된다. 즉 하나의 마스터가 하나의 ID를 가지면서 어느 마스터의 요청이였는지를 구분하는 역할이다." 둘 중 어느 내용이 맞는건가요? 맛비님 강의를 보면 후자라고 이해가 됩니다. [3. 시도했던 내용, 그렇게 생각하는 이유] : SoC 현업자들 카톡방, GPT와 제미나이에게 물어본 결과 전자가 맞다고 하고 일부 검색 결과와 맛비님 강의에 따르면 후자가 맞는거같아서 헷갈립니다. ================== 고생많으십니다. 좋은 강의 만들어주셔서 감사합니다. AXI를 배울곳은 여기뿐이네요
안녕하세요 🙂 [1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요. [2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂 [3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.================= 질문 내용을 작성해주실 때, 위의 3단계 로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!! 현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ) 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요) 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ================== 안녕하세요, 28장 강의 AXI interface 이론편을 듣고 궁금한 점이 AXI standard가 full AXI interface를 말하는 건가요 아니면 AXI Lite와 stream을 포함한 것을 full AXI라고 말하는 건지 궁금합니다!
안녕하세요 🙂 [1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요. [2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂 [3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.================= 질문 내용을 작성해주실 때, 위의 3단계 로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!! 현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ) 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요) 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ================== 안녕하세요 37강 9:20 부분을 보면 Zybo board의 스펙은 1066MHz 이고 이를 표로 확인했을 때 최고 전송 속도가 8533Mb/s로 나와있습니다. 질문 1 8533Mb/s 라는게 메가비트 / s를 의미하는 건가요? 정보를 찾아보니까 8633MB/s 로 메가 바이트 단위라고 나와있었습니다. 질문 1.1 만약 메가 비트 단위가 맞다면 말씀해주신것 거처럼 바이트 단위로 바꾸어 1066MBps 가 나오고 이는 Ideal BW와 비교했을 때 한 사이클 당 한 바이트씩 가져올 수 있는 정도로 비교가 된다고 생각하면 될까요? 질문 2 - 만약 메가 바이트 단위가 맞다면? 이거를 바이트로 환산하면 대략 1066.625MB/s 라고 설명해주시고 있고 한 사이클 당 한 바이트씩 가저올 수 가 있구나라고 예상 된다고 설명해주셨습니다. 이 뜻은 데이터가 총 8바이트 기준일 때 8533 이기 때문에 8로 나누어서 1바이트 당 약 1066MB/s가 되고 이는 약 1GB/s 가 된다는 뜻일까요?
디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
안녕하세요 삼코치님! I2C SLAVE 코드에서 질문이 있습니다. 1. 데이터를 송수신 하는 아래 코드에는 시스템 클럭에 동기화된 SCL와 SDA를 사용했는데, Start와 Stop 조건 감지에는 SDA와 SCL 신호를 그대로 사용한 이유를 모르겠습니다. 또한 동기화하는 이유에 대해서도 명확히 모르겠습니다. 2.데이터를 송수신하는 코드에서는 I2C 수신하는 부분은 Posedge를 사용하고, 마스터로 송신하는 부분은 Negedge를 사용했는데, 따로 이유가 있는지 궁금합니다. 3.always 블럭 내부에서 blocking assignment를 사용했는데, 시스템 클럭과 동기화된 SCL을 클럭으로 사용한다면 Non-blocking으로 사용해야 하는 것 아닌가요? 한 번에 많이 여쭤봐서 죄송합니다. 강의 잘 듣고 있습니다. 감사합니다! --------------------코드------------------------ module I2C_SLAVE(CLCK, SCL, SDA); //I2C input CLCK; input SCL; inout SDA; //bidirectional port parameter slaveaddress = 7'b1110010; //Sample registers to send to requesting device reg[2:0] valuecnt = 3'b011; //Count of bytes to be sent, send read value twice //Synch SCL edge to the CPLD clock reg [2:0] SCLSynch = 3'b000; always @(posedge CLCK) SCLSynch <= {SCLSynch[1:0], SCL}; wire SCL_posedge = (SCLSynch[2:1] == 2'b01); wire SCL_negedge = (SCLSynch[2:1] == 2'b10); //Synch SDA to the CPLD clock reg [2:0] SDASynch = 3'b000; always @(posedge CLCK) SDASynch <= {SDASynch[1:0], SDA}; wire SDA_synched = SDASynch[0] & SDASynch[1] & SDASynch[2]; //Detect start and stop reg start = 1'b0; always @(negedge SDA) start = SCL; // reg stop = 1'b0; always @(posedge SDA) stop = SCL; // //Set cycle state reg incycle = 1'b0; always @(posedge start or posedge stop) if (start) begin if (incycle == 1'b0) incycle = 1'b1; end else if (stop) begin if (incycle == 1'b1) incycle = 1'b0; end //Address and incomming data handling reg[7:0] bitcount = 0; reg[6:0] address = 7'b0000000; reg[7:0] datain = 8'b00000000; reg rw = 1'b0; reg addressmatch = 1'b0; always @(posedge SCL_posedge or negedge incycle) if (~incycle) begin //Reset the bit counter at the end of a sequence bitcount = 0; end else begin // bitcount = bitcount + 1; //Get the address if (bitcount < 8) address[7 - bitcount] = SDA_synched; if (bitcount == 8) begin rw = SDA_synched; addressmatch = (slaveaddress == address) ? 1'b1 : 1'b0; end if ((bitcount > 9) & (~rw)) datain[17 - bitcount] = SDA_synched; end //ACK's and out going data reg sdadata = 1'bz; reg [2:0] currvalue = 0; always @(posedge SCL_negedge) //ACK's if (((bitcount == 8) | ((bitcount == 17) & ~rw)) & (addressmatch)) begin sdadata = 1'b0; currvalue = 0; end //Data else if ((bitcount >= 9) & (rw) & (addressmatch) & (currvalue < valuecnt)) begin //Send Data if (((bitcount - 9) - (currvalue * 9)) == 8) begin //Release SDA so master can ACK/NAK sdadata = 1'bz; currvalue = currvalue + 1; end else sdadata = datain[7 - ((bitcount - 9) - (currvalue * 9))]; //Modify this to send actual data, currently echoing incomming data valuecnt times end //Nothing (cause nothing tastes like fresca) else sdadata = 1'bz; assign SDA = sdadata; endmodule
안녕하세요 맛비님! 통신 모뎀 회사에 재직중입니다. 블록 디자인 작업(이건 노력, 시간 투자로 실력이 늘거라고 생각하는 중입니다..), AXI 버스, SPI, I2C, Ethernet, UART 를 사용해야 하는 상황이어서 verilog 시즌1, FPGA 시즌1 에 이어서 verilog 시즌2를 듣고 있습니다! 해당 강의 이후에는 fpga 강의에서 추천해주신 워크숍 내용을 공부할 예정입니다. 맛비님 강의에서는 AXI 버스를 사용하는 방법을 배우고 있고 추가로 SPI, I2C, UART, Ethernet 을 사용할 줄 아는 능력을 갖추기 위해서 Xilinx 사 워크숍 내용으로 커버가 될지 궁금합니다! 추가로 추천하시는 공부방법이 있는지 알려주시면 감사하겠습니다 ㅎ