해결된 질문
작성
·
305
1
안녕하세요 맛비님. 강의 매우 잘 보고 있습니다.
이번 강의 내용에서 lab10_main.c 코드를 분석해보다가 질문드릴께 있어 글을 작성하게 되었습니다.
usleep 체크를 한 뒤 FSM을 돌리기 위해 i_run 신호를 발생시키기 전에 IDLE state를 체크하시는 부분을 확인해보고 있었는데요.
이 부분을 아래와 같이 수정해서 어떤 값을 읽고 있는지 확인해보았습니다.
출력되는 값이 5였습니다. 이 말은 IDLE과 DONE이 모두 active high라는 상태 같아서 제가 제대로 이해한게 맞는지 궁금합니다.
연계해서 한가지 더 궁금한점은 do while문이 iteration 하는 횟수가 PL에서 동작하는 클럭과는 무관하게 돌아가는거 같은데요. 이 부분은 DONE 신호를 기다리는 파트에서 마찬가지로 printf 넣어서 갯수를 한번 세어봤거든요. data로 1M을 입력 했으면 do while문도 1M 번 반복할 줄 알았는데 훨씬 많은 횟수의 iteration을 도는 것으로 보이는데요. 이 부분은 PS와 관련이 있는 걸까요?
너무 기초적인걸 질문드리는건 아닌지 조심스럽지만... 용기내어 질문드려봅니다.
감사합니다.
답변 1
1
안녕하세요 :)
의도된 것이긴 합니다. (이것까지 확인해보시다니... 좋은 질문 감사합니다.)
아시다시피, fsm_counter_test.v 에서는 idle 과 done 이 동시에 나올 수 없도록 되어 있는데요. 하지만!
myip_v1_0_S00_AXI.v 코드를 보시면,
r_done 으로 F/F 으로 처리합니다.
즉, 전원을 키고 가장 처음 동작할때는 "1" 로 읽힐 것 같으나, 일단 한번 돌면, "5" 로 읽힐 것 같아요.
일부러 r_done 으로 하였구요. r_done 이 꺼지는 조건은 run 신호가 들어올 때 입니다.
PS 에서 Done 을 읽고 있는데, done 이 1 tick 혹은, fsm 의 o_done 이라면, 신호를 놓칠 수 있기 때문에 (PS 의 AXI4-Lite 를 통해서 PL 의 값을 읽고 있는데, Timing Sync 가 맞지 않겠죠) 그래서 r_done 으로 처리를 해 놓았습니다.
"5" 가 현재 동작에는 문제가 없지만, 혹시 거슬리신다면,
우회 할 수 있는 방법은 많아요. 예를 들어 PS 에서 Done 을 읽은 후, PL 에 Done 신호를 클리어 하도록 신호를 보내준다던가 하시면 됩니다. :)
연계해서 한가지 더 궁금한점은 do while문이 iteration 하는 횟수가 PL에서 동작하는 클럭과는 무관하게 돌아가는거 같은데요. 이 부분은 DONE 신호를 기다리는 파트에서 마찬가지로 printf 넣어서 갯수를 한번 세어봤거든요. data로 1M을 입력 했으면 do while문도 1M 번 반복할 줄 알았는데 훨씬 많은 횟수의 iteration을 도는 것으로 보이는데요. 이 부분은 PS와 관련이 있는 걸까요?
PS 의 Operating Freq, 와 PL 의 Operating Freq 가 다릅니다. 위 Case 에서는 저도 몇번? 이 나올지 모르겠네요. PS 는 Arm Processor 라서 온도같은 컨디션에 의해서 Run/Done 의 Print 찍히는 횟수가 Random 하게 바뀔꺼에요. (여러번 해보시면 재현 될 것 같습니다. 예를 들어 1000번 찍혔다가, 1001 번 찍혔다가 이런식으로?)
앞서 주신 정보로.. 더 많은 횟수의 iteration 이란 표현을 써주셨는데, 맞을지는 모르겠으나, PS 의 동작주파수가 600 MHz 이상일거에요. PL 은 100MHz 죠.
여러 요인이 있을꺼지만, Freq 때문이지 않을까? 생각합니다.
즐공하세요 :)
맛비님! 빠른 답변 감사합니다. 이스터에그를 여기저기 숨겨두셨군요! ㅎㅎㅎ 열공해서 다 찾아봐야겠습니다. 말씀하신대로 r_done 신호로 타이밍 다시 확인하면서 공부해보겠습니다.
그리고 PS clock때문에 do while 문은 PL 100 MHz와 다르게 찍는것 같습니다. 지금 확인해보니 100만 카운트 셀 동안 do while문은 453만번 찍히는걸로 나오네요. PS clock는 667 MHz로 확인되는데 453만번만 카운트되는건 말씀해주신대로 arm processor 컨디션에 의한거 같습니다.
답변 감사합니다!