ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SRC 설계] 32Bits 1BUS SRC 설계 개요
    Digital Processor Design 2013. 6. 27. 15:13
    반응형

    1. 개요

    한 학기 분량 수업의 프로젝트로써 32bit SRC(Simple RISC Computer)를 설계하였다. 32bit CPUInstruction32bit라는 의미이며 instruction의 종류에 따라 여러 가지 Format이 있다.

    위의 그림을 보면 우리가 설계할 32bit SRC32bit짜리 register32개가 있으며, 이 레지스터는 범용 목적으로 사용 가능하다. 그리고 PC를 저장하는 레지스터가 있으며 역시 32bit로 이루어져 있다. Program Counter0x0000_0000 의 형태로 표현할

    수 있으며 그 다음 PCPC+4값이 된다. 0x0000_0004가 된다.

    그리고 그림에서의 메모리는 2^32 Bytes 의 크기를 가지고 있다.

    다음은 우리가 앞으로 설계할 32bit SRC 의 가장 기본적인 Instruction Format이다. 우선 최상위 5bit은 항상 OP code로 할당된다. 그리고 register32개가 있으니까 ra, rb, rc register field5bit이 할당된다. 나머지 bit은 상수값으로 사용하거나 주소로 사용되며, 경우에 따라선 사용되지 않는 경우도 있다.

    Instruction Format은 아래에 좀 더 자세히 명시할 예정이다.

    다음 그림은 1-bus 구조에서 Data의 흐름을 나타낸다. ADD instruction을 예로 든 것으로, 1번 레지스터와 2번 레지스터의 값을 더해서 3번 레지스터에 저장하는 과정을 Abstract RTNConcrete RTN으로 나타내고 각 step에 필요한 컨트롤 신호를 표시하였다. 이 때 레지스터의 입력과 출력부분에는 반드시 IN, OUT을 관장하는 컨트롤 신호가 필요하다.

     

    위 그림은 1-BUS 32bits SRC의 전체 Block Diagram이다. Data Path에서 생성된 여러 신호들은 Control Unit의 내부로 들어가서 Data Path에서 Instruction을 수행하는데 필요한 컨트롤 신호를 만들고 그 신호들을 출력으로 내보낸다. MemoryData pathdata를 주고받는 Memory BUS가 필요하고 사용자가 직접 Memory BUSdata를 실어서 CPU로 보낼수도 있는데 이번 학기에서 이 부분은 구현하지 않았다.

    위의 그림은 1BUS datapath의 내부 구조를 자세하게 표현한 블록다이어그램이다. 가운데 Main BUS가 있고 모든 레지스터 및 ALU와 연결되어 있다. 좌측 상단에 32bit 레지스터가 32개가 모여 있는 블록이 있고, 좌측 하단에는 ALU와 함께 둘 중 한 개의 입력(A)를 임시 저장하는 A 레지스터와 ALU 출력을 임시 저장하는 C 레지스터를 함께 포함하고 있다. 우측 상단에는 PC값을 저장하는 레지스터, Branch 명령어를 사용할 때 필요한 Condition 출력을 내보내는 블록, 32bit Instruction을 받아서 OP code, Register select, c1, c2, c3 값을 만들어내는 블록이 있다. 우측 하단에는 CPUMemory간의 data를 읽고 쓰는 관리를 하는 블록, Shift 명령을 수행할 때 T6 step을 여러 번 반복하게 하기 위해 Instruction의 최하위 5bit을 입력으로 받아 NEQZ 신호를 만들어서 내보내는 블록이 있다.

    마지막으로 Control Unit의 내부구조이다. 입력으로는 MCK, START, OP code, NEQZ, CON 신호를 받아서 PCout, Rout ... 등의 컨트롤 신호를 내보낸다. 이 때 MCK는 모든 모듈에 공통으로 들어가는 Master CLK이고, OP codeMemory로부터 datapath로 읽어 들여온 InstructionIR이 분해해서 내보내는 출력이고, NEQZCON 신호는 Control Unit의 내부에서 만들어지지 않고 Data path에서 만들어서 Control Unit의 입력으로 사용된다. 예를 들어 Branch 명령은 Instruction을 읽어 들여오는 순간 마지막 3bit(c3) 값에 의해서 CON신호가 나갈지 안 나갈지 결정되고 그 CON신호를 입력으로 받은 Control UnitJump를 할 것인지 말 것인지를 결정한다. Shift명령은 Instruction의 마지막 5bit(c3)0이 될 때 까지 감소시키다가 shift가 종료되는 시점에서 NEQZ 신호를 Control Unit으로 보내서 Shift를 종료시킨다.

    Control UnitT0~T7까지의 Step 신호를 만들어서 내보내는 Step Generator, Step Generator의 카운터를 Enable시켜서 Step1클락마다 1씩 증가하게 만들어주는 기능을 하는 Clocking Logic, T0~T7의 신호와 OP code에 의해 decoding된 신호, Datapath로부터 넘어온 CONNEQZ신호를 받아서 수많은 컨트롤 신호를 만들어내는 Control Signal Encoder로 이루어져 있다. 실제 머신에서 사용되는 Control UnitInterrupt나 외부에서 들어오는 예외처리를 수행해야 하는데 이 부분은 이번 SRC에서 제외하고 설계하였다.

    반응형
Designed by Tistory.