inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

simple bram ctrl 질문입니다 !

320

Taiwan

작성한 질문수 14

2

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요 선생님! 맛비선생님의 BRAM Ctrl 설계를 학습하였는데 아래 맛비님의 코드 n_state = c_state를 case문 안에 default 문으로 넣었는데 시뮬레이션이 동작하지 않았습니다. 혹시 이유를 간략히 알 수 있을까요?
 
always @(*) begin
n_state = c_state;
case (c_state)
S_IDLE : if(i_run)
n_state = S_WRITE;
S_WRITE : if(is_write_done)
n_state = S_READ;
S_READ : if(is_read_done)
n_state = S_DONE;
S_DONE : n_state = S_IDLE;
endcase

end

 

verilog-hdl fpga 임베디드

답변 1

0

설계독학맛비

안녕하세요 :)

안되는 코드하고, 변경했을 때, 어떻게 안되는지 알려주시면 안될까요? (변경 전, 변경 후 차이를 적어주시면 좋을 것 같아요. 막연히 안된다 라고 하셔서, 원하시는바를 모르겠습니다 ㅠ)

답변에 도움이 되어드릴께요!

즐공하세요 :)

0

Taiwan

 

always @(*) begin

case (c_state)

S_IDLE : if(i_run)

n_state = S_WRITE;

S_WRITE : if(is_write_done)

n_state = S_READ;

S_READ : if(is_read_done)

n_state = S_DONE;

S_DONE : n_state = S_IDLE;

default : begin

n_state = c_state; 

end

 

endcase

end

 

FSM 강의 하실 때 default로 작성해도 된다고 하셔서 default로 n_state = c_state 이런식으로 작성해 보았습니다.

테스트 벤치 결과값이 매우 이상하게 나와서 default로 작성할 때는 어떻게 작성해야하는지 여쭙니다!..

 

 

 

 

 

0

설계독학맛비

안녕하세요 :)

답변드릴께요. 일종의 버그성이 되어버렸구요. 코드를 더 수정해야 할 것 같아요.

default 를 적었지만, default 가 아닌 상태입니다. 자세히살펴보니, full case 가 아니네요.

다음 처럼 "else" 를 모든 case 에 추가하셔서, full case 를 만들어 주시면, 정상동작 합니다.

직접 확인했어요. 좋은 질문 감사합니다.

즐공하세요 :)

 

// Before. 질문 주신 Test 하신 코드. (제가 생각이 짧았습니다.)	
        case(c_state)
	S_IDLE	: if(i_run)
				n_state = S_WRITE;
	S_WRITE : if(is_write_done)
				n_state = S_READ;
	S_READ  : if(is_read_done)
				n_state = S_DONE;
	S_DONE	: n_state = S_IDLE;
	default : n_state = c_state;
	endcase

// 수정하여야할 코드 (Fullcase 로 만들어야합니다.)
	case(c_state)
	S_IDLE	: if(i_run)
				n_state = S_WRITE;
			  else 
				n_state = c_state;   // 다음과 같이, full case 를 만들셔야 합니다.
	S_WRITE : if(is_write_done)
				n_state = S_READ;
			  else 
				n_state = c_state;  // 다음과 같이, full case 를 만들셔야 합니다.
	S_READ  : if(is_read_done)
				n_state = S_DONE;
			  else 
				n_state = c_state;  // 다음과 같이, full case 를 만들셔야 합니다.
	S_DONE	: n_state = S_IDLE;
	default : n_state = c_state;
	endcase

 

else 부분이 없다면, 어떤 값이 들어가야할지 모르는 unknown (x) 상태가 되어서 simulation 결과에 오동작을 만들었어요 :)

0

Taiwan

감사합니다 확인했습니다 !  이전  FSM 강의도 동일하게 default를 사용하고 싶으면 full case를 만들어야 하나요? 

0

설계독학맛비

해보진 않았지만, full case 를 만드셔야 정상 동작 할 것 같아요.

수많은 로직들이 존재하기에.. 설계하시다보면,  full case 가 아닌 상태에서 동작할 수 있구요.(simulation 상에서는..) 하지만, 절대로! 권하고 싶진 않아요.

왜냐하면, Combinational 로직에서 full case 를 만들지 못하면 Latch 가 발생하기 때문입니다.

즐공하세요 :)

 

 

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

177

2

explorer.exe오류

1

119

3

mobaxterm설치오류

1

101

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

113

2

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

1

96

2