작성
·
841
3
답변 3
0
순서대로 정독 부탁드립니다.
https://m.blog.naver.com/leeyunghuk1/220981337920
위 링크에서 D F/F 을 읽어보세요.
이해 될때까지 이해해보세요. (1년묵은 체증을 해소하기 위해서 가장중요한 단계, 이 내용 이해 안되시면 절대로! 다음단계 넘어가지 마세요)
기존 코드에서 다음과 같이 수정했습니다.
이유는 D F/F 의 "D" 와 "Q" 를 구분해서 확인하기 위함입니다. (코드 수정 전, 후 는 같은 회로 입니다. 코딩스타일만 다를 뿐)
위 코드는 다음과 같은 회로를 만듭니다. (if 문에 해당하는 회로 그림은 제외)
그리고 D F/F 에서, 다음과 같이 맵핑이 됩니다. (여기까지 이해되시죠..? 안되시면 다시 정독)
(D F/F 회로 port : 코드변수명)
- D : D
- Q : cnt
여기까지 잘 이해하셨다고 믿고, waveform 을 확인해보겠습니다.
위 파형으로 제 최종 정리 입니다.
1. functional sim 이기 때문에 logic delay 는 없으며,
2. 그렇기 때문에 (delay 고려 없이) 이미 F/F 의 input D 는 99 로 준비가 되어 있었고,
3. posivie edge 이전에 현재 f/f 출력값 Q 가 98 임으로 100보다 작으며, (현재 저장된 값으로 if 문의 조건을 검사함)
4. positive edge 시점에서, 위의 2번 3번으로 D F/F가 동작됩니다. 이미 +1이 완료가 되었던 99 가 F/F 에 저장됩니다.
'
아직도...? 1년 묵은 체증이 남아있으신가요...?
자...! 제 역할은 마무리 된 것 같습니다. :)
1,2,3 번 모두 스스로 답을 찾으실 수 있는 것들 입니다. (그리고 개인적인 질문이다 판단되고요)
How?!!! 직접 확인해보세요.
https://www.inflearn.com/questions/200751
저는 최선을 다했습니다.
여기서 질문자 스스로 맛비에게 진심으로 감사함을 느끼셨다면, 위 질문의 답을 찾아서 여기에 남겨주시리라 믿습니다.
즐공하세요 :)
답변이 늦었습니다.
1. always @ (posedge clk or negedge reset_n)
이런 표시가 있으면, 이 문 begin 에서 end로 끝나는 전체가 F/F 한개인지 궁금합니다.
제 생각 -> always안에 reg가 몇개 쓰였는지에 따라서 F/F의 갯수는 달라진다.
2. 수업시간에 배운것은 J/K F/F , D F/F 등등 여러가지 F/F을 배웠는데,
always @ (posedge clk or negedge reset_n) 문 안의 코드를 보고 어떤 종류의 F/F이 사용되었는지 한눈에 알 수 있는 법이 있는지, 아니면 이 문에서 구현하는 코드는 모두 D F/F인지 궁금합니다!
제 생각 -> 제가 지금까지 실습하면서 schemetic으로 본 F/F은 D F/F이고,
코드 구성상? always @ (posedge clk or negedge reset_n) 꼴이면,
D F/F만 쓰이지 않을까 생각합니다.
3. 2일전에 질문드렸던 것 중에 하나인데, 예를 들어서 always (*)안의 n_state 같은 경우에는
combinational logic으로 쓰인다고 말씀해주셨는데, F/F이 아니고서, 저장할 수 있는 logic 또한 존재할 수 있나요?
(제 말은, 어찌됐든, 저장해야하기 때문에 latch나 F/F으로 무조건 쓰여야 하지 않나요?)
(단순 저장하는 변수면, n_state는 어떤 소자라고 부르나요?)
-> always(*) 는 clock 에 동기화되지 않으므로, 단순 combinational logic 으로 쓰입니다. (+, -, and, or ...)
따라서 저장하는 개념이 아니라, 단순히 계산 후 출력으로 내보내주는 역할을 합니다.
(현재 입력에 따라 출력이 항상 똑같이 결정되는 논리회로이므로)
제 답변에 코멘트 해주시면 감사하겠습니다...!
0
와... 이제 이해했습니다!!! (무엇을 헷갈려하시는지 완벽하게 이해한 것 같아요. )
정리해서 적어볼께요. (내일 중에 적어드리겠습니다. 헨폰으로 적는중인데, 그림까지 추가해서 이 질문을 종결시켜보겠습니다)
다음 글이 전부인데, 쫌만 기둘려주세요.
1. functional sim 이기 때문에 logic delay 는 없으며,
2. 그렇기 때문에 (delay 고려 없이) 이미 F/F 의 input D 는 99 로 준비가 되어 있었고,
3. posivie edge 이전에 현재 f/f 출력값 Q 가 98 임으로 100보다 작으며, (현재 저장된 값으로 if 문의 조건을 검사함)
4. positive edge 시점에서, 위의 2번 3번으로 DFF가 동작됩니다. 이미 +1이 완료가 되었던 99 가 F/F 에 저장됩니다.
제가 이해 시킬꺼에요!! (근성으로 답변 갑니다ㅎ)
날 잡아서 구글 밑이라도 하시죠
0
안녕하세요 :)
1년동안 어려움을... 제가 해소해드릴 수 있을지 겁이? 나네요.
저는 질문자님게서 궁금해하시는 내용이.. 저에게는 당연한 내용이라.. 이거를 어떻게 설명해드리면 좋을지.. (고인물.. ㅠ.ㅠ)
쉽게 생각해보죠. 코드를 보겠습니다.
32,33 번째를 보시면,
순서대로 이해해보겠습니다.
1. clock edge 가 positive 일때 (clock 동기화 시점에서 32,33번째 코드를 동작한다. 라는게 중요합니다.)
2. cnt 가 100 보다 작다
3. cnt 에 +1 을 한다.
즐공하세요 :)
답변 감사합니다 맛비님!
그러면 1095ns에 마우스 커서를 갔다대면 맛비님이 올린 사진과 같이 o_cnt는 99라고 나와있는데
사실상 99가 아니라 98인건가요?
99 입니다. 참고로 logic delay 가 고려안된 function sim 이기 때문이에요.
회로 딜레이가 추가된 simulation 을 돌리시면 더 정확하게 볼 수 있어요. (이거는 학교공부가 필요한 개념이에요)
즐공하세요 :)
답변 감사합니다 맛비님!
맛비님의 답변에서, 1105ns일때, clock rising edge에서 o_cnt가 99 ( <100 ) 이므로 99+1이 바로 나온다고 하셨는데, 1095ns일때 o_cnt를 99로 볼 수 있는 이유가 있을까요?
답변 감사합니다 맛비님.
제가 궁금한 것은 다음과 같습니다.
위 simulation 사진에서
1105ns인 순간
--> cnt, 즉 F/F의 입력값이 99이므로, DUT 코드에 의해 99<100 이기 때문에 1105ns 순간의 clock rising edge에서 99 + 1인 100인 F/F의 출력값이 생성된다.
로 이해하고있는데,
왜 실제로 vivado simulation 에서 1105ns에 마우스 커서를 갖다가 대면, cnt값이 100으로 나오는지 궁금합니다.
그러면, 1105ns인 순간에 F/F의 입력값은 99가 아닌 100이 아닌가요? 그래서 DUT 코드에 의해 100<100인 조건을 만족하지 못하기 때문에,
1105ns 순간의 clock rising edge에서 그대로 100인 F/F의 출력값이 생성되는 것이 아닌지 궁금합니다.
1. 1095ns인 순간에
cnt의 입력 값(?), 출력 값(?), 마우스 커서를 올리면 나오는 값(99)
2. 1105ns인 순간에
cnt의 입력 값(?), 출력 값(?), 마우스 커서를 올리면 나오는 값(100)
위에서 ?의 값을 모르겠습니다.
질문 받아주셔서 감사합니다.
당연히!!! 질문이 오면 (제가 아는 범위내에서) 답변을 드려야죠. :)
사람이기에 제 답변이 틀릴 수 있습니다.
제 답변을 항상 의심하셔야 하고요. 주변 지인 (교수님, 친구 등) 분들하고 논의를 해보는 것도 좋은 방법같습니다.
============================================================
- 1105ns 순간의 clock rising edge에서 99 + 1인 100인 F/F의 출력값이 생성된다.
- 1105ns에 마우스 커서를 갖다가 대면, cnt값이 100으로 나오는지 궁금합니다.
"1105ns 순간" == "1105 ns" 로 치환하면 위 두 문장은 동일하죠..? (지금 이 순간....;;; 좋아하는 노래입니다.)
일단 윗 질문은 넘어가겠습니다. (당연한 이야기기 때문에, 설명을 드리기 버겁네요 ㅠ 왜 나는 맛비인가..? 이거 설명하는 느낌;;)
1. 1095ns인 순간에
cnt의 입력 값(?), 출력 값(?), 마우스 커서를 올리면 나오는 값(99)
2. 1105ns인 순간에
cnt의 입력 값(?), 출력 값(?), 마우스 커서를 올리면 나오는 값(100)
다음 질문의 "?" 는
delay 정보가 없는 function sim 이기 때문에, "cnt 입력 값" == "F/F 의 출력 값" 이라고 생각하고 있어요.
즉,
"마우스 커서를 올리면 나오는 값" == "cnt 입력 값" == "F/F 의 출력 값 "
이렇게 답변드립니다.
답이 되셨을까.....요...?;;;;;;;;
ps.
제가 답변드리기 너무 버거운데 이 내용 전부 캡쳐해서, 그대로 공개질문으로 올려볼까요....?;;;;;
누군가는 설명을 잘해줄 것 같다는....;;; (제가 놓치고 있는 무언가가 있는건가...;;;)
"1년동안 헷갈리셨다"는 내용인지라.. "하루" 보고 있는제가 부족할 수 있어요 ㅠ 이해 부탁드립니다.
최선을 다해보겠습니다 ㅎ
그림 그려봤어요.
다시 말씀드리지만 Functional sim (현 코드에서는 logic delay 없음) 입니다. 이점을 상기하고 다음그림 봐주세요.
맛비님께서 친절히 답변을 달아두신 덕분에 이해됐습니다. 정말 감사합니다.
마지막으로 질문이 있습니다.
1. always @ (posedge clk or negedge reset_n)
이런 표시가 있으면, 이 문 begin 에서 end로 끝나는 전체가 F/F 한개인지 궁금합니다.
2. 수업시간에 배운것은 J/K F/F , D F/F 등등 여러가지 F/F을 배웠는데,
always @ (posedge clk or negedge reset_n) 문 안의 코드를 보고 어떤 종류의 F/F이 사용되었는지 한눈에 알 수 있는 법이 있는지, 아니면 이 문에서 구현하는 코드는 모두 D F/F인지 궁금합니다!
3. 2일전에 질문드렸던 것 중에 하나인데, 예를 들어서 always (*)안의 n_state 같은 경우에는
combinational logic으로 쓰인다고 말씀해주셨는데, F/F이 아니고서, 저장할 수 있는 logic 또한 존재할 수 있나요?
(제 말은, 어찌됐든, 저장해야하기 때문에 latch나 F/F으로 무조건 쓰여야 하지 않나요?)
(단순 저장하는 변수면, n_state는 어떤 소자라고 부르나요?)