묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
9강 timing anaylzer 부분에 질문 있습니다.
안녕하세요 삼코치님 9강 timing 분석과 data-path Delay확인하기 강의에서 강의 화면처럼 slack과 delay정보가 나오지 않습니다 사전적으로 강의 그대로 full adder 코드와 simulation 코드 sdc파일을 만들었으며(강의 자료의 코드를 다운로드하였습니다) start버튼도 눌렀습니다. 무엇을 놓쳤는지 잘 모르겠습니다
-
미해결설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
[HDL 35장 AXI-Stream I/F 실습편] sync_fifo 사용 이유
안녕하세요 🙂[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로 설정하신 특별한 이유가 있는지도 궁금합니다!항상 좋은 강의 감사드립니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
always와 assign 문
안녕하세요 🙂[1. 질문 챕터] : 14장 19강 6분쯤[2. 질문 내용] : always 문에서 ff값을 업데이트에만 사용하고 연산은 assign으로 하는데 always 블락 안에서 연산하는건 비효율적이거나 안되는건가요?[3. 시도했던 내용, 그렇게 생각하는 이유] : always @(posedge clk or negedge reset_n) begin if(!reset_n) r_power_2 <= 0; else r_power_2 <= i_value * i_value; end always @(posedge clk or negedge reset_n) begin if(!reset_n) r_power_4 <= 0; else r_power_4 <= r_power_2 * r_power_2; end always @(posedge clk or negedge reset_n) begin if(!reset_n) r_power_8 <= 0; else r_power_8 <= r_power_4 * r_power_4; end 실습코드 같이 보기전에 제가 한번 써보고 맛비님 강의 들으면서 코드 비교하는식으로 듣는중인데 차이가 커서 궁금해서 질문드려요! 지난 강의에서 카운터 만들때는 always block 내부에서 +1 연산을 했어서 이것도 괜찮지 않을까 싶어서 이렇게 코딩했는데 혹시 처리시간이나 딜레이쪽에서 손해를 보나요?================ 다음 내용은 읽어보시고 지우시면 됩니다.=================질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================
-
미해결설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
예외처리 관련 질문
안녕하세요 🙂[1. 질문 챕터] : HDL 34장 [2. 질문 내용] : 안녕하세요! 강의 너무 즐겁게 잘 수강하고 있습니다.강의를 듣던 중 예외처리와 관련하여 궁금증이 생겨서 질문 남기게 되었습니다.강의 내용 중 pos_x + width 가 1920 보다 커질 경우 존재하지 않는 영역에 대한 픽셀 값을 불러오게 되는데, 이렇게 세팅되지 않도록 하드웨어 차원에서 예외처리를 해야하나요?다른 IP를 설계하면서도 생길 수 있는 모든 상황에 대한 예외처리(안정성)을 하드웨어 설계 차원에서 수행해야하는지, 현업에서는 어떻게 해결하는지 궁급합니다!항상 좋은 강의 감사합니다. [3. 시도했던 내용, 그렇게 생각하는 이유] : 이전에 divider 를 설계했던 경험이 있는데, 그때 0으로 나누는 경우에 대한 예외처리를 HW에서 해야하는지, 해당 IP를 사용하는 User가 SW에서 그러한 입력이 생기지 않도록 막아야하는지 의문이 있었는데, 의문을 해결하지 못하였었습니다. 이번 강의를 듣다가 다시 문득 의문이 들어 질문하게 되었습니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
FSM과 CORE logic 분리 설계..?!
안녕하세요! 해당 질문이 적합한지 모르겠지만, 일단 남겨보겠습니다. 궁금한 것fsm_counter_test이라는 하나의 모듈 안에 fsm logic(?)과 core logic(?)(counter)을 같이 설계하셨는데 실제로도 이렇게 core와 fsm을 하나의 모듈 안에서 설계하나요?아니면 fsm_controlle, core_counter 이런식으로 두개의 모듈로 fsm과 core를 설계 후 top 모듈에서 두 모듈을 파생하면서 이어주시나요?!물론 상황마다 다르겠지만, 후자처럼 나누어서 설계하는 경우도 있는지. 있다면 그런 경우가 더 많은지?! 궁금해서 여쭙니다!
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
Latch에 관련한 질문
안녕하세요 🙂[1. 질문 챕터] :4장 내용 / 16장의 7분 50초[2. 질문 내용] : "Latch가 발생하면 안된다" 라는 개념이 잘 이해가 안 됩니다. 엄밀히 말하면 아래 두개가 헷갈립니다.clock base로 동작하는 reg가 특정 값일 때 고정되는 경우e.g. if( r_test[9] == 1 )begin r_test = r_test;endelse r_test = r_test + 1;이 경우 "Latch 된다"고 표현되는 것으로 아는데, 맛비님 강의에서 사용하면 안된다는 것이 이러한 것인지.. 궁금합니다.clock base로 동작하지 않는 reg헷갈리고 궁금해진 이유는 아래와 같습니다.- 7:56의 to prevent latch 구문은 "clock base로 동작하지 않는 reg"가 "특정 값일 때 고정되는 경우" 둘 다 해당하는 것으로 보이기도 했고,- 52~62 줄은 clock base로 동작하지 않기에 (c_state 값의 변화는 clock base기에 clock base라 볼 수 있는 것인지?) 결국 latch 구문인지? 도 궁금합니다.[3. 시도했던 내용, 그렇게 생각하는 이유] : Latch 라는 개념이 "f/f 처럼 clock based가 아닌 경우" 와 "한 값으로 고정되는 경우" 두 개가 있어서 충돌되는 것 같습니다... 다른 질문을 보고 왔는데도 잘 이해가 안가서 질문을 남겨둡니다.늘 감사드리며, 좋은 주말 되십시오.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
Vivado 버전문의드립니다.
안녕하세요 🙂[1. 질문 챕터] : 비바도 설치관련[2. 질문 내용] : 안녕하세요 맛비님타사이트에서 season 0를 먼저듣고 넘어왔습니다.아무래도 시즌0는 최신영상이다보니 24.01버전으로 설치했었는데 여기서는 22.2를 설치해서 여쭤봅니다.삭제 후 22.2를 까는게 편할지 아니면큰 차이가 없어서 24.1을 그냥 써도 좋은지 궁금해서요! 항상 좋은 강의감사드립니다.[3. 시도했던 내용, 그렇게 생각하는 이유] :
-
미해결Verilog FPGA Program 1 (Arty A7-35T)
xilinx 권고와 차이
안녕하세요?xilinx 권고와 다른 코드들이 보이는 것 같습니다.대표적인 예로 reset이 있습니다.active low, async reset -> active high, sync resethttps://docs.amd.com/v/u/en-US/wp272https://docs.amd.com/r/en-US/ug949-vivado-design-methodology이유가 있으실까요?권장이기 때문에 반드시 지키지 않아도 동작에 문제가 없다 일까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
Assign 문의 유/무에 따른 합성 결과 문의
[1. 질문 챕터] : 5장 10:30초[2. 질문 내용] : 다른 분의 질문을 통해, assign 한 의도가 존재함은 알았습니다만, 다른 내용의 질문이 있어 문의 드립니다. assign 을 통해 o_variable과 r_flipflop 을 연결해주었는데, assign의 유/무가 합성 되며 생기는 로직 에 영향 (LUT를 잡아먹는다던가, Timing이 지연된다던가) 을 미치는지 궁금합니다. 현재 듣고있는 수업과는 크게 관련이 없을 수 있는 질문일 수 있어 미리 사과의 말씀을 드립니다.. 혹 이런 내용이 계속 궁금하면 이번에 열려있는 문법 관련 강의를 듣는다면 도움이 될 수 있을지도 문의 드립니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
AXI의 ID의 역할은?
안녕하세요 맛비님 강의를 수강하는 학부생입니다.[1. 질문 챕터] : 21강 16분 쯤[2. 질문 내용] : ID에 대해 헷갈리는 점이 있어서 문의 남김니다.ID에 대해 찾아 보다가 다음과 같은 두 개념이 혼동되는 상황입니다.전자:"한 쌍의 인터'페이스' 상에서, 하나의 마스터가 여러개의 트랜젝션 요청을 보낼 때 ID를 구분하여, 여러 트랜젝션을 구분한다., 즉 하나의 마스터와 슬레이브 쌍이 여러 아이디를 주고 받으면서 트랜젝션을 구분하는 용도이다."후자:"interconnection에서 어떤 방식으로 transaction을 다룰지 알려주는 정보이며, transaction의 souce를 나타내는 용도로 사용된다. 즉 하나의 마스터가 하나의 ID를 가지면서 어느 마스터의 요청이였는지를 구분하는 역할이다."둘 중 어느 내용이 맞는건가요? 맛비님 강의를 보면 후자라고 이해가 됩니다.[3. 시도했던 내용, 그렇게 생각하는 이유] : SoC 현업자들 카톡방, GPT와 제미나이에게 물어본 결과 전자가 맞다고 하고일부 검색 결과와 맛비님 강의에 따르면 후자가 맞는거같아서 헷갈립니다.================== 고생많으십니다. 좋은 강의 만들어주셔서 감사합니다. AXI를 배울곳은 여기뿐이네요
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
Vitis IDE 에러 발생
안녕하세요 🙂[1. 질문 챕터] : 42. [Verilog HDL/FPGA 외전1 - 시계만들기] Chapter 3. FPGA 에 올려서 확인하자!위 강의의 26:46 vitis ide를 실행하는 과정에서 아래와 같은 오류가 발생했습니다. [2. 질문 내용] : 해결방법이 궁금합니다. 혹시 vivado를 처음부터 다시 설치해야할까요..? [3. 시도했던 내용, 그렇게 생각하는 이유] : Vitis_Hls 파일이 있어 vitis는 제대로 설치된거같습니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
28장 강의 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라고 말하는 건지 궁금합니다!
-
미해결설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
37장 Data bit width 질문
안녕하세요 🙂[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) ================ 다음 내용은 읽어보시고 지우시면 됩니다.=================질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.================== 안녕하세요 37강 9:20 부분을 보면 Zybo board의 스펙은 1066MHz 이고 이를 표로 확인했을 때 최고 전송 속도가 8533Mb/s로 나와있습니다. 질문 18533Mb/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
안녕하세요 삼코치님! 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);//I2Cinput CLCK;input SCL;inout SDA; //bidirectional portparameter slaveaddress = 7'b1110010;//Sample registers to send to requesting devicereg[2:0] valuecnt = 3'b011; //Count of bytes to be sent, send read value twice//Synch SCL edge to the CPLD clockreg [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 clockreg [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 stopreg start = 1'b0;always @(negedge SDA)start = SCL; //reg stop = 1'b0;always @(posedge SDA)stop = SCL; ////Set cycle statereg incycle = 1'b0;always @(posedge start or posedge stop)if (start)beginif (incycle == 1'b0)incycle = 1'b1;endelse if (stop)beginif (incycle == 1'b1)incycle = 1'b0;end //Address and incomming data handlingreg[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 sequencebitcount = 0;endelsebegin //bitcount = bitcount + 1; //Get the addressif (bitcount < 8)address[7 - bitcount] = SDA_synched; if (bitcount == 8)beginrw = 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 datareg sdadata = 1'bz;reg [2:0] currvalue = 0;always @(posedge SCL_negedge)//ACK'sif (((bitcount == 8) | ((bitcount == 17) & ~rw)) & (addressmatch))beginsdadata = 1'b0;currvalue = 0;end//Dataelse if ((bitcount >= 9) & (rw) & (addressmatch) & (currvalue < valuecnt))begin//Send Dataif (((bitcount - 9) - (currvalue * 9)) == 8)begin//Release SDA so master can ACK/NAKsdadata = 1'bz;currvalue = currvalue + 1;endelse sdadata = datain[7 - ((bitcount - 9) - (currvalue * 9))]; //Modify this to send actual data, currently echoing incomming data valuecnt timesend//Nothing (cause nothing tastes like fresca)else sdadata = 1'bz; assign SDA = sdadata;endmodule
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
과제3 시뮬레이션 관련 질문
안녕하세요 삼코치님!과제 3 하다가 계속 시뮬레이션 부분에서 tpsram 과 dpsram의 read data부분에서 오류가 생겨서 질문 드립니다. 두 소자 모두 Netlist viewer는 정상적으로 나오는 것을 확인하였고, 삼코치님이 올려주신 tb_tpsram.sv 파일을 이용하여 시뮬레이션을 진행하였는데 계속 문제가 생겨서 어디서 잘못된건지 감이 잡히지 않아 질문드립니다! module tpsram #( parameter DEPTH= 8, parameter WIDTH =32, parameter DEPTH_LOG = $clog2(DEPTH) ) ( input clk, input [WIDTH-1:0] wd, input [DEPTH_LOG -1:0] ra, input [DEPTH_LOG -1:0] wa, input we, input re, output reg [WIDTH-1:0] rd ); reg [WIDTH-1:0] mem[DEPTH-1:0]; initial begin for (int i=0;i<DEPTH;i++) mem[i] = 0; end always @(posedge clk) if (we) mem[wa] <= wd; always @(posedge clk) if (re) rd <= mem[ra]; endmodule module dpsram #( parameter DEPTH = 8, parameter WIDTH = 32, parameter DEPTH_LOG =$clog2(DEPTH) )( input clk, input we_a, input we_b, input [WIDTH-1:0] wd_a, input [WIDTH-1:0] wd_b, input cs_a, input cs_b, input [DEPTH_LOG-1:0] ad_a, input [DEPTH_LOG-1:0] ad_b, output reg [WIDTH-1:0] rd_a, output reg [WIDTH-1:0] rd_b ); reg [WIDTH-1:0] mem[DEPTH-1:0]; initial begin for (int i=0; i<DEPTH; i++) mem[i] =0; end always @(posedge clk) if(cs_a & we_a) mem[ad_a] <= wd_a; else if (cs_a) rd_a <= mem[ad_a]; always @(posedge clk) if(cs_b & we_b) mem[ad_b] <= wd_b; else if (cs_b) rd_b <= mem[ad_b]; endmodule 혹시 어디서 제가 실수를 한 걸 까요??
-
해결됨디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기
과제 기본 코드 위치 질문입니다
[과제3]을 진행하려 하는데 기본으로 주어진다는 기본 코드를 어디서 받을 수 있는지 모르겠습니다.교안, 네이버 카페, 카카오톡 오픈채팅방, 인프런 강의 내를 찾아봤는데 찾질 못해 질문 남깁니다. 답변 기다리겠습니다!
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
HLS를 통한 BRAM 코드 자동 생성
안녕하세요, 맛비님!현재 BRAM을 직접 생성하고, 데이터를 쓰고 읽은 뒤, 일치 여부를 확인하는 실습을 진행 중입니다.맛비님께서는 HLS를 통해 BRAM을 자동 생성하셨다고 하셨는데요, HLS 사용법을 아직 잘 모르는 상태에서는 Verilog로 직접 코딩해서 모듈을 설계하는 것이 일반적인 접근일까요?아니면 HLS를 빠르게 익혀서 활용하는 것이 더 효율적일지 조언 부탁드립니다! ++ AI 인턴이 알려준https://inf.run/wERhr해당 질문 통해서 도움 받았습니다! ㅎ
-
미해결설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
AI HW 11장 관련 질문드립니다.
안녕하세요 실전 AI HW 강의 11 장 보고 있는데 해당 장 강의에서 의문이 드는 점이 있어 질문드립니다. 6분 25초쯤에 Depthwise Separable Convolution은 Feature Map의 크기와는 상관없다. 그래서 Input과 Output Feature Map Size는 적지 않았다고 말씀하셨습니다. Input과 Ouput Feature Map의 크기는 동일하다는 '가정'이기 때문에 이와 같은 말씀을 하신건가요? 만약 동일하다면 Depthwise Convolution에 의해 Output Feature Map은 감소해야할 것 같은데 왜 동일해야하는지 의문이 들어 질문드립니다.감사합니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
vivado 안에서 코드 변경 후 파형 확인
안녕하세요 🙂강의 잘 수강하고 있습니다.강의영상과는 다른 simulation관련 질문드리려고 합니다. vivado 프로그램안에서 코드를 바꾸고 파형을 확인하는 방법은 없을까요?코드를 바꿀 때마다 나갔다가 코드 바꾸고 다시 build 실행시키고...번거로운 것 같아서요 가능하다면 testbench와 module 2개 다 수정할 수 있는 방법이 있으면 알려주시면 감사드리겠습니다!!!건강하세요!
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
퀴즈 4 cnt f/f 변수 출력값 관련 질문
안녕하세요 🙂[1. 질문 챕터] : fpga 외전 1 시계만들기 Chapter 1 2분 9초 퀴즈 4번 부분[2. 질문 내용]cnt flipflop의 변수 출력값이 1억 - 1이라고 하셨는데, 1억이 아닌지 여쭤보고 싶습니다. 보여주신 코드 상에서는 cnt f/f 변수의 출력값이 1억 -1임을 시뮬레이션에서 어떻게 확인하는 것인지 잘 모르겠어서, 아래와 이 d_flipflop 모듈을 추가한 회로도를 사용하여 시뮬레이션을 돌려보았습니다. 그 결과 flip flop의 output 값이 1억이 나타났는데 확인해주시면 정말 감사하겠습니다 [3. 시도했던 내용, 그렇게 생각하는 이유]처음 enable이 켜졌을 때 combinational logic에 의해 d_flipflop의 input 값이 1이 되고, rising edge일 때 해당 값이 저장되므로 첫번째 사이클부터 cnt f/f 변수의 출력값이 1로 나타난다고 생각했습니다. 따라서 1초가 지난 이후에도 출력값이 1억이 될 것이라고 생각했습니다. 해당 회로도를 기반으로 시뮬레이션을 돌려본 결과 입니다. (편의상 100사이클만 수행하였습니다.) 100 사이클 이후 d_flipflop의 outpu이 100으로 나타나므로 퀴즈 4번의 결과 또한 1억이 나올 것 같은데, 1억 -1이 나타나는 이유가 무엇인지 궁금합니다. +) posedge에 enable이 켜지는 상황에서는 posedge 시간에 f/f에 stable한 값이 전달되지 않으므로 첫 사이클에서의 output value가 0임을 확인했습니다. 최종적으로 cnt f/f의 출력값은 99였습니다. 그러나 이때에는 최종적인 cnt 변수 값 또한 99로 나타나므로 만약 퀴즈 4의 가정 상황이 posedge에서 enable이 켜지는 상황이라면 Q3과 Q4의 답 모두 1억 -1이 되어야 할 것 같습니다. 아래는 사용한 코드입니다. 혹시라도 시뮬레이션에서 잘못된 부분이 있다면 알려주시면 감사하겠습니다. // tb_quiz.v `timescale 1ns/1ps module tb_quiz(); reg clk; reg reset_n; reg enable; wire [31:0] cnt; initial begin clk <= 0; reset_n <= 1; enable <= 0; #50 reset_n <= 0; #10 reset_n <= 1; #50 enable <= 1; #1000 $finish; end always #5 clk = ~clk; quiz DUT ( .clk (clk), .reset_n (reset_n), .enable (enable), .o_cnt (cnt) ); endmodule // quiz.v `timescale 1ns/1ps module quiz(input clk, input reset_n, input enable, output [31:0] o_cnt); wire [31:0] current_cnt; reg [31:0] next_cnt; always @(*) begin if (enable) begin next_cnt <= current_cnt + 1; end else begin next_cnt <= current_cnt; end end assign o_cnt = current_cnt; d_flipflop u_d_flipflop( .clk (clk), .reset_n (reset_n), .i_value (next_cnt), .o_value (current_cnt) ); endmodule `timescale 1ns/1ps module d_flipflop (input clk, input reset_n, input [31:0] i_value, output [31:0] o_value); reg [31:0] r_value; assign o_value = r_value; always @(posedge clk or negedge reset_n) begin if (!reset_n) begin r_value <= 0; end else begin r_value <= i_value; end end endmodule