Inflearn brand logo image

인프런 커뮤니티 질문&답변

임효진님의 프로필 이미지
임효진

작성한 질문수

디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기

컴퓨터 구조의 메모리 계층 구조와 Verilog로 SRAM 모델링하기

SRAM module RTL viewer 이상

해결된 질문

작성

·

49

·

수정됨

0

rtl viewer를 열면 mux모양 로직 (dout ~0 부터 dout ~ 31이라고 쓰여있음) 이게 책처럼 겹쳐야 하는데 죄다 병렬 회로로 늘어져서 엄청 공간 차지를 많이 합니다. 코드 문제는 아닌 것 같은데 어떻게 해야하나요? rtl viewer에서 netlist navigator 수정이 안되나요? netlist navigator를 보면 always0과 dout~0부터 dout~31까지가 동시에 logic이라는 폴더에 들어 있습니다. 그래서 벡터를 책처럼 못 묶는 것 같습니다.

답변 2

0

안녕하세요, 답변 남겨드립니다.

현재 RTL Viewer에서 dout[0]부터 dout[31]까지가 벡터로 묶이지 않고 개별 MUX 형태로 나열되어 공간을 과도하게 차지하는 현상은, 주로 Verilog 코드 내 신호 정의 방식과 RTL Viewer의 내부 신호 처리 방식에 기인합니다. 이는 코드 자체의 기능적 오류라기보다는, 툴이 신호를 인식하는 방식과 시각화 규칙에서 비롯되는 문제입니다.

일반적으로 dout과 같은 출력 신호가 [31:0]의 벡터 형태로 선언되어 있더라도, 실제 코드 내에서 이를 비트 단위로 접근하거나 할당하게 되면 RTL Viewer에서는 해당 신호를 묶음이 아닌 개별 비트 단위의 logic으로 인식하게 됩니다. 예를 들어 dout[0] <= data0;, dout[1] <= data1;와 같이 작성된 경우, 툴 입장에서는 각각이 독립된 출력으로 처리되며, 시각적으로도 병렬 MUX 구조처럼 펼쳐지게 됩니다. 반면 dout <= mem[addr]; 또는 assign dout = mem[addr];과 같이 벡터 전체를 한 번에 할당하는 방식이라면, RTL Viewer에서는 이를 벡터로 판단하고 하나의 블록으로 묶어서 표현합니다.

Netlist Navigator 상에서는 dout~0, dout~1 등으로 표시되는 경우, 이는 사용자가 직접 컨트롤할 수 있는 구조가 아니며, 툴이 내부적으로 생성한 net에 해당합니다. 이러한 internal logic들은 RTL Viewer에서 수동으로 묶음(grouping) 처리를 할 수 없기 때문에, 결국 신호 설계 방식 자체를 벡터 중심으로 구조화해야 합니다. 즉, 선언은 벡터로 되어 있더라도, 그 사용 방식이 비트 단위 접근이면 툴은 벡터로 인식하지 않습니다.

따라서 이러한 문제를 해결하기 위해서는, 첫째, dout 신호를 항상 벡터 전체 단위로 할당하거나 출력하도록 설계하는 것이 중요하며, 둘째, 반복 구조에서 generate 문을 사용할 경우에도 dout[i]가 벡터 상의 요소임을 명확히 나타내 주는 방식으로 작성해야 합니다. 특히, SRAM처럼 MUX 출력이 중요한 구조에서는 비트별 로직이 시각화될 경우 디버깅이 매우 어려워질 수 있기 때문에, 회로 블록의 구성에 따라 최대한 벡터 기반 설계를 유지하는 것이 바람직합니다.

덧붙여, RTL Viewer는 기본적으로 구조 해석에 초점을 맞춘 툴이므로, 최종 게이트 레벨 연결이나 실제 배치 후 신호 흐름을 보고 싶을 경우에는 Technology Map Viewer나 Gate-level Netlist Viewer를 활용하는 것도 하나의 방법입니다.

0

안녕하세요, 인프런 AI 인턴입니다. 임효진님.

SRAM 모듈의 RTL 뷰어에서 발생하는 문제로 인해 회로가 병렬로 늘어져 보이는 현상을 겪고 계시군요. 이는 종종 RTL 뷰어에서 로직이 어떻게 정리되어 표시되는지와 관련이 있습니다. 이러한 문제는 툴의 설정이나 코드의 하위 모듈 구조로 인해 발생할 수 있습니다. RTL 뷰어에서의 기본적인 문제 해결 방안을 안내드리겠습니다.

  1. 벡터 이름 확인: RTL 뷰어에서 각 신호의 이름이 예상대로 정렬되고 있는지 확인하세요. 필요한 경우, 코드 내 변수 이름이나 포트 이름을 더 일관되게 유지하도록 조정할 수 있습니다.

  2. 신호 정리 및 레이블 사용: 특정 레이블을 적용하여 신호가 더 명확하게 나타나도록 할 수 있습니다. 이는 툴에서 제공하는 설정에 따라 다르며, 각 신호를 그룹화하거나 라벨링할 수 있는 기능을 확인해보세요.

  3. RTL 뷰어 환경설정 조정: 툴 자체의 뷰어 설정을 조정할 수 있는 옵션을 점검합니다. 특히 Netlist Navigator와 관련된 옵션을 찾아 신호가 더 깔끔히 정리되도록 설정을 조정해 보세요.

  4. 코드 모듈화 고려: 모듈 안의 레지스터나 신호를 더욱 간결하게 정리하여 모듈화할 수 있다면, 툴이 좀 더 쉽게 시각화할 수 있을 것입니다.

관련된 기존 질문과 답변을 통해 추가적인 힌트를 얻을 수 있습니다:

이 질문들에서 레지스터와 메모리를 효과적으로 관리하고 시각화하는 방법에 대해 찾아보실 수 있습니다. 적절한 설정을 통해 더 나은 환경에서 작업할 수 있게 되길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

임효진님의 프로필 이미지
임효진

작성한 질문수

질문하기