Evaluation of synthesizable CPU cores

컴퓨터 구조 | 2009/08/30 11:14 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License

http://www.gaisler.com/doc/Evaluation_of_synthesizable_CPU_cores.pdf
링크가 깨졌으면 제목으로 검색하면 볼 수 있을꺼라능. 쪼금 길다능.

 몇일전에 저 문서를 읽어봤다능. LEON2, MicroBlaze, OpenRISC 1200 이라는 세 soft core(좀더 정확히 쓰면 soft microprocessor)를 밴치마크한 문서라능. 소프트 코어란건 뭐냐면...논리 합성기..그러니까 Logic synthesis 로 만 구현된 마아크로프로세러르 말한다능. 따라서 여러가지 프로그러머블 로직 디바이스 Programmable Logic Device 로 구현될 수 있다능. 더 자세한거는 영어로 써놓은 키워드를 위키피디아에서 찾아보라능.

 LEON2는 32-bit RISC SPARC V8 호환 아키택쳐라능. 당근 ISA는 스팍 V8 ISA고 저 문서를 읽어보면 space application을 위한 fault-tolerant processor로 개발되었다고 한다능. 우주응용이라니...뭔가 엄청남! 아무튼  라이센스는 GNU LGPL이고 셋중에서 가장 진보된 아키택쳐구 성능도 가장 좋타능.

 MicroBlaze는 32-bit RISC 아키택쳐고...ISA는 자체 ISA를 쓴다능. 이름은 잘 모르겠지만 그냥 MircoBlaze ISA 일꺼라능 -_-;;. Xilinx에서 밀어주고 있는거라능. 당근 자일링스 FPGA에서 가장 합성이 잘된다능. 성능은 그저 그렇지만 셋중에거 가장 코어 사이즈가 작다능. 저 문서에는 MMU가 업ㅂ다구 하는데...자일링스 홈페이지를 가보면 최신 버젼에선 구현이 된거 같음. 문서가 옛날꺼라 어쩔수가 업ㅂ다능. 라이센스는 Xilinx ISE Design Suite: Embedded Edition 에 포함되어 있는데 이거는 Xilinx Core Site License agreement 하에 배포된다구 한다능. 이 라이센스는 MicroBlaze를 갯수 제한업ㅂ이 쓰고 싶은 만큼 쓸 수 있게 해준다능. 느낌상 거의 꽁짜인거 같다능.

 OpenRISC 1200 OpenCores 라는 이상한 단체에서 만든 32-bit OpenRISC 1000 아키랙쳐의 32비트 RISC 구현이라능. ISA는 당근 OpenRISC1000 ISA고 코어사이즈는 LEON2보다 좀 작고...성능은 MicroBlaze보다 조금 좋다능. 홈페이지를 가보면 여러가지 자랑을 많이 해놨는데...다른 두개랑 비교해보면 좀 구질구질한거는 사실이라능. 라이센스는 GNU LGPL이라능. 그냥 쓸만한 꽁자임.

 저 문서에는 세 아키택쳐에 제공되는 개발툴, 코어 사이즈, 그냥 성능, 코어 사이즈대비 성능, 문서화등의 사용성등을 비교해 놓았다능. 결론만 이야기하면 셋중에서는 LEON2가 가장 좋은 선택이 될꺼라능. 아키택쳐도 가장 진보되있고 사용성도 좋타능. 차선은 MicroBlaze라능. 코어 사이즈 대비 성능이 가장 좋고 자일링스에서 빵빵하게 밀어줘서 그런가 문서화도 매우 잘되어 있다능. 꼴찌는 OpenRISC 1200이라능. 이넘은 최신 구현하고 문서도 싱크가 맞지않고 -_-;;; 제공되는 개발툴인 GNU Toolchain도 몇몇 옵션은 아직 포팅이 되지않았다능. 그러타고 성능이나 코어사이즈에 메리트가 있는것도 아니라능.


한줄 요약
LEON 2 > MicroBlaze > OpenRISC 1200
저작자 표시 비영리 동일 조건 변경 허락

'컴퓨터 구조' 카테고리의 다른 글

Evaluation of synthesizable CPU cores  (7) 2009/08/30
D-Processor datapath block diagram  (0) 2009/04/24
D-Processor Interuppt Simulation  (0) 2008/07/05
D-Processor Architecture  (1) 2008/07/05
Datapath  (0) 2008/04/25
16-Bit Toy Microprocessor  (2) 2008/04/11

댓글을 달아 주세요

  1. Favicon of http://www.dynasys.kr BlogIcon 분당살람 2009/08/30 15:37  댓글주소  수정/삭제  댓글쓰기

    SDL이 뭔진 잘 모르겠는데 오사카 횽 왔다간다능 ^^;

  2. Favicon of http://magicpotato.com BlogIcon 마술감자 2009/09/10 03:05  댓글주소  수정/삭제  댓글쓰기

    꼐임만 만들다가 이런거 보면 무슨말인지 모르겠네용 ㅇ.ㅇ
    쉐이더나 물리가속 카드처럼 논리회로 작성해서 때려박고 쓰게 해주는 그런건가용?

    • Favicon of http://www.filepang.co.kr BlogIcon DMW 2009/09/11 16:43  댓글주소  수정/삭제

      FPGA가 논리회로를 때려박고 쓰개 해주는거고...soft core는 그걸로 프로세서를 만든거라능

  3. 2009/09/24 00:01  댓글주소  수정/삭제  댓글쓰기

    오 굳

  4. heroant 2010/11/25 00:50  댓글주소  수정/삭제  댓글쓰기

    아 읽기 귀찮 오늘은 그만 쉬러 감.

D-Processor datapath block diagram

컴퓨터 구조 | 2009/04/24 10:21 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License



그리고 vhdl 소스 코드



나중에 시간이 생기면...꼭 파이프라인을 구현하고 말꺼라능
저작자 표시 비영리 동일 조건 변경 허락

'컴퓨터 구조' 카테고리의 다른 글

Evaluation of synthesizable CPU cores  (7) 2009/08/30
D-Processor datapath block diagram  (0) 2009/04/24
D-Processor Interuppt Simulation  (0) 2008/07/05
D-Processor Architecture  (1) 2008/07/05
Datapath  (0) 2008/04/25
16-Bit Toy Microprocessor  (2) 2008/04/11
TAG RISC, VHDL

댓글을 달아 주세요

D-Processor Interuppt Simulation

컴퓨터 구조 | 2008/07/05 18:30 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
사용자 삽입 이미지


 D 프로세서의 인터럽트 처리를 시뮬레이션해본 결과다. 위에 보이는 3개의 시그널중 첫번째는 클럭을 나타내고, 두번째는 프로그램 카운터의 내용을 말한다. 마지막 세번째 시그널이 인터럽트다. 시뮬레이션에 사용된 프로그램은 0x0003번지에서 0x0000으로 무조건 분기하도록 되어있고 0x0002번지에서 인터럽트를 활성화 시킨다. ISR은 0x0000으로 설정되어있다.

두번째 인터럽트가 걸릴때 0x0001번지에서 정상적인 프로그램 흐름과 다르게 0x0000으로 점프하는것을 볼 수 있다. 인터럽트 서비스 루틴으로 점프가 확실히 되는걸 알 수 있다.

-----------------------------------------------------------------------------------------------------

원래 이 밑에다 외부 타이머를 붙여서 만든 초시계를 회로도랑 보드에 합성해서 돌아가는 모습을 올리려고 했는데....D모 사이트에 올려놨던 자료가 삭제되는 바람에 귀차나서 관뒀심 -_-;;

'컴퓨터 구조' 카테고리의 다른 글

Evaluation of synthesizable CPU cores  (7) 2009/08/30
D-Processor datapath block diagram  (0) 2009/04/24
D-Processor Interuppt Simulation  (0) 2008/07/05
D-Processor Architecture  (1) 2008/07/05
Datapath  (0) 2008/04/25
16-Bit Toy Microprocessor  (2) 2008/04/11
TAG RISC, VHDL

댓글을 달아 주세요

D-Processor Architecture

컴퓨터 구조 | 2008/07/05 18:08 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
D-Processor Architecture


@ 특징
 D-Processor는 단순한 구조를 가진 16비트 RISC로 16비트 어드래스 버스와 16비트 데이터 버스를 갖고있다. 프로그램 메모리와 데이터 메모리가 분리된 구조 즉, 하버드 아키택쳐를 사용하고 있고 주소는 워드단위(16비트)로 주어진다.

 따라서 128Kb의 주소공간을 가진다 (프로그램 메모리 128Kb, 데이터 메모리 128Kb). 모든 명령어는 16비트로 고정된 길이를 가지고, 메모리 접근은 로드 LD, 스토어 ST, 하위 바이트 스토어 STB의 세가지만을 제공한다.
 
 대부분의 연산은 내부 레지스터에 의해서 이루어 지며, D-Processor는 8개의 범용 레지스터를 제공하고 있다. 주소모드는 5가지가 제공되며 단순하지만 서브루틴의 호출과 리턴을 구현하는 명령어가 제공되고 있다. 또한 인터럽트의 처리도 가능하다. 전체 인스터럭션 사이클이 한 클럭에 실행되는 싱클 사이클 익스큐션을 구현하고 있다.

more..



----------------------------------------------------------------------------------------------------
 현재는 모든 인스트럭션이 구현되어 있는 상태고
Altera Cyclone II 2C35 FPGA에서 50Mhz로 작동되는걸 확인해 보았다.

'컴퓨터 구조' 카테고리의 다른 글

D-Processor datapath block diagram  (0) 2009/04/24
D-Processor Interuppt Simulation  (0) 2008/07/05
D-Processor Architecture  (1) 2008/07/05
Datapath  (0) 2008/04/25
16-Bit Toy Microprocessor  (2) 2008/04/11
연습문제 2.5 - 데이터경로 스키메틱 디자인  (0) 2008/01/20
TAG RISC, VHDL

댓글을 달아 주세요

  1. Favicon of http://kloiahack.tistory.com BlogIcon Kloiahack 2008/07/12 03:46  댓글주소  수정/삭제  댓글쓰기

    어셈을 모르겠으니 코드를 읽고 싶어도 조금 힘들네요.

Datapath

컴퓨터 구조 | 2008/04/25 16:25 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
사용자 삽입 이미지


아직 추가할께 많은데...귀찬음 -_-;;;
언제 끝날지 기약이 없심

'컴퓨터 구조' 카테고리의 다른 글

D-Processor Interuppt Simulation  (0) 2008/07/05
D-Processor Architecture  (1) 2008/07/05
Datapath  (0) 2008/04/25
16-Bit Toy Microprocessor  (2) 2008/04/11
연습문제 2.5 - 데이터경로 스키메틱 디자인  (0) 2008/01/20
연습문제 2.6  (0) 2008/01/20

댓글을 달아 주세요

16-Bit Toy Microprocessor

컴퓨터 구조 | 2008/04/11 08:25 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License

특징

단순한 구조의 16비트 RISC

16비트 주소와 데이터 버스선을 가짐

하버드 아키택쳐를 사용

주소는 바이트 단위로 주어짐, 따라서 64K바이트 주소 공간을 가진다.

모든 명령어의 크기는 16비트로 고정되어 있다.

메모리 접근은 LD, ST의 두가지 만을 허용 (추가 될지 모름) + STB(바이트 단위 쓰기)

대부분의 연산은 내무 레지스터 8개에 의해서 이루어 진다.

주소모드는 5가지가 제공

4 스테이지 파이프라닝

분리된 L1 캐쉬를 제공한다.(구체적인 계획 업ㅂ음)

서브루틴의 호출, 리턴을 구현하는 명령을 제공하고 인터럽트 처리가 가능



레지스터

R0~R7 까지의 General Purpose Registers, 16비트 8개, R0는 읽기전용 값 : 0

Program Counter를 저장하는 PC, 16비트 1개

Interrupt Service Routine의 주소를 저장하는 SRA, 16비트 1개

Exception처리를 위해 PC를 백업하는 EPC, 16비트 1개


주소모드

Register mode : 명령어에 지정한 레지스터의 값이 피연산자

Immediate mode : 명령어에 지정한 상수 값이 피연산자

Pc-Relative mode : 현제 PC + 2 + 명령어에서 지정한 상수이 Effective Address

Register-indirect : 명령어에서 지정한 레지스터 값이 EA

Pseude Absolute : 명령어에서 지정한 상수 값이 EA


명령어포멧

R-Format

opcode(3) | DR(3) | SA(3) | SB/SHT(3) | f1(4)


I7-Format

opcode(3) | DR(3) | SA(3) | imm7(7)


I8-Format

opcode(3) | DR(3) | f2(2) | imm8(8)


J-Format

opcode(3) | addr(13)


R -format는 2개의 피 연산자와 목적지가 모두 레지스터인 경우와 쉬프트 명령어를 위한 포멧이다. R-format 에서 opcode와 f1 field 부분이 연산의 종류를 나타내며, SA 필드는 피연산자로서 레지스터를 나타내는 필드이다. SB/SHT는 일반 산술/논리 연산의 경우에는 피연산자로 사용될 레지스터를 가리키며, 쉬프트 명령어의 경우는 한번에 쉬프트 시킬 비트의 수를 나타낸다.


I7-format는 2개의 피연산자중 하나가 7비트 즉치값인 경우를 위한 포멧이다. 16비트 프로세서임으로 7비트의 값을 16비로 확장하여 사용한다. 


I8-format는 8비트 상수 값을 즉치값으로 지정할 필요가 있을 경우에 사용하는 포멧이다. 이 8비트값을 16비트로 확장하여 사용한다. 이때 f2필드는 연산의 종류를 지정하는데 추가로 사용한다.


J-format는 분기명령어 JAL에 사용되는 포멧이다. Pseude Absolute 주소모드로 EA를 계산해서 분기하게 되는데 이때 현제 PC+2의 값은 무조건 R7에 저장된다. 점프할 주소의 계산은 addr필드의 13비트를 2배하여 얻어진 14비트에 현제 PC값의 MSB 2비트를 앞에 덧붙여서 16비트를 만든다. 이렇게 함으로 전체 64K바이트의 주소공간을 4개의 세그먼트로 분할 했을때 각 세그먼트 내에서는 절대 주소로 분기할 수 있다.



산술/논리 연산 명령어

Pseudo code

RTL 수준의 기술

format

ADD DR, SA, SB

Reg[DR] <- Reg[SA] + Reg[SB]

R-format

ADD R1, R2, R3

SUB DR, SA, SB

Reg[DR] <- Reg[SA] - Reg[SB]

R-format

SUB R1, R2, R3

ADI DR, SA, imm7

Reg[DR] <- Reg[SA] + se(imm7)

I7-format

ADI R1, R2, -63

ADIU DR, SA, imm7

Reg[DR] <- Reg[SA] + ze(imm7)

I7-format

ADIU R1, R2, 64

XOR DR, SA, SB

Reg[DR] <- Reg[SA] xor Reg[SB]

R-format

XOR R1, R2, R3

AND DR, SA, SB

Reg[DR] <- Reg[SA] and Reg[SB]

R-format

AND R1, R2, R3

OR DR, SA, SB

Reg[DR] <- Reg[SA] and Reg[SB]

R-format

OR R1, R2, R3

NOT DR, SA

Reg[DR] <- not Reg[SA]

R-format

NOT R1, R2

ORI DR, imm8

Reg[DR] <- Reg[DR] or ze(imm8)

I8-format

ORI R1, 255

ANI DR, imm8

Reg[DR] <- Reg[DR] and ze(imm8)

I8-format

ANI R1, 255

LSL DR, SA, SHT

Reg[DR] <- Reg[SA] << SHT

R-format

LSL R1, R2, 5

LSR DR, SA, SHT

Reg[DR] <- 0 || (Reg[SA] >> SHT)

R-format

LSR R1, R2, 5

ASR DR, SA, SHT

Reg[DR]<-MSB || (Reg[SA] >> SHT)

R-format

ASR R1, R2, 5

ze = Zero extension, se = Sign extension


분기 명령어

Pseudo code

RTL 수준의 기술

format

분기조건

JAL addr

PC <- PC[15:13] || (addr << 1);

R[7] <- PC + 2

J-format

-

JR DR, SA

PC <- Reg[SA], Reg[DR] <- PC + 2

R-format

-

BZ DR, imm8

PC <- PC + 2 + se(imm8)

I8-format

IF Reg[DR] == 0

BNZ DR, imm8

PC <- PC + 2 + se(imm8)

I8-format

IF Reg[DR] != 0

BPOS DR, imm8

PC <- PC + 2 + se(imm8)

I8-format

IF Reg[DR] > 0

BNEG DR, imm8

PC <- PC + 2 + se(imm8)

I8-format

IF Reg[DR] < 0

무조건 분기 명령어는 JR이 있다. JR은 분기할 절대 주소 16비트를 레지스터에서 읽어도록 되어있다. DR은 현제 PC + 2를 저장할 레지스터이고 SA는 점프할 주소를 담은 레지스터이다. DR을 R0으로 하면 현제 PC+2는 저장되지 않는다. JAL 명령어가 현제 PC +2를 항상 R7에 저장함으로 JAL명령어와 JR명령어의 조합으로 function이나 procedure call을 구현 할 수 있다.


JAL func

func :

    적절한 연산들...

JR R0, R7


조건부 분기 명령어 BZ, BNZ, BPOS, BNEG는 두개의 레지스터의 대소를 비교하여 분기할 수 없다. 이를 보안하기 위해서 SLT(Set Less Than), SLE(Set Less then or Equal to)명령어가 제공된다.


비교 명령어

Pseudo code

RTL 수준의 기술

format

SLT DR, SA, SB

if(Reg[SA] < Reg[SB]) then

    Reg[DR] <- 1

else

    Reg[DR] <- 0

R-format

SLT R1, R2, R3

SLE DR, SA, SB

if(Reg[SA] <= Reg[SB]) then

    Reg[DR] <- 1

else

    Reg[DR] <- 0

R-format

SLE R1, R2, R3


이를 이용해서 R1 > R2 인 경우 L2로 분기하는 프로그램은 다음과 같이 2개의 명령어로 작성할 수 있다.


If(R1 > R2) goto L2;

    SLT R3, R2, R1

    BNZ R2, L2


메모리 접근 명령어

Pseudo code

RTL 수준의 기술

format

비고

LD DR, SA

Reg[DR] <= Mem[Reg[SA]]

R-format

word 데이터

ST SA, SB

Mem[Reg[SA]] <- Reg[SB]

R-format

word 데이터

STB SA, SB

Mem[Reg[Sa]] <- Reg[SB]

R-format

byte 데이터


상수값 저장 명령어

Pseudo code

RTL 수준의 기술

format

비고

LDI RD, imm8

Reg[DR] <- ze(imm8)

I8-format

16비트 하위값

LUI RD, imm8

Reg[DR] <- imm8 << 8

I8-format

16비트 상위값

ORI RD, imm8

Reg[DR] <- Reg[DR] | ze(imm8)

I8-format

LUI 함께 사용

LUI와 ORI 명령어를 사용해서 16비트 즉치값을 레지스터에 메모리 접근없이 저장할 수 있다. 


인터럽트 처리

Pseudo code

RTL 수준의 기술

format

비고

EIF

Enable interrupt

R-format

 

CIF

Disable interrupt

R-format

 

SISR SA

ISR <- Reg[SA]

R-format

ISR을 세팅

RTI

PC <- EPC; enable interrupt

R-format

기존의 루틴으로 복귀


인터럽트가 활성화 되어 있다면 현제 PC+2를 EPC로 백업하고 ISR 레지스터에 지정된 주소로 분기한다. 인터럽트 서비스가 끝나고 RTI 명령어를 만나면 EPC에 백업된 주소로 복귀하면서 다시 프로그램이 수행된다. 인터럽트 루틴으로 분기하면서 인터럽트는 비활성화 되고 복귀하면서 활성화 된다. XX 프로세서는 중첩되는 인터럽트를 허용하지 않는다.

'컴퓨터 구조' 카테고리의 다른 글

D-Processor Architecture  (1) 2008/07/05
Datapath  (0) 2008/04/25
16-Bit Toy Microprocessor  (2) 2008/04/11
연습문제 2.5 - 데이터경로 스키메틱 디자인  (0) 2008/01/20
연습문제 2.6  (0) 2008/01/20
연습문제 2.5  (0) 2008/01/20
TAG RISC, VHDL

댓글을 달아 주세요

  1. Favicon of http://dynast.tistory.com BlogIcon DyNast 2008/04/14 18:48  댓글주소  수정/삭제  댓글쓰기

    우왕ㅋ굳ㅋ..

    근데 이게뭐져 ㅎㄷㄷ..

크리에이티브 커먼즈 라이선스
Creative Commons License

열기


쿼터스가 만들어 줬습니다.

'컴퓨터 구조' 카테고리의 다른 글

Datapath  (0) 2008/04/25
16-Bit Toy Microprocessor  (2) 2008/04/11
연습문제 2.5 - 데이터경로 스키메틱 디자인  (0) 2008/01/20
연습문제 2.6  (0) 2008/01/20
연습문제 2.5  (0) 2008/01/20
연습문제 2.4  (2) 2008/01/18
TAG RISC, VHDL

댓글을 달아 주세요

연습문제 2.6

컴퓨터 구조 | 2008/01/20 21:41 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
 새로운 8 -bit 마이크로프로세서를 위한  Instruction Set Architecture가 주어졌다고 하자.
이 새로운 프로세서를 VHDL로 기술해서 시뮬레이션하라.

이 프로세서는 데이터를 8비트로 나타내고, 주소는 데이터와 명령어 모두 7비트로 나타내며
주소 공간은 데이터와 명령어가 공유한다.

 이 마이크로프로세서의 내부 레지스터는 다음과 같은 것들로 구성된다 ALU가 계산한 결과
값을 기억하는 누산기(AC), 다음 번 실행할 명령어즤 주소를 가지고 있는 프로그램 카운터
(PC), 명령어를 저장하는 임시 레지스터(IR: Instruction Register), 접근하려는 주기억 장소의 주소를 위한 주소 레지스터(AR)과 주 기억장소로 보내거나 그로부터 읽어온 값을 임시로
기억하는 DR 레지스터 등이다.

다음과 같이 명령어 format이 주어졌다고 가정하자. 다음 명령어 format에서 addr은 2's complement 값으로 해석되는 4비트 값으로서 현재 명령어의 주소값 + 1에 대한 상대적인 값이다. addr5는 psedu direct 주소로서 데이터 주소의 하위 5비트 값을 의미한다. psedu direct 주소에서 전체 주소는 모두 7비트임으로 나머지 2비트는 현재 명령어가 저장된 주소값 + 1값의 7비트 중 상위 3비트를 그대로 사용한다. addr7은 절대주소로서 주소의 7비트의
값을 그대로 명령어로부터 바로 얻을 수 있다.

사용자 삽입 이미지


 ADD 명령은 AC와 M[PC + 1 + SignExt(addr)]을 더해서 AC에 저장한다. ADDI는 AC와
SignExt(imm)을 더해서 AC에 저장한다. XOR는 AC와 M[PC + 1 + SignExt(addr)]을 xor
연산해서 AC에 저장한다. JZ 명령은 AC값이 0이면 와 M[PC + 1 + SignExt(addr)]로 분기
한다. ST 명령은 AC의 값을 addr5에 저장한다. LD 명령은 addr5 주소의 데이터 값을 읽어
와서 AC에 저장한다. JMP 명령은 무조건 주어진 절대 주소로 분기한다.

풀이
---------------------------------------------------------------------------------

사용자 삽입 이미지

현제 포스팅중.....


'컴퓨터 구조' 카테고리의 다른 글

16-Bit Toy Microprocessor  (2) 2008/04/11
연습문제 2.5 - 데이터경로 스키메틱 디자인  (0) 2008/01/20
연습문제 2.6  (0) 2008/01/20
연습문제 2.5  (0) 2008/01/20
연습문제 2.4  (2) 2008/01/18
8-Bit Toy Microprocessor  (1) 2008/01/08
TAG RISC, VHDL

댓글을 달아 주세요