묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
BRAM read에 관하여
안녕하세요 맛비님BRAM의 데이터를 Read할 때 Testbench에서 address를 1씩 증가시켜서 읽어보면 address와 read data가 동클락에 나오는 걸 방지하기 위해 r_valid로 1 cycle delay 시켜주는 것으로 이해했습니다. 하지만 주소를 생성하는 모듈 ((ex) address를 0부터 15까지 1씩 증가하면서 BRAM에 address를 보내주는 모듈) 과 BRAM을 연결해 Testbench에서 address를 1씩 증가시키지 않고 알아서 address를 BRAM으로 보내주어 시뮬레이션을 돌려보니,r_valid가 존재하지 않아도 read할 때 자동으로 1 cycle delay 미뤄줍니다. 이 이유를 혹시 아실까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
설치파일 실행시 오류
강의시간 14:49로 넘어가는 과정에서 문제가 생겼는데 어떻게 해결해야할지 모르겠습니다에러 내용은 다음과 같습니다ERROR: Installer could not be started. Could not initialize class java.awt.Graph icsEnvironment$LocalGEjava.lang.NoClassDefFoundError: Could not initialize class java.awt.GraphicsEnvi ronment$LocalGE
-
해결됨설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
Bit Width 설정 관련해서 질문합니다.!
Unisigned Value의 곱셈에 대한 Bit Extension을 통해 16 Bit , 이 값을 32번 누적하게 되면 Overflow를 방지하기 위해 47비트가 필요한 것이 아닌가요? 24비트로 설정된 이유를 여쭤보고 싶습니다!
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
FSM은 밀리머신인가 무어머신인가
안녕하세요 맛비님.다음과 같은 코드를 보면always문 안에는 *(asterisk) 로 combination circuit 즉, clock에 의존하지 않습니다.제가 알기로 무어(MOORE) 머신은 output이 현재 state 에만 의존한다. 클럭 엣지에 의해서만 output이 바뀐다.로 이해하였고,밀리(MEALY) 머신은 output이 현재 state와 input에 의존한다. 클럭의 한 사이클을 기다리지 않고 같은 사이클에서 입력을 바로 출력에 반영한다. 라고 알고 있습니다.그럼 위 코드는 clock에 의존하지않고,1. 현재 상태 = S_IDLE 일 때 현재 입력이 i_run=1이면 clock에 관계없이 바로 output, 즉 다음 상태가 S_RUN으로 되고,2.현재 상태 = S_RUN 일 때 현재 입력이 is_done=1이면 clock에 관계없이 바로 output, 즉 다음 상태가 S_DONE으로 되고,3.현재 상태 = S_DONE일 때 현재 입력에 상관없지만 clock에 관계없이 바로 output, 즉 다음 상태가 S_IDLE로 됩니다.c_state는 clock에 의존하여 변하지만,"밀리(MEALY) 머신은 output이 현재 state와 input에 의존한다. 클럭의 한 사이클을 기다리지 않고 같은 사이클에서 입력을 바로 출력에 반영한다. 라고 알고 있습니다." 에서n_state는 같은 사이클에서 입력을 바로 출력에 반영한다. 라고 보이므로, MEALY 머신이 아닌가요?인터넷에서는 FSM이 MOORE 머신이라고 나와서 질문드립니다!
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
bram 주소 접근
안녕하세요올려주신 bram 가이드를 보고 generate address interface with 32bits를 체크하고 single port ram을 ip로 생성해서 사용해봤어요 사용해보니 주소가 0~3, 4~7 이렇게는 같은 주소로 덮어 씌워지더라고요 그래서 주소를 4씩 늘려줘서 데이터를 쓰고 읽어봣더니 정상 동작 하더라고요 주소가 왜 4씩 늘려줘서 데이터를 써줘야하는지에 대해서 찾아보는데 잘 안찾아져서요 그 이유에 대해서 설명을 좀 듣고 싶어요 아니면 또 관련된 가이드가 있을까요
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
RTL 연습문제, 예제?
안녕하세요 강의 잘 듣고 있습니다.verilog는 c, 파이썬 처럼 막 연습문제 같은것들이 아무래도 인터넷 상에 잘 알려져 있지 가 않아서 어려움이 있습니다.논리회로설계 수업 때 mips architecture alu를 약식으로 만들었었는데 이런 RTL 연습문제? 예제? 프로젝트? 같은것들을 풀어보고 설계해보고 싶은데 어디서 찾을 수 있는지 혹시 알려주시면 감사하겠습니다
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
case문 우선순위
안녕하세요다른 분께 남겨주신 if-else문과 case문의 차이에 대한 답변을 봤는데, case문은 우선순위가 없다는 말에 대해 혼란이 생겨 질문 남깁니다.기존에 verilog를 학습했을때, verilog의 case문은 C의 switch case문과는 다르게 각각의 조건에 break가 있는 것과 같다. 그래서 맨 위 조건부터 우선순위가 있다고 알고있었는데요.예를 들어 아래의 모듈의 시뮬레이션 결과로 sel=4'b0011인 경우에 out=a가 나옵니다. 따라서, case문에서 맨 위 조건부터 우선순위가 있다고 생각했습니다.module priorityencoder( input [2:0] a, input [2:0] b, input [2:0] c, input [2:0] d, input [3:0] sel, output reg [2:0] out ); always@(*) begin case(1'b1) sel[0] : out = a; sel[1] : out = b; sel[2] : out = c; sel[3] : out = d; default : out = 3'b0; endcase end endcase end endmodule그런데, 남겨주신 답변에 case문에는 우선순위가 없다고 하셔서 조금 혼란이 생겼는데..말씀하신 'case문에 우선순위가 없다'는 말은, 코드상의(=function상의 ) 우선순위를 말하는 것이 아닌합성에서 생기는 우선순위(?)가 없다는 말로 생각하면 될까요?(위의 예시 모듈을 합성하면 아래 그림처럼, if-else로 적으면 mux chain형태로 합성되고 case로 적으면 하나의 mux로 합성됨을 확인하긴했습니다..)그러면 이렇게 case문이 합성된 회로(위 그림의 아래의 회로)는 그럼.. function적으로는 우선순위가 있는데 형태는 우선순위가 없는(??)것.. 인건가요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
질문입니다
안녕하세요 맛비님의 코드 습관?을 보면 매번 reg 데이터를 assign으로 할당하여 wire로 데이터를 내보내는데요(즉, output) 저는 공부할 때 데이터를 내보낼땐 reg 데이터로 내보내는 것이 좋다고 알고 있습니다. 물론 reg 데이터를 바로 assign문에 할달이 되서 로직이 생긴다거나 그러진 않을 것 같지만 (제 눈엔 assign으로 코에서에 o_cnt로 내보내나 cnt로 내보내나 차이가 없다고 보입니다) 어떤 코드 스타일에 습관을 들이는게 좋을지 궁금하여 질문드립니다.(저의 경우는 cnt를 바로 내보내는 스타일입니다) 좀 질문이 횡설수설한거 같아 질문이 이해가 안된다면 제가 다시 질문하겠습니다. 감사합니다
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
bit extension
추가 설명에서 bit extension이 어떤 의미인지 정확히 이해를 못하겠어요. (4bit signed) 1101 이라고 있다면 8bit로 확장한다면 10000101 이렇게 확장을 한다는 걸까요?? 위는 단순히 제가 8bit로 확장한다고 했을때 생각한것입니다. 정확히 0으로 bit extension과 msb bit extension을 이해하지 못하겠어요
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
빌드 에러
- 강의 내용외의 개인 질문은 받지 않아요. (개인 과제, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..)- 저 포함, 다른 수강생 분들이 함께보는 공간입니다. 보기좋게 남겨주시면 좋은 QnA 문화가 될 것 같아요. (글쓰기는 현업에서 중요한 능력입니다!)- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 제가 직접 작성한 테스트벤치를 빌드하려는데 에러가 뜹니다. 어떻게 해야 할까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
reg 이해확인? 질문입니다!
"조합논리에서 wire선언과 reg선언 시의 시뮬레이션 차이는 없다"가 결론이지만 학부생때는 reg를 거의 임시저장용으로 사용하였어서 딜레이 차이가 있을것이라고 생각했습니다. (컴파일 및 rtl 변환 시 왠지 차이가 생길 것 같다...!라는 생각으로 말이죠)하지만 아래 링크를 참고해보니 결국에는 이 저장은 설명하신대로 물리적 저장이 아니라 Verilog의 SW적 저장이고 실제는 wire와 같게 구현된다로 이해했는데 이 개념이 맞는지 궁금합니다..! * 참고한 링크입니다!https://stackoverflow.com/questions/33459048/what-is-the-difference-between-reg-and-wire-in-a-verilog-module * 5:54경에 나오는 문서와 비슷한 링크입니다. 혹여나 찾으시려는 수강생분들을 위해 올려봅니다 :)https://inst.eecs.berkeley.edu/~cs150/Documents/Nets.pdf
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
설치 질문입니다
- 강의 내용외의 개인 질문은 받지 않아요 (개별 과제, 고민 상담 등..)- 저 포함, 다른 수강생 분들이 함께보는 공간입니다. 보기좋게 남겨주시면 좋은 QnA 문화가 될 것 같아요. (글쓰기는 현업에서 중요한 능력입니다!)- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 거의 다 온 거 같아서 오히려 마음이 급해지네요 ㅎㅎ.. ./Xilinx_Unified_2020.2_1118_1232_Lin64.bin -- -a 3rdPartyEULA,WebTalkTerms,XilinxEULA -b Install -c /root/.Xilinx/install_config.txt 이 명령만 입력하면 끝나는 거 같은데 자꾸 에러가 발생하네요 sudo apt install gcc 로 gcc를 설치하는 과정에서 gcc 보다는 command 모드로 설치하는게 좋다고 하셔서 gcc모드는 설치중에 오류발생해서 그냥 넘어갔습니다. 이후 에는 영상이랑 가이드북 따라가면서 설치를 하고 있는데 마지막 명령어에서 에러가 발생해서 설치를 못하네요.. 어떻게 하면 좋을까요..?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
홈페이지에서 vivado 설치 과정입니다
- 강의 내용외의 개인 질문은 받지 않아요 (개별 과제, 고민 상담 등..)- 저 포함, 다른 수강생 분들이 함께보는 공간입니다. 보기좋게 남겨주시면 좋은 QnA 문화가 될 것 같아요. (글쓰기는 현업에서 중요한 능력입니다!)- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Please correct the errors and send your information again. We cannot fulfill your request as your account has failed export compliance verification. If this verification is in error, please e-mail account.help@amd.com for help. 주소입력은 다 했는데 자꾸 이런 오류가 발생해서 더 진행할 수가 없습니다. 어떤 부분을 더 추가 해 달라는 건지 정말 모르겠습니다..
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
d_ff_test.v에 관한 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 맛비님. 강의 잘 듣고 있는 학생인데 질문이 생겨 글을 남기게 되었습니다. module d_ff_test( input clk , input sync_reset , input async_reset , input async_reset_n , input i_value , output o_value_sync_reset , output o_value_async_reset , output o_value_async_reset_n , output o_value_mixed_reset , output o_value_no_reset ); D Flip-flop과 reset 실습에서 이렇게 output을 정의하고 또 reg인 r_ff_sync_reset, 등등을 사용합니다. 제가 이해하기로는 always 구문을 사용하려면 reg가 필요하고 wire로 정의된 output에 연결하기 위해 assign구문을 사용한 것 같습니다. 그렇다면 제가 의문이 생기는 부분은 새로운 r_ff_sync_reset을 생성하는 대신 output인 o_value_sync_reset을 reg로 선언하여 always 구문을 사용하고 assign과정을 없애면 되는게 아닌가? 하는 질문이 생겨서 여쭤보게 되었습니다. DUT의 output은 wire나 reg 둘다 사용해도 상관없다고 알고 있어서요. 혹시 제가 알고 있는 부분 중 틀린 부분이 있다면 알려주시면 감사하겠습니다 :)
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
FSM 설계 방법에 관해 질문드립니다.
안녕하세요, 맛비님. FSM의 설계 방법 관련하여 질문이 있습니다. FSM 관련 코드 실습이나 verilog 교재에서 FSM을 설계할 때, 항상 조합회로와 순차회로로 나누어서 설계하는 것을 볼 수 있었습니다. 이 때 조합회로에 해당하는 로직은 always@(*)로 설계하고, state를 바꾸는 순차회로는 always@(clk)을 이용하더라고요. 여기서 질문이 하나 있습니다. 조합회로에 해당하는 로직도 always@(clk) 구문안에 포함시켜서 설계하지 않는 이유가 따로 있나요? 순차회로는 non-blocking assign을 사용하라고 강조하신 이유와 관련이 있을까요? 감사합니다. 김민호 드림
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
모듈과 always블록의 관계(?)에 대한 질문입니다.
안녕하세요, 맛비님. 강의 영상을 통해 항상 많은 배움을 얻는 중입니다. 감사합니다. 파이프라인 실습편 강의의 Q&A를 읽다가 질문이 하나 생겼습니다. 해당 질문의 답변중에 모듈간의 handshake를 통해 timing을 맞춘다고 답변을 해주신 게 있습니다. 모듈간에 handshake가 필요한 건 이해하였습니다. 제가 궁금한 건, 만약 모듈들을 한 모듈안의 always(clk) 구문으로 구현한다면, always 구문간에 통신할 때도 handshake가 필요한 지 궁금합니다. 제 생각에는 한 모듈안에 여러 always(clk) 구문으로 구현하더라도 각 alway 블록이 하나의 모듈과 같다고 생각이 들긴 합니다. 질문을 정리하면 다음과 같습니다. 1. 모듈들을 한 모듈안의 always 구문으로 보통 구현하지 않는 것 같은데, 가독성을 위한 이유 말고 다른 이유가 있는지 2. 한 모듈 안의 여러 always 구문 v.s. always 블록마다 모듈로 구현 -> 차이점이 무엇인지 기존에 질문이 있을 것 같아서 찾아봤는데 없는 것 같아서 질문드립니다 ㅠ 아직 많이 헷갈리네요 ㅠ 읽어주셔서 감사합니다. 김민호 드림
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 맛비님! BRAM에 관해서 질문하고 싶은 것이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 맛비님. 너무 유익한 강의 감사드립니다. 저가 이번 강의를 복습하면서 궁금한 점이 있는데요. 맛비님 블로그를 봤을 때 BRAM을 IP catalog에서 불러와서 쓰셨는데 강의에서는 직접 설계하셨습니다. IP에서 BRAM을 불러온 것과 직접 BRAM을 설계하는 차이가 뭔지 궁금합니다. 또 실제 설계함에 있어서 어느 방법을 더 많이 쓰는지 궁금합니다.
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
MEM_SIZE 관련 질문
안녕하세요. 맛비님. default MEM_SIZE가 3840인 이유가 있나요? 갑자기 궁금증이 드는데 보통 메모리는 2의 몇승 되는 값?으로 정의되지 않나 싶어서요.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
if 문과 case 문의 차이점에 관해 문의 드립니다.
fsm_test.v의 64행 Step 3 의 always block 에서 o_done 을 1로 셋하는 부분에 궁금한 점이 있습니다. 아래와 같이 if ..else 문을 사용해도 되는 것 같은데 case문을 사용한 것과 타이밍이나 사이즈 면에서 합성 결과가 차이가 나는지 궁금합니다. 시뮬레이션 결과는 같이 보여서요.. if (c_state == S_DONE) o_done <= 1; else o_done <= 0; if 문과 case문을 선택하는 것은 단지 설계자의 취향 차이 일까요?
-
해결됨설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
fsm 에서 next state 계산하는 always 블록 관련 질문 드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 맛비님. 먼저 글씨가 흐려서 죄송합니다.. 어떻게 바꾸는지 모르겠어요..ㅠㅠㅠ next state 계산?하는 always block에서 n_state = S_IDLE; n_state = S_RUN; Blocking 구문으로 작성되어 있는데요. n_state <= S_IDLE; n_state <= S_RUN; 이런식으로 Non-blocking 구문으로 작성하면 안되는 이유가 있나요? 제가 이해하기론 n_state 는 combinational 회로라 굳이 Non-blocking 구문으로 작성할 이유는 없다고 생각해요. clock이랑 동기화를 해줄 이유가 없어서..그런데 https://verilogguide.readthedocs.io/en/latest/verilog/fsm.html#verilog-edgedetector 위 링크에서 rising edge detector 예제를 푸는데, waveform이 next state 를 Non-blocking 구문으로 작성했을 때 예제에서 제공한 waveform이랑 같은 것을 확인할 수 있었습니다. 이상한 것은 예제에서는 next state가 Blocking 구문으로 작성되어 있다는 것이에요. 아래 그림은 위 링크 예제처럼 작성했을 때 waveform 차이입니다. 코드는 혹시나 제가 실수한 것이 있을까봐 올려둡니다. 죄송합니다. figure1. 링크 waveform figure2. 실습했을 때 waveform, mealy_tick과 moore_tick이 위 사진과 다르게 출력되는 것을 확인. 아래처럼 Blocking 구문을 전부 Non-blocking 구문으로 바꾸면 파형이 잘 나옵니다. figure3. Non-blocking 구문으로 수정한 후의 waveform. 내용이 너무 기네요. 정리해보겠습니다. 수업 외 다른 코드를 이용해 질문 드리는 것에 대해 사과드립니다. 그래도 최대한 코드 볼 필요 없이 질문 드려봅니다. <- 제 개인적인 생각입니다.. 제가 알고 싶은 것은 1. next state 계산에서 Blocking 구문으로 사용하는 이유가 제가 이해한 것이 맞는지 2. 제가 이해한 것이 맞다면 왜 이 예제는 Blocking 구문으로 작성하면 원하는 파형이 안 나오는 것인지 3. 추가로 지금 waveform을 보면 reset이 눌리기 전에 c_state와 n_state가 x로 나오는데, 만약 x로 나오지않고 0으로 나온다면 c_state와 n_state는 Latch로 된 것인지 알고싶습니다. 이상입니다. 감사합니다.