inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

[HDL 17장] HW 의 동작을 제어하는 FSM 을 이해해보자. (실습응용편)

always @(*) 문장 질문

해결된 질문

1292

satreci-sta

작성한 질문수 5

2

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
먼저 좋은 강의 정말 감사합니다.
 
always @(*) 문장 관련해서 질문을 많이 받으셔서 스트레스 받으실 듯 하여 관련 답변이나 링크들 읽어 보았습니다.
제가 이해한 바로는 다음과 같은데 혹시 잘못 이해한 부분이 있는지 여쭤보고 싶습니다.
 
- always @ 안에 기술되는 Type은 전부 reg여야 한다. (port는 예외)
 
- always @(*)는 모든 입력이 포함된 것을 의미하므로 입력이 변경될 때 마다 항상 변경되는 것이기 때문에 모듈이 순차가 아닌 조합회로를 기술할 때 유용하다.
 
- always @(*)Combinational Logic이고 reg Type을 선언하게 된다.
 
- 하지만 reg라고 해서 전부 F/F인 것은 아니다. Alwayslevel sensitive로 사용하느냐(combinational Logic), Clock Edge Sensitive로 사용하느냐(Sequential Loigic)에 따라서 갈린다.
 
- reg로 선언했다고 해서 전부 메모리가(Latch F/F) 되는 것은 아니지만 문법을 정확하게 지키지 않는다면 메모리가 되어 조합회로의 시그널 처리를 애매하게 만들 수 있으므로 유의하자. 조합회로를 설계하는데 LatchF/F의 형태로 합성되면 회로에 큰 문제가 생길 수 있다.

 

VHDL을 2년전에 배우고 Verilog를 시작하게 되어 아직 지식이 많이 부족하다 보니 이런 질문 드리게 되었습니다.
 
감사합니다.

임베디드 fpga verilog-hdl

답변 1

1

설계독학맛비

와....... 감동입니다!!!

정리를 아주 잘해주셨습니다.

한 줄을 우선 수정하겠습니다.

- always @ 안에 기술되는 Type은 전부 reg여야 한다. (port는 예외)

always @ () 문안에 Assign 시, 왼쪽 피연산자 = 오른쪽 피연산자 관계에서, (ex, A <= B; )

왼쪽 은 Reg,  오른쪽은 Reg / Wire 무관합니다. 이는 Combinational logic 의 (*) 이나, Sequential Logic 의 (posedge clk) 모두 동일하게 적용됩니다.

port 는 별도로 reg 를 기술하지 않으면 default 로 wire 입니다.

다음과 같이 결론 내겠습니다. (문장이 매끄럽지 않은점은 이해를..)

- always @ 안에 기술되는 대입시 사용하는 왼쪽 피연산자의 Type reg여야 한다.

 

다음 문장도 위 문장의 연장선상 입니다. 고쳐보셔요 :)

- always @(*)Combinational Logic이고 reg Type을 선언하게 된다.

 

나머지는 옳다 라고 생각합니다. 

즐공하세요 :)

0

satreci-sta

답변 너무 감사드립니다! 이해에 큰 도움이 되었어요 :D

제 나름대로 두 문장을 아래와 같이 고쳐보았습니다.

- always@() 블럭 안에서 대입할 때, 왼쪽 피연산자의 Type은 reg여야 한다.

- always@(*)은 Combinational Logic이다. 마찬가지로 블럭 안에서 대입 시 왼쪽 피연산자의 Type은 reg여야 한다. 또한 always@(*)의 의미에 따라 Level Sensitive로 동작하게 되므로 블럭 내에서 선언한 reg가 메모리의 형태로 합성되지는 않는다.

0

설계독학맛비

와.. 멋진 문장입니다!

즐공하세요 :)

latency 개념 구현

1

126

3

비바도 all os버전

1

91

2

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

1

98

2

다운로드용량

1

82

2

비바도리눅스설치

1

97

2

전체path복사넣기

1

73

2

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

1

178

2

explorer.exe오류

1

119

3

mobaxterm설치오류

1

102

2

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

1

61

2

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

1

145

2

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

0

73

1

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

1

72

3

16장 mealy 설계.

1

80

2

14장 Cycle 관련, Testbench 코드.

1

75

2

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

1

68

1

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

1

76

2

build에러 질문

0

63

2

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

1

82

2

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

1

115

2

5장 DFF특성에 대한 질문

1

87

3

vivado linux 사용 이유.

1

150

2

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

1

114

2

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

1

96

2