simple bram ctrl 질문입니다 !
320
작성한 질문수 14
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
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
답변 1
0
안녕하세요 :)
안되는 코드하고, 변경했을 때, 어떻게 안되는지 알려주시면 안될까요? (변경 전, 변경 후 차이를 적어주시면 좋을 것 같아요. 막연히 안된다 라고 하셔서, 원하시는바를 모르겠습니다 ㅠ)
답변에 도움이 되어드릴께요!
즐공하세요 :)
0
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
해보진 않았지만, 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





