[TIL] 2022.11.27. [Computer Architecture]

2022. 11. 27. 01:55

논리 설계 관례

"edge-triggered clocking" 방법론은 경쟁 관계, 즉 race를 발생시키지 않으면서 같은 클럭 사이클에 상태소자를 읽고 쓸 수 있도록 해준다. 경쟁 관계가 발생하면 이상한 데이터 값이 된다.

 

물론 활성화 클럭 edge에서 입력값이 안정되도록 클럭 사이클이 충분히 길어야 한다.

상태소자가 edge 구동 방식이므로 1 클럭 사이클 내에서 피드백은 일어날 수 없다. 만약 피드백이 가능하다면 이 설계는 제대로 작동하지 못 할 것이다. 이 장과 다음 장에서의 설계는 edge 구동 타이밍 방법론과 이 그림과 같은 구조를 사용한다.

 

이 방법은 레지스터 내용을 읽고 그 값을 조합회로로 보내고 같은 레지스터에 쓰는 작업 모두가 한 클럭 사이클에 일어나는 것을 허용한다.

 

데이터패스 만들기

- instruction memory

-> 우리가 필요로 하는 첫 번째 구성요소

-> 프로그램의 명령어를 저장하고 주소가 주어지면 해당 명령어를 보내 주는 메모리 유닛

 

- Program Counter

-> 현재 명령어의 주소를 가지고 있는 레지스터이다.

-> PC를 다음 명령어 주소로 증가시키는 덧셈기가 필요하다.

-> ALU를 ADD 용도로 만들어 이어 붙인다.

 

명령어를 저장하고 접근하는데 두 개의 상태소자가 필요하며, 다음 명령어의 주소를 계산하기 위해 덧셈기가 하나 필요하다.

 

상태소자는 명령어 메모리와 프로그램 카운터이다. 이 데이터 패스는 명령어를 쓸 필요가 없기 때문에 명령어 명령어 메모리는 읽기 접근만 제공하면 된다. 명령어 메모리는 읽기 전용이므로 조합회로로 취급한다. 출력은 항상 입력 주소가 지정하는 위치의 내용을 나타내며 읽기 제어신호가 필요치 않다. 프로그램 카운터는 매 클럭 사이클 끝에 쓰기가 행해지는 64비트 레지스터이다. 따라서 쓰기 제어신호는 필요하지 않다. 덧셈기는 두 64비트 입력을 더해서 합을 출력으로 내보내는 일만 하도록 결선되어 있는 ALU이다.

 

명령어를 인출하고 프로그램 카운터를 증가시키는데 사용하는 데이터 패스의 일부분

-> 인출된 명령어는 데이터패스의 다른 부분에서도 쓰인다.

= > instruction fetch

 

R-format instructions에서

-> 두 개의 register operands

-> arithmetic/ logical operation

-> Write register result

 

모든 R-형식 명령어들은 두 개의 레지스터를 읽고 레지스터 내용에 ALU연산을 수행하며 그 결과를 레지스터에 쓴다.

 

이러한 명령어들을 R-형식 명령어 또는 산술/논리 명령어라고 부른다.

 

왜냐하면 이 명령어들은 산술연산이나 논리연산을 행하기 때문이다.

 

이 명령어 종류는 add, sub, and ,or 명령어를 포함하고 있다.

 

이를 테면,

 

add x1, x2, x3 이 명령어는 x2와 x3를 읽고 x1 쓴다.

 

프로세서의 범용 레지스터 32개는 레지스터 파일이라고 하는 구조 속에 들어 있다.

 

* 레지스터 파일 : 접근할 레지스터 번호를 지정함으로써 읽고 쓸 수 있는 레지스터들의 집합으로 구성된 상태 소자.

 

레지스터 파일은 레지스터들을 모아 놓은 것인데, 파일 내의 레지스터의 번호를 지정하면 어느 레지스터라도 읽고 쓸 수가 있다.

 

레지스터 파일은 컴퓨터의 레지스터 상태를 갖고 있다. 레지스터에서 읽어 들인 값들을 연산하려면 ALU가 필요하다.

 

R-형식 명령어들은 레지스터 피연산자 세 개를 가지고 있기 때문에 매 명령어마다 레지스터 파일에서 두 데이터 워드를 읽고 데이터 워드 하나를 써야 한다. 레지스터에서 데이터 워드를 읽기 위해서는 레지스터의 입력과 출력이 하나씩 필요하다. 읽을 레지스터 번호를 지정하는 입력과 레지스터에서 일근 값을 내보내는 출력이다. 데이터 워드를 쓰기 위해서는 입력이 두 개 필요하다. 한 입력은 쓸 레지스터 번호를 지정하고, 다른 입력은 레지스터에 쓸 데이터 값을 제공한다. 

 

레지스터 파일은 Read register 입력에 실리는 번호에 해당하는 레지스터의 내용을 항상 출력한다.

 

그러나 쓰기는 쓰기 제어신호에 의해 제어되므로 클럭 edge에서 쓰기가 일어나려면 이 제어신호가 인가되어야 한다.

 

따라서 전체적으로 입력 4개(레지스터 번호 3개와 데이터 1개)와 출력 2개(모두 데이터)가 필요하다.

 

레지스터 번호 입력은 32개의 레지스터 중 하나를 지정해야 하므로 5비트 크기인 반면, 데이터 입력과 데이터 출력 버스는 모두 64비트 폭을 가진다.

 

ALU

ALU는 64비트 입력 두 개를 받아서 64비트 결과와 결과가 0인지 아닌지 나타내는 1비트 신호를 만든다.

 

 

ld (load doubleword) ... sd (store doubleword)

 

이 두 가지 명령어는 일반적으로

ld x1, offset(x2)
sd x1, offset(x2)

와 같은 형식을 갖는다.

 

이 명령어들은 베이스 레지스터와    명령어에 포함되어 있는 12비트 부호 있는 변위 필드를 더하여 메모리 주소를 계산한다.

 

저장 명령어이면 저장할 값을 레지스터 파일에서 읽어 와야 하는데 이 값은 x1에 있다.

 

적재 명령어이면 메모리로부터 읽어 들인 값을 지정된 레지스터(x1)에 써야 한다.

 

따라서 레지스터 파일과 ALU 둘 다 필요하다.

 

 

 

 

 

그 외에도 명령어의 12비트 변위 필드 값을 64비트 부호 있는 값으로 부호확장하기 위한 유닛이 필요하며 또 읽고 쓸 데이터 메모리가 필요하다. 데이터 메모리는 저장 명령어일 때만 쓰기를 해야 한다. 따라서 데이터 메모리는 읽기 제어신호와 쓰기 제어신호, 주소 입력, 메모리에 쓸 데이터 입력이 필요하다. 

 

 

beq 명령어는 세 개의 피연산자를 갖는데 두 개의 레지스터와 12비트 변위이다.

 두 개의 레지스터는 같은지 비교하기 위한 피연산자이고, 12비트 변위는 분기 명령어 주소에 대한 상대적인 분기 목적지 주소 (branch target address)를 계산하는데 사용되는 값이다.

 

명령어 형태는

beq x1, x2, offset

d과 같다.

이 명령어를 구현하기 위해서는 PC 값에다가 명령어 변위 필드를 부호확장한 값을 더해서 분기 목적지 주소를 계산해야 한다.

 

분기 명령어의 정의에는 우리가 주의를 기울여야 하는 점이 두 가지 있다.

  • 분기 주소 계산의 베이스 주소는 분기 명령어 주소라고 명령어 집합 구조가 명시하고 있다.
  • 변위 필드는 1비트 만큼 왼쪽 자리이동 하여 하프워드 변위가 된다는 것도 명령어 집합 구조에 포함되어 있다.
    • 이렇게 함으로써 변위 필드의 유효 범위가 두 배 증가된다.

 

메모리 유닛은 입력 두 개(Address와 Write data)와 출력 한 개(Read data)를 갖는 상태소자이다.

읽기 제어신호와 쓰기 제어신호가 따로 있지만 한 클럭에는 이들 중 하나만 인가될 수 있다.

 

레지스터 파일과는 달리 메모리 유닛은 읽기 신호가 필요하다.

 

수치 생성 유닛(immGen)은 32비트 명령어를 입력으로 받아서 적재, 저장, 같을 시 분기 명령어일 때, 명령어에서 12비트 수치값을 추출하여 이를 64비트 부호있는 값으로 확장한 후 출력으로 내보낸다. 데이터 메모리는 edge 구동 쓰기를 한다고 가정한다.

실제 표준 메모리 칩은 쓰기에 사용되는 write enable signal을 가지고 있다.

 

두 번째 문제를 다루기 위해서는 변위 필드를 1비트 자리이동시켜야 한다.

분기 목적지 주소를 계산하는 것 외에 다음에 실행할 명령어가 바로 뒤에 있는 명령어가 될지 아니면 분기 목적지 주소에 있는 명령어가 될지를 판단해야 한다. 조건이 사실일 때 분기 목적지 주소가 새로운 PC값이 되며 분기가 일어났다고 말한다.

 

두 피연산자값이 같지 않으면 증가된 PC값이새 PC값이 된다. 이 경우에 분기가 일어나지 않았다고 말한다.

 

따라서  분기 데이터패스는 분기 목적지 주소를 계산하고 레지스터 내용을 비교하는 두 가지 일을 해야한다.

 

 

 

 

 

 

 

 

 

 

 

※ 해당 게시물은 컴퓨터 구조 및 설계 (RISC-V)를 토대로 작성되었으며, 문제가 될 시 삭제하겠습니다. 

 

BELATED ARTICLES

more