작성
·
162
1
안녕하세요 다름이 아니라 이런식으로 4096이 넘어갈때만 4kboundary규칙을 적용하게 코드를 작성했는데 왜 강의에서 case5에서 transfer byte가 10240일때를 보면 4k바운더리 규칙이 적용되는 구간이 여러번 등장하게 되는데 그러면 8192인 값에서도 4k boundary 규칙이 적용된다는 것인데 왜 적용되는 지 모르겠습니다..!
wire [12:0] addr_4k = 13'h1000;
assign is_4k_boundary_burst = (last_addr_in_burst > addr_4k[12:AXI_DATA_SHIFT]);
답변 1
0
안녕하세요 🙂
4K boundary rule은 "read request address + burst_size 가 4096 byte align 을 넘어서면 안된다." 입니다.
일부러 4K boundary 로직이 잘 동작하는지 확인하기 위한 case 5의 경우,
max burst 는 7개 입니다. (원래드렸던 것은 16 개 였죠.) 즉, 4096 bytes 에 align 되지 않는 burst size 를 발행하기 위해서 바꾼거였어요.
만약에
max burst 가 16 이라면 한번의 transaction 에 8 byte 가 가고요. 8*16 = 128 bytes 씩 read request 가 발행됩니다. 즉 4096 % 128 == 0 으로 시작 address 가 4Kbytes align 이었다면, 4K boundary 내에서 burst 가 넘어가지 않아요. 마찬가지로 10240 % 128 ==0, 8192 % 128 == 0 으로 4K boundary 가 넘어가는 경우가 재현되지 않습니다.
max burst 가 7 이라면 (case 5), 한번의 read request 는 8*7 = 56 bytes 씩 발행됩니다.
따라서 4096 % 56 == 8 입니다. 즉 8 bytes 가 4K boundary 를 벗어나게 되버립니다.
따라서 8*6 을 통해서 4K boundary 에 align 시켜야 해요. 이것을 재현해보고자 했던게 case 5 였습니다.
결국 한번의 transaction 에 해당하는 size 는, 4K boundary 를 넘어가면 안됩니다. 넘어가면 transaction 횟수를 분할해서 보내야 해요.