inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

output o_신호와 reg r_신호

54

운칠기삼

작성한 질문수 2

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;

...

verilog-hdl fpga 임베디드

답변 2

1

설계독학맛비

안녕하세요 🙂

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

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

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

즐공하세요 🙂

1

인프런 AI 인턴

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

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

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

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

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

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

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

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

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

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

latency 개념 구현

1

84

3

비바도 all os버전

1

68

2

초기화를 reset_n 이 '1'일 때가 아닌 '0' 일 때 실행시키는 이유 질문

1

69

2

다운로드용량

1

69

2

비바도리눅스설치

1

79

2

전체path복사넣기

1

60

2

Vivado 2025.2 리눅스 설치 후 실행 에러와 솔루션 (libxv_commontasks.so)

1

143

2

explorer.exe오류

1

102

3

mobaxterm설치오류

1

87

2

./build시, waveform 'divide color' 사용

1

54

2

Latch와 관련하여 (Time borrowing, Latch-based design)

1

123

2

clean 명령어가 안되는데, 따로 저장해줘야 하는지 궁금합니다.

0

59

1

안녕하세요 설치 관련 질문 드립니다.

1

61

3

16장 mealy 설계.

1

73

2

14장 Cycle 관련, Testbench 코드.

1

63

2

21강(16장) 초기값 설정이 적용되는 시점 질문

1

60

1

20강(15장) - 밀리 머신 관련하여 질문 드립니다.

1

65

2

build에러 질문

0

55

2

1장 ./build에서 에러가 나요

1

72

2

FPGA 강의 보드 문의 드립니다.

1

105

2

5장 DFF특성에 대한 질문

1

74

3

vivado linux 사용 이유.

1

135

2

메모리의 형태가 전체설계에 미치는 영향이 궁금합니다.

1

103

2

디스코드 멤버쉽 등업 관련 문제

1

92

2