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