본문 바로가기
반응형

일단 제가 준비한 건,263

VIVADO 사용법 ( board 연결, zynq 7000, Vits 연결 ) 1. 먼저 비바도를 실행시킨 뒤에 "Create Project"를 누른다. 2. 아래와 같은 창이 뜨는데, 파일 저장 위치랑 파일 이름은 기호에 따라 지정한다. 3. 여러 타입이 있는데 RTL로 설정했다. 아래 옵션은 따로 누르지 않았다. 4. 추가할 소스가 없기 때문에 "NEXT"를 누른다. 5. 이게 중요한데, 내가 불러올 Board를 검색한다. 없다면 왼쪽 아래 "Refresh"를 눌러서 찾아본다. 필자는 ZedBorad를 선택했다. 그리고 "Status"에서 다운로드를 실행한다. 다운로드가 완료되면 아래 제일 아래 이미지와 같이 뜬다. 만약 보드가 없어도 그냥 선택해서 하면 된다. + 이게 보드가 없을 수도 있다. 필자도 그랬다. 처음에 했을 때 있었는데 다시 하려고 하니 보드가 없다.. 이럴 땐.. 2022. 9. 20.
TLB란? ( page table, 48bit 가상 공간, virtual memory, ASID , TTBR, arm ) TLB (Translation Lookaside Buffer) 요놈을 알기 위해선 page table이라는 개념을 알고 있어야 한다. 알아보자 Page Table page table이란 간단히 말해 가상 주소와 실제 주소를 mapping 하는 table이다. CPU가 가상 주소를 생성하면 이 가상 주소가 실제 주소로 어떻게 변환되어야 하는지 정보를 가지고 있는 것이다. 다른 말로 하면 실제 주소를 가지고 있다. 메인 메모리에 존재하며 프로세스마다 고유의 page table을 가진다. context switching 할 때마다 page table도 변경돼야 한다. 즉, CPU가 어느 page table을 사용할지 알아야 한다. 어떻게 알까? CPU안에는 특별한 레지스터가 존재하는데 ARM에서는 TTBR (.. 2022. 8. 24.
Arm Private Timer ( zynq 7000 board, Load 레지스터, counter 레지스터, status 레지스터, control 레지스터 ) Timer는 어떻게 작동할까? 타이머는 시간을 설정하고 설정한 시간이 끝나면 어떤 이벤트가 발생하는게 기능적인 동작이다. 아래 Zynq-7000의 내부를 살펴보면, Timer가 여러 개가 있다. 이 중에서 Private timer에 대해서 더 알아보자 Private Timer 4개의 레지스터가 존재하는데 하나씩 보자 1. Load Register - 간단히 말하면 사용자가 설정한 시간을 저장하는 레지스터다. 길이는 32bit다. 2. Counter Register - 마찬가지로 32bit인데 숫자를 세는 레지스터다. 위에 Load 레지스터와 어떻게 연결돼 있는지 보면, str r2, [r3] 동작을 수행했다고 하자. 이때 r3의 주소가 Load 레지스터고 r2에는 1000이 저장돼 있다고 하면, load.. 2022. 8. 10.
Arm calling convention ( 레지스터 사용, caller, callee, AAPCS ) caller와 callee가 있다. 직역하면 caller는 호출한 놈이고, callee는 호출당한 놈이다. 조금 다르게 보면 caller는 main구문이고, callee는 호출 함수다. 그렇다면 main에서 레지스터를 사용하고 있을 텐데 callee 즉, 함수에서는 어떤 레지스터를 사용해야 할까?? Arm에서는 지정 레지스터만 사용하게 했다. 이게 AAPCS ( Procedure Call Standard for ARM Architecture )이다. Arm CPU에는 16개의 레지스터가 있는데 이때 callee는 r0~r4 레지스터만 사용할 수 있다. 사용할 수 있다는 말은 넘겨줄 수 있는 인자를 4개의 레지스터에게만 보낼 수 있다. 그럼 4개가 넘어가면 어떻게 될까?? 이때부터는 stack을 사용한다... 2022. 8. 2.
설계한 RISC-V CPU에서 연산자를 추가하는 접근법 1. 먼저 eclipse에서 code의 Dump file을 확인한다. 하면 아래와 같은 코드들로 이루어져 있다. 32bit라 가정하면, Hex를 2진수로 분해한다. 58: 3ff7c793 xori a5,a5,1023 80: fee7f4e3 bgeu a5,a4,68 2022. 7. 1.