UNIT-SPECIFIC ACTIVE LESSON · 6a-2

MemAdr 상태

MemAdr가 어떤 값을 계산하고 어디에 보관하는지 쓰세요.

학습 목표: MemAdr 상태에서 rs1과 sign-extended immediate로 effective address를 계산해 ALUOut에 보관하는 과정을 설명하고 계산할 수 있다.
공식 근거 범위: Probeklausur.pdf 시험 p12의 Mehrtakt FSM MemAdr 상태와 Probeklausur Musterlösung und Hinweise.pdf 공식 해설 p37 MemAdr.

왜 이 소문제를 따로 배우는가

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에 저장됩니다.
  1. rs1과 immediate를 instruction에서 분리합니다.

    base와 displacement의 역할을 바꾸지 않기 위해서입니다.

    종이 산출물: base=R[s1]=0x0200, imm=-8

  2. immediate를 부호 확장한 값으로 해석해 더합니다.

    음수 offset은 base보다 앞쪽 주소를 가리킵니다.

    종이 산출물: 0x0200 + (-8) = 0x01F8

  3. 결과 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 식과 한 문장으로 재구성하세요.

제출 후 모델 답 보기

ALUOut' = R[rs1] + sext(imm). 이 state는 lw/sw의 effective address만 계산하고 memory 접근은 다음 state에 넘깁니다.

2. 변형 문제

s2=0x1000일 때 sw t3,20(s2)의 MemAdr 결과를 구하세요.

제출 후 모델 답 보기

base는 s2이고 t3는 store data이므로 ALUOut=0x1014.

3. 오류 진단

학생이 lw t0,-4(s1)의 MemAdr에서 ALUOut=R[t0]-4라고 적었습니다. 첫 오류를 교정하세요.

제출 후 모델 답 보기

t0는 load destination이고 주소 base는 괄호 안 s1입니다. 따라서 ALUOut=R[s1]+sext(-4)입니다.

이 소문제를 끝냈다고 말할 수 있는 기준

이 소문제의 정확한 공식 페이지와 대조하기

왼쪽은 문제를 읽을 때, 오른쪽은 자신의 풀이를 끝낸 뒤에 확인하세요. 해설 이미지를 먼저 보면 중간 과정을 스스로 만드는 연습이 사라집니다.

6a-2 관련 공식 시험 또는 해설 페이지
exam-p12.png · 클릭해 원본 크기로 확인
6a-2 관련 공식 시험 또는 해설 페이지
solution-p37.png · 클릭해 원본 크기로 확인

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.