1
0

Merged consts-as-traits

This commit is contained in:
Henry Cook
2012-10-16 16:32:35 -07:00
20 changed files with 357 additions and 272 deletions

View File

@ -1,8 +1,7 @@
package rocket
import Chisel._
import Node._;
import Node._
import Constants._
import Instructions._
import hwacha._
@ -88,19 +87,24 @@ class ioCtrlAll extends Bundle()
val vec_iface = new ioCtrlVecInterface()
}
object rocketCtrlDecode
abstract trait rocketCtrlDecodeConstants
{
val xpr64 = Y;
val decode_default =
// jalr eret
// fp_val | renx2 div_val | syscall
// jalr eret
// fp_val | renx2 div_val | syscall
// | vec_val | | renx1 mem_val mul_val | wen pcr | | privileged
// val | | brtype | | | s_alu2 dw alu | mem_cmd mem_type| mul_fn | | s_wa s_wb | sync | | | replay_next
// | | | | | | | | | | | | | | | | | | | | | | | | |
List(N, X,X,BR_X, X,X,X,A2_X, DW_X, FN_X, N,M_X, MT_X, X,MUL_X, X,X,WA_X, WB_X, PCR_X,SYNC_X,X,X,X,X)
val xdecode = Array(
val table: Array[(Bits, List[Bits])]
}
object rocketCtrlXDecode extends rocketCtrlDecodeConstants
{
val table = Array(
// jalr eret
// fp_val | renx2 div_val | syscall
// | vec_val | | renx1 mem_val mul_val | wen pcr | | privileged
@ -207,8 +211,11 @@ object rocketCtrlDecode
RDTIME-> List(Y, N,N,BR_N, N,N,N,A2_X, DW_XPR,FN_X, N,M_X, MT_X, N,MUL_X, N,Y,WA_RD,WB_TSC,PCR_N,SYNC_N,N,N,N,N),
RDCYCLE-> List(Y, N,N,BR_N, N,N,N,A2_X, DW_XPR,FN_X, N,M_X, MT_X, N,MUL_X, N,Y,WA_RD,WB_TSC,PCR_N,SYNC_N,N,N,N,N),
RDINSTRET-> List(Y, N,N,BR_N, N,N,N,A2_X, DW_XPR,FN_X, N,M_X, MT_X, N,MUL_X, N,Y,WA_RD,WB_IRT,PCR_N,SYNC_N,N,N,N,N))
val fdecode = Array(
}
object rocketCtrlFDecode extends rocketCtrlDecodeConstants
{
val table = Array(
// jalr eret
// fp_val | renx2 div_val | syscall
// | vec_val | | renx1 mem_val mul_val | wen pcr | | privileged
@ -272,8 +279,11 @@ object rocketCtrlDecode
FLD-> List(FPU_Y,Y,N,BR_N, N,N,Y,A2_ITYPE,DW_XPR,FN_ADD, Y,M_XRD, MT_D, N,MUL_X, N,N,WA_RD,WB_ALU,PCR_N,SYNC_N,N,N,N,N),
FSW-> List(FPU_Y,Y,N,BR_N, N,N,Y,A2_BTYPE,DW_XPR,FN_ADD, Y,M_XWR, MT_W, N,MUL_X, N,N,WA_X, WB_ALU,PCR_N,SYNC_N,N,N,N,N),
FSD-> List(FPU_Y,Y,N,BR_N, N,N,Y,A2_BTYPE,DW_XPR,FN_ADD, Y,M_XWR, MT_D, N,MUL_X, N,N,WA_X, WB_ALU,PCR_N,SYNC_N,N,N,N,N))
val vdecode = Array(
}
object rocketCtrlVDecode extends rocketCtrlDecodeConstants
{
val table = Array(
// jalr eret
// fp_val | renx2 div_val | syscall
// | vec_val | | renx1 mem_val mul_val | wen pcr | | privileged
@ -332,11 +342,11 @@ class rocketCtrl extends Component
{
val io = new ioCtrlAll();
var decode_table = rocketCtrlDecode.xdecode
if (HAVE_FPU) decode_table ++= rocketCtrlDecode.fdecode
if (HAVE_VEC) decode_table ++= rocketCtrlDecode.vdecode
var decode_table = rocketCtrlXDecode.table
if (HAVE_FPU) decode_table ++= rocketCtrlFDecode.table
if (HAVE_VEC) decode_table ++= rocketCtrlVDecode.table
val cs = DecodeLogic(io.dpath.inst, rocketCtrlDecode.decode_default, decode_table)
val cs = DecodeLogic(io.dpath.inst, rocketCtrlXDecode.decode_default, decode_table)
val id_int_val :: id_fp_val :: id_vec_val :: id_br_type :: id_jalr :: id_renx2 :: id_renx1 :: id_sel_alu2 :: id_fn_dw :: id_fn_alu :: cs0 = cs
val id_mem_val :: id_mem_cmd :: id_mem_type :: id_mul_val :: id_mul_fn :: id_div_val :: id_wen :: id_sel_wa :: id_sel_wb :: cs1 = cs0