해결된 질문
작성
·
1K
1
답변 3
1
안녕하세요. 맛비님.
전에 저 문제에 대한 해답을 찾으려고 봤으나 아무리 봐도 로직엔 문제가 없어보이는데,
시뮬레이터에 대한 차이 때문에 발생한 이슈라고 생각하고 넘어가도 되는지 궁금합니다.
아래는 제가 시뮬레이터에 대한 차이 때문에 발생한 이슈라고 생각한 이유 입니다. 안 보셔도 됩니다.
위 사진은 질문에 있던 사진이고, 아래 사진은 test bench에서 level 입력 신호를 5ns 정도 지연시켰을 때의 결과입니다.
일단 예제에서 원하는 밀리 머신과 무어 머신의 차이가 확실히 나옵니다.
이 결과를 보니 시뮬레이터에 대한 차이 때문에 발생한 문제다라는 생각이 듭니다.
개인 문제로 질문 드려서 정말 죄송합니다.
0
오 돌려보셨나요?
(assign 순서를 바꾼겁니다. 지금 blocking 문의 assign 순서에 따라 다른 결과, 즉 다른 로직이 만들어진다 를 알게 해드리고 싶어요)
이 다음 문장을 이해하실 수 있을꺼에요. assign 자체가를, assign 순서 자체가 로 수정!
훌륭합니다. 제가 해드릴 수 있는 이야기는
non blocking 과 blocking 의 차이 정도 밖에 없을 것 같아요.
정리하면,
blocking assign 시 순서에 영향 있음. 순서에 따른 로직 생성
non blocking assign 시 순서에 영향 없음.
"Clock 이랑 동기화를 해줄 이유가 없다," 라기 보다는 Combinational 로직은 회로를 구성하는 것이기에 순서가 중요한 blocking 문을 사용하는 것이 맞습니다.
2번질문의 답은 스스로 내보셔요.
즐공하세요 :)
(assign 순서를 바꾼겁니다. 지금 blocking 문의 assign 순서에 따라 다른 결과, 즉 다른 로직이 만들어진다 를 알게 해드리고 싶어요)
이 다음 문장을 이해하실 수 있을꺼에요. assign 자체가를, assign 순서 자체가 로 수정!
아 이해가 됬습니다. Blocking 구문으로 작성하면 순서에 따라 결과가 달라질 수 있다는 말씀이신 것 같네요.
하나 더 질문 드려도될까요?
어디선가 글을 봤는데 Non-blocking 구문은 sequential logic을 구현할 때 많이 사용한다는 글을 본 것 같습니다. sequential logic은 클럭에 동기화되어서 동작하니까요. 이 말에 대해선 저도 동의합니다.
그래서 되도록 combinational logic 구현엔 Non-blocking 구문을 사용하지 않으려고 했는데, 이 생각을 좀 바꿔야할까요?
아니면 Blocking 구문으로 사용하는 것이 좋나요?
작성하고 보니 답변이 달려있네요..ㅋㅋ 감사합니다.
위와 같은 이유 (순서성)로 다음과 같이 사용하시면 되겠습니다.
암묵적인 룰! 이다 생각하셔도 편합니다.
combinational logic 은 Blocking
sequential logic 은 Non-blocking
을 사용하시면 되겠습니다. :)
0
안녕하세요 :)
확답을 못드리겠어요. 보통 시뮬레이터 차이다.. 라는 생각이 드신다면 EDA ground 를 통해서 다른 시뮬레이터 툴로 돌려보세요 (하지만 시뮬레이터 차이를 의심하는 case 는 접하기 어렵습니다.)
즐공하세요 :)