인프런 커뮤니티 질문&답변
output o_신호와 reg r_신호
작성
·
41
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에서 output을 reg 타입으로 선언하는 것은 특정한 상황에서 고려될 수 있습니다. 질문하신 상황에서 o_valid를 reg로 선언하지 않고 assign문으로 reg로 선언된 r_valid에 연결하는 방식의 차이와 그 이유에 대해 설명드리겠습니다.
output 레지스터 선언의 방법과 이유
가독성 및 유지보수성:
output을reg타입으로 직접 선언하면, 해당 신호가 모듈의 내부 상태 변화를 직접 반영하게 되어 코드 이해가 더욱 직관적일 수 있습니다. 특히 신호가 클럭에 동기화되어야 하는 경우가 있습니다.
- 반면에
reg타입의 내부 신호를 사용하고,assign문을 통해output으로 연결하면, 더 명확하게 이전의 상태와 독립적인 현재 출력을 관리할 수 있습니다. 이는 특히 유지보수 및 디버깅 시에 유용할 수 있습니다.
설계 스타일의 일관성:
- 설계 스타일에 따라 각기 다른 방법을 채택할 수 있습니다. 일부 디자이너는 가능한 한 명시적으로 모든 신호를 관리하기 위해
assign을 통해 신호를 분리하는 것을 선호할 수 있습니다.
- 코드의 일관성 유지: 대규모 설계에서는 가독성을 위해 모든 출력 신호를 특정 스타일로 유지하는 것이 중요할 수 있습니다.
- 설계 스타일에 따라 각기 다른 방법을 채택할 수 있습니다. 일부 디자이너는 가능한 한 명시적으로 모든 신호를 관리하기 위해
타이밍 제어:
- FSM 설계에서 내부 상태에 따라 출력 신호를 변경하고 싶을 때 이렇게 사용하는 것이 일반적입니다. 이 경우
reg선언이 사용될 것입니다.
- FSM 설계에서 내부 상태에 따라 출력 신호를 변경하고 싶을 때 이렇게 사용하는 것이 일반적입니다. 이 경우
위 내용을 고려하시어, 설계 스타일이나 동작의 명확성 요구사항에 따라 output reg와 output wire의 활용을 결정하시면 좋을 것 같습니다.
추가적인 논의는 아래 유사한 질문에서 더 많은 인사이트를 얻을 수 있으니 참고해 보시기 바랍니다:
저는 질문자님의 이해를 돕고자 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




