소개글
시간이 상당히 오래 걸렸던이용석 교수님 MIPS 설계 프로젝트 소스(베릴로그) 및 레포트입니다.
매년 내오시는데 2010년에 파이프라인이 추가되었습니다.
파일을 모두 담아두느라 압축해두었습니다.
필요한 모든 내용 들어가이씁니다.
목차
[1] main 함수[1] main 함수
[2] Program Counter, Instruction memory
[3] Register file
[4] Controller
[5] ALU controller
[6] ALU
[7] WB stage
[8] Pipeline
[9] main
[10] Test bench (clock generator)
본문내용
[1] main 함수설계순서를 각 모듈부터 만들라는 힌트를 받았지만 전체 구성을 짜보는 것이 좋다고 생각하여 먼저 위의 block diagram을 먼저 만들었다. 각 모듈 단에 사용할 변수들의 이름을 정하고 변수끼리의 연결을 생각하였다.
[2] Program Counter, Instruction memory
현재 PC 값을 PC라는 변수로 지정하였다. 그리고 F스테이지에서 다음 명령어의 주소를 계산하여 그 결과인 PC+4를 PC_out 이라는 변수에 저장하도록 설계하였다. PC값은 Instruction memory 배열의 주소 값이 되고, IM은 사용하는 이번 프로젝트에서 사용하는 명령어 종류가 별로 없기 때문에 10개의 32bit 공간을 만들어 사용했다.
위의 값을 보면 PC의 초기값에 16이 들어가있으며, PC_out 값에 20이 들어가있음을 알 수 있다. 다음 클럭이 들어올 때 PC값은 PC_out 값으로 대체되고, INS에는 PC/4 값인 IM[5]의 명령어인 R3 <- R1+R2 가 들어있다. PC_out 값은 4증가함을 알 수 있다.
[Format별 Instruction 구조]
명령어는 이와 같이 구성되는데, INS 의 명령문을 위의 field size로 잘라 읽어보면 opcode는 0, source 레지스터는 1, target 레지스터는 2, destination 레지스터는 3을 가리키고 있는 것을 알 수 있다. (000000/00001/00010/00011/00000/100000) funct 코드는 나중에 ALU의 동작을 결정하는 코드로 이번 설계에서는 add, sub 두가지의 경우만 구현하였다. (add: 6`b32, sub: 6`b34)
[3] Register file
아래 그림은 INS가 위에 명시한 바와 같을 경우에 ID단의 정보를 담은 그림이다. funct 코드는 따로 D_func에 저장되고, ALUOp 신호는 controller에서 opcode의 정보를 받아 명령어가 R-format 임을 인지하고 다음과 같이 10을 출력하였다. 명령어는 각 필드로 쪼개어져 정보가 담겨있고, 레지스터 파일에서는 각 필드 레지스터에 담겨있는 정보를 끄집어 내 준다.
참고 자료
1. Computer Organization And Design // Patterson & Hennessy // Morgan Kaufmann2. Verilog HDL // Samir Palnitkar // PRENTICE HALL
3. 연세대학교 프로세서 연구실 http://mpu.yonsei.ac.kr/ 인터넷 강의자료.
압축파일 내 파일목록
ALU.v
ALU.v.bak
ALUcontrol.v
ALUcontrol.v.bak
CONTROL.v
CONTROL.v.bak
IM.v
IM.v.bak
MAIN_mips.v
MAIN_mips.v.bak
MIPS.cr.mti
MIPS.mpf
PIPELINE.v
PIPELINE.v.bak
RD_pass.v
RD_pass.v.bak
REGISTER.v
REGISTER.v.bak
TB_MIPS.v
TB_MIPS.v.bak
transcript
vsim.wlf
work/@a@l@u/verilog.prw
work/@a@l@u/verilog.psm
work/@a@l@u/_primary.dat
work/@a@l@u/_primary.dbs
work/@a@l@u/_primary.vhd
work/@a@l@u_control/verilog.prw
work/@a@l@u_control/verilog.psm
work/@a@l@u_control/_primary.dat
work/@a@l@u_control/_primary.dbs
work/@a@l@u_control/_primary.vhd
work/@c@o@n@t@r@o@l/verilog.prw
work/@c@o@n@t@r@o@l/verilog.psm
work/@c@o@n@t@r@o@l/_primary.dat
work/@c@o@n@t@r@o@l/_primary.dbs
work/@c@o@n@t@r@o@l/_primary.vhd
work/@i@m/verilog.prw
work/@i@m/verilog.psm
work/@i@m/_primary.dat
work/@i@m/_primary.dbs
work/@i@m/_primary.vhd
work/@p@i@p@e@l@i@n@e/verilog.prw
work/@p@i@p@e@l@i@n@e/verilog.psm
work/@p@i@p@e@l@i@n@e/_primary.dat
work/@p@i@p@e@l@i@n@e/_primary.dbs
work/@p@i@p@e@l@i@n@e/_primary.vhd
work/@r@d_pass/verilog.prw
work/@r@d_pass/verilog.psm
work/@r@d_pass/_primary.dat
work/@r@d_pass/_primary.dbs
work/@r@d_pass/_primary.vhd
work/@r@e@g@i@s@t@e@r/verilog.prw
work/@r@e@g@i@s@t@e@r/verilog.psm
work/@r@e@g@i@s@t@e@r/_primary.dat
work/@r@e@g@i@s@t@e@r/_primary.dbs
work/@r@e@g@i@s@t@e@r/_primary.vhd
work/@t@b_@m@i@p@s/verilog.prw
work/@t@b_@m@i@p@s/verilog.psm
work/@t@b_@m@i@p@s/_primary.dat
work/@t@b_@m@i@p@s/_primary.dbs
work/@t@b_@m@i@p@s/_primary.vhd
work/main/verilog.prw
work/main/verilog.psm
work/main/_primary.dat
work/main/_primary.dbs
work/main/_primary.vhd
work/_info
work/_temp/
work/_vmake
업로드MIPS.hwp
ALU.v.bak
ALUcontrol.v
ALUcontrol.v.bak
CONTROL.v
CONTROL.v.bak
IM.v
IM.v.bak
MAIN_mips.v
MAIN_mips.v.bak
MIPS.cr.mti
MIPS.mpf
PIPELINE.v
PIPELINE.v.bak
RD_pass.v
RD_pass.v.bak
REGISTER.v
REGISTER.v.bak
TB_MIPS.v
TB_MIPS.v.bak
transcript
vsim.wlf
work/@a@l@u/verilog.prw
work/@a@l@u/verilog.psm
work/@a@l@u/_primary.dat
work/@a@l@u/_primary.dbs
work/@a@l@u/_primary.vhd
work/@a@l@u_control/verilog.prw
work/@a@l@u_control/verilog.psm
work/@a@l@u_control/_primary.dat
work/@a@l@u_control/_primary.dbs
work/@a@l@u_control/_primary.vhd
work/@c@o@n@t@r@o@l/verilog.prw
work/@c@o@n@t@r@o@l/verilog.psm
work/@c@o@n@t@r@o@l/_primary.dat
work/@c@o@n@t@r@o@l/_primary.dbs
work/@c@o@n@t@r@o@l/_primary.vhd
work/@i@m/verilog.prw
work/@i@m/verilog.psm
work/@i@m/_primary.dat
work/@i@m/_primary.dbs
work/@i@m/_primary.vhd
work/@p@i@p@e@l@i@n@e/verilog.prw
work/@p@i@p@e@l@i@n@e/verilog.psm
work/@p@i@p@e@l@i@n@e/_primary.dat
work/@p@i@p@e@l@i@n@e/_primary.dbs
work/@p@i@p@e@l@i@n@e/_primary.vhd
work/@r@d_pass/verilog.prw
work/@r@d_pass/verilog.psm
work/@r@d_pass/_primary.dat
work/@r@d_pass/_primary.dbs
work/@r@d_pass/_primary.vhd
work/@r@e@g@i@s@t@e@r/verilog.prw
work/@r@e@g@i@s@t@e@r/verilog.psm
work/@r@e@g@i@s@t@e@r/_primary.dat
work/@r@e@g@i@s@t@e@r/_primary.dbs
work/@r@e@g@i@s@t@e@r/_primary.vhd
work/@t@b_@m@i@p@s/verilog.prw
work/@t@b_@m@i@p@s/verilog.psm
work/@t@b_@m@i@p@s/_primary.dat
work/@t@b_@m@i@p@s/_primary.dbs
work/@t@b_@m@i@p@s/_primary.vhd
work/main/verilog.prw
work/main/verilog.psm
work/main/_primary.dat
work/main/_primary.dbs
work/main/_primary.vhd
work/_info
work/_temp/
work/_vmake
업로드MIPS.hwp