이전에는 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]번지에 저장할 것
1) R1 = 0
R1 = 0을 만들어주기 위해 readAddr1,2를 전부 [0]번지로 선택해서 더한 값을 [1]번지에 저장합니다
2) R2 = 0도 마찬가지입니다.
3) R3 = 1
r1 = r1 + 1을 해주기 위해선 1이 필요합니다 따라서 R3에 1이라는 값을 저장해 주어야 합니다.
RFSrcMuxSel에서 '1'을 선택하기 위해 1신호를 줍니다.
그리고 writeAddr에서 [3]을 택하고 write해줍니다.
4) while R1 <= 10
R1을 선택해주기 위해 readAddr1을 [1]로 해줍니다
여기서 R1 <= 10이면 바로 아래 5)으로 가고 아니라면 8)으로가서 halt가 됩니다.
즉 Control Unit을 설계할 때 iLE10을 가지고 어느 state로 갈지 정해주면 됩니다.
5) R2 = R2 + R1을 위해
1번지 2번지를 불러서 writeAddr 을 [2] 선택해서 writeEn을 1해주어 R2에 결과를 저장
6) R1 = R1 + 1
[3]번지에 저장된 1을 부르고 R1도 불러서 다시 R1에 저장
7) outport = R2
outBuf = 1을 해주고 readAddr을 [2] 선택해서 outport로 R2를 출력합니다.
대신
8) halt
마지막은 10까지 다 더하고 R1이 11이상이 되어서 계속 halt에서 머무는 상태입니다.
표에는 나와있지 않지만 control unit에서 주는 모든 신호를 0으로 주면 됩니다.
'컴퓨터구조' 카테고리의 다른 글
메모리 매핑 (0) | 2025.04.19 |
---|---|
0~10까지 더하는 Dedicated Processor 설계하기 (0) | 2025.04.09 |
0~9까지 카운트하는 Dedicated Processor 설계하기 (0) | 2025.04.06 |