해결된 질문
작성
·
36
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
내부 구현에서의 비트 너비와 인덱스가 엇갈릴 수 있습니다.instantiation
하는 과정에서 정확한 파라미터와 포트 매칭이 중요합니다.다음은 유사한 주제를 다룬 게시글이니 참고하시면 도움이 될 것입니다:
- Digital IP 설계과제 관련 정리
질문자님이 지적하신 것처럼 코드 내의 파라미터와 포트 정의가 체계적으로 이루어졌는지 여러 번 교차 확인해 보시는 것이 좋습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.