전체 글 29

0~10까지 더하는 Dedicated Processor 설계하기 v2

이전에는 register를 2개를 사용하여 0 ~ 10까지 더하는 processor를 설계했었습니다. 하지만 register의 요구 개수가 많아지게 되면 단순히 register의 개수를 늘리기에는 한계가 있습니다. 이러한 이유로 register를 여러개로 묶고 read/write이 가능한 register file을 이용합니다.이전에 했던 구조는 아래와 같습니다. 이것을 아래와 같이 registerfile을 사용한 버전으로 바꾸어 줍니다.register file 내부 register의 r0는 0을 default로 담고 있습니다. 그리고 이전 글에 썼던 코드를 register를 이용해 살짝 바꾸어줍니다위 코드를 표 형식의 ASM으로 나타내면 아래와 같습니다.R1은 [1]번지, R2는 [2]번지에 저장할 것..

컴퓨터구조 2025.04.24

C언어 구조체, 포인터

volatile : compiler한테 최적화 하지마라는 뜻보통 register 앞에 volatile을 많이 붙임 GPO_TypeDef라는 하나의 자료형을 정의GPO_TypeDef자료형은 unsigned 32bit짜리 MODER와 unsigned 32bit짜리 ODR을 가지는 자료형(총 8 byte) LED_init이라는 함수는 매개변수로 GPO_TypeDef라는 자료형을 받음매개변수는 주소값을 받을 것임(GPOx라는 주소) GPO_TypeDef *GPOx 의미 : GPOx(주소)가 가리키는 곳의 자료형은 GPO_TypeDef형임 이 함수를 호출하면 GPOx가 가리키는 곳에 저장된 GPO_TypeDef형으로 선언된 값을 찾아감 그 값은 GPO_TypeDef형이므로 MODER와 ODR변수를 가지는데 ..

개념 이것저것 2025.04.21

메모리 매핑

CPU는 RAM, ROM, peripheral등 여러 장치들과 연결되어 있습니다.이 때 CPU는 각 장치들과 DATA, ADDRESS가 연결되어있습니다.그런데 만약 RAM에 DATA를 write하고 싶은데 RAM, Peri1, Peri2 등 DATA path가 전부 쇼트되어있습니다.Address도 마찬가지입니다. 그래서 내가 원하는 장치를 지정하고 그 장치에만 값을 write이나 read를 할 수 있게 하는 것이 '메모리 매핑'입니다. 예를 들어 CPU가 16bit Address를 내보낸다고 가진다고 가정해보겠습니다.(A16,A15,A14 ... , A1,A0)여기서 상위 3bit를 가지고 RAM, Peri1, Peri2 중 어떤 장치를 선택할지 정하는 것입니다. (low enable이라 0인 것이 선택..

컴퓨터구조 2025.04.19

0~10까지 더하는 Dedicated Processor 설계하기

0~10까지 더하는 C언어 코드는 아래와 같습니다. 이를 blockdiagram으로 살펴보면 아래와 같습니다.i = 0, sum = 0 // 첫 번째 CLK각 mux에서 0을 선택해야 하므로 sumSrcMuxSel, iSrcMuxSel 전부 0을 줍니다   sumEn과  iEn에 1을 줘서 다음 CLK에 각 reg의 output으로 값이 나올 수 있게 해줍니다. 아직 reg의 output이 나오지 않으므로 adderSrcMuxSel은 dont care입니다. 아직 outport로 출력단계도 아니므로 OutBuf도 0입니다 while (i두 번째 CLK이 들어오자마자 i_reg의 output으로 값이 나오고 comparator에서 비교를 시작합니다. 추가로 reg의 out이 mux와 adder를 통과하게됩..

컴퓨터구조 2025.04.09

설계 목적에 따른 추상화

adder를 설계시 (ripple-carry adder) 위와 같이 짜야하는데 이걸 8비트 ripple-carry로 만들려면 8개를 이어붙이고 carry 연결하면 복잡해지고 길어짐  하지만 processor 설계를 예를 들면 1. 설계 목적에 따라 추상화 수준이 다름전체 데이터 경로(데이터패스)와 제어 흐름이 어떻게 연결되고 동작하는지를 보는 게 목적임 즉, “동작 흐름 설계”가 핵심이지, 개별 게이트까지 구현하는 게 핵심이 아님. 그래서 Adder는 내부 구조보다 “Adder가 있다”는 사실만 명확하게 표현하면 됨.  2. 합성 도구가 알아서 Gate-Level로 바꿔줌 assign sum = a + b; 위 코드는 컴파일러가 내부적으로 carry-lookahead adder, ripple-carry ..

개념 이것저것 2025.04.06