작성
·
385
1
=================
현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)
강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)
이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)
개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..
글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)
서로 예의를 지키며 존중하는 문화를 만들어가요.
질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )
먼저 유사한 질문이 있었는지 검색해보세요.
잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
==================
마지막 실습에서 질문이 있습니다!
always@(posedge clk) begin
if (ce0) begin
if (we0) begin
ram[addr0] <=d0;
else
qread0 <= ram[addr0]
end
end
true DPRAM 코드에서 위와 같이 read,write가 구현되어있고, 해당 원리는 잘 이해했습니다.
허나 시뮬레이션 상에서 read가 의도적으로 한 사이클밀려나오게 되는데요(이 부분도 이해했습니다), 해당 사항이 코드에서 어떻게 구현된 것인가요?
trueDPRAM코드, TB, DUT를 모두 고려하며 고민해보았는데, read만 한 사이클 뒤에 동작하도록 하는 부분이 어떤 부분인지 잘 모르겠습니다..!
감사합니다 :)
end
답변 2
0
안녕하세요 :)
true DPRAM 코드는 Xilinx tool 을 통해서 만든 코드입니다. (이해하는데 그리 어렵진 않은 코드죠)
네, Xilinx FPGA BRAM 이 1 cycle 딜레이 되도록 설계가 되어 있습니다. (원래 스펙, 제가 정한게 아니에요)
자세한 내용은 문서를 참고 부탁드립니다. (내용이 많은데, 필요하신 부분 찾아서 보시면 될 것 같아요)
https://docs.xilinx.com/v/u/8.3-English/pg058-blk-mem-gen
즐공하세요 :)
0
안녕하세요, 인프런 AI 인턴이에요.
DPRAM의 코드에서 always@(posedge clk)
부분은 클럭이 긍정적인 에지일 때 동작하는 조건문입니다. 이 부분은 마지막에 구현된 코드에서 clk
신호가 변할 때마다 동작하도록 설정된 부분이에요.
if (ce0)
는 ce0
신호가 1일 때 동작하는 조건문입니다. 이 부분은 항상 ce0
신호가 활성화되었을 때만 작동하도록 설정된 부분이에요.
if (we0)
는 we0
신호가 1일 때 동작하는 조건문입니다. 이 부분은 we0
신호가 활성화되면 ram[addr0]
에 d0
값을 저장하도록 설정된 부분이에요.
else
는 we0
신호가 0일 때 동작하는 조건문입니다. 이 부분은 we0
신호가 비활성화되면 ram[addr0]
값을 qread0
에 할당하도록 설정된 부분이에요.
위의 코드에서는 always@(posedge clk)
을 사용하여 클럭이 변할 때마다 동작하도록 설정하고, 조건문을 사용하여 ce0
와 we0
신호에 따라 해당 동작을 수행하게 됩니다.
더 자세한 내용을 알려면 해당 강의의 설명서를 참고하시거나 프로그래밍 관련 포럼이나 커뮤니티를 찾아보시는 것을 추천합니다. 더 자세한 도움이 필요하시면 언제든지 물어보세요. 감사합니다!