-
카테고리
-
세부 분야
반도체
-
해결 여부
해결됨
fsm 에서 next state 계산하는 always 블록 관련 질문 드립니다.
22.02.16 02:27 작성 조회수 846
1
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
[HDL 17장] HW 의 동작을 제어하는 FSM 을 이해해보자. (실습응용편)
강의실 바로가기
답변을 작성해보세요.
1
김상현
질문자2022.02.19
안녕하세요. 맛비님.
전에 저 문제에 대한 해답을 찾으려고 봤으나 아무리 봐도 로직엔 문제가 없어보이는데,
시뮬레이터에 대한 차이 때문에 발생한 이슈라고 생각하고 넘어가도 되는지 궁금합니다.
아래는 제가 시뮬레이터에 대한 차이 때문에 발생한 이슈라고 생각한 이유 입니다. 안 보셔도 됩니다.
위 사진은 질문에 있던 사진이고, 아래 사진은 test bench에서 level 입력 신호를 5ns 정도 지연시켰을 때의 결과입니다.
일단 예제에서 원하는 밀리 머신과 무어 머신의 차이가 확실히 나옵니다.
이 결과를 보니 시뮬레이터에 대한 차이 때문에 발생한 문제다라는 생각이 듭니다.
개인 문제로 질문 드려서 정말 죄송합니다.
설계독학맛비
지식공유자2022.02.19
안녕하세요 :)
확답을 못드리겠어요. 보통 시뮬레이터 차이다.. 라는 생각이 드신다면 EDA ground 를 통해서 다른 시뮬레이터 툴로 돌려보세요 (하지만 시뮬레이터 차이를 의심하는 case 는 접하기 어렵습니다.)
즐공하세요 :)
0
김상현
질문자2022.02.16
설계독학맛비
지식공유자2022.02.16
오 돌려보셨나요?
(assign 순서를 바꾼겁니다. 지금 blocking 문의 assign 순서에 따라 다른 결과, 즉 다른 로직이 만들어진다 를 알게 해드리고 싶어요)
이 다음 문장을 이해하실 수 있을꺼에요. assign 자체가를, assign 순서 자체가 로 수정!
설계독학맛비
지식공유자2022.02.16
그 다음 non blocking 으로 했을때는 순서에 따라서 결과가 같은지 확인하시면 되구요. (설명이 이상하더라도 찰떡같이 이해해주세요 ㅎ)
설계독학맛비
지식공유자2022.02.16
훌륭합니다. 제가 해드릴 수 있는 이야기는
non blocking 과 blocking 의 차이 정도 밖에 없을 것 같아요.
정리하면,
blocking assign 시 순서에 영향 있음. 순서에 따른 로직 생성
non blocking assign 시 순서에 영향 없음.
"Clock 이랑 동기화를 해줄 이유가 없다," 라기 보다는 Combinational 로직은 회로를 구성하는 것이기에 순서가 중요한 blocking 문을 사용하는 것이 맞습니다.
2번질문의 답은 스스로 내보셔요.
즐공하세요 :)
김상현
질문자2022.02.16
(assign 순서를 바꾼겁니다. 지금 blocking 문의 assign 순서에 따라 다른 결과, 즉 다른 로직이 만들어진다 를 알게 해드리고 싶어요)
이 다음 문장을 이해하실 수 있을꺼에요. assign 자체가를, assign 순서 자체가 로 수정!
아 이해가 됬습니다. Blocking 구문으로 작성하면 순서에 따라 결과가 달라질 수 있다는 말씀이신 것 같네요.
하나 더 질문 드려도될까요?
어디선가 글을 봤는데 Non-blocking 구문은 sequential logic을 구현할 때 많이 사용한다는 글을 본 것 같습니다. sequential logic은 클럭에 동기화되어서 동작하니까요. 이 말에 대해선 저도 동의합니다.
그래서 되도록 combinational logic 구현엔 Non-blocking 구문을 사용하지 않으려고 했는데, 이 생각을 좀 바꿔야할까요?
아니면 Blocking 구문으로 사용하는 것이 좋나요?
작성하고 보니 답변이 달려있네요..ㅋㅋ 감사합니다.
설계독학맛비
지식공유자2022.02.16
위와 같은 이유 (순서성)로 다음과 같이 사용하시면 되겠습니다.
암묵적인 룰! 이다 생각하셔도 편합니다.
combinational logic 은 Blocking
sequential logic 은 Non-blocking
을 사용하시면 되겠습니다. :)
0
설계독학맛비
지식공유자2022.02.16
답변 3