먼저 0~9까지 카운트하는 C언어 코드를 보겠습니다.

이 코드를 그대로 Data Path를 그리고 flow를 따라가보겠습니다.
1. A = 0


위는 전체적인 DataPath 그림입니다.
Control Unit의 상태에 따라 DataPath의 Flow를 보겠습니다.
a.

먼저 Control Unit에서 MuxSel = 0을 보내면 Data Path의 Mux에서 '0'을 내보냅니다.
b.

그다음 Control Unit에서 En = 1을 보내면 register가 input의 '0'을 output으로 내보냅니다.(다음 CLK에)
c.

reg의 output에서 나온 '0'은 비교기와 adder에 들어가게 됩니다.
비교기의 결과값은 Control Unit의 L10, Adder의 결과값은 Mux의 input으로 들어갑니다.
그리고 Control Unit의 OutBuf는 0을 내보내어 Reg의 output이 최종 OutPut으로 일단 나가지 못하게 합니다.
최종 Output의 출력 결정 여부는 다음과 같습니다.
Control Unit이 비교기의 결과를 가지고 (1 혹은 0), OutBuf의 신호를 (1 혹은 0)으로 내보내어 최종 Output을 내보낼지 말지 결정합니다.
위의 a~c 과정은 첫 CLK동안 이루어집니다.(Reg를 제외한 전부 Combinational Logic입니다)
2. A<10
d.


이미 1-c단계에서 A<10을 연산했지만 C언어 코드 한줄 한줄 그대로 따라가기 위해 이 상태를 추가했습니다.
En은 0을 내보내 Reg input으로 들어온 값을 막아줘야합니다.
MuxSel은 0, 1상관 없습니다(Don't Care). Reg가 이미 input을 output으로 내보내지 못하기 때문입니다. 여기서 저는 0을 줬습니다.
A<10을 판단하고 출력을 내보내야 하므로 OutBuf는 0을 주어 OutPut을 비활성화 시킵니다.
d 과정은 두번 째 CLK동안 이루어집니다.
3. OutPut = A

e.

OutBuf가 1을 내보내 OutPut을 활성화시켜 '0'을 OutPut으로 내보내게 합니다.
MuxSel은 0, 1여전히 상관없고
En은 0을 주어 Reg의 input이 output으로 나온지 못하게 합니다.
e 과정은 세번 째 CLK동안 이루어집니다.
4. A = A + 1

f.

이미 A = A + 1 수행은 1-a ~ 1-c동안 수행은 끝났습니다.
단지 이 결과가('1') Mux의 input 혹은 Reg의 input에서 기다리고 있었고 Reg의 output으로 나오지 못하고있었습니다.
따라서 A + 1된 결과를 Reg의 output으로 나오게 해주기 위해 MuxSel, En은 전부 1을 내보내도록 해줍니다.
그럼 다음 CLK이 되기전까지 Reg의 input은 '1'로 대기를 하다가 다음 CLK에 Reg output으로 '1'이 나오게 됩니다.
그리고나서 2-d로 돌아간 다음, 위 과정을 A<10을 만족하는 동안 반복을 하게 됩니다.
5. Halt


A가 10보다 커지면 MuxSel = 0, En = 0, OutBuf = 0 이 상태를 계속 유지하게 됩니다.
1~5 상태를 ASM 차트로 표현하면 다음과 같습니다.

for (int i = 0; i < 10; i++) 같은 것을 쓰지 않고
Adder, Register, Comparator, MUX등 을 사용한 이유?
c언어인 아래코드를

1. 이걸 하드웨어 수준으로 구체화하여 '전용 하드웨어 구조'를 설계하고 이해하기 위함
2. CPU가 없는 환경(임베디드, 전용 칩)에서도 동작해야 할 때
- 만약 우리가 CPU 없이 단순한 카운터만 동작하는 전용 하드웨어를 만들고 싶다면?
- 이때는 우리가 직접 Adder, Register, Comparator, MUX 등을 설계해서 구현해야 함.
- CPU를 쓰면 너무 비효율적이므로, 필요한 기능만 갖춘 "전용 하드웨어"를 만드는 게 더 경제적.
3. 하드웨어 최적화 (속도, 전력, 면적)
- CPU는 범용적으로 설계되어 있어서 필요 없는 연산도 포함됨.
- 하지만 특정한 연산(예: 0~9 카운트)만 하는 전용 하드웨어를 만들면 훨씬 빠르고 전력 소모가 적음.
- 그래서 ASIC, FPGA 같은 맞춤형 하드웨어 설계가 필요.
각각 Control Unit과 DataPath 코드 (top으로 합쳐서 연결 필요)
'컴퓨터구조' 카테고리의 다른 글
0~10까지 더하는 Dedicated Processor 설계하기 (0) | 2025.04.09 |
---|