왜 이 소문제를 따로 배우는가
load/store는 주소 계산과 memory 접근이 다른 cycle에 일어납니다. 이를 합쳐 생각하면 FSM state와 control path를 잘못 그리게 됩니다.
이 페이지는 Aufgabe 6의 공통 템플릿이 아니라 6a-2 MemAdr 상태에 필요한 내용만 담습니다. 챕터 전체 배경이 필요하면 Aufgabe 6 개념 수업을 먼저 읽으세요.
이 소문제에서 실제로 쓰는 용어
정의뿐 아니라 이 문제의 어느 판단에 쓰이는지까지 연결합니다.
- effective address
- 실제 memory 접근에 사용할 base register 값과 offset의 합입니다.이 소문제에서: lw/sw가 다음 state에서 사용할 주소를 계산할 때 사용합니다.
- rs1
- load/store 주소 계산의 base 값을 제공하는 source register입니다.이 소문제에서: MemAdr ALU 첫 입력의 의미를 명시할 때 사용합니다.
- sign extension
- signed immediate의 부호를 유지하면서 processor data width로 넓히는 연산입니다.이 소문제에서: 음수 offset도 base에 정확히 더할 수 있게 설명할 때 사용합니다.
- ALUOut
- ALU 결과를 다음 Mehrtakt state까지 보관하는 중간 register입니다.이 소문제에서: MemAdr에서 계산한 주소의 destination을 명시할 때 사용합니다.
이 소문제 전용 규칙과 종이 작업
주소는 base+signed offset이다
load/store syntax imm(rs1)의 실제 byte 주소는 Register File의 rs1 값과 확장한 immediate의 합입니다.
종이에: instruction을 EA = R[rs1] + sext(imm) 식으로 다시 씁니다.
MemAdr는 memory access 이전 상태다
이 state의 목적은 주소 계산과 ALUOut 보관이며 Data Memory read/write는 후속 state가 수행합니다.
종이에: MemAdr 결과 칸에는 ALUOut만 쓰고 memory data 결과 칸은 비워 둡니다.
Aufgabe 전체 흐름은 챕터 흐름도에서 확인할 수 있습니다. 여기서는 현재 판단에 직접 필요한 규칙만 적용합니다.
이 소문제 전용 작은 예제
s1=0x0200일 때 lw t0,-8(s1)의 MemAdr state 결과를 구하세요.
주어진 것
- offset -8은 signed immediate입니다.
- 주소는 byte 단위입니다.
- ALU 결과는 ALUOut에 저장됩니다.
- rs1과 immediate를 instruction에서 분리합니다.
base와 displacement의 역할을 바꾸지 않기 위해서입니다.
종이 산출물: base=R[s1]=0x0200, imm=-8
- immediate를 부호 확장한 값으로 해석해 더합니다.
음수 offset은 base보다 앞쪽 주소를 가리킵니다.
종이 산출물: 0x0200 + (-8) = 0x01F8
- 결과 destination을 ALUOut으로 적습니다.
다음 memory state가 안정된 effective address를 사용해야 합니다.
종이 산출물: ALUOut' = 0x01F8
예제 답과 독립 검산 보기
MemAdr 종료 시 ALUOut=0x01F8이며 아직 t0 writeback이나 memory read 완료를 주장하지 않습니다.
독립 검산: offset -8을 +8로 처리하지 않았는지, 결과가 ALUOut이지 일반 rd가 아닌지 확인합니다.
이제 실제 시험 문제를 micro-work로 풀기
공식 시험이 요구하는 것
MemAdr가 어떤 값을 계산하고 어디에 보관하는지 쓰세요.
공식 답을 보기 전, 내 답 먼저 남기기
완성 문장이 아니어도 좋습니다. 중간값·register·cycle·cache state처럼 채점 가능한 흔적을 먼저 적으세요.
각 작업의 중간 산출물을 직접 적고 완료 조건을 만족한 뒤 체크하세요. 단계별 이유·산출물·오류가 현재 소문제에 맞게 따로 작성되어 있습니다.
rs1 값을 읽습니다.
- 왜 하는가
- effective address의 base는 load/store의 괄호 안 register가 제공합니다.
- 종이 산출물
- R[rs1] 값을 base 항으로 적습니다.
- 완료 조건
- store data register와 주소 base register를 구분합니다.
막혔을 때 단계 힌트·대표 오류
힌트: imm(rs1) 표기에서 괄호 안 이름을 찾으세요.
이 단계의 대표 오류: sw의 첫 register를 주소 base로 사용합니다.
immediate를 extend합니다.
- 왜 하는가
- processor width의 ALU에서 signed offset을 더하려면 부호를 유지해 확장해야 합니다.
- 종이 산출물
- imm의 decimal/hex 값과 sext(imm)를 적습니다.
- 완료 조건
- 음수 immediate가 큰 unsigned 양수로 잘못 바뀌지 않습니다.
막혔을 때 단계 힌트·대표 오류
힌트: 최상위 immediate bit가 1이면 상위 bit를 1로 채웁니다.
이 단계의 대표 오류: zero extension을 사용해 음수 offset을 양수로 만듭니다.
ALU add를 수행합니다.
- 왜 하는가
- RISC-V load/store의 effective address는 base와 byte offset의 합입니다.
- 종이 산출물
- EA = R[rs1] + sext(imm)의 중간 산술을 적습니다.
- 완료 조건
- 단위를 byte address로 유지한 최종 EA가 있습니다.
막혔을 때 단계 힌트·대표 오류
힌트: word index를 곱하는 문제가 아니라 instruction에 이미 byte offset이 들어 있습니다.
이 단계의 대표 오류: offset에 다시 4를 곱합니다.
ALUOut에 effective address를 저장합니다.
- 왜 하는가
- Mehrtakt datapath에서 후속 lw/sw state가 이 주소를 다음 cycle에 사용합니다.
- 종이 산출물
- ALUOut' = EA를 박스로 표시합니다.
- 완료 조건
- 이 state에서 완료된 것과 아직 하지 않은 memory access를 분리해 설명합니다.
막혔을 때 단계 힌트·대표 오류
힌트: 상태 이름은 MemAdr이지 MemRead 또는 MemWrite가 아닙니다.
이 단계의 대표 오류: 같은 state에서 Data Memory read/write와 register writeback까지 끝났다고 씁니다.
공식 답을 열기 전 마지막 회상
`lw t0,12(s1)`의 MemAdr 결과는 어떤 식인가요?
내 풀이 후 공식 결론·이유·대표 함정 확인
공식 결론
ALU addiert Basisadresse und erweiterten Offset; die berechnete Speicheradresse wird für späteres lw/sw im ALUOut-Register gespeichert.
왜 이 답이 되는가
Load/store의 effective address는 base register + sign-extended offset입니다. ALU 결과는 다음 state가 쓰도록 ALUOut에 저장됩니다.
대표 함정
이 state에서 data memory read/write까지 끝난다고 쓰지 마세요. 주소 계산 단계입니다.
새 문제로 전이하기
세 문항은 앞 문장의 반복이 아닙니다. 직접 답을 입력하면 rubric의 필수 기준을 하나씩 검사하고, 첫 누락 기준을 알려 줍니다.
1. 개념 재구성
MemAdr state를 하나의 register-transfer 식과 한 문장으로 재구성하세요.
base, sign-extended immediate, ALUOut을 포함하세요.
제출 후 모델 답 보기
ALUOut' = R[rs1] + sext(imm). 이 state는 lw/sw의 effective address만 계산하고 memory 접근은 다음 state에 넘깁니다.
2. 변형 문제
s2=0x1000일 때 sw t3,20(s2)의 MemAdr 결과를 구하세요.
store data t3는 주소 계산에 더하지 않습니다.
제출 후 모델 답 보기
base는 s2이고 t3는 store data이므로 ALUOut=0x1014.
3. 오류 진단
학생이 lw t0,-4(s1)의 MemAdr에서 ALUOut=R[t0]-4라고 적었습니다. 첫 오류를 교정하세요.
load syntax에서 destination과 base를 구분하세요.
제출 후 모델 답 보기
t0는 load destination이고 주소 base는 괄호 안 s1입니다. 따라서 ALUOut=R[s1]+sext(-4)입니다.
이 소문제를 끝냈다고 말할 수 있는 기준
이 소문제의 정확한 공식 페이지와 대조하기
왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.
Source: Probeklausur.pdf / Probeklausur Musterlösung und Hinweise.pdf · 시험 p12–13 · 공식 해설 p37–38 · Probeklausur.pdf 시험 p12의 Mehrtakt FSM MemAdr 상태와 Probeklausur Musterlösung und Hinweise.pdf 공식 해설 p37 MemAdr.

