제어/전자HW설계 12

LAB8

비디오 아웃풋 포트를 가지고 있는데 실제로 RGB를 연결할 수 있는 커넥터가 있다. VGA 컨트롤러는 640, 480 연결할 수 있구요 비디오 아웃풋은 결국 GPIO의 형태고 GPIO는 메모리 맵드 IO 형태로 우리가 Access하게 된다. 구체적으로 어떻게 하는지에 대해서 다음 슬라이드에서 얘기해봅시다. 기본적으로 그래픽에 대해서 얘기해봅시다. 이미지가 두가지 포멧이 있는데 벡터 이미지가 있고 Raster 이미지가 있다. 벡터이미지 사각형으로 주어지는데 =>식의 형태로 되어있어요 장점은 확대하거나 늘려도 깨지지 않습니다. 파워포인트에서 그림을 그렸을 때 네모가 깨지거나 그러지 않죠=> 수식으로 되어있어서 깨지지 않는거에요. 단점은 실제로 나타낼 때 연산을 많이 해야 합니다. Raster 이미지는 Bit..

Lab7

키0가 눌리면 인터럽트가 발생하고 발생하면 내용이 바뀌어서 LEDR0가 깜빡 깜빡하게 되는 형태 c코드 파일이 3개로 구성되어있다. 심플C 메인 함수가 들어있는 c파일이 있고 실제로 우리가 푸쉬버튼을 눌렀을 때 사용되는 함수가 들어있는 C파일 하나가 있고 exception 핸들러 인터럽트가 발생했을 때 중간에서 처리해주는 파일이 있다. 어셈블리어로 인터럽트 구현할 때는 정확하게 세개로 나눠서 구현을 했는데 이번에도 똑같다. nios2_ctrl_reg 컨트롤 레지스터랑 관련된 메크로를 집어넣는다 c언어에서 메크로를 배웠었다. 간단한 한줄 짜리 문구를 함수 비슷하게 구현하는것이 메크로 그것을 먼저 보고 넘어가죠 프로세싱하기 전 단계에서 코드를 원래 짜면 컴파일러가 읽어서 해석을 해서 바이너리로 만들기 전에 ..

Lab6

가장 간단한 프로그램을 해보려고 하는데 Exam1으로 프로젝트를 하나 만든다. Nios II를 하나 만들고 c프로그램으로 선택하고 JTAG_UART를 선택한다. C 언어의 경우 JTAG_UART가 모니터 프로그램에 나온다. 디버깅하기가 너무 편해졌다 컴파일러가 어셈블리어로 쫙 바꾼다. printf를 했을 때 어떻게 되느냐 일일이 따라갈 필요는 없다. 결과값은 터미널 창에 나온다. 레지스터나 메모리 탭을 띄우지 않아도 된다 실험 6에서는 IO하는 부분을 다룰 것이다. 6장에서는 POLLED IO 7장에서는 INTERRUPT IO 푸쉬버튼 키가 4개 있는데 KEY0나 KEY2중에 하나를 누르면 출력이 되고 KEY3나 KEY1을 눌렀을 때 출력이되는데 몇개가 눌렸는지를 출력하는 형태를 돌려보려 한다. 우측에 ..

Lab5

인터럽트 IO를 실습해볼 것이다. Exception 말 그대로 예외 내부에서 혹은 외부에서 이벤트가 발생할 때 0으로 나눈다거나 컴파일러의 버그나 해킹을 당해서 없는 instruction set을 undefined instruction 혹은 외부 인터럽트가 있을 때 (키보드나 마우스의 푸쉬버튼,센서 등등) 이러한 exceptional한 이벤트들이 들어오는게 인터럽트 hardware interrupt에 대해서 주로 다룰것 입니다. trap이라는 명령어가 있는데 이것을 사용하면 인터럽트가 발생합니다. 운영체제에서(?) 쭉 하다가 프로세스 동작하는것을 끊고 넘겨준다거나 시스템 콜을 할 때 exeption을 발생시킬 때 trap을 사용하곤 합니다. 하드웨어,소프트웨어,언디파인드 세가지로 분류한다. 인터럽트가 발..

Lab4

IO를 하려고 임베디드 시스템을 한다. lab4에서는 인터럽트를 사용하지 않고 사용하는 IO lab5에서는 인터럽트를 사용해서 IO를 사용한다. Memory-Mapped IO 메모리의 일정 부분인냥 IO를 다루게 된다. 다른 프로세서들은 IO를 위한 포트가 따로 있고 명령어가 따로 있고 사용하는 방식도 다른 방식으로 동작하는데 Memory -mapped IO는 메모리 명령어와 동일하게 사용한다. peripheral device와 load/store 명령어를 사용해서 peripherals도 사용할 수 있다. io 명령어를 뒤에 붙여주면 된다. 안붙여줘도 되지만 cache를 bypass 해주기 위해서 io를 뒤에 붙여 준다. cache 캐시는 cpu에 있는것 (서럽장 같은 존재. 사용하면 빠른데 캐시에 있는..

[전자HW설계] LAB3

FIND SUM C에서는 while문을 사용하면 된다. N0이 0이 아닐 때 까지 N을 더한다. BUBBLE SORT 파트2는 sorting 즉 정렬을 할 겁니다. 시간적 복잡도 폴리노미얼 time에 풀 수 있으면 컴퓨터가 풀만한 문제 지수적으로 증가하는 형태이다==>컴퓨터가 풀기 어려운 문제 descending order로 해라 추가적인 메모리를 사용하지 말고 주어진 메모리만 사용해라 데이터들의 위치만 바꿔가면서 정렬을 해라 소팅 루틴 자체는 서브루틴이 필요 없다=>안쓰는 방향으로 설계하세요. 데이터가 들어있는 리스트는 워드 타입으로 되어있다. 32비트라서~ 가장 먼저 오는 숫자는 원서의 갯수를 적어준다. 모니터 프로그램에서 메모리 탭을 열면 메모리 값을 볼 수 있다. 포인터는 주소값을 저장하는 변수입..

[전자HW설계] LAB2

32개 비트 중에서 1이 몇번 연달아서 나오느냐? 가장 간단한것은 for문 돌리는거겠죠? 계속 1일 때 까지 모니터링하다가 1나오면 스탑하고 그것이 max면 비교해서 갈아치우고? for문 돌리면 몇번 돌아가는가? 0~31까지 32번 루프가 돌게 되어있다. r9에 NUM을 집어 넣습니다. 0x 뒤에 있는 애가 16진수다라는 말입니다. 알파벳 하나가 4개의 비트를 표현합니다. 32비트면 4개가 8개 있어야겠죠? 16진수로 적는 이유는 사람들이 읽기 편하니까 r9에 들어가게 되는데 r9에 있는 2진수 중에서 비트1이 몇번 나오는지 카운트 할것이다. r10은 결과를 저장시키기 위한 레지스터 r9에는 3fabedef 들어가 있다. srli r11, r9, 0x01 shift right logical i 1만큼 오..

[전자HW설계] 3-1 [Nios II 이론 마무리]

Assembler Directives .으로 시작하고 뒤에 키워드가 나옵니다. .ascii 'string" 문자열은 ""안에 넣어야 문자열이구나 하고 인식하고 알파벳 하나 하나에 해당하는 메모리에 들어간다. byte나 word 뒤에 숫자를 쓰면 거기에 해당하는 형태로 초기화가 된다. .data 뒤에 있는것은 데이터이다. .equ define 하는것과 비슷함 symbol, expression이 같은것 .global symbol 모든 영역에서 다 보이는 변수를 지정 .include "filename" c에서도 마찬가지로 헤더파일을 사용하는데 일종의 헤더파일을 설정할 때 include를 해서 사용 (equ등을 지정해놔서 include 해줄 수 있는것) .org new-Ic 잘 안씀 .skip size size..

[전자HW설계] 2-2

32비트 CPU를 사용하고 있고 한 워드 단위로 데이터를 취급하고 있기 때문에 4바이트 단위 32비트 단위로 데이터를 읽어온다. 32-bit address는 어드레스 공간이 0번지부터 2^31승 까지 있다는 것 4바이트 단위로 읽거나 쓰거나 한다. 어드레싱은 메모리에서 데이터를 읽어서 레지스터에 가져오는데 Ld, St (reg->mem) immediate mode 16비트 오퍼 랜드가 instruction이 정확하게 정해져 있다. 오퍼랜드는 오퍼레이션의 타깃이 되는 것 절댓값이 적혀있는 게 immediate mode ==>그냥 숫자? register mode 데이터가 레지스터에 들어가 있고 ri에서 i는 숫자를 의미하는 것 ==> 실제 데이터 r1, r2, r3.. register indirect mod..