Merged consts-as-traits
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user