인프런 커뮤니티 질문&답변
output, reg 선언
작성
·
26
1
안녕하세요 🙂
설계독학맛비님이 작성하신 코드를 보니,
output같은 경우에
module에서 선언하실 때는
output o_dout; 처럼 하시고
따로 reg dout; 을 선언하신 뒤에
(코드상에서 o_dout과 dout값이 같다고 가정)
assign o_dout = dout;
으로 작성을 하셨더라구요
이는 가독성때문인지 혹은 그냥 맛비님의 스타일인 것인지,
아니면 다른 이유가 있어서 다음과 같이 작성하신건지 궁금합니다.
강의를 듣기 전에 제가 설계를 진행하였을 때는
처음부터 output reg d_out; 했어서 이런 질문을 드립니다.
또 module input, output을 작성할 때 어떤 output이 reg type인지 몰라서 그렇다면
이후에 reg로 선언할 때도 dout이 아닌 원래 output인 o_dout을 이용해서
reg o_dout; 처럼 작성해도 되지않나 싶어서요 !
의미없는 질문인 것같지만 갑자기 궁금증이 생겨 이렇게 질문 남깁니다 ..ㅎㅎㅎ 감사합니다.
답변 3
0
안녕하세요 🙂
네네 코딩 스타일인데, 저도 사람인지라 이것저것 씁니다.
System Verilog "logic" 을 주로 사용합니다.
기존 Verilog에서는 wire(연속 할당)와 reg(절차형 할당)를 엄격히 구분해서 써야 했죠. 이게 은근히 설계 실수를 유발하고 번거롭습니다. SystemVerilog의 logic은 이 둘을 하나로 통합한 것이라 보시면 됩니다.
Latch 의 경우는 타입(logic)이 Latch를 만드는 게 아닙니다. Latch는 '코딩 스타일' 때문에 발생합니다.
logic을 쓰더라도 always_comb나 always_ff 같은 전용 블록을 함께 사용하면 오히려 Latch 발생을 더 잘 잡아낼 수 있습니다.
(그리고.. 어차피 tool 이 Lint 를 통해서 잡아줍니다 ㅎㅎ)
현업에서 신경써야 할 것은 맞지만, 실수를 하더라도 금방 잡히니 너무 걱정하지 마세요.
즐공하세요!
0
위에 질문은 AI 인턴이 첨부한 이전 질문을 통해 해결했습니다! (그저 스타일이였군요 ㅎㅎ)
추가로 제미나이와 얘기하던 중, 현재는 Sytemverilog에서는 reg, wire타입을 모두 합친 logic으로 대부분의 신호를 선언한다고 하는데 이는 사실인가요?
만약 그렇다면 툴이 자동으로 변환하여 합성한다는 장점은 있겠지만 더욱 더 latch가 발생하지 않았는지 신경을 써야할 것같은데 제가 생각하는 것이 맞는지 궁금합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
HDL 코드를 작성할 때 output 변수를 선언하는 스타일에 대한 질문을 주셨네요. 코딩 스타일에 따라 여러 접근 방법이 있을 수 있는데, 각각의 방법은 주로 개인의 선호도나 코딩 관습에 따라 선택됩니다.
설계독학맛비님의 코딩 스타일은 특정한 이유가 있는 듯 보이는데, 이는 가독성과 유지보수 측면에서의 장점을 고려한 선택일 수 있습니다. 예를 들어, assign을 이용하여 명시적으로 데이터 흐름을 설정하면 코드의 가독성이 높아질 수 있으며, 설계의 각 부분이 명확하게 드러납니다.
그리고 output reg d_out과 같이 선언하여 항상 블록 내에서 바로 값을 할당할 수도 있습니다. 두 방식 모두 HDL의 규칙을 따르고 있으며, 기능적인 차이는 없습니다. 다만, 모듈 차원에서 데이터 흐름을 명확히 하고, 설계 변경 시 오류를 최소화하기 위해 assign을 사용하는 것이 선호될 수 있습니다.
기술적으로 o_dout이 dout과 동일하게 설계된 이외의 이유라면, 이는 코드리뷰나 디자인 표준에 따를 수도 있습니다.
유사한 질문에 대한 답변이 인프런 커뮤니티에서도 활발히 이루어지고 있었습니다:
이 링크들에서 코드 작성 스타일과 관련한 다른 학습자들의 질문과 그에 대한 답변을 참고하시면 더 많은 insights를 얻으실 수 있을 겁니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





