묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
테스트벤치에 대해서 질문 하나 해도 될까요??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 이번에 테스트벤치 작성하면서 궁금한 것이 있어서 질문드립니다. 먼저 i_run신호를 강사님께서 작성하신대로 이렇게 작성하고 시뮬레이션을 돌리면 다음과 같이 나옵니다. 근데 위의 코드를 이렇게 바꾸면 이렇게 나옵니다. 저 두개의 코드는 같은 의미가 아니였나요? 왜 이렇게 나오는지 궁금합니다. 또, 두개의 테스트 벤치중에서 어떤게 맞는 건지 궁금합니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
질문이용~
testbench에서 if의 조건문에서 !== 의 연산자를 사용해주셨는데 !== 보통 잘 사용하지 않는 걸로 권장하는 걸로 알고 있습니다! 왜 굳이 != 말고 !==을 사용하셨는지 궁금합니다!
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
HW 가속기의 비밀인 Pipeline 을 이해해보자 (실습편)에서 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아직 베릴로그 구문에 익숙하지 않아 질문드립니다. @는 ~할때라는 의미로 받아드리고 있는데 다음 구문을 보면, 10 기다리고, 상승엣지일때 디스플레이를 띄운뒤 for문이 동작하기 시작하는데, for문이 시작하고 하강엣지 일때마다 i_valid, i_value값을 넣어준뒤 for문이 끝나고 다시 하강엣지에서 i_valid와i_value의 값을 0으로 해준다... 라는 뜻으로 받으드렸습니다. 중간에 @(posedge clk)은 무슨의미로 들어간 건가요..? 값을 하강엣지마다 넣어주는건데 이 구문이 필요가 있나요 ? 제가 이해한 대로 클럭 그림을 그려봤는데 이게 제대로 이해한게 맞는 건가요 ?? ================ 하강 엣지일때는 i_valid와 i_value에 값을 넣고 밑의 상승엣지일때는 i를 i+1로 바꾸는 용도인가요 ??
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
always @(*) 문장 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 먼저 좋은 강의 정말 감사합니다. always @(*) 문장 관련해서 질문을 많이 받으셔서 스트레스 받으실 듯 하여 관련 답변이나 링크들 읽어 보았습니다. 제가 이해한 바로는 다음과 같은데 혹시 잘못 이해한 부분이 있는지 여쭤보고 싶습니다. - always @ 안에 기술되는 Type은 전부 reg여야 한다. (port는 예외) - always @(*)는 모든 입력이 포함된 것을 의미하므로 입력이 변경될 때 마다 항상 변경되는 것이기 때문에 모듈이 순차가 아닌 조합회로를 기술할 때 유용하다. - always @(*)은 Combinational Logic이고 reg Type을 선언하게 된다. - 하지만 reg라고 해서 전부 F/F인 것은 아니다. Always의 level sensitive로 사용하느냐(combinational Logic), Clock Edge Sensitive로 사용하느냐(Sequential Loigic)에 따라서 갈린다. - reg로 선언했다고 해서 전부 메모리가(Latch나 F/F) 되는 것은 아니지만 문법을 정확하게 지키지 않는다면 메모리가 되어 조합회로의 시그널 처리를 애매하게 만들 수 있으므로 유의하자. 조합회로를 설계하는데 Latch나 F/F의 형태로 합성되면 회로에 큰 문제가 생길 수 있다. VHDL을 2년전에 배우고 Verilog를 시작하게 되어 아직 지식이 많이 부족하다 보니 이런 질문 드리게 되었습니다. 감사합니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
진짜진짜 마지막 부분에서 오류 발생
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 해야되는 모든 것들을 다 따라하고 이제 설레는 마음으로 Vivado & 를 쳤는데 실행은 안되고 오류가 발생했습니다 ㅠㅠㅠㅠ
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
FPGA 실습 파일 다운로드가 안되네요..
수업 자료 txt파일은 정상적으로 다운로드가 되는데 실습파일은 다운로드를 눌러도 아무 반응이 없네요. 혹시 몰라서 OneDrive 재설치도 해보고 모바일 다운로드도 시도해봤지만 똑같았습니다. 제가 전에 다운로드를 한 번 받긴했는데 그때가 8월쯤이었고 새로운 파일들 추가된 것들이 좀 있길래 다시 받으려고 했거든요. 이게 한번만 다운로드 가능하게 막아놓으셨을 것 같진 않은데 이 부분 확인 한 번 부탁드려도 될까요?
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
r_valid 관련 질문드립니다. (14장 Pipeline)
열심히 달았는데, 지우셔서 남겨둡니다 :) 안녕하세요. 제공 해 주신 power_of_8.v에서 r_value 신호를 이용하여 뭔가 체크하는 것이 없는 것 같습니다. 그럼 power_of_8 module의 output인 o_valid 신호를 다른 module에서 input으로 받아 o_power_of_8 신호의 데이터가 valid한지를 판단하기 위해서 사용하는 것인가요? ================================= 안녕하세요 :) r_value ? 라는 신호가 있었나요..? (검색하니까 없는데, r_valid 를 의미하는 거다 생각하고 답변드리겠습니다.) 현재 예제에서는, Throughtput 이 1 cycle 에 매번 Data 가 출력되도록 pipeline 되어 있습니다. 즉 input valid 의 파형을, output valid 가 그대로 따라가도록 되어 있다는 이야기 이고, r_valid 를 사용하지 않아도 ouput valid 에 맞춰서 Data 를 출력할 수 있는 모듈이 되겠습니다. 다만 o_power_of_8 신호가 유효한 시점의 Sync 를 맞춰줄 필요는 있습니다. 그래서 r_valid 를 사용했습니다. 추가로 더 적자면, ========================= 실제로 해당 모듈의 앞뒤로 Blackbox 모듈이 붙는다면, "Ready / Valid handshake" (이거는 FPGA 6,7,8 장? AXI 할때 나오는데) I/F 를 사용합니다. 이때는 r_valid 를 사용해서 설계할 것 같습니다. 질문과는 관련이 없을 수 있지만 handshake 를 사용하는 이유에 대해 적어드리자면, Blackbox 모듈은 말그대로 설계자가 알지 못하는 모듈이 설계모듈 앞 뒤에 사용되는 겁니다. 그 말은 언제 Data 를 주고 받을 수 있는지 모르구요. 이 모호성을 해소하기 위해서 handshake I/F 를 사용합니다. 구글링해서 공부해보세요. ========================= 그럼 power_of_8 module의 output인 o_valid 신호를 다른 module에서 input으로 받아 o_power_of_8 신호의 데이터가 valid한지를 판단하기 위해서 사용하는 것인가요? 네, power_of_8 모듈의 출력을 입력으로 사용하는 뒤의 모듈에게, 유효한(valid) Data 의 timing (시점) 을 알려주기 위해서 사용합니다. 즐공하세요 :)
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
cnt_always 체크 관련 문의
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 코드를 보던 중 궁금증이 하나 생겨서 질문드립니다. counter_100.v 코드에서 43 라인의 cnt_always가 99인지를 체크하는 부분에서 "100 - 1"로 99를 만든 특별한 이유가 있을까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
카운터 코드 질문 드립니다!
안녕하세요 강의 복습중에 의문이 생겨 질문드립니다. 강의에서 카운터를 설계할 때 reg [6:0] cnt를 선언하여 값을 받은 후 o_cnt에 할당을 해주는데 그냥 바로 o_cnt를 always문에 넣어서 값을 받으면 안되나요? 다른 이유가 있는것인지 궁금합니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
장치 관리자에서 시리얼 포트를 인식하지 않습니다.
안녕하세요 맛비님. 지금 실습했던 것을 복습하면서 제가 만든 모듈들을 AXI4_Lite를 사용해보는 중입니다. 한달 전만 해도 zybo-z7-20 과 노트북을 연결하면 장치 관리자의 포트에 COM4 라고 잘 떳었는데, 사진에 보이듯이 포트가 뜨질 않습니다 이전이랑 달라진 점은 노트북에 HDMI 로 모니터랑 연결하고 USB 허브로 연결했다는 점인데 이게 문제인가 싶어 다 빼고 다시 연결해 보았습니다만 그래도 COM4가 뜨질 않네요 드라이버 문제일 수도 있다고 해서 검색해서 깔아 봤는데 인식을 하지 않네요 혹시 어떻게 해결해야 할지 알려주실수 있으실까요? +++ 더 찾아 보니 인식은 하는데 COM4 이런식으로 뜨지 않고 범용 직렬 버스 컨트롤러 단에서 인식을 하고 있는것 같습니다. FPGA 연결선을 뺏다가 꼽았다 하면 USB Serial Converterr A/B 가 ON/OFF 되는것을 보아하니 인식을 저기서 하고 있는것 같은데 어떻게 해결해야 할까요??
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
read data의 1cycle delay에 대해 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 때, 아래 코드가 1cycle delay를 위한 코드라고 말씀하셨는데요. (B RAM의 Read data가 올라오는 타이밍이 1cycle 뒤이므로 해당 타이밍을 위해 1cycle delay가 필요하다는 점은 이해했습니다.) 왜 아래 코드가 1cycle delay가 되는지 이해를 못했습니다. ㅠㅠ 죄송하지만 설명부탁드립니다. // 1 cycle latency to sync mem output always @(posedge clk or negedge reset_n) begin if(!reset_n) begin r_valid <= 0; end else begin r_valid <= o_read; // read data end end assign o_valid = r_valid; assign o_mem_data = q0; // direct assign, bus Matbi recommends you to add a register for timing.
-
해결됨설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
SW 파트 질문드립니다.
안녕하세요 맛비님. 강의 매우 잘 보고 있습니다. 이번 강의 내용에서 lab10_main.c 코드를 분석해보다가 질문드릴께 있어 글을 작성하게 되었습니다. usleep 체크를 한 뒤 FSM을 돌리기 위해 i_run 신호를 발생시키기 전에 IDLE state를 체크하시는 부분을 확인해보고 있었는데요. do{ read_data = Xil_In32((XPAR_LAB10_MATBI_0_BASEADDR) + (STATUS_REG*AXI_DATA_BYTE)); } while( (read_data & IDLE) != IDLE); 이 부분을 아래와 같이 수정해서 어떤 값을 읽고 있는지 확인해보았습니다. do{ read_data = Xil_In32((XPAR_LAB10_MATBI_0_BASEADDR) + (STATUS_REG*AXI_DATA_BYTE)); printf("current state is %d\n",read_data); } while( (read_data & IDLE) != IDLE); 출력되는 값이 5였습니다. 이 말은 IDLE과 DONE이 모두 active high라는 상태 같아서 제가 제대로 이해한게 맞는지 궁금합니다. 연계해서 한가지 더 궁금한점은 do while문이 iteration 하는 횟수가 PL에서 동작하는 클럭과는 무관하게 돌아가는거 같은데요. 이 부분은 DONE 신호를 기다리는 파트에서 마찬가지로 printf 넣어서 갯수를 한번 세어봤거든요. data로 1M을 입력 했으면 do while문도 1M 번 반복할 줄 알았는데 훨씬 많은 횟수의 iteration을 도는 것으로 보이는데요. 이 부분은 PS와 관련이 있는 걸까요? 너무 기초적인걸 질문드리는건 아닌지 조심스럽지만... 용기내어 질문드려봅니다. 감사합니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
맛비님 강의PDF나 PPT자료는 혹시 구할 수 있나요?
안녕하세요 FPGA 강의를 수강하고 있는 초보 FPGA엔지니어입니다. 혹시 강의영상에서 사용된 PPT나 PDF자료를 제가 받을 수 있을까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
gcc 설치 과정 오류
안녕하세요 맛비님 영상과 가이드를 보면서 리눅스 환경을 설치중에 있습니다. 영상에서 13분 경 vivado bin 파일을 옮기고 나서 gcc 설치 커맨드를 입력했는데 첨부 사진과 같이 에러가 나오는 상황입니다. 이 경우에는 어떻게 해결을 하면 좋을 지 질문드립니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
always문을 나누는 기준이 궁금합니다
always문을 사용하실 때 어떤 기준으로 always문을 나누시는지 궁금합니다. 가령 예를 들면 올려주신 chapter_11에 있는 count 코드를 보면 always 문 2개를 사용해서 모듈을 구성하셨고 그밖에 강의를 보면 다양하게 always문을 나누시는데 같은 동작을 하는 모듈을 always문 하나로 만들 수 있을텐데 나누시는 기준이 어떤건지 궁금합니다. 그리고 작성한 verilog 코드의 가독성을 높히기 위한 팁이나 관련 추천 서적이나 참고 자료가 있으실까요! 제가 이 부분에 대해서 부족한게 많아서 알려주신다면 앞으로 설계를 할 때 도움이 많이 될 것 같습니다. 감사합니다.
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
level sensitive @에 대한 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 맛비님 안녕하세요. 질문 있습니다. Verilog 문법적인 부분은 왠만하면 따로 서칭하여 공부하고 있는데 오늘 실습 내용을 보니, @(posedge clk); 와 @(negedge clk);를 따로 사용하더라구요. 항상 always @() 이런 것만 봐와서 @가 always의 조건으로만 사용되는 줄로만 이해하고 있었습니다. 서칭을 해보니까 level sensitive라고하여 @ 뒤 괄호 안에 있는 신호가 변할 때 실행?된다고 나오더군요. 여기서 질문이 생깁니다. 1. 아래의 내용은 tb_power_of_8.v 내 49번째 줄부터 61번째 줄입니다. # 10 @(posedge clk); $display("Start! [%d]", $time); for(i=0; i<100; i = i+1) begin @(negedge clk); i_valid = 1; i_value = i; @(posedge clk); end @(negedge clk); i_valid = 0; i_value = 0; # 100 10ns 딜레이 후 @(posedge clk);이 나오는데 이걸 해석하면 clk의 rising edge가 발생되기 전까지 polling하는 것인가요? 2. 따로 Verilog HDL의 문법적인 스킬이라고 해야할까요? 뭔가 많은 모듈을 디자인을 하려면 문법적인 내용을 알고 있으면 유리할 것 같은데, 이런 것을 따로 공부하고 싶다면 전 강의에 추천해주신 책으로 공부하는 것이 좋을까요? 그런데 저는 책으로 공부하는 것보다 문제를 풀면서(모듈 설계) 공부를 하고 싶다는 생각이 더 드는데, 이를 보충해줄만한 참고 자료 같은 것이 있을까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
simple bram ctrl 질문입니다 !
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님! 맛비선생님의 BRAM Ctrl 설계를 학습하였는데 아래 맛비님의 코드 n_state = c_state를 case문 안에 default 문으로 넣었는데 시뮬레이션이 동작하지 않았습니다. 혹시 이유를 간략히 알 수 있을까요? always @(*) beginn_state = c_state;case (c_state)S_IDLE : if(i_run) n_state = S_WRITE;S_WRITE : if(is_write_done) n_state = S_READ; S_READ : if(is_read_done) n_state = S_DONE; S_DONE : n_state = S_IDLE;endcaseend
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
vaild신호 Concatenation문법 질문이요
Conacatenation 에서 비트를 묶는다는게 (reset) r_vaild=0,0,0, i_vaild=0 (posedge clk) r_vaild[1:0]=0,0 + i_vaild=1 -> r_vaild=[0,0,1] o_vaild=r_vaild[2]=0 (posedge clk) r_vaild[1:0]=0,1 + i_vaild=1 -> r_vaild=[0,1,1] o_vaild=r_vaild[2]=0 (posedge clk) r_vaild[1:0]=1,1 + i_vaild=1 -> r_vaild=[1,1,1] o_vaild=r_vaild[2]=1 . . . 요런 연산을 하는건가요..?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
source ./tools/Xilinx/에서 막혔습니다..
source ./tools/Xilinx/를 치면 계속 bash라고 나오고 동영상처럼 나오지 않습니다...
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
pipeline 관련 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. https://drive.google.com/file/d/1bg2zOcgteYXHaAhuwsGsy7zQtwcDCiea/view?usp=sharing 안녕하세요 맛비님. pipe line 복습하다가 pipeline을 사용하지 않으면 clk의 1cycle이 아닌 3cycle 마다 결과값이 한번씩 출력이 되어야하는 것으로 알고 있습니다. flip flop을 단순히 제거하여서 결과값을 도출하였는데 아마 test bench의 @(posedge clk) 마다 i_value 값을 1씩 증가시키는 문법 때문인지 1cycle 마다 결과값이 도출되었습니다. 파이프라인이 test bench의 for 루프 문에 적용된 것인지 DUT의 flip flop에 의해 적용된건지 궁금합니다! - 아니면 dalay를 주기위해 flip flop을 사용하는 것인가요?