Difference between revisions of "Ce"
(→BUNIT) |
|||
(77 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== == Compute Engine Design Specifications == == | == == Compute Engine Design Specifications == == | ||
+ | ASIC AREA Estimate(dc_shell): | ||
+ | |||
+ | FPGA LUT Estimate(synplify_pro): 35,500 LUTs | ||
The COMPUTE ENGINE of SCOORE is responsible for all the calculations of the processor. SCOORE is a clustered architecture, we have FOUR main units which comprise the COMPUTE ENGINE. | The COMPUTE ENGINE of SCOORE is responsible for all the calculations of the processor. SCOORE is a clustered architecture, we have FOUR main units which comprise the COMPUTE ENGINE. | ||
− | # AUNIT is responsible for all the "simple arithmetic operations" of the CPU.(Single Port) | + | # AUNIT is responsible for all the "simple arithmetic operations" ie. add,sub,shift,AND, XOR... of the CPU.(Single Port) |
− | # BUNIT is responsible for branch operations. (Dual Port) | + | # BUNIT is responsible for branch operations ie. BNE, BGE.... (Dual Port) |
# CUNIT handles all floating point operations. (Single Port) | # CUNIT handles all floating point operations. (Single Port) | ||
# MUNIT handles all Load and Store operations. (Dual Port) | # MUNIT handles all Load and Store operations. (Dual Port) | ||
Line 14: | Line 17: | ||
{| | {| | ||
− | == Overall Interface for | + | == Overall Interface for INPUT to Compute Engine & OUTPUT from Compute Engine == |
+ | CLOCK and RESET are Global Inputs to the Compute Engine. | ||
+ | |||
+ | Inputs to Compute Engine(CE) FROM Select: | ||
+ | At most CE can receive 6 instructions/cycle from Select. Listed below is a sample of what could be sent in "best" case. | ||
+ | |||
+ | #aunit_dinst - This instruction would qualify as a simple arithmetic instruction. | ||
+ | #bunit_dinst_1 - This instruction would be a branch operation. | ||
+ | #bunit_dinst_2 - This would be an alu operation. | ||
+ | #cunit_dinst - This would be a floating point operation. | ||
+ | #munit_dinst_1 - This would be a load operation. | ||
+ | #munit_dinst_2 - This would be a store operation. | ||
+ | |||
+ | Input to Compute Engine FROM RAT/ROB: | ||
+ | |||
+ | #clear - asserted when branch mis-prediction occurs. | ||
+ | |||
+ | Input to Compute Engine FROM CACHE: | ||
+ | |||
+ | #load_data - data to be loaded into register from memory. | ||
+ | |||
+ | Outputs from Compute Engine TO Select: | ||
+ | #Aunit_DoneType | ||
+ | #Bunit_Br_DoneType | ||
+ | #Bunit_ALU_DoneType | ||
+ | #Cunit_DoneType | ||
+ | |||
+ | Ouput from Compute Engine to RAT/ROB: | ||
+ | |||
+ | #DoneType Struct containing RID for retirement of instruction | ||
+ | |||
+ | Output from Compute Engine to Cache: | ||
+ | #Request To Load from memory or to Store into memory | ||
{| | {| | ||
|style="text-align:center" | | |style="text-align:center" | | ||
{| style="border:2px dashed blue" width="300pt" cellspacing="0" | {| style="border:2px dashed blue" width="300pt" cellspacing="0" | ||
− | |+ SELECT | + | |+ CACHE - SELECT - RATROB |
|- style="height:150px; vertical-align:top" | |- style="height:150px; vertical-align:top" | ||
− | !SELECT | + | !CACHE - SELECT - RATROB |
|} | |} | ||
| style="text-align:center"| | | style="text-align:center"| | ||
− | {| border="1" width="300pt" cellspacing="0" | + | {| border="1" width="300pt" height="900px" cellspacing="0" |
|+ COMPUTE ENGINE | |+ COMPUTE ENGINE | ||
− | |- style="height | + | |- style="height=500px; vertical-align:top" |
− | + | |- align="center" | |
− | + | || AUNIT | |
− | + | |- align="center" | |
− | + | || BUNIT | |
+ | |- align="center" | ||
+ | || CUNIT | ||
+ | |- align="center" | ||
+ | || MUNIT | ||
+ | |- align="center" | ||
|} | |} | ||
+ | |||
| style="text-align:center"| | | style="text-align:center"| | ||
{| style="border:2px dashed blue" width="300pt" cellspacing="0" | {| style="border:2px dashed blue" width="300pt" cellspacing="0" | ||
− | |+ | + | |+ CACHE - SELECT - RATROB |
|- style="height:150px; vertical-align:top" | |- style="height:150px; vertical-align:top" | ||
− | ! | + | !CACHE - SELECT - RATROB |
+ | |} | ||
|} | |} | ||
+ | == Individual Unit Descriptions == | ||
+ | Each of the four clusters in the CE holds 128 registers in its Register File. There are a total of 512 registers. A 9-bit binary number is assigned to each register. Since there are only 512 registers, the highest 2-bits are indicative of the CE cluster/unit to which they belong. | ||
+ | {| border="1" align="center" cellspacing="0" | ||
+ | |+ Register Numbers and Corresponding Units | ||
+ | |- | ||
+ | !style="background:#efefef;"| Register Number | ||
+ | !style="background:#efefef;"| Highest 2 bits | ||
+ | !style="background:#efefef;"| Compute Engine (CE) | ||
+ | |||
+ | |- align="center" | ||
+ | |0 - 127 || 00 || A Unit RF | ||
+ | |||
+ | |- align="center" | ||
+ | |128 - 255 || 01 || B Unit RF | ||
+ | |||
+ | |- align="center" | ||
+ | |256 - 383 || 10 || C Unit RF | ||
+ | |||
+ | |- align="center" | ||
+ | |384 - 511 || 11 || M Unit RF | ||
|} | |} | ||
− | == | + | |
− | {| border="1" width="300pt" cellspacing="0" | + | == AUNIT == |
− | + | {|border="1" width="300pt" cellspacing="0" | |
|- style="height:150px; vertical-align:top" | |- style="height:150px; vertical-align:top" | ||
!aunit_stage1 | !aunit_stage1 | ||
+ | -Local/Ext/Imm Src Sel. Logic | ||
+ | -Reset/Busy Logic | ||
!aunit_stage2 | !aunit_stage2 | ||
+ | -Reservation Station Logic | ||
+ | -Forwarding Logic | ||
+ | -Update Logic | ||
!salu | !salu | ||
+ | -Single Cycle Execution Stage | ||
!write_back | !write_back | ||
+ | Reg. File | ||
|} | |} | ||
+ | [[Image:Aunit.jpeg|1100x425px]] | ||
+ | The AUNIT executes the following SPARC V8 instructions: | ||
+ | == BUNIT == | ||
{| border="1" width="300pt" cellspacing="0" | {| border="1" width="300pt" cellspacing="0" | ||
− | |||
|- style="height:150px; vertical-align:top" | |- style="height:150px; vertical-align:top" | ||
!bunit_stage1 | !bunit_stage1 | ||
+ | -Local/Ext/Imm Src Sel. Logic | ||
+ | -Reset/Busy Logic | ||
!bunit_stage2 | !bunit_stage2 | ||
+ | -Reservation Station Logic | ||
+ | -Forwarding Logic | ||
+ | -Update Logic | ||
!balu/salu | !balu/salu | ||
+ | -Single Cycle Execution Stage | ||
!write_back | !write_back | ||
+ | Reg. File | ||
|} | |} | ||
+ | [[Image:Bunit.jpeg|1100x425px]] | ||
+ | The BUNIT executes the following SPARC V8 instructions: | ||
+ | == CUNIT == | ||
{| border="1" width="300pt" cellspacing="0" | {| border="1" width="300pt" cellspacing="0" | ||
− | |||
|- style="height:150px; vertical-align:top" | |- style="height:150px; vertical-align:top" | ||
!cunit_stage1 | !cunit_stage1 | ||
+ | -Local/Ext/Imm Src Sel. Logic | ||
+ | -Reset/Busy Logic | ||
!cunit_stage2 | !cunit_stage2 | ||
+ | -Reservation Station Logic | ||
+ | -Forwarding Logic | ||
+ | -Update Logic | ||
!FPU | !FPU | ||
+ | -Multiple Cycle Execution Stage | ||
!write_back | !write_back | ||
+ | Reg. File | ||
|} | |} | ||
+ | The CUNIT executes the following SPARC V8 instructions: | ||
+ | == MUNIT == | ||
{| border="1" width="300pt" cellspacing="0" | {| border="1" width="300pt" cellspacing="0" | ||
− | |||
|- style="height:150px; vertical-align:top" | |- style="height:150px; vertical-align:top" | ||
!munit_stage1 | !munit_stage1 | ||
+ | -Local/Ext/Imm Src Sel. Logic | ||
+ | -Reset/Busy Logic | ||
!munit_stage2 | !munit_stage2 | ||
+ | -Reservation Station Logic | ||
+ | -Forwarding Logic | ||
+ | -Update Logic | ||
!CACHE | !CACHE | ||
+ | -Multiple Cycle Execution Stage | ||
!write_back | !write_back | ||
+ | Reg. File | ||
|} | |} | ||
+ | The MUNIT executes the following SPARC V8 instructions: | ||
+ | |||
+ | |||
+ | |||
--[[User:Rigo Dicochea|Rigo Dicochea]] 09:47, 30 March 2009 (PDT) | --[[User:Rigo Dicochea|Rigo Dicochea]] 09:47, 30 March 2009 (PDT) |
Latest revision as of 16:14, 15 May 2009
Contents
== Compute Engine Design Specifications ==
ASIC AREA Estimate(dc_shell):
FPGA LUT Estimate(synplify_pro): 35,500 LUTs
The COMPUTE ENGINE of SCOORE is responsible for all the calculations of the processor. SCOORE is a clustered architecture, we have FOUR main units which comprise the COMPUTE ENGINE.
- AUNIT is responsible for all the "simple arithmetic operations" ie. add,sub,shift,AND, XOR... of the CPU.(Single Port)
- BUNIT is responsible for branch operations ie. BNE, BGE.... (Dual Port)
- CUNIT handles all floating point operations. (Single Port)
- MUNIT handles all Load and Store operations. (Dual Port)
A more detailed description of each individual block is given below.
|
|
|
Individual Unit Descriptions
Each of the four clusters in the CE holds 128 registers in its Register File. There are a total of 512 registers. A 9-bit binary number is assigned to each register. Since there are only 512 registers, the highest 2-bits are indicative of the CE cluster/unit to which they belong.
Register Number | Highest 2 bits | Compute Engine (CE) |
---|---|---|
0 - 127 | 00 | A Unit RF |
128 - 255 | 01 | B Unit RF |
256 - 383 | 10 | C Unit RF |
384 - 511 | 11 | M Unit RF |
AUNIT
aunit_stage1
-Local/Ext/Imm Src Sel. Logic -Reset/Busy Logic |
aunit_stage2
-Reservation Station Logic -Forwarding Logic -Update Logic |
salu
-Single Cycle Execution Stage |
write_back
Reg. File |
---|
The AUNIT executes the following SPARC V8 instructions:
BUNIT
bunit_stage1
-Local/Ext/Imm Src Sel. Logic -Reset/Busy Logic |
bunit_stage2
-Reservation Station Logic -Forwarding Logic -Update Logic |
balu/salu
-Single Cycle Execution Stage |
write_back
Reg. File |
---|
The BUNIT executes the following SPARC V8 instructions:
CUNIT
cunit_stage1
-Local/Ext/Imm Src Sel. Logic -Reset/Busy Logic |
cunit_stage2
-Reservation Station Logic -Forwarding Logic -Update Logic |
FPU
-Multiple Cycle Execution Stage |
write_back
Reg. File |
---|
The CUNIT executes the following SPARC V8 instructions:
MUNIT
munit_stage1
-Local/Ext/Imm Src Sel. Logic -Reset/Busy Logic |
munit_stage2
-Reservation Station Logic -Forwarding Logic -Update Logic |
CACHE
-Multiple Cycle Execution Stage |
write_back
Reg. File |
---|
The MUNIT executes the following SPARC V8 instructions:
--Rigo Dicochea 09:47, 30 March 2009 (PDT)