인프런 커뮤니티 질문&답변
[과제2] Wrapper 관련 질문입니다.
해결된 질문
작성
·
146
0
자료 공유해주신 wrapper verilog 코드와 강의 마지막 RTL 합성 결과에서 din[31:0] 이 din[7:0]으로 instantiation 되어있는데 input 크기가 달라서 문제가 되는 것 아닌지 문의 드립니다.
module 이름의 64x8로 미루어 볼 때, 과제는 WIDTH=64, DEPTH=8을 가지는 SRAM을 구현하는 것으로 보이는데 그렇다면 공유해주신 코드
`ifdef SIM
sram_model #(64, 8) u_sram (clk, cs, we, ad, din, dout);
에서 파라미터를 넘겨주는 값이 (64, 8)이 아니고 (8, 64)가 맞는 것이 아닌지 해서 질문드립니다. 감사합니다.
답변 2
1
안녕하세요, 답변 남겨드립니다.
“합성 결과 din[31:0] → din[7:0]으로 instantiation 된다”라는 것은, 상위 모듈 관점에서 32비트 신호를 넘겼지만 실제 인스턴스 내부는 8비트만 사용하고 있어서, 나머지 24비트(din[31:8])가 무시되었기 때문입니다.
즉,
Wrapper 선언부가
parameter WIDTH=32→ 포트에서din[31:0]내부 인스턴스는
#(64,8)→ 폭이 8비트따라서 내부에서
din[7:0]만 유효합성기 리포트엔 “상위 32비트 중 8비트만 매핑됨”이라고 표시
이렇게 된 것입니다.
의도에 따라 “(Depth=8, Width=64)”를 의도했다면, 즉 “8개의 주소 × 64비트”가 필요하면 sram_model #(8,64)로 사용해야 하고, Wrapper 및 상위 설계도 모두 그에 맞춰 수정해야 합니다. 반대로 “64개의 주소 × 8비트”가 맞다면 sram_model #(64,8)을 사용하면 됩니다.
즉, “64×8”이 ‘64비트 × 8워드’가 아니라, ‘64워드 × 8비트’임에 주의해서 작성하신 코드와 과제 요구사항을 맞추시면 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. 장재혁님.
질문 주신 내용은 Verilog 코드에서의 파라미터 명칭과 그에 따른 데이터 버스 크기에 관한 것입니다. 일반적으로 SRAM 등의 메모리 모듈을 만들 때, WIDTH와 DEPTH는 메모리 설계 시 중요한 요소입니다. 각각의 값이 잘못되면 올바른 데이터 처리가 이루어지지 않을 수 있습니다.
파라미터의 정의 및 의미:
WIDTH는 메모리 셀 당 데이터 비트 수를 의미합니다. 예를 들어,WIDTH=64는 하나의 메모리 셀이 64비트 데이터를 저장할 수 있음을 나타냅니다.
DEPTH는 메모리 셀의 개수를 나타냅니다.DEPTH=8은 8개의 메모리 셀을 나타내며, 이는 총 저장 가능한 데이터 블록의 수를 의미합니다.
RTL 합성과 코드에서의 파라미터 사용:
- 질문하신 내용에서
sram_model #(64, 8)의 경우, 제대로 정의되었다면WIDTH=64,DEPTH=8이 맞습니다. 만약 의도와 달리 사용하셨다면, 실제sram_model내부 구현에서의 비트 너비와 인덱스가 엇갈릴 수 있습니다.
- Verilog에서는 일반적인 방법으로 모듈을 정의할 때 포트 매칭에 신경을 써야 합니다. 특히
instantiation하는 과정에서 정확한 파라미터와 포트 매칭이 중요합니다.
- 질문하신 내용에서
다음은 유사한 주제를 다룬 게시글이니 참고하시면 도움이 될 것입니다:
- Digital IP 설계과제 관련 정리
질문자님이 지적하신 것처럼 코드 내의 파라미터와 포트 정의가 체계적으로 이루어졌는지 여러 번 교차 확인해 보시는 것이 좋습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





