컴퓨터구조

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

_KDE_ 2025. 4. 9. 21:12

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<=10) // 두 번째 CLK

두 번째 CLK이 들어오자마자 i_reg의 output으로 값이 나오고 comparator에서 비교를 시작합니다.

 

추가로 reg의 out이 mux와 adder를 통과하게됩니다. 그리고 화살표 방향으로 data가 움직여 sum_reg , i_reg의 input에 도착하게 됩니다.

(mux, adder는 combinational logic이기 때문)

 

크게 의미는 없는 값입니다.


sum = sum + i // 세 번째 CLK

두 번째 CLK 단계에서 나온 sum_reg와 i_reg의 output 값을 더해주는 단계입니다. adderSrcMuxSel을 0으로 주어 sum_reg의 output이 adder로 들어갈 수 있게 해줍니다.

 

그러면 i_reg와 값이 더해지고 adder의 결과값은 화살표 방향을 따라 sum_reg inpu에 가게 됩니다(sumSrcMuxSel = 1이기 때문)

이 때 sumEn은 1을주고 iEn은 0을 줍니다. 그러면 다음 네 번째 CLK에 sum_reg의 output으로만 sum + i한 결과가 나가게 됩니다.

iEn은 0 이므로 iSrcMuxSel은 don't care입니다.

 


i = i + 1 // 네 번째 CLK

i = i + 1을 해주기 위해 adderSrcMuxSel = 1 을 주어 i를 1과 더할 수 있게 해줍니다. 그럼 adder를 통해 두 번째 CLK 부터 있던 i값(=0)이 adder를 통해 1이 되고 화살표 방향을 따라 i_reg의 input에서 대기하게 됩니다. 그럼 다음 CLK에 i_reg의 output으로 i + 1(=1)이 나가게 됩니다.


outport = sum // 다섯 번째 CLK

outport 에 sum을 출력하기 위해 OutBuf를 1로 주어 OutPort를 활성화 시켜주면 됩니다. 

이후 while<10구문으로 돌아가서 위 과정을 반복 합니다.


halt 

 

i가 11이 되면 조건을 더 이상 만족하지 못하므로 halt에서 무한 대기하게 됩니다.


위를 ASM차트(control unit 신호 생략)로 표현하면 다음과 같습니다.


OutPort 비활성화시 이전 값 유지하기

보기와 같이 output을 바꾸어 줍니다. outBuf를 enable신호로 받으면 이전 값을 유지하고 있다가 clk신호와 outbuf를 1로 받으면 새롭게 갱신하게 됩니다.

 

'컴퓨터구조' 카테고리의 다른 글

0~9까지 카운트하는 Dedicated Processor 설계하기  (0) 2025.04.06