본문 바로가기

컴퓨터 구조론( MIPS )

프로세서 2- Load or Store 명령어, branch 명령어

728x90
반응형

 

안녕하세요. WH입니다.

이번 글은 lw, sw 그리고 beq 같은 분기 명령어의

데이터 패스에 대해 알아보겠습니다.

 

Load or Store 명령어 데이터패스

일반적으로 사용하는 예시는 아래와 같죠?

 

lw $t1, offset_value($t2) or sw $t1, offset_value($t2)

 

뭐 대체로 이런 형식이란 말이에요. lw와 sw는 베이스 레지스터( $t2 )와 명령어에 포함되어 있는 16비트 부호있는 변위 필드( offset_value )를 더해서 메모리 주소를 계산하잖아요? load 명령을 예로 들면, 메모리로 부터 읽어 들인 값을 $t1

에 써야 되죠? 그럼 레지스터 파일이 우선 필요하겠어요 읽기 포트 1개, 쓰기 포트 1개만 쓰겠네요? 또 필요한 게 뭐가 있을까요? 아 데이터 메모리가 필요하겠네요? 메모리의 데이터를 가져오고 넣어야 하니까요. 그 다음은 부호 16비트를 32비트로 확장해줘야 하니까 확장 유닛이 필요하겠네요. 자 그럼 구성 요소들을 좀 만나 봅시다.

데이터 메모리

   2개의 입력( 주소와 write data )와 1개의 출력으로 구성되어 있답니다. 명령어가 lw or sw 인지에 따라 MemWrite 또는 MemRead가 작동해 Write data와 Read data 하나만 사용됩니다.

부호 확장 유닛

  16 비트의 입력을 32비트의 부호 있는 값으로 확장 시켜주는 유닛이랍니다. 맨 왼쪽( MSB ) 16 비트를 복제해 16개를 추가시켜 32 비트를 만드는 구조랍니다.

 

데이터 패스 ( sw )

데이터 패스 ( lw)

branch 명령어 데이터 패스

  beq나 bne 명령어는 비교할 레지스터 두개와 16비트 변위의 세 피연산자를 갖습니다. 변위는 분기 명령어 주소에 대한 상대적인 분기 목적지 주소를 계산하는데 사용되요. 기억나시죠? 형태는 beq $t1, $t2, offset과 같은 형태이죠. 이 명령어 구현을 위해서는 PC 값에다 명령어 변위 필드의 부호확장 값을 더해서 분기 목적 주소를 계산해야하는 것도 기억나시죠?? 바이트 주소기 때문에, *4를 해줘야하고 이를 shift left 2로 표현했었잖아요. 여기까지 기억나신다면 간단합니다. 플로우는 두 레지스터를 읽어요. 그리고 ALU 에서는 조건이 만족하는지 판단합니다. 그리고 주소 계산을 위한 별도의 덧셈기에 PC + 4 에 명령어의 변위 필드를 부호 확장한 후 shift 2 한 값을 넣어 목적지를 구해줍니다. 그럼 끝이에요

 

 

참고 MUX ( 멀티 플렉스)

  분기일때 분기중 하나 선택해 주는 역할

 

단인 데이터 패스

  프로세스 1과 2에서 다룬 모든 데이터패스를 합쳐서, 모든 명령어를 한 클럭 사이클 내에 실행되게 끔 만들어 볼겁니다. 어느 데이터 패스 자원도 명령어당 한번만 사용 가능합니다. 아래 그림을 보고 내용을 복습해 보시길 추천합니다. 내용이 기억나지 않는다면 아래 글 참조하여 복습후에 보시길 바랍니다.

2022.02.09 - [컴퓨터 구조론( MIPS )] - 프로세서 1 - R-type 명령어 데이터 패스, 명령어 인출과정

 

프로세서 1 - R-type 명령어 데이터 패스, 명령어 인출과정

안녕하세요! WH입니다. 이번 글부터는 프로세서 입니다. 사실 모든 것을 알 필요는 없지만. 프로세스와 메모리 정도는 알아야 하지 않을까 싶습니다. 그럼 어셈은요? 밑 단에서 일하시는 분이라

developer-wh.tistory.com

이상 WH 였습니다. 이번 글도 읽어주셔서 감사합니다.

다음 글에서 뵐게요

728x90
반응형