강의

멘토링

로드맵

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

운칠기삼님의 프로필 이미지
운칠기삼

작성한 질문수

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

[HDL 20장] Internal Memory Interface 에 대해 이해해보자 (FPGA 의 BRAM 을 이해하기 - 실습편)

output o_신호와 reg r_신호

작성

·

38

1

모듈 내 레지스터 q신호를 output reg로 선언한 o_*신호로 기술하기보다는 reg r_*로 선언하고 output o_*로 선언한 신호에 assign하는 식으로 쓰는게 가독성때문에 그러실까요?

 

예를 들어 simple_bram_ctrl.v에서 assign o_valid = r_valid;대신 레지스터에서 기술하는 건 별로일까요?

always @(posedge clkr or negedge reset_n) begin

...

o_valid <= o_read;

...

답변 2

1

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요 🙂

알고계신대로 코딩 스타일의 차이 같고, 실제 합성되는 회로에는 영향이 없는 부분 같아요.

o_* 로 하셔도 당연히 무방합니다.

가독성, 이런 부분은 굉장히 주관적인 거라서, 단순하게 저의 코딩 스타일이 그렇구나 생각해주시면 될 것 같아요. (저도 o_* 또한 잘씁니다.)

즐공하세요 🙂

1

안녕하세요, 인프런 AI 인턴입니다. 운칠기삼님.

Verilog HDL에서 outputreg 타입으로 선언하는 것은 특정한 상황에서 고려될 수 있습니다. 질문하신 상황에서 o_validreg로 선언하지 않고 assign문으로 reg로 선언된 r_valid에 연결하는 방식의 차이와 그 이유에 대해 설명드리겠습니다.

output 레지스터 선언의 방법과 이유

  1. 가독성 및 유지보수성:

    • outputreg 타입으로 직접 선언하면, 해당 신호가 모듈의 내부 상태 변화를 직접 반영하게 되어 코드 이해가 더욱 직관적일 수 있습니다. 특히 신호가 클럭에 동기화되어야 하는 경우가 있습니다.
    • 반면에 reg 타입의 내부 신호를 사용하고, assign 문을 통해 output으로 연결하면, 더 명확하게 이전의 상태와 독립적인 현재 출력을 관리할 수 있습니다. 이는 특히 유지보수 및 디버깅 시에 유용할 수 있습니다.
  2. 설계 스타일의 일관성:

    • 설계 스타일에 따라 각기 다른 방법을 채택할 수 있습니다. 일부 디자이너는 가능한 한 명시적으로 모든 신호를 관리하기 위해 assign을 통해 신호를 분리하는 것을 선호할 수 있습니다.
    • 코드의 일관성 유지: 대규모 설계에서는 가독성을 위해 모든 출력 신호를 특정 스타일로 유지하는 것이 중요할 수 있습니다.
  3. 타이밍 제어:

    • FSM 설계에서 내부 상태에 따라 출력 신호를 변경하고 싶을 때 이렇게 사용하는 것이 일반적입니다. 이 경우 reg 선언이 사용될 것입니다.

위 내용을 고려하시어, 설계 스타일이나 동작의 명확성 요구사항에 따라 output regoutput wire의 활용을 결정하시면 좋을 것 같습니다.

추가적인 논의는 아래 유사한 질문에서 더 많은 인사이트를 얻을 수 있으니 참고해 보시기 바랍니다:

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

운칠기삼님의 프로필 이미지
운칠기삼

작성한 질문수

질문하기