ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SRC 설계] Data Path 설계 및 구현 (2)
    Digital Processor Design 2013. 6. 27. 15:32
    반응형

    2.1.5 Arithmetic and Logic Unit (ALU)

    다음은 ALU가 여러개의 블록들을 통해 완성된 모습이다.

    우리가 설계한 32bit SRCADD, SUB, AND, OR, NOT, NEG, CEQB, INC4, SHR, SHRA, SHL, SHC 등을 수행하는 ALU이다. 세부 블록들을 살펴보면 다음과 같다.

     

    우선 다음 블록은 32bit 74181 모듈에 들어가게 될 A 입력값을 INC4NEG의 명령이 들어왔을 때 어떻게 처리할 것인지를 결정하는 역할을 한다. INC4PCPC+4로 바꿀 때 사용하는 명령이고 NEG은 들어온 입력의 부호를 바꿀 때 사용하는 명령이다. 따라서 INC4의 명령이 들어왔을 경우 ALUA+B의 처리를 할 때 A값을 반드시 4로 만들어 주어야 한다. A 값이 엉뚱한 값이 들어온 상태에서 INC4 명령이 들어온다면 PCPC+4가 되지 않고 엉뚱한 값으로 next instruction을 수행하게 될 것이다.

    NEG의 명령이 들어왔을 경우에도 ALUA-B의 처리를 할 때 A값을 반드시 0으로 만들어주어야 한다. 마찬가지로 A값이 0이 아니라 다른 값이 들어와 있는 상태에서 NEG 명령이 들어온다면 엉뚱한 값이 출력으로 나가게 된다.

    동작을 살펴보면, INC41이 들어오면 NOR2의 출력은 0이 나가고, OR2의 출력은 1이 나가서 AOUT의 출력은 AOUT2 (밑에서 3번째 bit) 1이 나가게 된다. 0000...0100 = 4 이므로 INC41이 들어오면 AOUT은 무조건 4가 나간다. 그리고 NEG1이 들어오면 NOR2 출력은 0이고, NOT gate를 거쳐서 나간 AND2 gate의 출력은 무조건 0이 되므로 AOUT2 쪽에 연결된 OR2 gate의 출력도 0이 된다. 즉 모든 AOUT의 출력이 0000_0000_0000_0000 이 되기 때문에 NEG1이 들어오면 AOUT은 무조건 0이 나간다.

    그 다음 블록은 74181 ALU 모듈을 제어하기 위한 Select 신호 및 Mode Control InputCarry Input을 만들어주는 역할은 한다.

     

    다음은 Fairchild 사의 74181datasheet를 참조한 것이다. Select bit(S[3..0])의 값에 따라 ALU가 하는 동작이 달라지게 되므로 우리가 명령하게 될 instruction에 따라서 S bit이 다르게 나가야 한다.

    다음은 위의 블록 시뮬레이션 파형이다. ADD 명령을 주었을 때 만들어지는 S의 출력은 9이다. 위의 datasheet에서 9번째의 Function을 찾아보면 AB 임을 알 수 있다.

     

    그 다음 블록은 32bit 74181 ALU인데, 세부 블록의 크기가 너무 커서 그림을 첨부하지는 못했다. 위의 시뮬레이션 파형을 보면 S6, 9, 11, 14, 0 으로 변하면서 ALU의 기능을 선택하고 있다. 이 때 Cin을 입력으로 주며 Carry 입력이 제대로 동작하는지도 확인하였다.

    왼쪽에서부터 차례로 SUB, ADD, AND, OR, NOT의 명령이며 그 명령에 맞춰서 F[31..0]의 출력이 정확하게 나오는 것을 확인하였다.

     

    마지막으로 SHIFT 기능을 담당하는 32bit Shifter 블록이다.

    SHIFT instruction에는 왼쪽에 0을 채우면서 우측으로 shift하는 shr, TOP bit을 유지하면서 우측으로 shift하는 shra, 우측에 0을 채우면서 좌측으로 shift하는 shl, 최상위 bit을 최하위 bit로 옮기면서 좌측으로 순환하는 shift를 하는 shc가 있다.

     

    다음은 시뮬레이션 파형이다. shr 명령인 경우에 0000...0011 인 입력이 우측으로 1shift되서 0000...0001 이 된 것을 확인했다. shc 의 경우에 1000...0011인 입력이 좌측으로 순환 shift되어서 0000...0111이 된 것을 확인하였으며, shra인 경우에 1000...0011인 입력이 top bit을 유지하면서 우측으로 shift 되어서 1100...0001이 된 것을 확인하였다.

    32bit shifter에서 가장 중요한 bitMSBLSB이다. 가운데 bit은 왼쪽으로부터 넘어온 bit이 되거나 아니면 우측으로부터 넘어온 bit이 되기 때문에 2x1 mux를 사용해서 왼쪽 bit인지 오른쪽 bit인지만 선택하면 된다. 그러나 MSBshr 명령이 들어온 경우에는 0이 채워져야 하고 shra명령이 들어온 경우에는 현재 MSB값을 그대로 유지해야 한다. shl이나 shc 같은 명령인 경우에는 우측에 있던 bitMSB로 들어와야 한다. 따라서 선택해야 하는 값이 중간 bit처럼 2개가 아니라 3~4개가 되므로 2x1 mux가 아닌 4x1 mux를 사용해야 한다.

    마찬가지로 LSBshl 명령이 들어온 경우 0이 채워져야 하고, shc 명령이 들어온 경우 MSB bit의 값이 LSB로 넘어와야 한다. 그리고 shr이나 shra인 경우에는 좌측에 있던 bitLSB로 들어와야 한다. 역시 선택해야 하는 값이 3~4개이므로 4x1 mux를 사용해서 32 bit shifter를 설계하였다.

     

    최종적으로 완성된 ALU를 시뮬레이션 한 결과 파형이다.

    반응형
Designed by Tistory.