Dec added

This commit is contained in:
​Laraib Khan 2021-01-27 11:46:11 +05:00
parent 6479386424
commit f23f878f60
126 changed files with 89999 additions and 4559 deletions

2522
dec.anno.json Normal file

File diff suppressed because it is too large Load Diff

21733
dec.fir Normal file

File diff suppressed because one or more lines are too long

16582
dec.v Normal file

File diff suppressed because it is too large Load Diff

683
dec_dec_ctl.anno.json Normal file
View File

@ -0,0 +1,683 @@
[
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_unshfl",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_packh",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_crc32_w",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_rd",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_crc32_b",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_zba",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_presync",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_rs1_sign",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_ror",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_rs2",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_pc",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_load",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_csr_clr",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_grev",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_alu",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_mul",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_min",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_zbp",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_clmulr",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_imm12",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_gorc",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_pcnt",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_beq",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sra",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_ebreak",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_by",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sub",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_max",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_csr_write",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sll",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_zbe",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_slt",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sext_h",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_fence",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_rem",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_store",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_crc32_h",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_packu",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_crc32c_h",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_jal",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_slo",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_blt",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sbset",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_zbb",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_shfl",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_ctz",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_zbf",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_fence_i",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_unsign",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_lxor",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_mret",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_rs1",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_csr_imm",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_zbr",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_bge",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_pm_alu",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sbinv",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_div",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_bfp",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sext_b",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_add",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_crc32c_b",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_land",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sbext",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_half",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sh1add",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_word",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_bne",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_zbc",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sh2add",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_bext",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_zbs",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_csr_read",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_lor",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_csr_set",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_srl",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_low",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_ecall",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sbclr",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_crc32c_w",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_rol",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_pack",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_condbr",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_legal",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_lsu",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_clmulh",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sh3add",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_postsync",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_clz",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_sro",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_imm20",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_clmul",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_rs2_sign",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_bdep",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_dec_ctl|dec_dec_ctl>io_out_shimm5",
"sources":[
"~dec_dec_ctl|dec_dec_ctl>io_ins"
]
},
{
"class":"firrtl.EmitCircuitAnnotation",
"emitter":"firrtl.VerilogEmitter"
},
{
"class":"firrtl.options.TargetDirAnnotation",
"directory":"."
},
{
"class":"firrtl.options.OutputAnnotationFileAnnotation",
"file":"dec_dec_ctl"
},
{
"class":"firrtl.transforms.BlackBoxTargetDirAnno",
"targetDir":"."
}
]

4526
dec_dec_ctl.fir Normal file

File diff suppressed because it is too large Load Diff

1496
dec_dec_ctl.v Normal file

File diff suppressed because it is too large Load Diff

2118
dec_decode_ctl.anno.json Normal file

File diff suppressed because it is too large Load Diff

7729
dec_decode_ctl.fir Normal file

File diff suppressed because one or more lines are too long

4365
dec_decode_ctl.v Normal file

File diff suppressed because it is too large Load Diff

37
dec_gpr_ctl.anno.json Normal file
View File

@ -0,0 +1,37 @@
[
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_gpr_ctl|dec_gpr_ctl>io_gpr_exu_gpr_i0_rs1_d",
"sources":[
"~dec_gpr_ctl|dec_gpr_ctl>io_raddr0"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_gpr_ctl|dec_gpr_ctl>io_gpr_exu_gpr_i0_rs2_d",
"sources":[
"~dec_gpr_ctl|dec_gpr_ctl>io_raddr1"
]
},
{
"class":"firrtl.EmitCircuitAnnotation",
"emitter":"firrtl.VerilogEmitter"
},
{
"class":"firrtl.transforms.BlackBoxResourceAnno",
"target":"dec_gpr_ctl.gated_latch",
"resourceId":"/vsrc/gated_latch.sv"
},
{
"class":"firrtl.options.TargetDirAnnotation",
"directory":"."
},
{
"class":"firrtl.options.OutputAnnotationFileAnnotation",
"file":"dec_gpr_ctl"
},
{
"class":"firrtl.transforms.BlackBoxTargetDirAnno",
"targetDir":"."
}
]

2297
dec_gpr_ctl.fir Normal file

File diff suppressed because it is too large Load Diff

1395
dec_gpr_ctl.v Normal file

File diff suppressed because it is too large Load Diff

198
dec_ib_ctl.anno.json Normal file
View File

@ -0,0 +1,198 @@
[
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_debug_valid_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_valid",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_type"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_instr_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_instr",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_valid",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_type",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_addr",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_write"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_bp_btag",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_bp_btag"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_icaf_type_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_icaf_type"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_debug_fence_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_write",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_type",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_addr",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_valid"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_bp_fa_index",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_i0_fa_index"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_brp_bits_way",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_i0_brp_bits_way"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_pc4_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_pc4"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_icaf_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_icaf"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_dbecc_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_dbecc"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_ib0_valid_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_valid",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_valid",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_type"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_brp_bits_br_error",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_i0_brp_bits_br_error"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_brp_bits_br_start_error",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_i0_brp_bits_br_start_error"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_icaf_second_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_icaf_second"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_bp_fghr",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_bp_fghr"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_brp_bits_toffset",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_i0_brp_bits_toffset"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_brp_bits_ret",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_i0_brp_bits_ret"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_brp_bits_bank",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_i0_brp_bits_bank"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_ib_exu_dec_i0_pc_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_pc"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_bp_index",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_ifu_i0_bp_index"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_ib_exu_dec_debug_wdata_rs1_d",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_write",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_type",
"~dec_ib_ctl|dec_ib_ctl>io_dbg_ib_dbg_cmd_valid"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_brp_bits_hist",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_i0_brp_bits_hist"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_brp_valid",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_i0_brp_valid"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_ib_ctl|dec_ib_ctl>io_dec_i0_brp_bits_prett",
"sources":[
"~dec_ib_ctl|dec_ib_ctl>io_ifu_ib_i0_brp_bits_prett"
]
},
{
"class":"firrtl.EmitCircuitAnnotation",
"emitter":"firrtl.VerilogEmitter"
},
{
"class":"firrtl.options.TargetDirAnnotation",
"directory":"."
},
{
"class":"firrtl.options.OutputAnnotationFileAnnotation",
"file":"dec_ib_ctl"
},
{
"class":"firrtl.transforms.BlackBoxTargetDirAnno",
"targetDir":"."
}
]

73
dec_ib_ctl.fir Normal file
View File

@ -0,0 +1,73 @@
;buildInfoPackage: chisel3, version: 3.3.1, scalaVersion: 2.12.11, sbtVersion: 1.3.10
circuit dec_ib_ctl :
module dec_ib_ctl :
input clock : Clock
input reset : UInt<1>
output io : {flip ifu_ib : {ifu_i0_icaf : UInt<1>, ifu_i0_icaf_type : UInt<2>, ifu_i0_icaf_second : UInt<1>, ifu_i0_dbecc : UInt<1>, ifu_i0_bp_index : UInt<8>, ifu_i0_bp_fghr : UInt<8>, ifu_i0_bp_btag : UInt<5>, ifu_i0_valid : UInt<1>, ifu_i0_instr : UInt<32>, ifu_i0_pc : UInt<31>, ifu_i0_pc4 : UInt<1>, i0_brp : {valid : UInt<1>, bits : {toffset : UInt<12>, hist : UInt<2>, br_error : UInt<1>, br_start_error : UInt<1>, bank : UInt<1>, prett : UInt<31>, way : UInt<1>, ret : UInt<1>}}}, flip ib_exu : {flip dec_i0_pc_d : UInt<31>, flip dec_debug_wdata_rs1_d : UInt<1>}, dbg_ib : {flip dbg_cmd_valid : UInt<1>, flip dbg_cmd_write : UInt<1>, flip dbg_cmd_type : UInt<2>, flip dbg_cmd_addr : UInt<32>}, dec_debug_valid_d : UInt<1>, dec_ib0_valid_d : UInt<1>, dec_i0_icaf_type_d : UInt<2>, dec_i0_instr_d : UInt<32>, dec_i0_pc4_d : UInt<1>, dec_i0_brp : {valid : UInt<1>, bits : {toffset : UInt<12>, hist : UInt<2>, br_error : UInt<1>, br_start_error : UInt<1>, bank : UInt<1>, prett : UInt<31>, way : UInt<1>, ret : UInt<1>}}, dec_i0_bp_index : UInt<8>, dec_i0_bp_fghr : UInt<8>, dec_i0_bp_btag : UInt<5>, flip ifu_i0_fa_index : UInt<9>, dec_i0_bp_fa_index : UInt<9>, dec_i0_icaf_d : UInt<1>, dec_i0_icaf_second_d : UInt<1>, dec_i0_dbecc_d : UInt<1>, dec_debug_fence_d : UInt<1>}
io.dec_i0_icaf_second_d <= io.ifu_ib.ifu_i0_icaf_second @[dec_ib_ctl.scala 34:35]
io.dec_i0_dbecc_d <= io.ifu_ib.ifu_i0_dbecc @[dec_ib_ctl.scala 35:31]
io.dec_i0_icaf_d <= io.ifu_ib.ifu_i0_icaf @[dec_ib_ctl.scala 36:31]
io.ib_exu.dec_i0_pc_d <= io.ifu_ib.ifu_i0_pc @[dec_ib_ctl.scala 37:31]
io.dec_i0_pc4_d <= io.ifu_ib.ifu_i0_pc4 @[dec_ib_ctl.scala 38:31]
io.dec_i0_icaf_type_d <= io.ifu_ib.ifu_i0_icaf_type @[dec_ib_ctl.scala 39:31]
io.dec_i0_brp.bits.ret <= io.ifu_ib.i0_brp.bits.ret @[dec_ib_ctl.scala 40:31]
io.dec_i0_brp.bits.way <= io.ifu_ib.i0_brp.bits.way @[dec_ib_ctl.scala 40:31]
io.dec_i0_brp.bits.prett <= io.ifu_ib.i0_brp.bits.prett @[dec_ib_ctl.scala 40:31]
io.dec_i0_brp.bits.bank <= io.ifu_ib.i0_brp.bits.bank @[dec_ib_ctl.scala 40:31]
io.dec_i0_brp.bits.br_start_error <= io.ifu_ib.i0_brp.bits.br_start_error @[dec_ib_ctl.scala 40:31]
io.dec_i0_brp.bits.br_error <= io.ifu_ib.i0_brp.bits.br_error @[dec_ib_ctl.scala 40:31]
io.dec_i0_brp.bits.hist <= io.ifu_ib.i0_brp.bits.hist @[dec_ib_ctl.scala 40:31]
io.dec_i0_brp.bits.toffset <= io.ifu_ib.i0_brp.bits.toffset @[dec_ib_ctl.scala 40:31]
io.dec_i0_brp.valid <= io.ifu_ib.i0_brp.valid @[dec_ib_ctl.scala 40:31]
io.dec_i0_bp_index <= io.ifu_ib.ifu_i0_bp_index @[dec_ib_ctl.scala 41:31]
io.dec_i0_bp_fghr <= io.ifu_ib.ifu_i0_bp_fghr @[dec_ib_ctl.scala 42:31]
io.dec_i0_bp_btag <= io.ifu_ib.ifu_i0_bp_btag @[dec_ib_ctl.scala 43:31]
io.dec_i0_bp_fa_index <= io.ifu_i0_fa_index @[dec_ib_ctl.scala 44:25]
node _T = neq(io.dbg_ib.dbg_cmd_type, UInt<2>("h02")) @[dec_ib_ctl.scala 58:74]
node debug_valid = and(io.dbg_ib.dbg_cmd_valid, _T) @[dec_ib_ctl.scala 58:48]
node _T_1 = eq(io.dbg_ib.dbg_cmd_write, UInt<1>("h00")) @[dec_ib_ctl.scala 59:38]
node debug_read = and(debug_valid, _T_1) @[dec_ib_ctl.scala 59:36]
node debug_write = and(debug_valid, io.dbg_ib.dbg_cmd_write) @[dec_ib_ctl.scala 60:36]
io.dec_debug_valid_d <= debug_valid @[dec_ib_ctl.scala 61:24]
node _T_2 = eq(io.dbg_ib.dbg_cmd_type, UInt<1>("h00")) @[dec_ib_ctl.scala 62:62]
node debug_read_gpr = and(debug_read, _T_2) @[dec_ib_ctl.scala 62:37]
node _T_3 = eq(io.dbg_ib.dbg_cmd_type, UInt<1>("h00")) @[dec_ib_ctl.scala 63:62]
node debug_write_gpr = and(debug_write, _T_3) @[dec_ib_ctl.scala 63:37]
node _T_4 = eq(io.dbg_ib.dbg_cmd_type, UInt<1>("h01")) @[dec_ib_ctl.scala 64:62]
node debug_read_csr = and(debug_read, _T_4) @[dec_ib_ctl.scala 64:37]
node _T_5 = eq(io.dbg_ib.dbg_cmd_type, UInt<1>("h01")) @[dec_ib_ctl.scala 65:62]
node debug_write_csr = and(debug_write, _T_5) @[dec_ib_ctl.scala 65:37]
node dreg = bits(io.dbg_ib.dbg_cmd_addr, 4, 0) @[dec_ib_ctl.scala 67:47]
node dcsr = bits(io.dbg_ib.dbg_cmd_addr, 11, 0) @[dec_ib_ctl.scala 68:47]
node _T_6 = bits(debug_read_gpr, 0, 0) @[dec_ib_ctl.scala 71:20]
node _T_7 = mux(UInt<1>("h00"), UInt<12>("h0fff"), UInt<12>("h00")) @[Bitwise.scala 72:12]
node _T_8 = cat(_T_7, dreg) @[Cat.scala 29:58]
node _T_9 = cat(_T_8, UInt<15>("h06033")) @[Cat.scala 29:58]
node _T_10 = bits(debug_write_gpr, 0, 0) @[dec_ib_ctl.scala 72:21]
node _T_11 = cat(UInt<20>("h06"), dreg) @[Cat.scala 29:58]
node _T_12 = cat(_T_11, UInt<7>("h033")) @[Cat.scala 29:58]
node _T_13 = bits(debug_read_csr, 0, 0) @[dec_ib_ctl.scala 73:20]
node _T_14 = cat(dcsr, UInt<20>("h02073")) @[Cat.scala 29:58]
node _T_15 = bits(debug_write_csr, 0, 0) @[dec_ib_ctl.scala 74:21]
node _T_16 = cat(dcsr, UInt<20>("h01073")) @[Cat.scala 29:58]
node _T_17 = mux(_T_6, _T_9, UInt<1>("h00")) @[Mux.scala 27:72]
node _T_18 = mux(_T_10, _T_12, UInt<1>("h00")) @[Mux.scala 27:72]
node _T_19 = mux(_T_13, _T_14, UInt<1>("h00")) @[Mux.scala 27:72]
node _T_20 = mux(_T_15, _T_16, UInt<1>("h00")) @[Mux.scala 27:72]
node _T_21 = or(_T_17, _T_18) @[Mux.scala 27:72]
node _T_22 = or(_T_21, _T_19) @[Mux.scala 27:72]
node _T_23 = or(_T_22, _T_20) @[Mux.scala 27:72]
wire ib0_debug_in : UInt<32> @[Mux.scala 27:72]
ib0_debug_in <= _T_23 @[Mux.scala 27:72]
node _T_24 = or(debug_write_gpr, debug_write_csr) @[dec_ib_ctl.scala 78:54]
io.ib_exu.dec_debug_wdata_rs1_d <= _T_24 @[dec_ib_ctl.scala 78:35]
node _T_25 = eq(dcsr, UInt<11>("h07c4")) @[dec_ib_ctl.scala 81:51]
node _T_26 = and(debug_write_csr, _T_25) @[dec_ib_ctl.scala 81:43]
io.dec_debug_fence_d <= _T_26 @[dec_ib_ctl.scala 81:24]
node _T_27 = or(io.ifu_ib.ifu_i0_valid, debug_valid) @[dec_ib_ctl.scala 83:48]
io.dec_ib0_valid_d <= _T_27 @[dec_ib_ctl.scala 83:22]
node _T_28 = bits(debug_valid, 0, 0) @[dec_ib_ctl.scala 84:41]
node _T_29 = mux(_T_28, ib0_debug_in, io.ifu_ib.ifu_i0_instr) @[dec_ib_ctl.scala 84:28]
io.dec_i0_instr_d <= _T_29 @[dec_ib_ctl.scala 84:22]

103
dec_ib_ctl.v Normal file
View File

@ -0,0 +1,103 @@
module dec_ib_ctl(
input clock,
input reset,
input io_ifu_ib_ifu_i0_icaf,
input [1:0] io_ifu_ib_ifu_i0_icaf_type,
input io_ifu_ib_ifu_i0_icaf_second,
input io_ifu_ib_ifu_i0_dbecc,
input [7:0] io_ifu_ib_ifu_i0_bp_index,
input [7:0] io_ifu_ib_ifu_i0_bp_fghr,
input [4:0] io_ifu_ib_ifu_i0_bp_btag,
input io_ifu_ib_ifu_i0_valid,
input [31:0] io_ifu_ib_ifu_i0_instr,
input [30:0] io_ifu_ib_ifu_i0_pc,
input io_ifu_ib_ifu_i0_pc4,
input io_ifu_ib_i0_brp_valid,
input [11:0] io_ifu_ib_i0_brp_bits_toffset,
input [1:0] io_ifu_ib_i0_brp_bits_hist,
input io_ifu_ib_i0_brp_bits_br_error,
input io_ifu_ib_i0_brp_bits_br_start_error,
input io_ifu_ib_i0_brp_bits_bank,
input [30:0] io_ifu_ib_i0_brp_bits_prett,
input io_ifu_ib_i0_brp_bits_way,
input io_ifu_ib_i0_brp_bits_ret,
output [30:0] io_ib_exu_dec_i0_pc_d,
output io_ib_exu_dec_debug_wdata_rs1_d,
input io_dbg_ib_dbg_cmd_valid,
input io_dbg_ib_dbg_cmd_write,
input [1:0] io_dbg_ib_dbg_cmd_type,
input [31:0] io_dbg_ib_dbg_cmd_addr,
output io_dec_debug_valid_d,
output io_dec_ib0_valid_d,
output [1:0] io_dec_i0_icaf_type_d,
output [31:0] io_dec_i0_instr_d,
output io_dec_i0_pc4_d,
output io_dec_i0_brp_valid,
output [11:0] io_dec_i0_brp_bits_toffset,
output [1:0] io_dec_i0_brp_bits_hist,
output io_dec_i0_brp_bits_br_error,
output io_dec_i0_brp_bits_br_start_error,
output io_dec_i0_brp_bits_bank,
output [30:0] io_dec_i0_brp_bits_prett,
output io_dec_i0_brp_bits_way,
output io_dec_i0_brp_bits_ret,
output [7:0] io_dec_i0_bp_index,
output [7:0] io_dec_i0_bp_fghr,
output [4:0] io_dec_i0_bp_btag,
input [8:0] io_ifu_i0_fa_index,
output [8:0] io_dec_i0_bp_fa_index,
output io_dec_i0_icaf_d,
output io_dec_i0_icaf_second_d,
output io_dec_i0_dbecc_d,
output io_dec_debug_fence_d
);
wire _T = io_dbg_ib_dbg_cmd_type != 2'h2; // @[dec_ib_ctl.scala 58:74]
wire debug_valid = io_dbg_ib_dbg_cmd_valid & _T; // @[dec_ib_ctl.scala 58:48]
wire _T_1 = ~io_dbg_ib_dbg_cmd_write; // @[dec_ib_ctl.scala 59:38]
wire debug_read = debug_valid & _T_1; // @[dec_ib_ctl.scala 59:36]
wire debug_write = debug_valid & io_dbg_ib_dbg_cmd_write; // @[dec_ib_ctl.scala 60:36]
wire _T_2 = io_dbg_ib_dbg_cmd_type == 2'h0; // @[dec_ib_ctl.scala 62:62]
wire debug_read_gpr = debug_read & _T_2; // @[dec_ib_ctl.scala 62:37]
wire debug_write_gpr = debug_write & _T_2; // @[dec_ib_ctl.scala 63:37]
wire _T_4 = io_dbg_ib_dbg_cmd_type == 2'h1; // @[dec_ib_ctl.scala 64:62]
wire debug_read_csr = debug_read & _T_4; // @[dec_ib_ctl.scala 64:37]
wire debug_write_csr = debug_write & _T_4; // @[dec_ib_ctl.scala 65:37]
wire [4:0] dreg = io_dbg_ib_dbg_cmd_addr[4:0]; // @[dec_ib_ctl.scala 67:47]
wire [11:0] dcsr = io_dbg_ib_dbg_cmd_addr[11:0]; // @[dec_ib_ctl.scala 68:47]
wire [31:0] _T_9 = {12'h0,dreg,15'h6033}; // @[Cat.scala 29:58]
wire [31:0] _T_12 = {20'h6,dreg,7'h33}; // @[Cat.scala 29:58]
wire [31:0] _T_14 = {dcsr,20'h2073}; // @[Cat.scala 29:58]
wire [31:0] _T_16 = {dcsr,20'h1073}; // @[Cat.scala 29:58]
wire [31:0] _T_17 = debug_read_gpr ? _T_9 : 32'h0; // @[Mux.scala 27:72]
wire [31:0] _T_18 = debug_write_gpr ? _T_12 : 32'h0; // @[Mux.scala 27:72]
wire [31:0] _T_19 = debug_read_csr ? _T_14 : 32'h0; // @[Mux.scala 27:72]
wire [31:0] _T_20 = debug_write_csr ? _T_16 : 32'h0; // @[Mux.scala 27:72]
wire [31:0] _T_21 = _T_17 | _T_18; // @[Mux.scala 27:72]
wire [31:0] _T_22 = _T_21 | _T_19; // @[Mux.scala 27:72]
wire [31:0] ib0_debug_in = _T_22 | _T_20; // @[Mux.scala 27:72]
wire _T_25 = dcsr == 12'h7c4; // @[dec_ib_ctl.scala 81:51]
assign io_ib_exu_dec_i0_pc_d = io_ifu_ib_ifu_i0_pc; // @[dec_ib_ctl.scala 37:31]
assign io_ib_exu_dec_debug_wdata_rs1_d = debug_write_gpr | debug_write_csr; // @[dec_ib_ctl.scala 78:35]
assign io_dec_debug_valid_d = io_dbg_ib_dbg_cmd_valid & _T; // @[dec_ib_ctl.scala 61:24]
assign io_dec_ib0_valid_d = io_ifu_ib_ifu_i0_valid | debug_valid; // @[dec_ib_ctl.scala 83:22]
assign io_dec_i0_icaf_type_d = io_ifu_ib_ifu_i0_icaf_type; // @[dec_ib_ctl.scala 39:31]
assign io_dec_i0_instr_d = debug_valid ? ib0_debug_in : io_ifu_ib_ifu_i0_instr; // @[dec_ib_ctl.scala 84:22]
assign io_dec_i0_pc4_d = io_ifu_ib_ifu_i0_pc4; // @[dec_ib_ctl.scala 38:31]
assign io_dec_i0_brp_valid = io_ifu_ib_i0_brp_valid; // @[dec_ib_ctl.scala 40:31]
assign io_dec_i0_brp_bits_toffset = io_ifu_ib_i0_brp_bits_toffset; // @[dec_ib_ctl.scala 40:31]
assign io_dec_i0_brp_bits_hist = io_ifu_ib_i0_brp_bits_hist; // @[dec_ib_ctl.scala 40:31]
assign io_dec_i0_brp_bits_br_error = io_ifu_ib_i0_brp_bits_br_error; // @[dec_ib_ctl.scala 40:31]
assign io_dec_i0_brp_bits_br_start_error = io_ifu_ib_i0_brp_bits_br_start_error; // @[dec_ib_ctl.scala 40:31]
assign io_dec_i0_brp_bits_bank = io_ifu_ib_i0_brp_bits_bank; // @[dec_ib_ctl.scala 40:31]
assign io_dec_i0_brp_bits_prett = io_ifu_ib_i0_brp_bits_prett; // @[dec_ib_ctl.scala 40:31]
assign io_dec_i0_brp_bits_way = io_ifu_ib_i0_brp_bits_way; // @[dec_ib_ctl.scala 40:31]
assign io_dec_i0_brp_bits_ret = io_ifu_ib_i0_brp_bits_ret; // @[dec_ib_ctl.scala 40:31]
assign io_dec_i0_bp_index = io_ifu_ib_ifu_i0_bp_index; // @[dec_ib_ctl.scala 41:31]
assign io_dec_i0_bp_fghr = io_ifu_ib_ifu_i0_bp_fghr; // @[dec_ib_ctl.scala 42:31]
assign io_dec_i0_bp_btag = io_ifu_ib_ifu_i0_bp_btag; // @[dec_ib_ctl.scala 43:31]
assign io_dec_i0_bp_fa_index = io_ifu_i0_fa_index; // @[dec_ib_ctl.scala 44:25]
assign io_dec_i0_icaf_d = io_ifu_ib_ifu_i0_icaf; // @[dec_ib_ctl.scala 36:31]
assign io_dec_i0_icaf_second_d = io_ifu_ib_ifu_i0_icaf_second; // @[dec_ib_ctl.scala 34:35]
assign io_dec_i0_dbecc_d = io_ifu_ib_ifu_i0_dbecc; // @[dec_ib_ctl.scala 35:31]
assign io_dec_debug_fence_d = debug_write_csr & _T_25; // @[dec_ib_ctl.scala 81:24]
endmodule

523
dec_tlu_ctl.anno.json Normal file
View File

@ -0,0 +1,523 @@
[
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_pause_r",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fastint_stall_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_stall_int_ff",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fir_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_mpc_reset_run_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wrdata_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wraddr_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_o_cpu_halt_status",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_fence_i",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_pmu_i0_itype",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pic_mhwakeup",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_load_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_store_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pause_state",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_debug_mode",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_div_active",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_ifu_miss_state_idle",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_idle_any"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_bp_dec_tlu_br0_r_pkt_bits_hist",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_hist_r"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_dec_tlu_flush_path_r",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_rst_vec",
"~dec_tlu_ctl|dec_tlu_ctl>io_mpc_reset_run_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_pc_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_nmi_vec",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fir_addr",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fir_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_stall_int_ff",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fastint_stall_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_exc_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_npc_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wrdata_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wraddr_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_o_cpu_halt_status",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_fence_i",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_pmu_i0_itype",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pic_mhwakeup",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_load_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_store_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pause_state",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_debug_mode",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_div_active",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_ifu_miss_state_idle",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_idle_any"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_wr_pause_r",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wraddr_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fastint_stall_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_stall_int_ff",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fir_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_mpc_reset_run_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wrdata_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_o_cpu_halt_status",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_fence_i",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_pmu_i0_itype",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pic_mhwakeup",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_load_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_store_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pause_state",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_debug_mode",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_div_active",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_ifu_miss_state_idle",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_idle_any"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_rddata_d",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_core_id",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_rdaddr_d"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_dbg_cmd_done",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_bp_dec_tlu_br0_r_pkt_bits_way",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_exu_i0_br_way_r"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_perfcnt2",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_extint",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fastint_stall_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_stall_int_ff",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fir_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_mpc_reset_run_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wrdata_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wraddr_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_o_cpu_halt_status",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_fence_i",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_pmu_i0_itype",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pic_mhwakeup",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_load_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_store_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pause_state",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_debug_mode",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_div_active",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_ifu_miss_state_idle",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_idle_any"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_perfcnt1",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_presync_d",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_any_unq_d",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_unq_d",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_rdaddr_d"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_dec_tlu_i0_commit_cmt",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_bp_dec_tlu_flush_leak_one_wb",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_ifc_dec_tlu_flush_noredir_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_dec_tlu_flush_lower_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_resume_ack",
"~dec_tlu_ctl|dec_tlu_ctl>io_mpc_reset_run_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fastint_stall_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_stall_int_ff",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fir_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_pause_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wrdata_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wraddr_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_o_cpu_halt_status",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_fence_i",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_pmu_i0_itype",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pic_mhwakeup",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_load_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_store_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pause_state",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_debug_mode",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_div_active",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_ifu_miss_state_idle",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_idle_any"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_perfcnt0",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_bp_dec_tlu_br0_r_pkt_bits_br_error",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_postsync_d",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_any_unq_d",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_rdaddr_d"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_legal_d",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_any_unq_d",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_unq_d",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_rdaddr_d"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_dbg_cmd_fail",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_dbg_cmd_done",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_dec_tlu_fence_i_wb",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_fence_i",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_dec_tlu_flush_err_wb",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_dec_tlu_flush_lower_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_mpc_reset_run_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fastint_stall_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_stall_int_ff",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fir_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wrdata_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wraddr_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_o_cpu_halt_status",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_fence_i",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_pmu_i0_itype",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pic_mhwakeup",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_load_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_store_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pause_state",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_debug_mode",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_div_active",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_ifu_miss_state_idle",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_idle_any"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_core_empty",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_div_active",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_ifu_miss_state_idle",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_idle_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_mpc_reset_run_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_bp_dec_tlu_br0_r_pkt_bits_br_start_error",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_bp_dec_tlu_br0_r_pkt_valid",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_mp_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_pmu_i0_br_ataken"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_dec_tlu_flush_lower_r",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_mpc_reset_run_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fastint_stall_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_stall_int_ff",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fir_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wrdata_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wraddr_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_o_cpu_halt_status",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_fence_i",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_pmu_i0_itype",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pic_mhwakeup",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_load_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_store_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pause_state",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_debug_mode",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_div_active",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_ifu_miss_state_idle",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_idle_any"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_bp_dec_tlu_br0_r_pkt_bits_middle",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_middle_r"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_ifc_dec_tlu_flush_noredir_wb",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_pause_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fastint_stall_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_stall_int_ff",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_fir_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_mpc_reset_run_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wrdata_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wraddr_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_csr_wen_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_o_cpu_halt_status",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_fence_i",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_pmu_i0_itype",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pic_mhwakeup",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_load_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_busbuff_lsu_imprecise_error_store_any",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_pause_state",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_debug_mode",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_div_active",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_mem_ifu_miss_state_idle",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_idle_any"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_perfcnt3",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted"
]
},
{
"class":"firrtl.transforms.CombinationalPath",
"sink":"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_kill_writeb_r",
"sources":[
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_dbg_halted",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_i0_valid_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_valid",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_icaf",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_legal",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_single_ecc_error",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_flush_lower_wb",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_tlu_exu_exu_i0_br_start_error_r",
"~dec_tlu_ctl|dec_tlu_ctl>io_lsu_error_pkt_r_bits_inst_type",
"~dec_tlu_ctl|dec_tlu_ctl>io_dec_tlu_packet_r_i0trigger",
"~dec_tlu_ctl|dec_tlu_ctl>io_dbg_halt_req"
]
},
{
"class":"firrtl.EmitCircuitAnnotation",
"emitter":"firrtl.VerilogEmitter"
},
{
"class":"firrtl.transforms.BlackBoxResourceAnno",
"target":"dec_tlu_ctl.gated_latch",
"resourceId":"/vsrc/gated_latch.sv"
},
{
"class":"firrtl.options.TargetDirAnnotation",
"directory":"."
},
{
"class":"firrtl.options.OutputAnnotationFileAnnotation",
"file":"dec_tlu_ctl"
},
{
"class":"firrtl.transforms.BlackBoxTargetDirAnno",
"targetDir":"."
}
]

9684
dec_tlu_ctl.fir Normal file

File diff suppressed because one or more lines are too long

8413
dec_tlu_ctl.v Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,301 +1,325 @@
//package dec
//import chisel3._
//import chisel3.util._
//import include._
//import lib._
//import lsu._
//
//class dec_IO extends Bundle with lib {
// val free_clk = Input(Clock())
// val active_clk = Input(Clock())
// val lsu_fastint_stall_any = Input(Bool()) // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
// val dec_pause_state_cg = Output(Bool()) // to top for active state clock gating
// val rst_vec = Input(UInt(31.W)) // [31:1] reset vector, from core pins
//
// val nmi_int = Input(Bool()) // NMI pin
// val nmi_vec = Input(UInt(31.W)) // [31:1] NMI vector, from pins
//
// val i_cpu_halt_req = Input(Bool()) // Asynchronous Halt request to CPU
// val i_cpu_run_req = Input(Bool()) // Asynchronous Restart request to CPU
//
// val o_cpu_halt_status = Output(Bool()) // Halt status of core (pmu/fw)
// val o_cpu_halt_ack = Output(Bool()) // Halt request ack
// val o_cpu_run_ack = Output(Bool()) // Run request ack
// val o_debug_mode_status = Output(Bool()) // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
//
// val core_id = Input(UInt(28.W)) // [31:4] CORE ID
//
// val mpc_debug_halt_req = Input(Bool()) // Async halt request
// val mpc_debug_run_req = Input(Bool()) // Async run request
// val mpc_reset_run_req = Input(Bool()) // Run/halt after reset
// val mpc_debug_halt_ack = Output(Bool()) // Halt ack
// val mpc_debug_run_ack = Output(Bool()) // Run ack
// val debug_brkpt_status = Output(Bool()) // debug breakpoint
// val lsu_pmu_misaligned_m = Input(Bool()) // D side load or store misaligned
//
//
// val lsu_fir_addr = Input(UInt(31.W)) //[31:1] Fast int address
// val lsu_fir_error = Input(UInt(2.W)) //[1:0] Fast int lookup error
//
// val lsu_trigger_match_m = Input(UInt(4.W))
// val lsu_idle_any = Input(Bool()) // lsu idle for halting
// val lsu_error_pkt_r = Flipped(Valid(new lsu_error_pkt_t)) // LSU exception/error packet
// val lsu_single_ecc_error_incr = Input(Bool())// LSU inc SB error counter
// val exu_div_result = Input(UInt(32.W)) // final div result
// val exu_div_wren = Input(UInt(1.W)) // Divide write enable to GPR
// val lsu_result_m = Input(UInt(32.W)) // load result
// val lsu_result_corr_r = Input(UInt(32.W)) // load result - corrected load data
//
// val lsu_load_stall_any = Input(Bool()) // This is for blocking loads
// val lsu_store_stall_any = Input(Bool()) // This is for blocking stores
//
//
// val iccm_dma_sb_error = Input(Bool()) // ICCM DMA single bit error
//
// val exu_flush_final = Input(Bool()) // slot0 flush
// val timer_int = Input(Bool()) // Timer interrupt pending (from pin)
// val soft_int = Input(Bool()) // Software interrupt pending (from pin)
//
//
//
// // Debug start
// val dbg_halt_req = Input(Bool()) // DM requests a halt
// val dbg_resume_req = Input(Bool()) // DM requests a resume
// val dec_tlu_dbg_halted = Output(Bool()) // Core is halted and ready for debug command
// val dec_tlu_debug_mode = Output(Bool()) // Core is in debug mode
// val dec_tlu_resume_ack = Output(Bool()) // Resume acknowledge
// val dec_tlu_mpc_halted_only = Output(Bool()) // Core is halted only due to MPC
// val dec_dbg_rddata = Output(UInt(32.W)) // debug command read data
//
// val dec_dbg_cmd_done = Output(Bool()) // abstract command is done
// val dec_dbg_cmd_fail = Output(Bool()) // abstract command failed (illegal reg address)
//
// val trigger_pkt_any = Output(Vec(4,new trigger_pkt_t)) // info needed by debug trigger blocks
// val exu_i0_br_way_r = Input(Bool()) // way hit or repl
// val lsu_p = Valid(new lsu_pkt_t) // lsu packet
// val dec_lsu_offset_d = Output(UInt(12.W)) // 12b offset for load/store addresses
// val dec_tlu_i0_kill_writeb_r = Output(Bool()) // I0 is flushed, don't writeback any results to arch state
// val dec_tlu_perfcnt0 = Output(Bool()) // toggles when slot0 perf counter 0 has an event inc
// val dec_tlu_perfcnt1 = Output(Bool()) // toggles when slot0 perf counter 1 has an event inc
// val dec_tlu_perfcnt2 = Output(Bool()) // toggles when slot0 perf counter 2 has an event inc
// val dec_tlu_perfcnt3 = Output(Bool()) // toggles when slot0 perf counter 3 has an event inc
// val dec_lsu_valid_raw_d = Output(Bool())
// val rv_trace_pkt = (new trace_pkt_t) // trace packet
//
// // clock gating overrides from mcgc
// val dec_tlu_misc_clk_override = Output(Bool()) // override misc clock domain gating
// val dec_tlu_ifu_clk_override = Output(Bool()) // override fetch clock domain gating
// val dec_tlu_lsu_clk_override = Output(Bool()) // override load/store clock domain gating
// val dec_tlu_bus_clk_override = Output(Bool()) // override bus clock domain gating
// val dec_tlu_pic_clk_override = Output(Bool()) // override PIC clock domain gating
// val dec_tlu_dccm_clk_override = Output(Bool()) // override DCCM clock domain gating
// val dec_tlu_icm_clk_override = Output(Bool()) // override ICCM clock domain gating
//
// val scan_mode = Input(Bool())
// val ifu_dec = Flipped(new ifu_dec)
// val dec_exu = Flipped(new dec_exu)
// val lsu_dec = Flipped (new lsu_dec)
// val lsu_tlu = Flipped (new lsu_tlu)
// val dec_dbg = new dec_dbg
// val dec_dma = new dec_dma
// val dec_pic = new dec_pic
//}
//class dec extends Module with param with RequireAsyncReset{
// val io = IO(new dec_IO)
//
// val dec_i0_inst_wb1 = WireInit(UInt(32.W),0.U)
// val dec_i0_pc_wb1 = WireInit(UInt(32.W),0.U)
// val dec_tlu_i0_valid_wb1 = WireInit(UInt(1.W),0.U)
// val dec_tlu_int_valid_wb1 = WireInit(UInt(1.W),0.U)
//
// val dec_tlu_exc_cause_wb1 = WireInit(UInt(5.W),0.U)
// val dec_tlu_mtval_wb1 = WireInit(UInt(32.W),0.U)
// val dec_tlu_i0_exc_valid_wb1 = WireInit(Bool(),0.B)
//
//
// //--------------------------------------------------------------------------//
// val instbuff = Module(new dec_ib_ctl)
// val decode = Module(new dec_decode_ctl)
// val gpr = Module(new dec_gpr_ctl)
// val tlu = Module(new dec_tlu_ctl)
// val dec_trigger = Module(new dec_trigger)
//
// //connections for dec_Ib
// //inputs
// instbuff.io.ifu_ib <> io.ifu_dec.dec_aln.aln_ib
// instbuff.io.ib_exu <> io.dec_exu.ib_exu
// instbuff.io.dbg_ib <> io.dec_dbg.dbg_ib
// dec_trigger.io.dec_i0_pc_d := instbuff.io.ib_exu.dec_i0_pc_d
// dec_trigger.io.trigger_pkt_any := tlu.io.trigger_pkt_any
//
// val dec_i0_trigger_match_d = dec_trigger.io.dec_i0_trigger_match_d
// dontTouch(dec_i0_trigger_match_d)
// decode.io.dec_aln <> io.ifu_dec.dec_aln.aln_dec
//
// decode.io.decode_exu<> io.dec_exu.decode_exu
// decode.io.dec_alu<> io.dec_exu.dec_alu
// decode.io.dec_div<> io.dec_exu.dec_div
// decode.io.dctl_dma <> io.dec_dma.dctl_dma
// decode.io.dec_tlu_flush_extint := tlu.io.dec_tlu_flush_extint
// decode.io.dec_tlu_force_halt := tlu.io.tlu_mem.dec_tlu_force_halt
// decode.io.dctl_busbuff <> io.lsu_dec.dctl_busbuff
// decode.io.dec_i0_trigger_match_d := dec_i0_trigger_match_d
// decode.io.dec_tlu_wr_pause_r := tlu.io.dec_tlu_wr_pause_r
// decode.io.dec_tlu_pipelining_disable := tlu.io.dec_tlu_pipelining_disable
// decode.io.lsu_trigger_match_m := io.lsu_trigger_match_m
// decode.io.lsu_pmu_misaligned_m := io.lsu_pmu_misaligned_m
// decode.io.dec_tlu_debug_stall := tlu.io.dec_tlu_debug_stall
// decode.io.dec_tlu_flush_leak_one_r := tlu.io.tlu_bp.dec_tlu_flush_leak_one_wb
// decode.io.dec_debug_fence_d := instbuff.io.dec_debug_fence_d
// decode.io.dbg_dctl <> io.dec_dbg.dbg_dctl
// decode.io.dec_i0_icaf_d := instbuff.io.dec_i0_icaf_d
// decode.io.dec_i0_icaf_f1_d := instbuff.io.dec_i0_icaf_f1_d
// decode.io.dec_i0_icaf_type_d := instbuff.io.dec_i0_icaf_type_d
// decode.io.dec_i0_dbecc_d := instbuff.io.dec_i0_dbecc_d
// decode.io.dec_i0_brp := instbuff.io.dec_i0_brp
// decode.io.dec_i0_bp_index := instbuff.io.dec_i0_bp_index
// decode.io.dec_i0_bp_fghr := instbuff.io.dec_i0_bp_fghr
// decode.io.dec_i0_bp_btag := instbuff.io.dec_i0_bp_btag
// decode.io.dec_i0_pc_d := instbuff.io.ib_exu.dec_i0_pc_d
// decode.io.lsu_idle_any := io.lsu_idle_any
// decode.io.lsu_load_stall_any := io.lsu_load_stall_any
// decode.io.lsu_store_stall_any := io.lsu_store_stall_any
// decode.io.exu_div_wren := io.exu_div_wren
// decode.io.dec_tlu_i0_kill_writeb_wb := tlu.io.dec_tlu_i0_kill_writeb_wb
// decode.io.dec_tlu_flush_lower_wb := tlu.io.dec_tlu_flush_lower_wb
// decode.io.dec_tlu_i0_kill_writeb_r := tlu.io.dec_tlu_i0_kill_writeb_r
// decode.io.dec_tlu_flush_lower_r := tlu.io.tlu_exu.dec_tlu_flush_lower_r
// decode.io.dec_tlu_flush_pause_r := tlu.io.dec_tlu_flush_pause_r
// decode.io.dec_tlu_presync_d := tlu.io.dec_tlu_presync_d
// decode.io.dec_tlu_postsync_d := tlu.io.dec_tlu_postsync_d
// decode.io.dec_i0_pc4_d := instbuff.io.dec_i0_pc4_d
// decode.io.dec_csr_rddata_d := tlu.io.dec_csr_rddata_d
// decode.io.dec_csr_legal_d := tlu.io.dec_csr_legal_d
// decode.io.lsu_result_m := io.lsu_result_m
// decode.io.lsu_result_corr_r := io.lsu_result_corr_r
// decode.io.exu_flush_final := io.exu_flush_final
// decode.io.dec_i0_instr_d := instbuff.io.dec_i0_instr_d
// decode.io.dec_ib0_valid_d := instbuff.io.dec_ib0_valid_d
// decode.io.free_clk := io.free_clk
// decode.io.active_clk := io.active_clk
// decode.io.clk_override := tlu.io.dec_tlu_dec_clk_override
// decode.io.scan_mode := io.scan_mode
// dec_i0_inst_wb1 := decode.io.dec_i0_inst_wb1 //for tracer
// dec_i0_pc_wb1 := decode.io.dec_i0_pc_wb1 //for tracer
// io.lsu_p := decode.io.lsu_p
// io.dec_lsu_valid_raw_d := decode.io.dec_lsu_valid_raw_d
// io.dec_lsu_offset_d := decode.io.dec_lsu_offset_d
// io.dec_pause_state_cg := decode.io.dec_pause_state_cg
// gpr.io.raddr0 := decode.io.dec_i0_rs1_d
// gpr.io.raddr1 := decode.io.dec_i0_rs2_d
// gpr.io.wen0 := decode.io.dec_i0_wen_r
// gpr.io.waddr0 := decode.io.dec_i0_waddr_r
// gpr.io.wd0 := decode.io.dec_i0_wdata_r
// gpr.io.wen1 := decode.io.dec_nonblock_load_wen
// gpr.io.waddr1 := decode.io.dec_nonblock_load_waddr
// gpr.io.wd1 := io.lsu_dec.dctl_busbuff.lsu_nonblock_load_data
// gpr.io.wen2 := io.exu_div_wren
// gpr.io.waddr2 := decode.io.div_waddr_wb
// gpr.io.wd2 := io.exu_div_result
// gpr.io.scan_mode := io.scan_mode
// io.dec_exu.gpr_exu <> gpr.io.gpr_exu
// tlu.io.tlu_mem <> io.ifu_dec.dec_mem_ctrl
// tlu.io.tlu_ifc <> io.ifu_dec.dec_ifc
// tlu.io.tlu_bp <> io.ifu_dec.dec_bp
// tlu.io.tlu_exu <> io.dec_exu.tlu_exu
// tlu.io.tlu_dma <> io.dec_dma.tlu_dma
// tlu.io.active_clk := io.active_clk
// tlu.io.free_clk := io.free_clk
// tlu.io.scan_mode := io.scan_mode
// tlu.io.rst_vec := io.rst_vec
// tlu.io.nmi_int := io.nmi_int
// tlu.io.nmi_vec := io.nmi_vec
// tlu.io.i_cpu_halt_req := io.i_cpu_halt_req
// tlu.io.i_cpu_run_req := io.i_cpu_run_req
// tlu.io.lsu_fastint_stall_any := io.lsu_fastint_stall_any
// tlu.io.ifu_pmu_instr_aligned := io.ifu_dec.dec_aln.ifu_pmu_instr_aligned
// tlu.io.dec_pmu_instr_decoded := decode.io.dec_pmu_instr_decoded
// tlu.io.dec_pmu_decode_stall := decode.io.dec_pmu_decode_stall
// tlu.io.dec_pmu_presync_stall := decode.io.dec_pmu_presync_stall
// tlu.io.dec_pmu_postsync_stall := decode.io.dec_pmu_postsync_stall
// tlu.io.lsu_store_stall_any := io.lsu_store_stall_any
// io.lsu_dec.tlu_busbuff <> tlu.io.tlu_busbuff
// io.lsu_tlu <> tlu.io.lsu_tlu
// io.dec_pic <> tlu.io.dec_pic
// tlu.io.lsu_fir_addr := io.lsu_fir_addr
// tlu.io.lsu_fir_error := io.lsu_fir_error
// tlu.io.iccm_dma_sb_error := io.iccm_dma_sb_error
// tlu.io.lsu_error_pkt_r := io.lsu_error_pkt_r
// tlu.io.lsu_single_ecc_error_incr := io.lsu_single_ecc_error_incr
// tlu.io.dec_pause_state := decode.io.dec_pause_state
// tlu.io.dec_csr_wen_unq_d := decode.io.dec_csr_wen_unq_d
// tlu.io.dec_csr_any_unq_d := decode.io.dec_csr_any_unq_d
// tlu.io.dec_csr_rdaddr_d := decode.io.dec_csr_rdaddr_d
// tlu.io.dec_csr_wen_r := decode.io.dec_csr_wen_r
// tlu.io.dec_csr_wraddr_r := decode.io.dec_csr_wraddr_r
// tlu.io.dec_csr_wrdata_r := decode.io.dec_csr_wrdata_r
// tlu.io.dec_csr_stall_int_ff := decode.io.dec_csr_stall_int_ff
// tlu.io.dec_tlu_i0_valid_r := decode.io.dec_tlu_i0_valid_r
// tlu.io.dec_tlu_i0_pc_r := decode.io.dec_tlu_i0_pc_r
// tlu.io.dec_tlu_packet_r := decode.io.dec_tlu_packet_r
// tlu.io.dec_illegal_inst := decode.io.dec_illegal_inst
// tlu.io.dec_i0_decode_d := decode.io.dec_aln.dec_i0_decode_d
// tlu.io.exu_i0_br_way_r := io.exu_i0_br_way_r
// tlu.io.dbg_halt_req := io.dbg_halt_req
// tlu.io.dbg_resume_req := io.dbg_resume_req
// tlu.io.lsu_idle_any := io.lsu_idle_any
// tlu.io.dec_div_active := decode.io.dec_div_active
// tlu.io.timer_int := io.timer_int
// tlu.io.soft_int := io.soft_int
// tlu.io.core_id := io.core_id
// tlu.io.mpc_debug_halt_req := io.mpc_debug_halt_req
// tlu.io.mpc_debug_run_req := io.mpc_debug_run_req
// tlu.io.mpc_reset_run_req := io.mpc_reset_run_req
// io.dec_dbg_cmd_done := tlu.io.dec_dbg_cmd_done
// io.dec_dbg_cmd_fail := tlu.io.dec_dbg_cmd_fail
// io.dec_tlu_dbg_halted := tlu.io.dec_tlu_dbg_halted
// io.dec_tlu_debug_mode := tlu.io.dec_tlu_debug_mode
// io.dec_tlu_resume_ack := tlu.io.dec_tlu_resume_ack
// io.dec_tlu_mpc_halted_only := tlu.io.dec_tlu_mpc_halted_only
// io.trigger_pkt_any := tlu.io.trigger_pkt_any
// io.o_cpu_halt_status := tlu.io.o_cpu_halt_status
// io.o_cpu_halt_ack := tlu.io.o_cpu_halt_ack
// io.o_cpu_run_ack := tlu.io.o_cpu_run_ack
// io.o_debug_mode_status := tlu.io.o_debug_mode_status
// io.mpc_debug_halt_ack := tlu.io.mpc_debug_halt_ack
// io.mpc_debug_run_ack := tlu.io.mpc_debug_run_ack
// io.debug_brkpt_status := tlu.io.debug_brkpt_status
// io.dec_tlu_i0_kill_writeb_r := tlu.io.dec_tlu_i0_kill_writeb_r
// io.dec_tlu_perfcnt0 := tlu.io.dec_tlu_perfcnt0
// io.dec_tlu_perfcnt1 := tlu.io.dec_tlu_perfcnt1
// io.dec_tlu_perfcnt2 := tlu.io.dec_tlu_perfcnt2
// io.dec_tlu_perfcnt3 := tlu.io.dec_tlu_perfcnt3
// dec_tlu_i0_exc_valid_wb1 := tlu.io.dec_tlu_i0_exc_valid_wb1
// dec_tlu_i0_valid_wb1 := tlu.io.dec_tlu_i0_valid_wb1
// dec_tlu_int_valid_wb1 := tlu.io.dec_tlu_int_valid_wb1
// dec_tlu_exc_cause_wb1 := tlu.io.dec_tlu_exc_cause_wb1
// dec_tlu_mtval_wb1 := tlu.io.dec_tlu_mtval_wb1
// io.dec_tlu_misc_clk_override := tlu.io.dec_tlu_misc_clk_override
// io.dec_tlu_ifu_clk_override := tlu.io.dec_tlu_ifu_clk_override
// io.dec_tlu_lsu_clk_override := tlu.io.dec_tlu_lsu_clk_override
// io.dec_tlu_bus_clk_override := tlu.io.dec_tlu_bus_clk_override
// io.dec_tlu_pic_clk_override := tlu.io.dec_tlu_pic_clk_override
// io.dec_tlu_dccm_clk_override := tlu.io.dec_tlu_dccm_clk_override
// io.dec_tlu_icm_clk_override := tlu.io.dec_tlu_icm_clk_override
//
// //--------------------------------------------------------------------------//
//
// io.rv_trace_pkt.rv_i_insn_ip := decode.io.dec_i0_inst_wb1
// io.rv_trace_pkt.rv_i_address_ip := Cat(decode.io.dec_i0_pc_wb1, 0.U)
// io.rv_trace_pkt.rv_i_valid_ip := Cat(tlu.io.dec_tlu_int_valid_wb1, tlu.io.dec_tlu_i0_valid_wb1 | tlu.io.dec_tlu_i0_exc_valid_wb1)
// io.rv_trace_pkt.rv_i_exception_ip := Cat(tlu.io.dec_tlu_int_valid_wb1, tlu.io.dec_tlu_i0_exc_valid_wb1)
// io.rv_trace_pkt.rv_i_ecause_ip := tlu.io.dec_tlu_exc_cause_wb1(4,0)
// io.rv_trace_pkt.rv_i_interrupt_ip := Cat(tlu.io.dec_tlu_int_valid_wb1, 0.U)
// io.rv_trace_pkt.rv_i_tval_ip := tlu.io.dec_tlu_mtval_wb1
//
//
// // debug command read data
// io.dec_dbg_rddata := decode.io.dec_i0_wdata_r
//}
//
//
package dec
import chisel3._
import chisel3.util._
import include._
import lib._
import lsu._
class dec_IO extends Bundle with lib {
val free_clk = Input(Clock())
val active_clk = Input(Clock())
val free_l2clk = Input(Clock())
val lsu_fastint_stall_any = Input(Bool()) // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
val dec_pause_state_cg = Output(Bool()) // to top for active state clock gating
val dec_tlu_core_empty = Output(Bool())
val rst_vec = Input(UInt(31.W)) // [31:1] reset vector, from core pins
val ifu_i0_fa_index = Input(UInt(log2Ceil(BTB_SIZE).W))
val dec_fa_error_index = Output(UInt(log2Ceil(BTB_SIZE).W))
val nmi_int = Input(Bool()) // NMI pin
val nmi_vec = Input(UInt(31.W)) // [31:1] NMI vector, from pins
val lsu_nonblock_load_data = Input(UInt(32.W))
val i_cpu_halt_req = Input(Bool()) // Asynchronous Halt request to CPU
val i_cpu_run_req = Input(Bool()) // Asynchronous Restart request to CPU
val o_cpu_halt_status = Output(Bool()) // Halt status of core (pmu/fw)
val o_cpu_halt_ack = Output(Bool()) // Halt request ack
val o_cpu_run_ack = Output(Bool()) // Run request ack
val o_debug_mode_status = Output(Bool()) // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
val core_id = Input(UInt(28.W)) // [31:4] CORE ID
val mpc_debug_halt_req = Input(Bool()) // Async halt request
val mpc_debug_run_req = Input(Bool()) // Async run request
val mpc_reset_run_req = Input(Bool()) // Run/halt after reset
val mpc_debug_halt_ack = Output(Bool()) // Halt ack
val mpc_debug_run_ack = Output(Bool()) // Run ack
val debug_brkpt_status = Output(Bool()) // debug breakpoint
val lsu_pmu_misaligned_m = Input(Bool()) // D side load or store misaligned
val lsu_fir_addr = Input(UInt(31.W)) //[31:1] Fast int address
val lsu_fir_error = Input(UInt(2.W)) //[1:0] Fast int lookup error
val lsu_trigger_match_m = Input(UInt(4.W))
val lsu_idle_any = Input(Bool()) // lsu idle for halting
val lsu_error_pkt_r = Flipped(Valid(new lsu_error_pkt_t)) // LSU exception/error packet
val lsu_single_ecc_error_incr = Input(Bool())// LSU inc SB error counter
val exu_div_result = Input(UInt(32.W)) // final div result
val exu_div_wren = Input(UInt(1.W)) // Divide write enable to GPR
val lsu_result_m = Input(UInt(32.W)) // load result
val lsu_result_corr_r = Input(UInt(32.W)) // load result - corrected load data
val lsu_load_stall_any = Input(Bool()) // This is for blocking loads
val lsu_store_stall_any = Input(Bool()) // This is for blocking stores
val iccm_dma_sb_error = Input(Bool()) // ICCM DMA single bit error
val exu_flush_final = Input(Bool()) // slot0 flush
val timer_int = Input(Bool()) // Timer interrupt pending (from pin)
val soft_int = Input(Bool()) // Software interrupt pending (from pin)
// Debug start
val dbg_halt_req = Input(Bool()) // DM requests a halt
val dbg_resume_req = Input(Bool()) // DM requests a resume
val dec_tlu_dbg_halted = Output(Bool()) // Core is halted and ready for debug command
val dec_tlu_debug_mode = Output(Bool()) // Core is in debug mode
val dec_tlu_resume_ack = Output(Bool()) // Resume acknowledge
val dec_tlu_mpc_halted_only = Output(Bool()) // Core is halted only due to MPC
val dec_dbg_rddata = Output(UInt(32.W)) // debug command read data
val dec_csr_rddata_d = Output(UInt(32.W))
val dec_dbg_cmd_done = Output(Bool()) // abstract command is done
val dec_dbg_cmd_fail = Output(Bool()) // abstract command failed (illegal reg address)
val trigger_pkt_any = Output(Vec(4,new trigger_pkt_t)) // info needed by debug trigger blocks
val exu_i0_br_way_r = Input(Bool()) // way hit or repl
val lsu_p = Valid(new lsu_pkt_t) // lsu packet
val dec_lsu_offset_d = Output(UInt(12.W)) // 12b offset for load/store addresses
val dec_tlu_i0_kill_writeb_r = Output(Bool()) // I0 is flushed, don't writeback any results to arch state
val dec_tlu_perfcnt0 = Output(Bool()) // toggles when slot0 perf counter 0 has an event inc
val dec_tlu_perfcnt1 = Output(Bool()) // toggles when slot0 perf counter 1 has an event inc
val dec_tlu_perfcnt2 = Output(Bool()) // toggles when slot0 perf counter 2 has an event inc
val dec_tlu_perfcnt3 = Output(Bool()) // toggles when slot0 perf counter 3 has an event inc
val dec_tlu_flush_lower_wb = Output(Bool())
val dec_lsu_valid_raw_d = Output(Bool())
val trace_rv_trace_pkt = (new trace_pkt_t) // trace packet
// clock gating overrides from mcgc
val dec_tlu_misc_clk_override = Output(Bool()) // override misc clock domain gating
val dec_tlu_ifu_clk_override = Output(Bool()) // override fetch clock domain gating
val dec_tlu_lsu_clk_override = Output(Bool()) // override load/store clock domain gating
val dec_tlu_bus_clk_override = Output(Bool()) // override bus clock domain gating
val dec_tlu_pic_clk_override = Output(Bool()) // override PIC clock domain gating
val dec_tlu_picio_clk_override = Output(Bool())
val dec_tlu_dccm_clk_override = Output(Bool()) // override DCCM clock domain gating
val dec_tlu_icm_clk_override = Output(Bool()) // override ICCM clock domain gating
val scan_mode = Input(Bool())
val ifu_dec = Flipped(new ifu_dec)
val dec_exu = Flipped(new dec_exu)
val lsu_dec = Flipped (new lsu_dec)
val lsu_tlu = Flipped (new lsu_tlu)
val dec_dbg = new dec_dbg
val dec_dma = new dec_dma
val dec_pic = new dec_pic
}
class dec extends Module with param with RequireAsyncReset{
val io = IO(new dec_IO)
val dec_i0_inst_wb1 = WireInit(UInt(32.W),0.U)
val dec_i0_pc_wb1 = WireInit(UInt(32.W),0.U)
val dec_tlu_i0_valid_wb1 = WireInit(UInt(1.W),0.U)
val dec_tlu_int_valid_wb1 = WireInit(UInt(1.W),0.U)
val dec_tlu_exc_cause_wb1 = WireInit(UInt(5.W),0.U)
val dec_tlu_mtval_wb1 = WireInit(UInt(32.W),0.U)
val dec_tlu_i0_exc_valid_wb1 = WireInit(Bool(),0.B)
val dec_tlu_trace_disable = WireInit(Bool(),0.B)
// val dec_i0_bp_fa_index = WireInit(UInt(log2Ceil(BTB_SIZE).W),0.U)
//val dec_debug_valid_d = WireInit(Bool(),0.B)
//--------------------------------------------------------------------------//
val instbuff = Module(new dec_ib_ctl)
val decode = Module(new dec_decode_ctl)
val gpr = Module(new dec_gpr_ctl)
val tlu = Module(new dec_tlu_ctl)
val dec_trigger = Module(new dec_trigger)
//connections for dec_Ib
//inputs
instbuff.io.ifu_ib <> io.ifu_dec.dec_aln.aln_ib
instbuff.io.ib_exu <> io.dec_exu.ib_exu
instbuff.io.dbg_ib <> io.dec_dbg.dbg_ib
instbuff.io.ifu_i0_fa_index := io.ifu_i0_fa_index
dec_trigger.io.dec_i0_pc_d := instbuff.io.ib_exu.dec_i0_pc_d
dec_trigger.io.trigger_pkt_any := tlu.io.trigger_pkt_any
val dec_i0_trigger_match_d = dec_trigger.io.dec_i0_trigger_match_d
dontTouch(dec_i0_trigger_match_d)
decode.io.dec_aln <> io.ifu_dec.dec_aln.aln_dec
decode.io.decode_exu<> io.dec_exu.decode_exu
decode.io.dec_alu<> io.dec_exu.dec_alu
decode.io.dec_div<> io.dec_exu.dec_div
decode.io.dctl_dma <> io.dec_dma.dctl_dma
decode.io.dec_tlu_trace_disable := tlu.io.dec_tlu_trace_disable
decode.io.dec_debug_valid_d := instbuff.io.dec_debug_fence_d
decode.io.dec_tlu_flush_extint := tlu.io.dec_tlu_flush_extint
decode.io.dec_tlu_force_halt := tlu.io.tlu_mem.dec_tlu_force_halt
decode.io.dctl_busbuff <> io.lsu_dec.dctl_busbuff
decode.io.dec_i0_trigger_match_d := dec_i0_trigger_match_d
decode.io.dec_tlu_wr_pause_r := tlu.io.dec_tlu_wr_pause_r
decode.io.dec_tlu_pipelining_disable := tlu.io.dec_tlu_pipelining_disable
decode.io.lsu_trigger_match_m := io.lsu_trigger_match_m
decode.io.lsu_pmu_misaligned_m := io.lsu_pmu_misaligned_m
decode.io.dec_tlu_debug_stall := tlu.io.dec_tlu_debug_stall
decode.io.dec_i0_bp_fa_index := instbuff.io.dec_i0_bp_fa_index
decode.io.dec_tlu_flush_leak_one_r := tlu.io.tlu_bp.dec_tlu_flush_leak_one_wb
decode.io.dec_debug_fence_d := instbuff.io.dec_debug_fence_d
decode.io.dbg_dctl <> io.dec_dbg.dbg_dctl
decode.io.dec_i0_icaf_d := instbuff.io.dec_i0_icaf_d
decode.io.dec_i0_icaf_second_d := instbuff.io.dec_i0_icaf_second_d
decode.io.dec_i0_icaf_type_d := instbuff.io.dec_i0_icaf_type_d
decode.io.dec_i0_dbecc_d := instbuff.io.dec_i0_dbecc_d
decode.io.dec_i0_brp := instbuff.io.dec_i0_brp
decode.io.dec_i0_bp_index := instbuff.io.dec_i0_bp_index
decode.io.dec_i0_bp_fghr := instbuff.io.dec_i0_bp_fghr
decode.io.dec_i0_bp_btag := instbuff.io.dec_i0_bp_btag
decode.io.lsu_idle_any := io.lsu_idle_any
decode.io.lsu_load_stall_any := io.lsu_load_stall_any
decode.io.lsu_store_stall_any := io.lsu_store_stall_any
decode.io.exu_div_wren := io.exu_div_wren
decode.io.dec_tlu_i0_kill_writeb_wb := tlu.io.dec_tlu_i0_kill_writeb_wb
decode.io.dec_tlu_flush_lower_wb := tlu.io.dec_tlu_flush_lower_wb
decode.io.dec_tlu_i0_kill_writeb_r := tlu.io.dec_tlu_i0_kill_writeb_r
decode.io.dec_tlu_flush_lower_r := tlu.io.tlu_exu.dec_tlu_flush_lower_r
decode.io.dec_tlu_flush_pause_r := tlu.io.dec_tlu_flush_pause_r
decode.io.dec_tlu_presync_d := tlu.io.dec_tlu_presync_d
decode.io.dec_tlu_postsync_d := tlu.io.dec_tlu_postsync_d
decode.io.dec_i0_pc4_d := instbuff.io.dec_i0_pc4_d
decode.io.dec_csr_rddata_d := tlu.io.dec_csr_rddata_d
decode.io.dec_csr_legal_d := tlu.io.dec_csr_legal_d
decode.io.lsu_result_m := io.lsu_result_m
decode.io.lsu_result_corr_r := io.lsu_result_corr_r
decode.io.exu_flush_final := io.exu_flush_final
decode.io.dec_i0_instr_d := instbuff.io.dec_i0_instr_d
decode.io.dec_ib0_valid_d := instbuff.io.dec_ib0_valid_d
decode.io.free_l2clk := io.free_l2clk
decode.io.active_clk := io.active_clk
decode.io.clk_override := tlu.io.dec_tlu_dec_clk_override
decode.io.scan_mode := io.scan_mode
dec_i0_inst_wb1 := decode.io.dec_i0_inst_wb //for tracer
dec_i0_pc_wb1 := decode.io.dec_i0_pc_wb //for tracer
io.lsu_p := decode.io.lsu_p
io.dec_lsu_valid_raw_d := decode.io.dec_lsu_valid_raw_d
io.dec_lsu_offset_d := decode.io.dec_lsu_offset_d
io.dec_pause_state_cg := decode.io.dec_pause_state_cg
io.dec_exu.decode_exu.dec_qual_lsu_d := decode.io.decode_exu.dec_qual_lsu_d
io.dec_fa_error_index :=decode.io.dec_fa_error_index
gpr.io.raddr0 := decode.io.dec_i0_rs1_d
gpr.io.raddr1 := decode.io.dec_i0_rs2_d
gpr.io.wen0 := decode.io.dec_i0_wen_r
gpr.io.waddr0 := decode.io.dec_i0_waddr_r
gpr.io.wd0 := decode.io.dec_i0_wdata_r
gpr.io.wen1 := decode.io.dec_nonblock_load_wen
gpr.io.waddr1 := decode.io.dec_nonblock_load_waddr
gpr.io.wd1 := io.lsu_nonblock_load_data
gpr.io.wen2 := io.exu_div_wren
gpr.io.waddr2 := decode.io.div_waddr_wb
gpr.io.wd2 := io.exu_div_result
gpr.io.scan_mode := io.scan_mode
io.dec_exu.gpr_exu <> gpr.io.gpr_exu
tlu.io.tlu_mem <> io.ifu_dec.dec_mem_ctrl
tlu.io.tlu_ifc <> io.ifu_dec.dec_ifc
tlu.io.tlu_bp <> io.ifu_dec.dec_bp
tlu.io.tlu_exu <> io.dec_exu.tlu_exu
tlu.io.tlu_dma <> io.dec_dma.tlu_dma
tlu.io.free_l2clk := io.free_l2clk
tlu.io.free_clk := io.free_clk
tlu.io.scan_mode := io.scan_mode
tlu.io.rst_vec := io.rst_vec
tlu.io.nmi_int := io.nmi_int
tlu.io.nmi_vec := io.nmi_vec
tlu.io.i_cpu_halt_req := io.i_cpu_halt_req
tlu.io.i_cpu_run_req := io.i_cpu_run_req
tlu.io.lsu_fastint_stall_any := io.lsu_fastint_stall_any
tlu.io.ifu_pmu_instr_aligned := io.ifu_dec.dec_aln.ifu_pmu_instr_aligned
tlu.io.dec_pmu_instr_decoded := decode.io.dec_pmu_instr_decoded
tlu.io.dec_pmu_decode_stall := decode.io.dec_pmu_decode_stall
tlu.io.dec_pmu_presync_stall := decode.io.dec_pmu_presync_stall
tlu.io.dec_pmu_postsync_stall := decode.io.dec_pmu_postsync_stall
tlu.io.lsu_store_stall_any := io.lsu_store_stall_any
io.lsu_dec.tlu_busbuff <> tlu.io.tlu_busbuff
io.lsu_tlu <> tlu.io.lsu_tlu
io.dec_pic <> tlu.io.dec_pic
tlu.io.lsu_fir_addr := io.lsu_fir_addr
tlu.io.lsu_fir_error := io.lsu_fir_error
tlu.io.iccm_dma_sb_error := io.iccm_dma_sb_error
tlu.io.lsu_error_pkt_r := io.lsu_error_pkt_r
tlu.io.lsu_single_ecc_error_incr := io.lsu_single_ecc_error_incr
tlu.io.dec_pause_state := decode.io.dec_pause_state
tlu.io.dec_csr_wen_unq_d := decode.io.dec_csr_wen_unq_d
tlu.io.dec_csr_any_unq_d := decode.io.dec_csr_any_unq_d
tlu.io.dec_csr_rdaddr_d := decode.io.dec_csr_rdaddr_d
tlu.io.dec_csr_wen_r := decode.io.dec_csr_wen_r
tlu.io.dec_csr_wraddr_r := decode.io.dec_csr_wraddr_r
tlu.io.dec_csr_wrdata_r := decode.io.dec_csr_wrdata_r
tlu.io.dec_csr_stall_int_ff := decode.io.dec_csr_stall_int_ff
tlu.io.dec_tlu_i0_valid_r := decode.io.dec_tlu_i0_valid_r
tlu.io.dec_tlu_i0_pc_r := decode.io.dec_tlu_i0_pc_r
tlu.io.dec_tlu_packet_r := decode.io.dec_tlu_packet_r
tlu.io.dec_illegal_inst := decode.io.dec_illegal_inst
tlu.io.dec_i0_decode_d := decode.io.dec_aln.dec_i0_decode_d
tlu.io.exu_i0_br_way_r := io.exu_i0_br_way_r
tlu.io.dbg_halt_req := io.dbg_halt_req
tlu.io.dbg_resume_req := io.dbg_resume_req
tlu.io.lsu_idle_any := io.lsu_idle_any
tlu.io.dec_div_active := decode.io.dec_div_active
tlu.io.timer_int := io.timer_int
tlu.io.soft_int := io.soft_int
tlu.io.core_id := io.core_id
tlu.io.mpc_debug_halt_req := io.mpc_debug_halt_req
tlu.io.mpc_debug_run_req := io.mpc_debug_run_req
tlu.io.mpc_reset_run_req := io.mpc_reset_run_req
io.dec_dbg_cmd_done := tlu.io.dec_dbg_cmd_done
io.dec_dbg_cmd_fail := tlu.io.dec_dbg_cmd_fail
io.dec_tlu_dbg_halted := tlu.io.dec_tlu_dbg_halted
io.dec_tlu_debug_mode := tlu.io.dec_tlu_debug_mode
io.dec_tlu_resume_ack := tlu.io.dec_tlu_resume_ack
io.dec_tlu_mpc_halted_only := tlu.io.dec_tlu_mpc_halted_only
io.trigger_pkt_any := tlu.io.trigger_pkt_any
io.o_cpu_halt_status := tlu.io.o_cpu_halt_status
io.o_cpu_halt_ack := tlu.io.o_cpu_halt_ack
io.o_cpu_run_ack := tlu.io.o_cpu_run_ack
io.o_debug_mode_status := tlu.io.o_debug_mode_status
io.mpc_debug_halt_ack := tlu.io.mpc_debug_halt_ack
io.mpc_debug_run_ack := tlu.io.mpc_debug_run_ack
io.debug_brkpt_status := tlu.io.debug_brkpt_status
io.dec_tlu_i0_kill_writeb_r := tlu.io.dec_tlu_i0_kill_writeb_r
io.dec_tlu_perfcnt0 := tlu.io.dec_tlu_perfcnt0
io.dec_tlu_perfcnt1 := tlu.io.dec_tlu_perfcnt1
io.dec_tlu_perfcnt2 := tlu.io.dec_tlu_perfcnt2
io.dec_tlu_perfcnt3 := tlu.io.dec_tlu_perfcnt3
dec_tlu_i0_exc_valid_wb1 := tlu.io.dec_tlu_i0_exc_valid_wb1
dec_tlu_i0_valid_wb1 := tlu.io.dec_tlu_i0_valid_wb1
dec_tlu_int_valid_wb1 := tlu.io.dec_tlu_int_valid_wb1
dec_tlu_exc_cause_wb1 := tlu.io.dec_tlu_exc_cause_wb1
dec_tlu_mtval_wb1 := tlu.io.dec_tlu_mtval_wb1
io.dec_tlu_misc_clk_override := tlu.io.dec_tlu_misc_clk_override
io.dec_tlu_ifu_clk_override := tlu.io.dec_tlu_ifu_clk_override
io.dec_tlu_lsu_clk_override := tlu.io.dec_tlu_lsu_clk_override
io.dec_tlu_bus_clk_override := tlu.io.dec_tlu_bus_clk_override
io.dec_tlu_pic_clk_override := tlu.io.dec_tlu_pic_clk_override
io.dec_tlu_dccm_clk_override := tlu.io.dec_tlu_dccm_clk_override
io.dec_tlu_icm_clk_override := tlu.io.dec_tlu_icm_clk_override
io.dec_tlu_picio_clk_override := tlu.io.dec_tlu_icm_clk_override
io.dec_tlu_core_empty := tlu.io.dec_tlu_core_empty
io.dec_csr_rddata_d := tlu.io.dec_csr_rddata_d
io.dec_tlu_flush_lower_wb := tlu.io.dec_tlu_flush_lower_wb
//--------------------------------------------------------------------------//
io.trace_rv_trace_pkt.rv_i_insn_ip := decode.io.dec_i0_inst_wb
io.trace_rv_trace_pkt.rv_i_address_ip := Cat(decode.io.dec_i0_pc_wb, 0.U)
io.trace_rv_trace_pkt.rv_i_valid_ip := tlu.io.dec_tlu_int_valid_wb1 | tlu.io.dec_tlu_i0_valid_wb1 | tlu.io.dec_tlu_i0_exc_valid_wb1
io.trace_rv_trace_pkt.rv_i_exception_ip := tlu.io.dec_tlu_int_valid_wb1 | tlu.io.dec_tlu_i0_exc_valid_wb1
io.trace_rv_trace_pkt.rv_i_ecause_ip := tlu.io.dec_tlu_exc_cause_wb1(4,0)
io.trace_rv_trace_pkt.rv_i_interrupt_ip := tlu.io.dec_tlu_int_valid_wb1
io.trace_rv_trace_pkt.rv_i_tval_ip := tlu.io.dec_tlu_mtval_wb1
// debug command read data
io.dec_dbg_rddata := decode.io.dec_i0_wdata_r
}
object dec_main extends App {
println((new chisel3.stage.ChiselStage).emitVerilog(new dec()))
}

View File

@ -17,105 +17,254 @@ class dec_dec_ctl extends Module with lib{
pat.reduce(_&_)
}
io.out.alu := io.ins(2) | io.ins(6) | (!io.ins(25)&io.ins(4)) | (!io.ins(5)&io.ins(4))
io.out.rs1 := pattern(List(-14,-13,-2)) | pattern(List(-13,11,-2)) |
pattern(List(19,13,-2)) | pattern(List(-13,10,-2)) |
pattern(List(18,13,-2)) | pattern(List(-13,9,-2)) |
pattern(List(17,13,-2)) | pattern(List(-13,8,-2)) |
pattern(List(16,13,-2)) | pattern(List(-13,7,-2)) |
pattern(List(15,13,-2)) |pattern(List(-4,-3)) | pattern(List(-6,-2))
io.out.alu := pattern(List(30,24,23,-22,-21,-20,14,-5,4)) | pattern(List(29,-27,-24,4)) |
pattern(List(-25,-13,-12,4)) | pattern(List(-30,-25,13,12)) | pattern(List(27,25,14,4)) |
pattern(List(29,27,-14,4)) | pattern(List(29,-14,5,4)) | pattern(List(-27,-25,14,4)) |
pattern(List(30,-29,-13,4)) | pattern(List(-30,-27,-25,4)) | pattern(List(13,-5,4)) |
pattern(List(-12,-5,4)) | pattern(List(2)) | pattern(List(6)) | pattern(List(30,24,23,22,21,20,-5,4)) |
pattern(List(-30,29,-24,-23,22,21,20,-5,4)) | pattern(List(-30,24,-23,-22,-21,-20,-5,4))
io.out.rs1 := pattern(List(-14,-13,-2)) | pattern(List(-13,11,-2)) | pattern(List(19,13,-2)) |
pattern(List(-13,10,-2)) | pattern(List(18,13,-2)) | pattern(List(-13,9,-2)) | pattern(List(17,13,-2)) |
pattern(List(-13,8,-2)) | pattern(List(16,13,-2)) | pattern(List(-13,7,-2)) |
pattern(List(15,13,-2)) | pattern(List(-4,-3)) | pattern(List(-6,-2))
io.out.rs2 := pattern(List(5,-4,-2)) | pattern(List(-6,5,-2))
io.out.imm12 := pattern(List(-4,-3,2)) | pattern(List(13,-5,4,-2)) |
pattern(List(-13,-12,6,4)) | pattern(List(-12,-5,4,-2))
io.out.rd := (!io.ins(5) & !io.ins(2)) | (io.ins(5) & io.ins(2)) | io.ins(4)
io.out.shimm5 := pattern(List(-13,12,-5,4,-2))
io.out.imm20 := (io.ins(5)&io.ins(3)) | (io.ins(4)&io.ins(2))
io.out.pc := (!io.ins(5) & !io.ins(3) & io.ins(2)) | (io.ins(5) & io.ins(3))
io.out.imm12 := pattern(List(-4,-3,2)) | pattern(List(13,-5,4,-2)) | pattern(List(-13,-12,6,4)) | pattern(List(-12,-5,4,-2))
io.out.rd := pattern(List(-5,-2)) | pattern(List(5,2)) | pattern(List(4))
io.out.shimm5 := pattern(List(27,-13,12,-5,4,-2)) | pattern(List(-30,-13,12,-5,4,-2)) | pattern(List(14,-13,12,-5,4,-2))
io.out.imm20 := pattern(List(5,3)) | pattern(List(4,2))
io.out.pc := pattern(List(-5,-3,2)) | pattern(List(5,3))
io.out.load := pattern(List(-5,-4,-2))
io.out.store := pattern(List(-6,5,-4))
io.out.lsu := pattern(List(-6,-4,-2))
io.out.add := pattern(List(-14,-13,-12,-5,4)) | pattern(List(-5,-3,2)) |
pattern(List(-30,-25,-14,-13,-12,-6,4,-2))
io.out.sub := pattern(List(30,-12,-6,5,4,-2)) | pattern(List(-25,-14,13,-6,4,-2)) |
pattern(List(-14,13,-5,4,-2)) | pattern(List(6,-4,-2))
io.out.land := pattern(List(14,13,12,-5,-2)) | pattern(List(-25,14,13,12,-6,-2))
io.out.lor := pattern(List(-6,3)) | pattern(List(-25,14,13,-12,-6,-2)) |
pattern(List(5,4,2)) | pattern(List(-13,-12,6,4)) |
pattern(List(14,13,-12,-5,-2))
io.out.lxor := pattern(List(-25,14,-13,-12,4,-2)) | pattern(List(14,-13,-12,-5,4,-2))
io.out.sll := pattern(List(-25,-14,-13,12,-6,4,-2))
io.out.sra := pattern(List(30,-13,12,-6,4,-2))
io.out.srl := pattern(List(-30,-25,14,-13,12,-6,4,-2))
io.out.slt := pattern(List(-25,-14,13,-6,4,-2)) | pattern(List(-14,13,-5,4,-2))
io.out.unsign := pattern(List(-14,13,12,-5,-2)) | pattern(List(13,6,-4,-2)) |
pattern(List(14,-5,-4)) | pattern(List(-25,-14,13,12,-6,-2)) |
pattern(List(25,14,12,-6,5,-2))
io.out.add := pattern(List(-14,-13,-12,-5,4)) | pattern(List(-5,-3,2)) | pattern(List(-30,-25,-14,-13,-12,-6,4,-2))
io.out.sub := pattern(List(30,-14,-12,-6,5,4,-2)) | pattern(List(-29,-25,-14,13,-6,4,-2)) |
pattern(List(27,25,14,-6,5,-2)) | pattern(List(-14,13,-5,4,-2)) | pattern(List(6,-4,-2))
io.out.land := pattern(List(-27,-25,14,13,12,-6,-2)) | pattern(List(14,13,12,-5,-2))
io.out.lor := pattern(List(-6,3)) | pattern(List(-29,-27,-25,14,13,-12,-6,-2)) | pattern(List(5,4,2)) |
pattern(List(-13,-12,6,4)) | pattern(List(14,13,-12,-5,-2))
io.out.lxor := pattern(List(-29,-27,-25,14,-13,-12,4,-2)) | pattern(List(14,-13,-12,-5,4,-2))
io.out.sll := pattern(List(-29,-27,-25,-14,-13,12,-6,4,-2))
io.out.sra := pattern(List(30,-29,-27,-13,12,-6,4,-2))
io.out.srl := pattern(List(-30,-29,-27,-25,14,-13,12,-6,4,-2))
io.out.slt := pattern(List(-29,-25,-14,13,-6,4,-2)) | pattern(List(-14,13,-5,4,-2))
io.out.unsign := pattern(List(-27,25,14,12,-6,5,-2)) | pattern(List(-14,13,12,-5,-2)) |
pattern(List(13,6,-4,-2)) | pattern(List(14,-5,-4)) | pattern(List(-25,-14,13,12,-6,-2)) |
pattern(List(27,25,14,13,-6,5,-2))
io.out.condbr := pattern(List(6,-4,-2))
io.out.beq := pattern(List(-14,-12,6,-4,-2))
io.out.bne := pattern(List(-14,12,6,-4,-2))
io.out.bge := pattern(List(14,12,5,-4,-2))
io.out.blt := pattern(List(14,-12,5,-4,-2))
io.out.jal := pattern(List(6,2))
io.out.by := pattern(List(-13,-12,-6,-4,-2))
io.out.half := pattern(List(12,-6,-4,-2))
io.out.word := pattern(List(13,-6,-4))
io.out.csr_read := pattern(List(13,6,4)) | pattern(List(7,6,4)) |
pattern(List(8,6,4)) | pattern(List(9,6,4)) | pattern(List(10,6,4)) |
pattern(List(11,6,4))
io.out.csr_read := pattern(List(13,6,4)) | pattern(List(7,6,4)) | pattern(List(8,6,4)) |
pattern(List(9,6,4)) | pattern(List(10,6,4)) | pattern(List(11,6,4))
io.out.csr_clr := pattern(List(15,13,12,6,4)) | pattern(List(16,13,12,6,4)) |
pattern(List(17,13,12,6,4)) | pattern(List(18,13,12,6,4)) |
pattern(List(19,13,12,6,4))
pattern(List(17,13,12,6,4)) | pattern(List(18,13,12,6,4)) | pattern(List(19,13,12,6,4))
io.out.csr_set := pattern(List(15,-12,6,4)) | pattern(List(16,-12,6,4)) | pattern(List(17,-12,6,4)) |
pattern(List(18,-12,6,4)) | pattern(List(19,-12,6,4))
io.out.csr_write := pattern(List(-13,12,6,4))
io.out.csr_imm := pattern(List(14,-13,6,4)) | pattern(List(15,14,6,4)) |
pattern(List(16,14,6,4)) | pattern(List(17,14,6,4)) |
pattern(List(18,14,6,4)) | pattern(List(19,14,6,4))
io.out.csr_set := pattern(List(15,-12,6,4)) | pattern(List(16,-12,6,4)) |
pattern(List(17,-12,6,4)) | pattern(List(18,-12,6,4)) |
pattern(List(19,-12,6,4))
io.out.ebreak := pattern(List(-22,20,-13,-12,6,4))
io.out.ecall := pattern(List(-21,-20,-13,-12,6,4))
io.out.mret := pattern(List(29,-13,-12,6,4))
io.out.mul := pattern(List(25,-14,-6,5,4,-2))
io.out.rs1_sign := pattern(List(25,-14,13,-12,-6,5,4,-2)) |
pattern(List(25,-14,-13,12,-6,4,-2))
io.out.rs2_sign := pattern(List(25,-14,-13,12,-6,4,-2))
io.out.low := pattern(List(25,-14,-13,-12,5,4,-2))
io.out.div := pattern(List(25,14,-6,5,-2))
io.out.rem := pattern(List(25,14,13,-6,5,-2))
io.out.fence := pattern(List(-5,3))
io.out.fence_i := pattern(List(12,-5,3))
io.out.pm_alu := pattern(List(28,22,-13,-12,4)) | pattern(List(4,2)) |
pattern(List(-25,-6,4)) | pattern(List(-5,4))
io.out.presync := pattern(List(-5,3)) | pattern(List(-13,7,6,4)) |
pattern(List(-13,8,6,4)) | pattern(List(-13,9,6,4)) |
pattern(List(-13,10,6,4)) | pattern(List(-13,11,6,4)) |
pattern(List(15,13,6,4)) | pattern(List(16,13,6,4)) |
pattern(List(17,13,6,4)) | pattern(List(18,13,6,4)) |
pattern(List(19,13,6,4))
io.out.postsync := pattern(List(12,-5,3)) | pattern(List(-22,-13,-12,6,4)) |
pattern(List(-13,7,6,4)) | pattern(List(-13,8,6,4)) |
pattern(List(-13,9,6,4)) | pattern(List(-13,10,6,4)) |
pattern(List(-13,11,6,4)) | pattern(List(15,13,6,4)) |
pattern(List(16,13,6,4)) | pattern(List(17,13,6,4)) |
io.out.csr_imm := pattern(List(14,-13,6,4)) | pattern(List(15,14,6,4)) | pattern(List(16,14,6,4)) |
pattern(List(17,14,6,4)) | pattern(List(18,14,6,4)) | pattern(List(19,14,6,4))
io.out.presync := pattern(List(-5,3)) | pattern(List(-13,7,6,4)) | pattern(List(-13,8,6,4)) |
pattern(List(-13,9,6,4)) | pattern(List(-13,10,6,4)) | pattern(List(-13,11,6,4)) |
pattern(List(15,13,6,4)) | pattern(List(16,13,6,4)) | pattern(List(17,13,6,4)) |
pattern(List(18,13,6,4)) | pattern(List(19,13,6,4))
io.out.legal := pattern(List(-31,-30,29,28,-27,-26,-25,-24,-23,-22,21,-20,-19,-18,-17,-16,-15,-14,-11,-10,-9,-8,-7,6,5,4,-3,-2,1,0)) |
pattern(List(-31,-30,-29,28,-27,-26,-25,-24,-23,22,-21,20,-19,-18,-17,-16,-15,-14,-11,-10,-9,-8,-7,6,5,4,-3,-2,1,0)) |
io.out.postsync := pattern(List(12,-5,3)) | pattern(List(-22,-13,-12,6,4)) |
pattern(List(-13,7,6,4)) | pattern(List(-13,8,6,4)) | pattern(List(-13,9,6,4)) | pattern(List(-13,10,6,4)) |
pattern(List(-13,11,6,4)) | pattern(List(15,13,6,4)) | pattern(List(16,13,6,4)) | pattern(List(17,13,6,4)) |
pattern(List(18,13,6,4)) | pattern(List(19,13,6,4))
io.out.ebreak := pattern(List(-22,20,-13,-12,6,4))
io.out.ecall := pattern(List(-21,-20,-13,-12,6,4))
io.out.mret := pattern(List(29,-13,-12,6,4))
io.out.mul := pattern(List(-30,27,24,20,14,-13,12,-5,4,-2)) | pattern(List(29,27,-24,23,14,-13,12,-5,4,-2)) |
pattern(List(29,27,-24,-20,14,-13,12,-5,4,-2)) | pattern(List(27,-25,13,-12,-6,5,4,-2)) |
pattern(List(30,27,13,-6,5,4,-2)) | pattern(List(29,27,22,-20,14,-13,12,-5,4,-2)) |
pattern(List(29,27,-21,20,14,-13,12,-5,4,-2)) | pattern(List(29,27,-22,21,14,-13,12,-5,4,-2)) |
pattern(List(30,29,27,-23,14,-13,12,-5,4,-2)) | pattern(List(-30,27,23,14,-13,12,-5,4,-2)) |
pattern(List(-30,-29,27,-25,-13,12,-6,4,-2)) | pattern(List(25,-14,-6,5,4,-2)) |
pattern(List(30,-27,24,-14,-13,12,-5,4,-2)) | pattern(List(29,27,14,-6,5,-2))
io.out.rs1_sign := pattern(List(-27,25,-14,13,-12,-6,5,4,-2)) | pattern(List(-27,25,-14,-13,12,-6,4,-2))
io.out.rs2_sign := pattern(List(-27,25,-14,-13,12,-6,4,-2))
io.out.low := pattern(List(25,-14,-13,-12,5,4,-2))
io.out.div := pattern(List(-27,25,14,-6,5,-2))
io.out.rem := pattern(List(-27,25,14,13,-6,5,-2))
io.out.fence := pattern(List(-5,3))
io.out.fence_i := pattern(List(12,-5,3))
io.out.clz := pattern(List(30,-27,-24,-22,-21,-20,-14,-13,12,-5,4,-2))
io.out.ctz := pattern(List(30,-27,-24,-22,20,-14,-13,12,-5,4,-2))
io.out.pcnt := pattern(List(30,-27,-24,21,-14,-13,12,-5,4,-2))
io.out.sext_b := pattern(List(30,-27,22,-20,-14,-13,12,-5,4,-2))
io.out.sext_h := pattern(List(30,-27,22,20,-14,-13,12,-5,4,-2))
io.out.slo := pattern(List(-30,29,-27,-14,-13,12,-6,4,-2))
io.out.sro := pattern(List(-30,29,-27,14,-13,12,-6,4,-2))
io.out.min := pattern(List(27,25,14,-12,-6,5,-2))
io.out.max := pattern(List(27,25,14,12,-6,5,-2))
io.out.pack := pattern(List(-30,27,-25,-13,-12,5,4,-2))
io.out.packu := pattern(List(30,27,-13,-12,5,4,-2))
io.out.packh := pattern(List(-30,27,-25,13,12,-6,5,-2))
io.out.rol := pattern(List(30,-27,-14,12,-6,5,4,-2))
io.out.ror := pattern(List(30,29,-27,14,-13,12,-6,4,-2))
io.out.zbb := pattern(List(30,-27,-24,-14,-13,12,-5,4,-2)) | pattern(List(-30,27,14,13,12,-6,5,-2)) |
pattern(List(30,29,-27,14,-13,12,-5,4,-2)) | pattern(List(27,-13,-12,5,4,-2)) |
pattern(List(30,14,-13,-12,-6,5,-2)) | pattern(List(30,-27,13,-6,5,4,-2)) |
pattern(List(30,29,-27,-6,5,4,-2)) | pattern(List(30,29,24,23,22,21,20,14,-13,12,-5,4,-2)) |
pattern(List(-30,29,27,-24,-23,22,21,20,14,-13,12,-5,4,-2)) |
pattern(List(-30,27,24,-23,-22,-21,-20,14,-13,12,-5,4,-2)) |
pattern(List(30,29,24,23,-22,-21,-20,14,-13,12,-5,4,-2)) | pattern(List(27,25,14,-6,5,-2))
io.out.sbset := pattern(List(-30,29,27,-14,-13,12,-6,4,-2))
io.out.sbclr := pattern(List(30,-29,-14,-13,12,-6,4,-2))
io.out.sbinv := pattern(List(30,29,27,-14,-13,12,-6,4,-2))
io.out.sbext := pattern(List(30,-29,27,14,-13,12,-6,4,-2))
io.out.zbs := pattern(List(29,27,-14,-13,12,-6,4,-2)) | pattern(List(30,-29,27,-13,12,-6,4,-2))
io.out.bext := pattern(List(-30,27,-25,13,-12,-6,5,4,-2))
io.out.bdep := pattern(List(30,27,13,-12,-6,5,4,-2))
io.out.zbe := pattern(List(27,-25,13,-12,-6,5,4,-2))
io.out.clmul := pattern(List(27,25,-14,-13,-6,5,4,-2))
io.out.clmulh := pattern(List(27,-14,13,12,-6,5,-2))
io.out.clmulr := pattern(List(27,-14,-12,-6,5,4,-2))
io.out.zbc := pattern(List(27,25,-14,-6,5,4,-2))
io.out.grev := pattern(List(30,29,27,14,-13,12,-6,4,-2))
io.out.gorc := pattern(List(-30,29,27,14,-13,12,-6,4,-2))
io.out.shfl := pattern(List(-30,-29,27,-25,-14,-13,12,-6,4,-2))
io.out.unshfl := pattern(List(-30,-29,27,-25,14,-13,12,-6,4,-2))
io.out.zbp := pattern(List(-30,29,-27,-13,12,-5,4,-2)) | pattern(List(-30,-29,27,-13,12,-5,4,-2)) |
pattern(List(30,-27,13,-6,5,4,-2)) | pattern(List(27,-25,-13,-12,5,4,-2)) |
pattern(List(30,14,-13,-12,5,4,-2)) | pattern(List(29,-27,12,-6,5,4,-2)) |
pattern(List(-30,-29,27,-25,12,-6,5,4,-2)) | pattern(List(29,14,-13,12,-6,4,-2))
io.out.crc32_b := pattern(List(30,-27,24,-23,-21,-20,-14,-13,12,-5,4,-2))
io.out.crc32_h := pattern(List(30,-27,24,-23,20,-14,-13,12,-5,4,-2))
io.out.crc32_w := pattern(List(30,-27,24,-23,21,-14,-13,12,-5,4,-2))
io.out.crc32c_b := pattern(List(30,-27,23,-21,-20,-14,-13,12,-5 ,4,-2))
io.out.crc32c_h := pattern(List(30,-27,23,20,-14,-13,12,-5,4,-2))
io.out.crc32c_w := pattern(List(30,-27,23,21,-14,-13,12,-5,4,-2))
io.out.zbr := pattern(List(30,-27,24,-14,-13,12,-5,4,-2))
io.out.bfp := pattern(List(30,27,13,12,-6,5,-2))
io.out.zbf := pattern(List(30,27,13,12,-6,5,-2))
io.out.sh1add := pattern(List(29,-14,-12,-6,5,4,-2))
io.out.sh2add := pattern(List(29,14,-13,-12,5,4,-2))
io.out.sh3add := pattern(List(29,14,13,-6,5,-2))
io.out.zba := pattern(List(29,-12,-6,5,4,-2))
io.out.pm_alu := pattern(List(28,22,-13,-12,4)) | pattern(List(-30,-29,-27,-25,-6,4)) |
pattern(List(-29,-27,-25,-13,12,-6,4)) | pattern(List(-29,-27,-25,-14,-6,4)) |
pattern(List(13,-5,4)) | pattern(List(4,2)) | pattern(List(-12,-5,4))
io.out.legal := pattern(List(-31,-30,-29,28,-27,-26,-25,-24,-23,22,-21,20,-19,-18,-17,-16,-15,-14,-11,-10,-9,-8,-7,6,5,4,-3,-2,1,0)) |
pattern(List(-31,-30,29,28,-27,-26,-25,-24,-23,-22,21,-20,-19,-18,-17,-16,-15,-14,-11,-10,-9,-8,-7,6,5,4,-3,-2,1,0)) |
pattern(List(-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-19,-18,-17,-16,-15,-14,-11,-10,-9,-8,-7,5,4,-3,-2,1,0)) |
pattern(List(-31,-30,-29,-28,-27,-26,-25,-6,4,-3,1,0)) |
pattern(List(-31,-29,-28,-27,-26,-25,-14,-13,-12,-6,-3,-2,1,0)) |
pattern(List(-31,-29,-28,-27,-26,-25,14,-13,12,-6,4,-3,1,0)) |
pattern(List(-31,-30,-29,-28,-27,-26,-6,5,4,-3,1,0)) |
pattern(List(-14,-13,-12,6,5,-4,-3,1,0)) |
pattern(List(14,6,5,-4,-3,-2,1,0)) |
pattern(List(-12,-6,-5,4,-3,1,0)) |
pattern(List(-14,-13,5,-4,-3,-2,1,0)) |
pattern(List(12,6,5,4,-3,-2,1,0)) |
pattern(List(-31,29,-28,-26,-25,24,-22,-20,-6,-5,4,-3,1,0)) | pattern(List(-31,29,-28,-26,-25,24,-22,-21,-6,-5,4,-3,1,0)) |
pattern(List(-31,29,-28,-26,-25,-23,-22,-20,-6,-5,4,-3,1,0)) | pattern(List(-31,29,-28,-26,-25,-24,-23,-21,-6,-5,4,-3,1,0)) |
pattern(List(-31,-30,-29,-28,-26,25,13,-6,4,-3,1,0)) | pattern(List(-31,-30,-28,-26,-25,-24,-6,-5,4,-3,1,0)) |
pattern(List(-31,-30,-28,-27,-26,-25,14,-12,-6,4,-3,1,0)) | pattern(List(-31,-30,-28,-27,-26,-25,13,-12,-6,4,-3,1,0)) |
pattern(List(-31,-29,-28,-27,-26,-25,-13,-12,-6,4,-3,1,0)) | pattern(List(-31,-28,-27,-26,-25,14,-6,-5,4,-3,1,0)) |
pattern(List(-31,-30,-29,-28,-26,-13,12,5,4,-3,-2,1,0)) | pattern(List(-31,-30,-29,-28,-26,14,-6,5,4,-3,1,0)) |
pattern(List(-31,30,-28,27,-26,-25,-13,12,-6,4,-3,1,0)) | pattern(List(-31,29,-28,27,-26,-25 ,-6,-5,4,-3,1,0)) |
pattern(List(-31,-30,-28,-27,-26,-25,-6,-5,4,-3,1,0)) | pattern(List(-31,-30,-29,-28,-27,-26,-6,5,4,-3,1,0)) |
pattern(List(-14,-13,-12,6,5,-4,-3,1,0)) | pattern(List(-31,-29,-28,-26,-25,14,-6,5,4,-3,1,0)) |
pattern(List(-31,29,-28,-26,-25,-13,12,5,4,-3,-2,1,0)) | pattern(List(14,6,5,-4,-3,-2,1,0)) |
pattern(List(-14,-13,5,-4,-3,-2,1,0)) | pattern(List(-12,-6,-5,4,-3,1,0)) | pattern(List(-13,12,6,5,-3,-2,1,0)) |
pattern(List(-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-11,-10,-9,-8,-7,-6,-5,-4,3,2,1,0)) |
pattern(List(-31,-30,-29,-28,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,3,2,1,0)) |
pattern(List(13,6,5,4,-3,-2,1,0)) |
pattern(List(-13,-6,-5,-4,-3,-2,1,0)) |
pattern(List(6,5,-4,3,2,1,0)) |
pattern(List(13,-6,-5,4,-3,1,0)) |
pattern(List(-14,-12,-6,-4,-3,-2,1,0)) |
pattern(List(-6,4,-3,2,1,0))
pattern(List(13,6,5,4,-3,-2,1,0)) | pattern(List(6,5,-4,3,2,1,0)) | pattern(List(-14,-12,-6,-4,-3,-2,1,0)) |
pattern(List(-13,-6,-5,-4,-3,-2,1,0)) | pattern(List(13,-6,-5,4,-3,1,0)) | pattern(List(-6,4,-3,2,1,0))
}
object dec_dec extends App {
(new chisel3.stage.ChiselStage).emitVerilog(new dec_dec_ctl())
}

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,8 @@ class dec_ib_ctl_IO extends Bundle with param{
val ifu_ib = Flipped(new aln_ib)
val ib_exu = Flipped(new ib_exu)
val dbg_ib = new dbg_ib
val dec_debug_valid_d =Output(UInt(1.W))
val dec_ib0_valid_d =Output(UInt(1.W)) // ib0 valid
val dec_i0_icaf_type_d =Output(UInt(2.W)) // i0 instruction access fault type
val dec_i0_instr_d =Output(UInt(32.W)) // i0 inst at decode
@ -18,15 +20,18 @@ class dec_ib_ctl_IO extends Bundle with param{
val dec_i0_bp_index =Output(UInt(((BTB_ADDR_HI-BTB_ADDR_LO)+1).W)) // i0 branch index
val dec_i0_bp_fghr =Output(UInt(BHT_GHR_SIZE.W)) // BP FGHR
val dec_i0_bp_btag =Output(UInt(BTB_BTAG_SIZE.W)) // BP tag
val ifu_i0_fa_index =Input(UInt(log2Ceil(BTB_SIZE).W))
val dec_i0_bp_fa_index =Output(UInt(log2Ceil(BTB_SIZE).W))
val dec_i0_icaf_d =Output(UInt(1.W)) // i0 instruction access fault at decode
val dec_i0_icaf_f1_d =Output(UInt(1.W)) // i0 instruction access fault at decode for f1 fetch group
val dec_i0_icaf_second_d =Output(UInt(1.W)) // i0 instruction access fault at decode for f1 fetch group
val dec_i0_dbecc_d =Output(UInt(1.W)) // i0 double-bit error at decode
val dec_debug_fence_d =Output(UInt(1.W)) // debug fence inst
}
class dec_ib_ctl extends Module with param{
val io=IO(new dec_ib_ctl_IO)
io.dec_i0_icaf_f1_d :=io.ifu_ib.ifu_i0_icaf_f1
io.dec_i0_icaf_second_d :=io.ifu_ib.ifu_i0_icaf_second
io.dec_i0_dbecc_d :=io.ifu_ib.ifu_i0_dbecc
io.dec_i0_icaf_d :=io.ifu_ib.ifu_i0_icaf
io.ib_exu.dec_i0_pc_d :=io.ifu_ib.ifu_i0_pc
@ -36,6 +41,7 @@ class dec_ib_ctl extends Module with param{
io.dec_i0_bp_index :=io.ifu_ib.ifu_i0_bp_index
io.dec_i0_bp_fghr :=io.ifu_ib.ifu_i0_bp_fghr
io.dec_i0_bp_btag :=io.ifu_ib.ifu_i0_bp_btag
io.dec_i0_bp_fa_index := io.ifu_i0_fa_index
// GPR accesses
// put reg to read on rs1
@ -52,7 +58,7 @@ class dec_ib_ctl extends Module with param{
val debug_valid =io.dbg_ib.dbg_cmd_valid & (io.dbg_ib.dbg_cmd_type =/= 2.U)
val debug_read =debug_valid & !io.dbg_ib.dbg_cmd_write
val debug_write =debug_valid & io.dbg_ib.dbg_cmd_write
io.dec_debug_valid_d := debug_valid
val debug_read_gpr = debug_read & (io.dbg_ib.dbg_cmd_type===0.U)
val debug_write_gpr = debug_write & (io.dbg_ib.dbg_cmd_type===0.U)
val debug_read_csr = debug_read & (io.dbg_ib.dbg_cmd_type===1.U)
@ -77,5 +83,4 @@ class dec_ib_ctl extends Module with param{
io.dec_ib0_valid_d := io.ifu_ib.ifu_i0_valid | debug_valid
io.dec_i0_instr_d := Mux(debug_valid.asBool,ib0_debug_in,io.ifu_ib.ifu_i0_instr)
}

File diff suppressed because it is too large Load Diff

View File

@ -21,12 +21,11 @@ class exu extends Module with lib with RequireAsyncReset{
val exu_div_wren = Output(UInt(1.W)) // Divide write enable to GPR
//debug
val dbg_cmd_wrdata = Input(UInt(32.W)) // Debug data to primary I0 RS1
val dec_csr_rddata_d = Input(UInt(32.W))
//lsu
val lsu_exu = Flipped(new lsu_exu())
//ifu_ifc
val exu_flush_path_final = Output(UInt(31.W)) // Target for the oldest flush source
val dec_qual_lsu_d = Input(Bool())
})
val PREDPIPESIZE = BTB_ADDR_HI - BTB_ADDR_LO + BHT_GHR_SIZE + BTB_BTAG_SIZE +1
@ -112,14 +111,14 @@ class exu extends Module with lib with RequireAsyncReset{
dontTouch(i0_rs2_d)
io.lsu_exu.exu_lsu_rs1_d:=Mux1H(Seq(
(!i0_rs1_bypass_en_d & !io.dec_exu.decode_exu.dec_extint_stall & io.dec_exu.decode_exu.dec_i0_rs1_en_d & io.dec_qual_lsu_d).asBool -> io.dec_exu.gpr_exu.gpr_i0_rs1_d,
(i0_rs1_bypass_en_d & !io.dec_exu.decode_exu.dec_extint_stall & io.dec_qual_lsu_d).asBool -> i0_rs1_bypass_data_d,
(io.dec_exu.decode_exu.dec_extint_stall & io.dec_qual_lsu_d).asBool -> Cat(io.dec_exu.tlu_exu.dec_tlu_meihap,0.U(2.W))
(!i0_rs1_bypass_en_d & !io.dec_exu.decode_exu.dec_extint_stall & io.dec_exu.decode_exu.dec_i0_rs1_en_d & io.dec_exu.decode_exu.dec_qual_lsu_d).asBool -> io.dec_exu.gpr_exu.gpr_i0_rs1_d,
(i0_rs1_bypass_en_d & !io.dec_exu.decode_exu.dec_extint_stall & io.dec_exu.decode_exu.dec_qual_lsu_d).asBool -> i0_rs1_bypass_data_d,
(io.dec_exu.decode_exu.dec_extint_stall & io.dec_exu.decode_exu.dec_qual_lsu_d).asBool -> Cat(io.dec_exu.tlu_exu.dec_tlu_meihap,0.U(2.W))
))
io.lsu_exu.exu_lsu_rs2_d:=Mux1H(Seq(
(!i0_rs2_bypass_en_d & !io.dec_exu.decode_exu.dec_extint_stall & io.dec_exu.decode_exu.dec_i0_rs2_en_d & io.dec_qual_lsu_d).asBool -> io.dec_exu.gpr_exu.gpr_i0_rs2_d,
(i0_rs2_bypass_en_d & !io.dec_exu.decode_exu.dec_extint_stall & io.dec_qual_lsu_d).asBool -> i0_rs2_bypass_data_d
(!i0_rs2_bypass_en_d & !io.dec_exu.decode_exu.dec_extint_stall & io.dec_exu.decode_exu.dec_i0_rs2_en_d & io.dec_exu.decode_exu.dec_qual_lsu_d).asBool -> io.dec_exu.gpr_exu.gpr_i0_rs2_d,
(i0_rs2_bypass_en_d & !io.dec_exu.decode_exu.dec_extint_stall & io.dec_exu.decode_exu.dec_qual_lsu_d).asBool -> i0_rs2_bypass_data_d
))
val muldiv_rs1_d=Mux1H(Seq(
@ -129,10 +128,12 @@ class exu extends Module with lib with RequireAsyncReset{
val i_alu=Module(new exu_alu_ctl())
i_alu.io.dec_alu <> io.dec_exu.dec_alu
i_alu.io.scan_mode :=io.scan_mode
i_alu.io.enable :=x_data_en
i_alu.io.pp_in :=i0_predict_newp_d
i_alu.io.flush_upper_x :=i0_flush_upper_x
i_alu.io.csr_rddata_in :=io.dec_csr_rddata_d
i_alu.io.dec_tlu_flush_lower_r :=io.dec_exu.tlu_exu.dec_tlu_flush_lower_r
i_alu.io.a_in :=i0_rs1_d.asSInt
i_alu.io.b_in :=i0_rs2_d

View File

@ -9,7 +9,7 @@ class exu_alu_ctl extends Module with lib with RequireAsyncReset{
val io = IO(new Bundle{
val dec_alu = new dec_alu()
//val csr_rddata_in = Input(UInt(32.W)) // CSR data
val csr_rddata_in = Input(UInt(32.W)) // CSR data
val dec_i0_pc_d = Input(UInt(31.W)) // for pc=pc+2,4 calculations
val scan_mode = Input(UInt(1.W)) // Scan control
val flush_upper_x = Input(UInt(1.W)) // Branch flush from previous cycle
@ -156,7 +156,7 @@ class exu_alu_ctl extends Module with lib with RequireAsyncReset{
val lout = Mux1H(Seq(
io.dec_alu.dec_csr_ren_d -> io.dec_alu.dec_csr_rddata_d.asSInt ,
io.dec_alu.dec_csr_ren_d -> io.csr_rddata_in.asSInt ,
(io.i0_ap.land & !ap_zbb).asBool -> (Cat(0.U(1.W),io.a_in).asSInt & io.b_in.asSInt) ,
(io.i0_ap.lor & !ap_zbb).asBool -> (Cat(0.U(1.W),io.a_in).asSInt | io.b_in.asSInt) ,
(io.i0_ap.lxor & !ap_zbb).asBool -> (Cat(0.U(1.W),io.a_in).asSInt ^ io.b_in.asSInt) ,

View File

@ -343,7 +343,7 @@ class ifu_aln_ctl extends Module with lib with RequireAsyncReset {
val icaf_eff = alignicaf(1) | aligndbecc(1)
io.dec_aln.aln_ib.ifu_i0_icaf_f1 := first4B & icaf_eff & alignfromf1
io.dec_aln.aln_ib.ifu_i0_icaf_second := first4B & icaf_eff & alignfromf1
io.dec_aln.aln_ib.ifu_i0_dbecc := Mux1H(Seq(first4B.asBool->aligndbecc.orR, first2B.asBool->aligndbecc(0)))

View File

@ -205,7 +205,6 @@ class dctl_busbuff extends Bundle with lib{
val lsu_nonblock_load_data_valid = Output(Bool())
val lsu_nonblock_load_data_error = Output(Bool())
val lsu_nonblock_load_data_tag = Output(UInt(LSU_NUM_NBLOAD_WIDTH.W))
val lsu_nonblock_load_data = Output(UInt(32.W))
}
class lsu_tlu extends Bundle {
val lsu_pmu_load_external_m = Output(Bool())
@ -247,7 +246,7 @@ class ic_mem extends Bundle with lib {
class aln_ib extends Bundle with lib{
val ifu_i0_icaf = Output(Bool())
val ifu_i0_icaf_type = Output(UInt(2.W))
val ifu_i0_icaf_f1 = Output(Bool())
val ifu_i0_icaf_second = Output(Bool())
val ifu_i0_dbecc = Output(Bool())
val ifu_i0_bp_index = Output(UInt((BTB_ADDR_HI-BTB_ADDR_LO+1).W))
val ifu_i0_bp_fghr = Output(UInt(BHT_GHR_SIZE.W))
@ -298,12 +297,12 @@ class dma_ifc extends Bundle{
}
class trace_pkt_t extends Bundle{
val rv_i_valid_ip = Output(UInt(2.W) )
val rv_i_valid_ip = Output(UInt(1.W) )
val rv_i_insn_ip = Output(UInt(32.W) )
val rv_i_address_ip = Output(UInt(32.W) )
val rv_i_exception_ip = Output(UInt(2.W) )
val rv_i_exception_ip = Output(UInt(1.W) )
val rv_i_ecause_ip = Output(UInt(5.W) )
val rv_i_interrupt_ip = Output(UInt(2.W) )
val rv_i_interrupt_ip = Output(UInt(1.W) )
val rv_i_tval_ip = Output(UInt(32.W) )
}
@ -326,7 +325,7 @@ class dbg_dctl extends Bundle{
class dec_alu extends Bundle {
val dec_i0_alu_decode_d = Input(UInt(1.W)) // Valid
val dec_csr_ren_d = Input(Bool()) // extra decode
val dec_csr_rddata_d = Input(UInt(32.W))
// val dec_csr_rddata_d = Input(UInt(32.W))
val dec_i0_br_immed_d = Input(UInt(12.W)) // Branch offset
val exu_i0_pc_x = Output(UInt(31.W)) // flopped PC
}
@ -372,6 +371,7 @@ class decode_exu extends Bundle with lib{
val dec_i0_rs2_en_d =Input(UInt(1.W)) // Qualify GPR RS2 data
val dec_i0_immed_d =Input(UInt(32.W)) // DEC data immediate
val dec_i0_result_r =Input(UInt(32.W)) // DEC result in R-stage
val dec_qual_lsu_d = Input(Bool())
val dec_i0_select_pc_d =Input(UInt(1.W)) // PC select to RS1
val dec_i0_rs1_bypass_en_d =Input(UInt(4.W)) // DEC bypass select 1 - X-stage, 0 - dec bypass data
val dec_i0_rs2_bypass_en_d =Input(UInt(4.W)) // DEC bypass select 1 - X-stage, 0 - dec bypass data
@ -469,7 +469,7 @@ class predict_pkt_t extends Bundle {
class trap_pkt_t extends Bundle {
val legal = UInt(1.W)
val icaf = UInt(1.W)
val icaf_f1 = UInt(1.W)
val icaf_second = UInt(1.W)
val icaf_type = UInt(2.W)
val fence_i = UInt(1.W)
val i0trigger = UInt(4.W)
@ -478,7 +478,6 @@ class trap_pkt_t extends Bundle {
val pmu_divide = UInt(1.W)
val pmu_lsu_misaligned = UInt(1.W)
}
class dest_pkt_t extends Bundle {
val i0rd = UInt(5.W)
val i0load = UInt(1.W)
@ -819,9 +818,9 @@ class dec_tlu_csr_pkt extends Bundle{
val csr_mitcnt0 =UInt(1.W)
val csr_mitcnt1 =UInt(1.W)
val csr_mpmc =UInt(1.W)
val csr_mcpc =UInt(1.W)
// val csr_mcpc =UInt(1.W)
val csr_meicpct =UInt(1.W)
val csr_mdeau =UInt(1.W)
// val csr_mdeau =UInt(1.W)
val csr_micect =UInt(1.W)
val csr_miccmect =UInt(1.W)
val csr_mdccmect =UInt(1.W)

View File

@ -1,358 +1,358 @@
package lsu
import lib._
import chisel3._
import chisel3.util._
import include._
import mem._
class lsu extends Module with RequireAsyncReset with param with lib {
val io = IO (new Bundle {
val clk_override = Input(Bool())
val lsu_dma = new lsu_dma
val lsu_pic = new lsu_pic
val lsu_exu = new lsu_exu
val lsu_dec = new lsu_dec
val dccm = Flipped(new mem_lsu)
val lsu_tlu = new lsu_tlu
val axi = new axi_channels(LSU_BUS_TAG)
val dec_tlu_flush_lower_r = Input(Bool())
val dec_tlu_i0_kill_writeb_r = Input(Bool())
val dec_tlu_force_halt = Input(Bool())
val dec_tlu_core_ecc_disable = Input(Bool())
val dec_lsu_offset_d = Input(UInt(12.W))
val lsu_p = Flipped(Valid(new lsu_pkt_t()))
val trigger_pkt_any = Input(Vec(4, new trigger_pkt_t()))
val dec_lsu_valid_raw_d = Input(Bool())
val dec_tlu_mrac_ff = Input(UInt(32.W))
//Outputs
val lsu_result_m = Output(UInt(32.W))
val lsu_result_corr_r = Output(UInt(32.W))
val lsu_load_stall_any = Output(Bool())
val lsu_store_stall_any = Output(Bool())
val lsu_fastint_stall_any = Output(Bool())
val lsu_idle_any = Output(Bool())
val lsu_active = Output(Bool())
val lsu_fir_addr = Output(UInt(31.W))
val lsu_fir_error = Output(UInt(2.W))
val lsu_single_ecc_error_incr = Output(Bool())
val lsu_error_pkt_r = Valid(new lsu_error_pkt_t())
val lsu_pmu_misaligned_m = Output(Bool())
val lsu_trigger_match_m = Output(UInt(4.W))
val lsu_bus_clk_en = Input(Bool())
val scan_mode = Input(Bool())
val active_clk = Input(Clock())
})
val dma_dccm_wdata = WireInit(0.U(64.W))
val dma_dccm_wdata_lo = WireInit(0.U(32.W))
val dma_dccm_wdata_hi = WireInit(0.U(32.W))
val dma_mem_tag_m = WireInit(0.U(3.W))
val lsu_raw_fwd_lo_r = WireInit(0.U(1.W))
val lsu_raw_fwd_hi_r = WireInit(0.U(1.W))
val lsu_busm_clken = WireInit(0.U(1.W))
val lsu_bus_obuf_c1_clken = WireInit(0.U(1.W))
val lsu_addr_d = WireInit(0.U(32.W))
val lsu_addr_m = WireInit(0.U(32.W))
val lsu_addr_r = WireInit(0.U(32.W))
val end_addr_d = WireInit(0.U(32.W))
val end_addr_m = WireInit(0.U(32.W))
val end_addr_r = WireInit(0.U(32.W))
val lsu_busreq_r = WireInit(Bool(),false.B)
val lsu_lsc_ctl = Module(new lsu_lsc_ctl())
io.lsu_result_m := lsu_lsc_ctl.io.lsu_result_m
io.lsu_result_corr_r := lsu_lsc_ctl.io.lsu_result_corr_r
val dccm_ctl = Module(new lsu_dccm_ctl())
val stbuf = Module(new lsu_stbuf())
val ecc = Module(new lsu_ecc())
val trigger = Module(new lsu_trigger())
val clkdomain = Module(new lsu_clkdomain())
val bus_intf = Module(new lsu_bus_intf())
val lsu_raw_fwd_lo_m = stbuf.io.stbuf_fwdbyteen_lo_m.orR
val lsu_raw_fwd_hi_m = stbuf.io.stbuf_fwdbyteen_hi_m.orR
// block stores in decode - for either bus or stbuf reasons
io.lsu_store_stall_any := stbuf.io.lsu_stbuf_full_any | bus_intf.io.lsu_bus_buffer_full_any | dccm_ctl.io.ld_single_ecc_error_r_ff
io.lsu_load_stall_any := bus_intf.io.lsu_bus_buffer_full_any | dccm_ctl.io.ld_single_ecc_error_r_ff
io.lsu_fastint_stall_any := dccm_ctl.io.ld_single_ecc_error_r // Stall the fastint in decode-1 stage
// Ready to accept dma trxns
// There can't be any inpipe forwarding from non-dma packet to dma packet since they can be flushed so we can't have st in r when dma is in m
val dma_mem_tag_d = io.lsu_dma.dma_mem_tag
val ldst_nodma_mtor = lsu_lsc_ctl.io.lsu_pkt_m.valid & !lsu_lsc_ctl.io.lsu_pkt_m.bits.dma & (lsu_lsc_ctl.io.addr_in_dccm_m | lsu_lsc_ctl.io.addr_in_pic_m) & lsu_lsc_ctl.io.lsu_pkt_m.bits.store
io.lsu_dma.dccm_ready := !(io.dec_lsu_valid_raw_d | ldst_nodma_mtor | dccm_ctl.io.ld_single_ecc_error_r_ff)
val dma_dccm_wen = io.lsu_dma.dma_lsc_ctl.dma_dccm_req & io.lsu_dma.dma_lsc_ctl.dma_mem_write & lsu_lsc_ctl.io.addr_in_dccm_d & io.lsu_dma.dma_lsc_ctl.dma_mem_sz(1)
val dma_pic_wen = io.lsu_dma.dma_lsc_ctl.dma_dccm_req & io.lsu_dma.dma_lsc_ctl.dma_mem_write & lsu_lsc_ctl.io.addr_in_pic_d
dma_dccm_wdata := io.lsu_dma.dma_lsc_ctl.dma_mem_wdata >> Cat(io.lsu_dma.dma_lsc_ctl.dma_mem_addr(2,0), 0.U(3.W)) // Shift the dma data to lower bits to make it consistent to lsu stores
dma_dccm_wdata_hi := dma_dccm_wdata(63,32)
dma_dccm_wdata_lo := dma_dccm_wdata(31,0)
val flush_m_up = io.dec_tlu_flush_lower_r
val flush_r = io.dec_tlu_i0_kill_writeb_r
// lsu halt idle. This is used for entering the halt mode. Also, DMA accesses are allowed during fence.
// Indicates non-idle if there is a instruction valid in d-r or read/write buffers are non-empty since they can come with error
// Store buffer now have only non-dma dccm stores
// stbuf_empty not needed since it has only dccm stores
io.lsu_idle_any := !((lsu_lsc_ctl.io.lsu_pkt_m.valid & !lsu_lsc_ctl.io.lsu_pkt_m.bits.dma) | (lsu_lsc_ctl.io.lsu_pkt_r.valid & !lsu_lsc_ctl.io.lsu_pkt_r.bits.dma)) & bus_intf.io.lsu_bus_buffer_empty_any
io.lsu_active := (lsu_lsc_ctl.io.lsu_pkt_m.valid | lsu_lsc_ctl.io.lsu_pkt_r.valid | dccm_ctl.io.ld_single_ecc_error_r_ff) | !bus_intf.io.lsu_bus_buffer_empty_any // This includes DMA. Used for gating top clock
// Instantiate the store buffer
val store_stbuf_reqvld_r = lsu_lsc_ctl.io.lsu_pkt_r.valid & lsu_lsc_ctl.io.lsu_pkt_r.bits.store & lsu_lsc_ctl.io.addr_in_dccm_r & !flush_r & (!lsu_lsc_ctl.io.lsu_pkt_r.bits.dma | ((lsu_lsc_ctl.io.lsu_pkt_r.bits.by | lsu_lsc_ctl.io.lsu_pkt_r.bits.half) & !ecc.io.lsu_double_ecc_error_r))
// Disable Forwarding for now
val lsu_cmpen_m = lsu_lsc_ctl.io.lsu_pkt_m.valid & (lsu_lsc_ctl.io.lsu_pkt_m.bits.load | lsu_lsc_ctl.io.lsu_pkt_m.bits.store) & (lsu_lsc_ctl.io.addr_in_dccm_m | lsu_lsc_ctl.io.addr_in_pic_m)
// Bus signals
val lsu_busreq_m = lsu_lsc_ctl.io.lsu_pkt_m.valid & ((lsu_lsc_ctl.io.lsu_pkt_m.bits.load | lsu_lsc_ctl.io.lsu_pkt_m.bits.store) & lsu_lsc_ctl.io.addr_external_m) & !flush_m_up & !lsu_lsc_ctl.io.lsu_exc_m & !lsu_lsc_ctl.io.lsu_pkt_m.bits.fast_int
// Dual signals
val ldst_dual_d = lsu_addr_d(2) =/= end_addr_d(2)
val ldst_dual_m = lsu_addr_m(2) =/= end_addr_m(2)
val ldst_dual_r = lsu_addr_r(2) =/= end_addr_r(2)
// PMU signals
io.lsu_pmu_misaligned_m := lsu_lsc_ctl.io.lsu_pkt_m.valid & ((lsu_lsc_ctl.io.lsu_pkt_m.bits.half & lsu_lsc_ctl.io.lsu_addr_m(0)) | (lsu_lsc_ctl.io.lsu_pkt_m.bits.word & lsu_lsc_ctl.io.lsu_addr_m(1,0).orR))
io.lsu_tlu.lsu_pmu_load_external_m := lsu_lsc_ctl.io.lsu_pkt_m.valid & lsu_lsc_ctl.io.lsu_pkt_m.bits.load & lsu_lsc_ctl.io.addr_external_m
io.lsu_tlu.lsu_pmu_store_external_m := lsu_lsc_ctl.io.lsu_pkt_m.valid & lsu_lsc_ctl.io.lsu_pkt_m.bits.store & lsu_lsc_ctl.io.addr_external_m
//LSU_LSC_Control
//Inputs
lsu_lsc_ctl.io.clk_override := io.clk_override
lsu_lsc_ctl.io.lsu_c1_m_clk := clkdomain.io.lsu_c1_m_clk
lsu_lsc_ctl.io.lsu_c1_r_clk := clkdomain.io.lsu_c1_r_clk
lsu_lsc_ctl.io.lsu_c2_m_clk := clkdomain.io.lsu_c2_m_clk
lsu_lsc_ctl.io.lsu_c2_r_clk := clkdomain.io.lsu_c2_r_clk
lsu_lsc_ctl.io.lsu_store_c1_m_clk := clkdomain.io.lsu_store_c1_m_clk
lsu_lsc_ctl.io.lsu_ld_data_r := dccm_ctl.io.lsu_ld_data_r
lsu_lsc_ctl.io.lsu_ld_data_corr_r := dccm_ctl.io.lsu_ld_data_corr_r
lsu_lsc_ctl.io.lsu_single_ecc_error_r := ecc.io.lsu_single_ecc_error_r
lsu_lsc_ctl.io.lsu_double_ecc_error_r := ecc.io.lsu_double_ecc_error_r
lsu_lsc_ctl.io.lsu_ld_data_m := dccm_ctl.io.lsu_ld_data_m
lsu_lsc_ctl.io.lsu_single_ecc_error_m := ecc.io.lsu_single_ecc_error_m
lsu_lsc_ctl.io.lsu_double_ecc_error_m := ecc.io.lsu_double_ecc_error_m
lsu_lsc_ctl.io.flush_m_up := flush_m_up
lsu_lsc_ctl.io.flush_r := flush_r
lsu_lsc_ctl.io.ldst_dual_d := ldst_dual_d
lsu_lsc_ctl.io.ldst_dual_m := ldst_dual_m
lsu_lsc_ctl.io.ldst_dual_r := ldst_dual_r
lsu_lsc_ctl.io.lsu_exu <> io.lsu_exu
lsu_lsc_ctl.io.lsu_p <> io.lsu_p
lsu_lsc_ctl.io.dec_lsu_valid_raw_d := io.dec_lsu_valid_raw_d
lsu_lsc_ctl.io.dec_lsu_offset_d := io.dec_lsu_offset_d
lsu_lsc_ctl.io.picm_mask_data_m := dccm_ctl.io.picm_mask_data_m
lsu_lsc_ctl.io.bus_read_data_m := bus_intf.io.bus_read_data_m
lsu_lsc_ctl.io.dma_lsc_ctl <> io.lsu_dma.dma_lsc_ctl
lsu_lsc_ctl.io.dec_tlu_mrac_ff := io.dec_tlu_mrac_ff
lsu_lsc_ctl.io.scan_mode := io.scan_mode
//Outputs
lsu_addr_d := lsu_lsc_ctl.io.lsu_addr_d
lsu_addr_m := lsu_lsc_ctl.io.lsu_addr_m
lsu_addr_r := lsu_lsc_ctl.io.lsu_addr_r
end_addr_d := lsu_lsc_ctl.io.lsu_addr_d
end_addr_m := lsu_lsc_ctl.io.lsu_addr_m
end_addr_r := lsu_lsc_ctl.io.lsu_addr_r
io.lsu_single_ecc_error_incr := lsu_lsc_ctl.io.lsu_single_ecc_error_incr
io.lsu_error_pkt_r <> lsu_lsc_ctl.io.lsu_error_pkt_r
io.lsu_fir_addr <> lsu_lsc_ctl.io.lsu_fir_addr
io.lsu_fir_error <> lsu_lsc_ctl.io.lsu_fir_error
// DCCM Control
//Inputs
dccm_ctl.io.clk_override := io.clk_override
dccm_ctl.io.ldst_dual_m := ldst_dual_m
dccm_ctl.io.ldst_dual_r := ldst_dual_r
dccm_ctl.io.lsu_c2_m_clk := clkdomain.io.lsu_c2_m_clk
dccm_ctl.io.lsu_c2_r_clk := clkdomain.io.lsu_c2_r_clk
dccm_ctl.io.lsu_free_c2_clk := clkdomain.io.lsu_free_c2_clk
dccm_ctl.io.lsu_c1_r_clk := clkdomain.io.lsu_c1_r_clk
dccm_ctl.io.lsu_store_c1_r_clk := clkdomain.io.lsu_store_c1_r_clk
dccm_ctl.io.lsu_pkt_d <> lsu_lsc_ctl.io.lsu_pkt_d
dccm_ctl.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
dccm_ctl.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
dccm_ctl.io.addr_in_dccm_d := lsu_lsc_ctl.io.addr_in_dccm_d
dccm_ctl.io.addr_in_dccm_m := lsu_lsc_ctl.io.addr_in_dccm_m
dccm_ctl.io.addr_in_dccm_r := lsu_lsc_ctl.io.addr_in_dccm_r
dccm_ctl.io.addr_in_pic_d := lsu_lsc_ctl.io.addr_in_pic_d
dccm_ctl.io.addr_in_pic_m := lsu_lsc_ctl.io.addr_in_pic_m
dccm_ctl.io.addr_in_pic_r := lsu_lsc_ctl.io.addr_in_pic_r
dccm_ctl.io.lsu_raw_fwd_lo_r := lsu_raw_fwd_lo_r
dccm_ctl.io.lsu_raw_fwd_hi_r := lsu_raw_fwd_hi_r
dccm_ctl.io.lsu_commit_r := lsu_lsc_ctl.io.lsu_commit_r
dccm_ctl.io.lsu_addr_d := lsu_addr_d
dccm_ctl.io.lsu_addr_m := lsu_addr_m(DCCM_BITS-1,0)
dccm_ctl.io.lsu_addr_r := lsu_addr_r
dccm_ctl.io.end_addr_d := end_addr_d(DCCM_BITS-1,0)
dccm_ctl.io.end_addr_m := end_addr_m(DCCM_BITS-1,0)
dccm_ctl.io.end_addr_r := end_addr_r(DCCM_BITS-1,0)
dccm_ctl.io.stbuf_reqvld_any := stbuf.io.stbuf_reqvld_any
dccm_ctl.io.stbuf_addr_any := stbuf.io.stbuf_addr_any
dccm_ctl.io.stbuf_data_any := stbuf.io.stbuf_data_any
dccm_ctl.io.stbuf_ecc_any := ecc.io.stbuf_ecc_any
dccm_ctl.io.stbuf_fwddata_hi_m := stbuf.io.stbuf_fwddata_hi_m
dccm_ctl.io.stbuf_fwddata_lo_m := stbuf.io.stbuf_fwddata_lo_m
dccm_ctl.io.stbuf_fwdbyteen_lo_m := stbuf.io.stbuf_fwdbyteen_lo_m
dccm_ctl.io.stbuf_fwdbyteen_hi_m := stbuf.io.stbuf_fwdbyteen_hi_m
dccm_ctl.io.lsu_double_ecc_error_r := ecc.io.lsu_double_ecc_error_r
dccm_ctl.io.single_ecc_error_hi_r := ecc.io.single_ecc_error_hi_r
dccm_ctl.io.single_ecc_error_lo_r := ecc.io.single_ecc_error_lo_r
dccm_ctl.io.sec_data_hi_r := ecc.io.sec_data_hi_r
dccm_ctl.io.sec_data_lo_r := ecc.io.sec_data_lo_r
dccm_ctl.io.sec_data_hi_r_ff := ecc.io.sec_data_hi_r_ff
dccm_ctl.io.sec_data_lo_r_ff := ecc.io.sec_data_lo_r_ff
dccm_ctl.io.sec_data_ecc_hi_r_ff := ecc.io.sec_data_ecc_hi_r_ff
dccm_ctl.io.sec_data_ecc_lo_r_ff := ecc.io.sec_data_ecc_lo_r_ff
dccm_ctl.io.lsu_double_ecc_error_m := ecc.io.lsu_double_ecc_error_m
dccm_ctl.io.sec_data_hi_m := ecc.io.sec_data_hi_m
dccm_ctl.io.sec_data_lo_m := ecc.io.sec_data_lo_m
dccm_ctl.io.store_data_m := lsu_lsc_ctl.io.store_data_m
dccm_ctl.io.dma_dccm_wen := dma_dccm_wen
dccm_ctl.io.dma_pic_wen := dma_pic_wen
dccm_ctl.io.dma_mem_tag_m := dma_mem_tag_m
dccm_ctl.io.dma_dccm_wdata_lo := dma_dccm_wdata_lo
dccm_ctl.io.dma_dccm_wdata_hi := dma_dccm_wdata_hi
dccm_ctl.io.dma_dccm_wdata_ecc_hi := ecc.io.dma_dccm_wdata_ecc_hi
dccm_ctl.io.dma_dccm_wdata_ecc_lo := ecc.io.dma_dccm_wdata_ecc_lo
dccm_ctl.io.scan_mode := io.scan_mode
//Outputs
io.lsu_dma.dma_dccm_ctl <> dccm_ctl.io.dma_dccm_ctl
io.dccm <> dccm_ctl.io.dccm
io.lsu_pic <> dccm_ctl.io.lsu_pic
//Store Buffer
//Inputs
stbuf.io.ldst_dual_d := ldst_dual_d
stbuf.io.ldst_dual_m := ldst_dual_m
stbuf.io.ldst_dual_r := ldst_dual_r
stbuf.io.lsu_stbuf_c1_clk := clkdomain.io.lsu_stbuf_c1_clk
stbuf.io.lsu_free_c2_clk := clkdomain.io.lsu_free_c2_clk
stbuf.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
stbuf.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
stbuf.io.store_stbuf_reqvld_r := store_stbuf_reqvld_r
stbuf.io.lsu_commit_r := lsu_lsc_ctl.io.lsu_commit_r
stbuf.io.dec_lsu_valid_raw_d := io.dec_lsu_valid_raw_d
stbuf.io.store_data_hi_r := dccm_ctl.io.store_data_hi_r
stbuf.io.store_data_lo_r := dccm_ctl.io.store_data_lo_r
stbuf.io.store_datafn_hi_r := dccm_ctl.io.store_datafn_hi_r
stbuf.io.store_datafn_lo_r := dccm_ctl.io.store_datafn_lo_r
stbuf.io.lsu_stbuf_commit_any := dccm_ctl.io.lsu_stbuf_commit_any
stbuf.io.lsu_addr_d := lsu_addr_d
stbuf.io.lsu_addr_m := lsu_lsc_ctl.io.lsu_addr_m
stbuf.io.lsu_addr_r := lsu_lsc_ctl.io.lsu_addr_r
stbuf.io.end_addr_d := end_addr_d
stbuf.io.end_addr_m := lsu_lsc_ctl.io.end_addr_m
stbuf.io.end_addr_r := lsu_lsc_ctl.io.end_addr_r
stbuf.io.addr_in_dccm_m := lsu_lsc_ctl.io.addr_in_dccm_m
stbuf.io.addr_in_dccm_r := lsu_lsc_ctl.io.addr_in_dccm_r
stbuf.io.lsu_cmpen_m := lsu_cmpen_m
stbuf.io.scan_mode := io.scan_mode
// ECC
//Inputs
ecc.io.clk_override := io.clk_override
ecc.io.lsu_c2_r_clk := clkdomain.io.lsu_c2_r_clk
ecc.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
ecc.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
ecc.io.stbuf_data_any := stbuf.io.stbuf_data_any
ecc.io.dec_tlu_core_ecc_disable := io.dec_tlu_core_ecc_disable
ecc.io.lsu_dccm_rden_r := dccm_ctl.io.lsu_dccm_rden_r
ecc.io.addr_in_dccm_r := lsu_lsc_ctl.io.addr_in_dccm_r
ecc.io.lsu_addr_r := lsu_addr_r
ecc.io.end_addr_r := end_addr_r
ecc.io.lsu_addr_m := lsu_addr_m
ecc.io.end_addr_m := end_addr_m
ecc.io.dccm_rdata_hi_r := dccm_ctl.io.dccm_rdata_hi_r
ecc.io.dccm_rdata_lo_r := dccm_ctl.io.dccm_rdata_lo_r
ecc.io.dccm_rdata_hi_m := dccm_ctl.io.dccm_rdata_hi_m
ecc.io.dccm_rdata_lo_m := dccm_ctl.io.dccm_rdata_lo_m
ecc.io.dccm_data_ecc_hi_r := dccm_ctl.io.dccm_data_ecc_hi_r
ecc.io.dccm_data_ecc_lo_r := dccm_ctl.io.dccm_data_ecc_lo_r
ecc.io.dccm_data_ecc_hi_m := dccm_ctl.io.dccm_data_ecc_hi_m
ecc.io.dccm_data_ecc_lo_m := dccm_ctl.io.dccm_data_ecc_lo_m
ecc.io.ld_single_ecc_error_r := dccm_ctl.io.ld_single_ecc_error_r
ecc.io.ld_single_ecc_error_r_ff := dccm_ctl.io.ld_single_ecc_error_r_ff
ecc.io.lsu_dccm_rden_m := dccm_ctl.io.lsu_dccm_rden_m
ecc.io.addr_in_dccm_m := lsu_lsc_ctl.io.addr_in_dccm_m
ecc.io.dma_dccm_wen := dma_dccm_wen
ecc.io.dma_dccm_wdata_lo := dma_dccm_wdata_lo
ecc.io.dma_dccm_wdata_hi := dma_dccm_wdata_hi
ecc.io.scan_mode := io.scan_mode
//Trigger
//Inputs
trigger.io.trigger_pkt_any <> io.trigger_pkt_any
trigger.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
trigger.io.lsu_addr_m := lsu_lsc_ctl.io.lsu_addr_m
trigger.io.store_data_m := lsu_lsc_ctl.io.store_data_m
//Outputs
io.lsu_trigger_match_m :=trigger.io.lsu_trigger_match_m
//Clock Domain
//Inputs
clkdomain.io.active_clk := io.active_clk
clkdomain.io.clk_override := io.clk_override
clkdomain.io.dec_tlu_force_halt := io.dec_tlu_force_halt
clkdomain.io.dma_dccm_req := io.lsu_dma.dma_lsc_ctl.dma_dccm_req
clkdomain.io.ldst_stbuf_reqvld_r := stbuf.io.ldst_stbuf_reqvld_r
clkdomain.io.stbuf_reqvld_any := stbuf.io.stbuf_reqvld_any
clkdomain.io.stbuf_reqvld_flushed_any := stbuf.io.stbuf_reqvld_flushed_any
clkdomain.io.lsu_busreq_r := bus_intf.io.lsu_busreq_r
clkdomain.io.lsu_bus_buffer_pend_any := bus_intf.io.lsu_bus_buffer_pend_any
clkdomain.io.lsu_bus_buffer_empty_any := bus_intf.io.lsu_bus_buffer_empty_any
clkdomain.io.lsu_stbuf_empty_any := stbuf.io.lsu_stbuf_empty_any
clkdomain.io.lsu_bus_clk_en := io.lsu_bus_clk_en
clkdomain.io.lsu_p := io.lsu_p
clkdomain.io.lsu_pkt_d <> lsu_lsc_ctl.io.lsu_pkt_d
clkdomain.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
clkdomain.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
clkdomain.io.scan_mode := io.scan_mode
//Bus Interface
//Inputs
bus_intf.io.scan_mode := io.scan_mode
io.lsu_dec.tlu_busbuff <> bus_intf.io.tlu_busbuff
bus_intf.io.clk_override := io.clk_override
bus_intf.io.lsu_c1_r_clk := clkdomain.io.lsu_c1_r_clk
bus_intf.io.lsu_c2_r_clk := clkdomain.io.lsu_c2_r_clk
bus_intf.io.lsu_busm_clken := lsu_busm_clken
bus_intf.io.lsu_bus_obuf_c1_clken := lsu_bus_obuf_c1_clken
bus_intf.io.lsu_bus_ibuf_c1_clk := clkdomain.io.lsu_bus_ibuf_c1_clk
bus_intf.io.lsu_bus_obuf_c1_clk := clkdomain.io.lsu_bus_obuf_c1_clk
bus_intf.io.lsu_bus_buf_c1_clk := clkdomain.io.lsu_bus_buf_c1_clk
bus_intf.io.lsu_free_c2_clk := clkdomain.io.lsu_free_c2_clk
bus_intf.io.active_clk := io.active_clk
bus_intf.io.lsu_busm_clk := clkdomain.io.lsu_busm_clk
bus_intf.io.dec_lsu_valid_raw_d := io.dec_lsu_valid_raw_d
bus_intf.io.lsu_busreq_m := lsu_busreq_m
bus_intf.io.ldst_dual_d := ldst_dual_d
bus_intf.io.ldst_dual_m := ldst_dual_m
bus_intf.io.ldst_dual_r := ldst_dual_r
bus_intf.io.lsu_addr_m := lsu_addr_m & Fill(32,lsu_lsc_ctl.io.addr_external_m & lsu_lsc_ctl.io.lsu_pkt_m.valid)
bus_intf.io.lsu_addr_r := lsu_addr_r & Fill(32,lsu_busreq_r)
bus_intf.io.end_addr_m := end_addr_m & Fill(32,lsu_lsc_ctl.io.addr_external_m & lsu_lsc_ctl.io.lsu_pkt_m.valid)
bus_intf.io.end_addr_r := end_addr_r & Fill(32,lsu_busreq_r)
bus_intf.io.store_data_r := dccm_ctl.io.store_data_r & Fill(32,lsu_busreq_r)
bus_intf.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
bus_intf.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
bus_intf.io.dec_tlu_force_halt := io.dec_tlu_force_halt
bus_intf.io.lsu_commit_r := lsu_lsc_ctl.io.lsu_commit_r
bus_intf.io.is_sideeffects_m := lsu_lsc_ctl.io.is_sideeffects_m
bus_intf.io.flush_m_up := flush_m_up
bus_intf.io.flush_r := flush_r
//Outputs
io.lsu_dec.dctl_busbuff <> bus_intf.io.dctl_busbuff
lsu_busreq_r := bus_intf.io.lsu_busreq_r
io.axi <> bus_intf.io.axi
bus_intf.io.lsu_bus_clk_en := io.lsu_bus_clk_en
withClock(clkdomain.io.lsu_c1_m_clk){dma_mem_tag_m := RegNext(dma_mem_tag_d,0.U)}
withClock(clkdomain.io.lsu_c2_r_clk){lsu_raw_fwd_hi_r := RegNext(lsu_raw_fwd_hi_m,0.U)}
withClock(clkdomain.io.lsu_c2_r_clk){lsu_raw_fwd_lo_r := RegNext(lsu_raw_fwd_lo_m,0.U)}
}
object lsu_main extends App {
println((new chisel3.stage.ChiselStage).emitVerilog(new lsu()))
}
//package lsu
//
//import lib._
//import chisel3._
//import chisel3.util._
//import include._
//import mem._
//
//class lsu extends Module with RequireAsyncReset with param with lib {
// val io = IO (new Bundle {
// val clk_override = Input(Bool())
// val lsu_dma = new lsu_dma
// val lsu_pic = new lsu_pic
// val lsu_exu = new lsu_exu
// val lsu_dec = new lsu_dec
// val dccm = Flipped(new mem_lsu)
// val lsu_tlu = new lsu_tlu
// val axi = new axi_channels(LSU_BUS_TAG)
//
// val dec_tlu_flush_lower_r = Input(Bool())
// val dec_tlu_i0_kill_writeb_r = Input(Bool())
// val dec_tlu_force_halt = Input(Bool())
//
// val dec_tlu_core_ecc_disable = Input(Bool())
//
// val dec_lsu_offset_d = Input(UInt(12.W))
// val lsu_p = Flipped(Valid(new lsu_pkt_t()))
// val trigger_pkt_any = Input(Vec(4, new trigger_pkt_t()))
//
// val dec_lsu_valid_raw_d = Input(Bool())
// val dec_tlu_mrac_ff = Input(UInt(32.W))
//
// //Outputs
// val lsu_result_m = Output(UInt(32.W))
// val lsu_result_corr_r = Output(UInt(32.W))
// val lsu_load_stall_any = Output(Bool())
// val lsu_store_stall_any = Output(Bool())
// val lsu_fastint_stall_any = Output(Bool())
// val lsu_idle_any = Output(Bool())
// val lsu_active = Output(Bool())
// val lsu_fir_addr = Output(UInt(31.W))
// val lsu_fir_error = Output(UInt(2.W))
// val lsu_single_ecc_error_incr = Output(Bool())
// val lsu_error_pkt_r = Valid(new lsu_error_pkt_t())
// val lsu_pmu_misaligned_m = Output(Bool())
// val lsu_trigger_match_m = Output(UInt(4.W))
//
// val lsu_bus_clk_en = Input(Bool())
//
// val scan_mode = Input(Bool())
// val active_clk = Input(Clock())
//
// })
// val dma_dccm_wdata = WireInit(0.U(64.W))
// val dma_dccm_wdata_lo = WireInit(0.U(32.W))
// val dma_dccm_wdata_hi = WireInit(0.U(32.W))
// val dma_mem_tag_m = WireInit(0.U(3.W))
// val lsu_raw_fwd_lo_r = WireInit(0.U(1.W))
// val lsu_raw_fwd_hi_r = WireInit(0.U(1.W))
// val lsu_busm_clken = WireInit(0.U(1.W))
// val lsu_bus_obuf_c1_clken = WireInit(0.U(1.W))
// val lsu_addr_d = WireInit(0.U(32.W))
// val lsu_addr_m = WireInit(0.U(32.W))
// val lsu_addr_r = WireInit(0.U(32.W))
// val end_addr_d = WireInit(0.U(32.W))
// val end_addr_m = WireInit(0.U(32.W))
// val end_addr_r = WireInit(0.U(32.W))
// val lsu_busreq_r = WireInit(Bool(),false.B)
//
// val lsu_lsc_ctl = Module(new lsu_lsc_ctl())
// io.lsu_result_m := lsu_lsc_ctl.io.lsu_result_m
// io.lsu_result_corr_r := lsu_lsc_ctl.io.lsu_result_corr_r
// val dccm_ctl = Module(new lsu_dccm_ctl())
// val stbuf = Module(new lsu_stbuf())
// val ecc = Module(new lsu_ecc())
// val trigger = Module(new lsu_trigger())
// val clkdomain = Module(new lsu_clkdomain())
// val bus_intf = Module(new lsu_bus_intf())
//
// val lsu_raw_fwd_lo_m = stbuf.io.stbuf_fwdbyteen_lo_m.orR
// val lsu_raw_fwd_hi_m = stbuf.io.stbuf_fwdbyteen_hi_m.orR
//
// // block stores in decode - for either bus or stbuf reasons
// io.lsu_store_stall_any := stbuf.io.lsu_stbuf_full_any | bus_intf.io.lsu_bus_buffer_full_any | dccm_ctl.io.ld_single_ecc_error_r_ff
// io.lsu_load_stall_any := bus_intf.io.lsu_bus_buffer_full_any | dccm_ctl.io.ld_single_ecc_error_r_ff
// io.lsu_fastint_stall_any := dccm_ctl.io.ld_single_ecc_error_r // Stall the fastint in decode-1 stage
//
// // Ready to accept dma trxns
// // There can't be any inpipe forwarding from non-dma packet to dma packet since they can be flushed so we can't have st in r when dma is in m
// val dma_mem_tag_d = io.lsu_dma.dma_mem_tag
// val ldst_nodma_mtor = lsu_lsc_ctl.io.lsu_pkt_m.valid & !lsu_lsc_ctl.io.lsu_pkt_m.bits.dma & (lsu_lsc_ctl.io.addr_in_dccm_m | lsu_lsc_ctl.io.addr_in_pic_m) & lsu_lsc_ctl.io.lsu_pkt_m.bits.store
// io.lsu_dma.dccm_ready := !(io.dec_lsu_valid_raw_d | ldst_nodma_mtor | dccm_ctl.io.ld_single_ecc_error_r_ff)
// val dma_dccm_wen = io.lsu_dma.dma_lsc_ctl.dma_dccm_req & io.lsu_dma.dma_lsc_ctl.dma_mem_write & lsu_lsc_ctl.io.addr_in_dccm_d & io.lsu_dma.dma_lsc_ctl.dma_mem_sz(1)
// val dma_pic_wen = io.lsu_dma.dma_lsc_ctl.dma_dccm_req & io.lsu_dma.dma_lsc_ctl.dma_mem_write & lsu_lsc_ctl.io.addr_in_pic_d
// dma_dccm_wdata := io.lsu_dma.dma_lsc_ctl.dma_mem_wdata >> Cat(io.lsu_dma.dma_lsc_ctl.dma_mem_addr(2,0), 0.U(3.W)) // Shift the dma data to lower bits to make it consistent to lsu stores
// dma_dccm_wdata_hi := dma_dccm_wdata(63,32)
// dma_dccm_wdata_lo := dma_dccm_wdata(31,0)
//
// val flush_m_up = io.dec_tlu_flush_lower_r
// val flush_r = io.dec_tlu_i0_kill_writeb_r
//
// // lsu halt idle. This is used for entering the halt mode. Also, DMA accesses are allowed during fence.
// // Indicates non-idle if there is a instruction valid in d-r or read/write buffers are non-empty since they can come with error
// // Store buffer now have only non-dma dccm stores
// // stbuf_empty not needed since it has only dccm stores
//
// io.lsu_idle_any := !((lsu_lsc_ctl.io.lsu_pkt_m.valid & !lsu_lsc_ctl.io.lsu_pkt_m.bits.dma) | (lsu_lsc_ctl.io.lsu_pkt_r.valid & !lsu_lsc_ctl.io.lsu_pkt_r.bits.dma)) & bus_intf.io.lsu_bus_buffer_empty_any
// io.lsu_active := (lsu_lsc_ctl.io.lsu_pkt_m.valid | lsu_lsc_ctl.io.lsu_pkt_r.valid | dccm_ctl.io.ld_single_ecc_error_r_ff) | !bus_intf.io.lsu_bus_buffer_empty_any // This includes DMA. Used for gating top clock
// // Instantiate the store buffer
// val store_stbuf_reqvld_r = lsu_lsc_ctl.io.lsu_pkt_r.valid & lsu_lsc_ctl.io.lsu_pkt_r.bits.store & lsu_lsc_ctl.io.addr_in_dccm_r & !flush_r & (!lsu_lsc_ctl.io.lsu_pkt_r.bits.dma | ((lsu_lsc_ctl.io.lsu_pkt_r.bits.by | lsu_lsc_ctl.io.lsu_pkt_r.bits.half) & !ecc.io.lsu_double_ecc_error_r))
// // Disable Forwarding for now
// val lsu_cmpen_m = lsu_lsc_ctl.io.lsu_pkt_m.valid & (lsu_lsc_ctl.io.lsu_pkt_m.bits.load | lsu_lsc_ctl.io.lsu_pkt_m.bits.store) & (lsu_lsc_ctl.io.addr_in_dccm_m | lsu_lsc_ctl.io.addr_in_pic_m)
// // Bus signals
// val lsu_busreq_m = lsu_lsc_ctl.io.lsu_pkt_m.valid & ((lsu_lsc_ctl.io.lsu_pkt_m.bits.load | lsu_lsc_ctl.io.lsu_pkt_m.bits.store) & lsu_lsc_ctl.io.addr_external_m) & !flush_m_up & !lsu_lsc_ctl.io.lsu_exc_m & !lsu_lsc_ctl.io.lsu_pkt_m.bits.fast_int
// // Dual signals
// val ldst_dual_d = lsu_addr_d(2) =/= end_addr_d(2)
// val ldst_dual_m = lsu_addr_m(2) =/= end_addr_m(2)
// val ldst_dual_r = lsu_addr_r(2) =/= end_addr_r(2)
// // PMU signals
// io.lsu_pmu_misaligned_m := lsu_lsc_ctl.io.lsu_pkt_m.valid & ((lsu_lsc_ctl.io.lsu_pkt_m.bits.half & lsu_lsc_ctl.io.lsu_addr_m(0)) | (lsu_lsc_ctl.io.lsu_pkt_m.bits.word & lsu_lsc_ctl.io.lsu_addr_m(1,0).orR))
// io.lsu_tlu.lsu_pmu_load_external_m := lsu_lsc_ctl.io.lsu_pkt_m.valid & lsu_lsc_ctl.io.lsu_pkt_m.bits.load & lsu_lsc_ctl.io.addr_external_m
// io.lsu_tlu.lsu_pmu_store_external_m := lsu_lsc_ctl.io.lsu_pkt_m.valid & lsu_lsc_ctl.io.lsu_pkt_m.bits.store & lsu_lsc_ctl.io.addr_external_m
//
// //LSU_LSC_Control
// //Inputs
// lsu_lsc_ctl.io.clk_override := io.clk_override
// lsu_lsc_ctl.io.lsu_c1_m_clk := clkdomain.io.lsu_c1_m_clk
// lsu_lsc_ctl.io.lsu_c1_r_clk := clkdomain.io.lsu_c1_r_clk
// lsu_lsc_ctl.io.lsu_c2_m_clk := clkdomain.io.lsu_c2_m_clk
// lsu_lsc_ctl.io.lsu_c2_r_clk := clkdomain.io.lsu_c2_r_clk
// lsu_lsc_ctl.io.lsu_store_c1_m_clk := clkdomain.io.lsu_store_c1_m_clk
// lsu_lsc_ctl.io.lsu_ld_data_r := dccm_ctl.io.lsu_ld_data_r
// lsu_lsc_ctl.io.lsu_ld_data_corr_r := dccm_ctl.io.lsu_ld_data_corr_r
// lsu_lsc_ctl.io.lsu_single_ecc_error_r := ecc.io.lsu_single_ecc_error_r
// lsu_lsc_ctl.io.lsu_double_ecc_error_r := ecc.io.lsu_double_ecc_error_r
// lsu_lsc_ctl.io.lsu_ld_data_m := dccm_ctl.io.lsu_ld_data_m
// lsu_lsc_ctl.io.lsu_single_ecc_error_m := ecc.io.lsu_single_ecc_error_m
// lsu_lsc_ctl.io.lsu_double_ecc_error_m := ecc.io.lsu_double_ecc_error_m
// lsu_lsc_ctl.io.flush_m_up := flush_m_up
// lsu_lsc_ctl.io.flush_r := flush_r
// lsu_lsc_ctl.io.ldst_dual_d := ldst_dual_d
// lsu_lsc_ctl.io.ldst_dual_m := ldst_dual_m
// lsu_lsc_ctl.io.ldst_dual_r := ldst_dual_r
// lsu_lsc_ctl.io.lsu_exu <> io.lsu_exu
// lsu_lsc_ctl.io.lsu_p <> io.lsu_p
// lsu_lsc_ctl.io.dec_lsu_valid_raw_d := io.dec_lsu_valid_raw_d
// lsu_lsc_ctl.io.dec_lsu_offset_d := io.dec_lsu_offset_d
// lsu_lsc_ctl.io.picm_mask_data_m := dccm_ctl.io.picm_mask_data_m
// lsu_lsc_ctl.io.bus_read_data_m := bus_intf.io.bus_read_data_m
// lsu_lsc_ctl.io.dma_lsc_ctl <> io.lsu_dma.dma_lsc_ctl
// lsu_lsc_ctl.io.dec_tlu_mrac_ff := io.dec_tlu_mrac_ff
// lsu_lsc_ctl.io.scan_mode := io.scan_mode
// //Outputs
// lsu_addr_d := lsu_lsc_ctl.io.lsu_addr_d
// lsu_addr_m := lsu_lsc_ctl.io.lsu_addr_m
// lsu_addr_r := lsu_lsc_ctl.io.lsu_addr_r
// end_addr_d := lsu_lsc_ctl.io.lsu_addr_d
// end_addr_m := lsu_lsc_ctl.io.lsu_addr_m
// end_addr_r := lsu_lsc_ctl.io.lsu_addr_r
// io.lsu_single_ecc_error_incr := lsu_lsc_ctl.io.lsu_single_ecc_error_incr
// io.lsu_error_pkt_r <> lsu_lsc_ctl.io.lsu_error_pkt_r
// io.lsu_fir_addr <> lsu_lsc_ctl.io.lsu_fir_addr
// io.lsu_fir_error <> lsu_lsc_ctl.io.lsu_fir_error
// // DCCM Control
// //Inputs
// dccm_ctl.io.clk_override := io.clk_override
// dccm_ctl.io.ldst_dual_m := ldst_dual_m
// dccm_ctl.io.ldst_dual_r := ldst_dual_r
// dccm_ctl.io.lsu_c2_m_clk := clkdomain.io.lsu_c2_m_clk
// dccm_ctl.io.lsu_c2_r_clk := clkdomain.io.lsu_c2_r_clk
// dccm_ctl.io.lsu_free_c2_clk := clkdomain.io.lsu_free_c2_clk
// dccm_ctl.io.lsu_c1_r_clk := clkdomain.io.lsu_c1_r_clk
// dccm_ctl.io.lsu_store_c1_r_clk := clkdomain.io.lsu_store_c1_r_clk
// dccm_ctl.io.lsu_pkt_d <> lsu_lsc_ctl.io.lsu_pkt_d
// dccm_ctl.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
// dccm_ctl.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
// dccm_ctl.io.addr_in_dccm_d := lsu_lsc_ctl.io.addr_in_dccm_d
// dccm_ctl.io.addr_in_dccm_m := lsu_lsc_ctl.io.addr_in_dccm_m
// dccm_ctl.io.addr_in_dccm_r := lsu_lsc_ctl.io.addr_in_dccm_r
// dccm_ctl.io.addr_in_pic_d := lsu_lsc_ctl.io.addr_in_pic_d
// dccm_ctl.io.addr_in_pic_m := lsu_lsc_ctl.io.addr_in_pic_m
// dccm_ctl.io.addr_in_pic_r := lsu_lsc_ctl.io.addr_in_pic_r
// dccm_ctl.io.lsu_raw_fwd_lo_r := lsu_raw_fwd_lo_r
// dccm_ctl.io.lsu_raw_fwd_hi_r := lsu_raw_fwd_hi_r
// dccm_ctl.io.lsu_commit_r := lsu_lsc_ctl.io.lsu_commit_r
// dccm_ctl.io.lsu_addr_d := lsu_addr_d
// dccm_ctl.io.lsu_addr_m := lsu_addr_m(DCCM_BITS-1,0)
// dccm_ctl.io.lsu_addr_r := lsu_addr_r
// dccm_ctl.io.end_addr_d := end_addr_d(DCCM_BITS-1,0)
// dccm_ctl.io.end_addr_m := end_addr_m(DCCM_BITS-1,0)
// dccm_ctl.io.end_addr_r := end_addr_r(DCCM_BITS-1,0)
// dccm_ctl.io.stbuf_reqvld_any := stbuf.io.stbuf_reqvld_any
// dccm_ctl.io.stbuf_addr_any := stbuf.io.stbuf_addr_any
// dccm_ctl.io.stbuf_data_any := stbuf.io.stbuf_data_any
// dccm_ctl.io.stbuf_ecc_any := ecc.io.stbuf_ecc_any
// dccm_ctl.io.stbuf_fwddata_hi_m := stbuf.io.stbuf_fwddata_hi_m
// dccm_ctl.io.stbuf_fwddata_lo_m := stbuf.io.stbuf_fwddata_lo_m
// dccm_ctl.io.stbuf_fwdbyteen_lo_m := stbuf.io.stbuf_fwdbyteen_lo_m
// dccm_ctl.io.stbuf_fwdbyteen_hi_m := stbuf.io.stbuf_fwdbyteen_hi_m
// dccm_ctl.io.lsu_double_ecc_error_r := ecc.io.lsu_double_ecc_error_r
// dccm_ctl.io.single_ecc_error_hi_r := ecc.io.single_ecc_error_hi_r
// dccm_ctl.io.single_ecc_error_lo_r := ecc.io.single_ecc_error_lo_r
// dccm_ctl.io.sec_data_hi_r := ecc.io.sec_data_hi_r
// dccm_ctl.io.sec_data_lo_r := ecc.io.sec_data_lo_r
// dccm_ctl.io.sec_data_hi_r_ff := ecc.io.sec_data_hi_r_ff
// dccm_ctl.io.sec_data_lo_r_ff := ecc.io.sec_data_lo_r_ff
// dccm_ctl.io.sec_data_ecc_hi_r_ff := ecc.io.sec_data_ecc_hi_r_ff
// dccm_ctl.io.sec_data_ecc_lo_r_ff := ecc.io.sec_data_ecc_lo_r_ff
// dccm_ctl.io.lsu_double_ecc_error_m := ecc.io.lsu_double_ecc_error_m
// dccm_ctl.io.sec_data_hi_m := ecc.io.sec_data_hi_m
// dccm_ctl.io.sec_data_lo_m := ecc.io.sec_data_lo_m
// dccm_ctl.io.store_data_m := lsu_lsc_ctl.io.store_data_m
// dccm_ctl.io.dma_dccm_wen := dma_dccm_wen
// dccm_ctl.io.dma_pic_wen := dma_pic_wen
// dccm_ctl.io.dma_mem_tag_m := dma_mem_tag_m
// dccm_ctl.io.dma_dccm_wdata_lo := dma_dccm_wdata_lo
// dccm_ctl.io.dma_dccm_wdata_hi := dma_dccm_wdata_hi
// dccm_ctl.io.dma_dccm_wdata_ecc_hi := ecc.io.dma_dccm_wdata_ecc_hi
// dccm_ctl.io.dma_dccm_wdata_ecc_lo := ecc.io.dma_dccm_wdata_ecc_lo
// dccm_ctl.io.scan_mode := io.scan_mode
// //Outputs
// io.lsu_dma.dma_dccm_ctl <> dccm_ctl.io.dma_dccm_ctl
// io.dccm <> dccm_ctl.io.dccm
// io.lsu_pic <> dccm_ctl.io.lsu_pic
// //Store Buffer
// //Inputs
// stbuf.io.ldst_dual_d := ldst_dual_d
// stbuf.io.ldst_dual_m := ldst_dual_m
// stbuf.io.ldst_dual_r := ldst_dual_r
// stbuf.io.lsu_stbuf_c1_clk := clkdomain.io.lsu_stbuf_c1_clk
// stbuf.io.lsu_free_c2_clk := clkdomain.io.lsu_free_c2_clk
// stbuf.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
// stbuf.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
// stbuf.io.store_stbuf_reqvld_r := store_stbuf_reqvld_r
// stbuf.io.lsu_commit_r := lsu_lsc_ctl.io.lsu_commit_r
// stbuf.io.dec_lsu_valid_raw_d := io.dec_lsu_valid_raw_d
// stbuf.io.store_data_hi_r := dccm_ctl.io.store_data_hi_r
// stbuf.io.store_data_lo_r := dccm_ctl.io.store_data_lo_r
// stbuf.io.store_datafn_hi_r := dccm_ctl.io.store_datafn_hi_r
// stbuf.io.store_datafn_lo_r := dccm_ctl.io.store_datafn_lo_r
// stbuf.io.lsu_stbuf_commit_any := dccm_ctl.io.lsu_stbuf_commit_any
// stbuf.io.lsu_addr_d := lsu_addr_d
// stbuf.io.lsu_addr_m := lsu_lsc_ctl.io.lsu_addr_m
// stbuf.io.lsu_addr_r := lsu_lsc_ctl.io.lsu_addr_r
// stbuf.io.end_addr_d := end_addr_d
// stbuf.io.end_addr_m := lsu_lsc_ctl.io.end_addr_m
// stbuf.io.end_addr_r := lsu_lsc_ctl.io.end_addr_r
// stbuf.io.addr_in_dccm_m := lsu_lsc_ctl.io.addr_in_dccm_m
// stbuf.io.addr_in_dccm_r := lsu_lsc_ctl.io.addr_in_dccm_r
// stbuf.io.lsu_cmpen_m := lsu_cmpen_m
// stbuf.io.scan_mode := io.scan_mode
//
// // ECC
// //Inputs
// ecc.io.clk_override := io.clk_override
// ecc.io.lsu_c2_r_clk := clkdomain.io.lsu_c2_r_clk
// ecc.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
// ecc.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
// ecc.io.stbuf_data_any := stbuf.io.stbuf_data_any
// ecc.io.dec_tlu_core_ecc_disable := io.dec_tlu_core_ecc_disable
// ecc.io.lsu_dccm_rden_r := dccm_ctl.io.lsu_dccm_rden_r
// ecc.io.addr_in_dccm_r := lsu_lsc_ctl.io.addr_in_dccm_r
// ecc.io.lsu_addr_r := lsu_addr_r
// ecc.io.end_addr_r := end_addr_r
// ecc.io.lsu_addr_m := lsu_addr_m
// ecc.io.end_addr_m := end_addr_m
// ecc.io.dccm_rdata_hi_r := dccm_ctl.io.dccm_rdata_hi_r
// ecc.io.dccm_rdata_lo_r := dccm_ctl.io.dccm_rdata_lo_r
// ecc.io.dccm_rdata_hi_m := dccm_ctl.io.dccm_rdata_hi_m
// ecc.io.dccm_rdata_lo_m := dccm_ctl.io.dccm_rdata_lo_m
// ecc.io.dccm_data_ecc_hi_r := dccm_ctl.io.dccm_data_ecc_hi_r
// ecc.io.dccm_data_ecc_lo_r := dccm_ctl.io.dccm_data_ecc_lo_r
// ecc.io.dccm_data_ecc_hi_m := dccm_ctl.io.dccm_data_ecc_hi_m
// ecc.io.dccm_data_ecc_lo_m := dccm_ctl.io.dccm_data_ecc_lo_m
// ecc.io.ld_single_ecc_error_r := dccm_ctl.io.ld_single_ecc_error_r
// ecc.io.ld_single_ecc_error_r_ff := dccm_ctl.io.ld_single_ecc_error_r_ff
// ecc.io.lsu_dccm_rden_m := dccm_ctl.io.lsu_dccm_rden_m
// ecc.io.addr_in_dccm_m := lsu_lsc_ctl.io.addr_in_dccm_m
// ecc.io.dma_dccm_wen := dma_dccm_wen
// ecc.io.dma_dccm_wdata_lo := dma_dccm_wdata_lo
// ecc.io.dma_dccm_wdata_hi := dma_dccm_wdata_hi
// ecc.io.scan_mode := io.scan_mode
//
// //Trigger
// //Inputs
// trigger.io.trigger_pkt_any <> io.trigger_pkt_any
// trigger.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
// trigger.io.lsu_addr_m := lsu_lsc_ctl.io.lsu_addr_m
// trigger.io.store_data_m := lsu_lsc_ctl.io.store_data_m
// //Outputs
// io.lsu_trigger_match_m :=trigger.io.lsu_trigger_match_m
//
// //Clock Domain
// //Inputs
// clkdomain.io.active_clk := io.active_clk
// clkdomain.io.clk_override := io.clk_override
// clkdomain.io.dec_tlu_force_halt := io.dec_tlu_force_halt
// clkdomain.io.dma_dccm_req := io.lsu_dma.dma_lsc_ctl.dma_dccm_req
// clkdomain.io.ldst_stbuf_reqvld_r := stbuf.io.ldst_stbuf_reqvld_r
// clkdomain.io.stbuf_reqvld_any := stbuf.io.stbuf_reqvld_any
// clkdomain.io.stbuf_reqvld_flushed_any := stbuf.io.stbuf_reqvld_flushed_any
// clkdomain.io.lsu_busreq_r := bus_intf.io.lsu_busreq_r
// clkdomain.io.lsu_bus_buffer_pend_any := bus_intf.io.lsu_bus_buffer_pend_any
// clkdomain.io.lsu_bus_buffer_empty_any := bus_intf.io.lsu_bus_buffer_empty_any
// clkdomain.io.lsu_stbuf_empty_any := stbuf.io.lsu_stbuf_empty_any
// clkdomain.io.lsu_bus_clk_en := io.lsu_bus_clk_en
// clkdomain.io.lsu_p := io.lsu_p
// clkdomain.io.lsu_pkt_d <> lsu_lsc_ctl.io.lsu_pkt_d
// clkdomain.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
// clkdomain.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
// clkdomain.io.scan_mode := io.scan_mode
//
// //Bus Interface
// //Inputs
// bus_intf.io.scan_mode := io.scan_mode
// io.lsu_dec.tlu_busbuff <> bus_intf.io.tlu_busbuff
// bus_intf.io.clk_override := io.clk_override
// bus_intf.io.lsu_c1_r_clk := clkdomain.io.lsu_c1_r_clk
// bus_intf.io.lsu_c2_r_clk := clkdomain.io.lsu_c2_r_clk
// bus_intf.io.lsu_busm_clken := lsu_busm_clken
// bus_intf.io.lsu_bus_obuf_c1_clken := lsu_bus_obuf_c1_clken
// bus_intf.io.lsu_bus_ibuf_c1_clk := clkdomain.io.lsu_bus_ibuf_c1_clk
// bus_intf.io.lsu_bus_obuf_c1_clk := clkdomain.io.lsu_bus_obuf_c1_clk
// bus_intf.io.lsu_bus_buf_c1_clk := clkdomain.io.lsu_bus_buf_c1_clk
// bus_intf.io.lsu_free_c2_clk := clkdomain.io.lsu_free_c2_clk
// bus_intf.io.active_clk := io.active_clk
// bus_intf.io.lsu_busm_clk := clkdomain.io.lsu_busm_clk
// bus_intf.io.dec_lsu_valid_raw_d := io.dec_lsu_valid_raw_d
// bus_intf.io.lsu_busreq_m := lsu_busreq_m
// bus_intf.io.ldst_dual_d := ldst_dual_d
// bus_intf.io.ldst_dual_m := ldst_dual_m
// bus_intf.io.ldst_dual_r := ldst_dual_r
// bus_intf.io.lsu_addr_m := lsu_addr_m & Fill(32,lsu_lsc_ctl.io.addr_external_m & lsu_lsc_ctl.io.lsu_pkt_m.valid)
// bus_intf.io.lsu_addr_r := lsu_addr_r & Fill(32,lsu_busreq_r)
// bus_intf.io.end_addr_m := end_addr_m & Fill(32,lsu_lsc_ctl.io.addr_external_m & lsu_lsc_ctl.io.lsu_pkt_m.valid)
// bus_intf.io.end_addr_r := end_addr_r & Fill(32,lsu_busreq_r)
// bus_intf.io.store_data_r := dccm_ctl.io.store_data_r & Fill(32,lsu_busreq_r)
// bus_intf.io.lsu_pkt_m <> lsu_lsc_ctl.io.lsu_pkt_m
// bus_intf.io.lsu_pkt_r <> lsu_lsc_ctl.io.lsu_pkt_r
// bus_intf.io.dec_tlu_force_halt := io.dec_tlu_force_halt
// bus_intf.io.lsu_commit_r := lsu_lsc_ctl.io.lsu_commit_r
// bus_intf.io.is_sideeffects_m := lsu_lsc_ctl.io.is_sideeffects_m
// bus_intf.io.flush_m_up := flush_m_up
// bus_intf.io.flush_r := flush_r
// //Outputs
// io.lsu_dec.dctl_busbuff <> bus_intf.io.dctl_busbuff
// lsu_busreq_r := bus_intf.io.lsu_busreq_r
// io.axi <> bus_intf.io.axi
// bus_intf.io.lsu_bus_clk_en := io.lsu_bus_clk_en
//
// withClock(clkdomain.io.lsu_c1_m_clk){dma_mem_tag_m := RegNext(dma_mem_tag_d,0.U)}
// withClock(clkdomain.io.lsu_c2_r_clk){lsu_raw_fwd_hi_r := RegNext(lsu_raw_fwd_hi_m,0.U)}
// withClock(clkdomain.io.lsu_c2_r_clk){lsu_raw_fwd_lo_r := RegNext(lsu_raw_fwd_lo_m,0.U)}
//
//}
//object lsu_main extends App {
// println((new chisel3.stage.ChiselStage).emitVerilog(new lsu()))
//}

File diff suppressed because it is too large Load Diff

View File

@ -1,205 +1,205 @@
package lsu
import chisel3._
import chisel3.util._
import lib._
import include._
class lsu_bus_intf extends Module with RequireAsyncReset with lib {
val io = IO (new Bundle {
val scan_mode = Input(Bool())
val clk_override = Input(Bool())
val tlu_busbuff = new tlu_busbuff()
val lsu_bus_obuf_c1_clken = Input(Bool())// obuf clock enable
val lsu_busm_clken = Input(Bool())
val lsu_c1_r_clk = Input(Clock())
val lsu_c2_r_clk = Input(Clock())
val lsu_bus_ibuf_c1_clk = Input(Clock())
val lsu_bus_obuf_c1_clk = Input(Clock())
val lsu_bus_buf_c1_clk = Input(Clock())
val lsu_free_c2_clk = Input(Clock())
val active_clk = Input(Clock())
val lsu_busm_clk = Input(Clock())
val axi = new axi_channels(LSU_BUS_TAG)
val dec_lsu_valid_raw_d = Input(Bool())
val lsu_busreq_m = Input(Bool())
val lsu_pkt_m = Flipped(Valid(new lsu_pkt_t()))
val lsu_pkt_r = Flipped(Valid(new lsu_pkt_t()))
val lsu_addr_m = Input(UInt(32.W))
val lsu_addr_r = Input(UInt(32.W))
val end_addr_m = Input(UInt(32.W))
val end_addr_r = Input(UInt(32.W))
val ldst_dual_d = Input(Bool())
val ldst_dual_m = Input(Bool())
val ldst_dual_r = Input(Bool())
val store_data_r = Input(UInt(32.W))
val dec_tlu_force_halt = Input(Bool())
val lsu_commit_r = Input(Bool())
val is_sideeffects_m = Input(Bool())
val flush_m_up = Input(Bool())
val flush_r = Input(Bool())
val lsu_busreq_r = Output(Bool())
val lsu_bus_buffer_pend_any = Output(Bool())
val lsu_bus_buffer_full_any = Output(Bool())
val lsu_bus_buffer_empty_any = Output(Bool())
//val lsu_bus_idle_any = Output(Bool())
val bus_read_data_m = Output(UInt(32.W))
val dctl_busbuff = new dctl_busbuff()
val lsu_bus_clk_en = Input(Bool())
})
val lsu_bus_clk_en_q = WireInit(Bool(), init = false.B)
val ldst_byteen_m = WireInit(UInt(4.W), init = 0.U)
val ldst_byteen_r = WireInit(UInt(4.W), init = 0.U)
val ldst_byteen_ext_m = WireInit(UInt(8.W), init = 0.U)
val ldst_byteen_ext_r = WireInit(UInt(8.W), init = 0.U)
val ldst_byteen_hi_m = WireInit(UInt(4.W), init = 0.U)
val ldst_byteen_hi_r = WireInit(UInt(4.W), init = 0.U)
val ldst_byteen_lo_m = WireInit(UInt(4.W), init = 0.U)
val ldst_byteen_lo_r = WireInit(UInt(4.W), init = 0.U)
val is_sideeffects_r = WireInit(Bool(), init = false.B)
val store_data_ext_r = WireInit(UInt(64.W), init = 0.U)
val store_data_hi_r = WireInit(UInt(32.W), init = 0.U)
val store_data_lo_r = WireInit(UInt(32.W), init = 0.U)
val addr_match_dw_lo_r_m = WireInit(Bool(), init = false.B)
val addr_match_word_lo_r_m = WireInit(Bool(), init = false.B)
val no_word_merge_r = WireInit(Bool(), init = false.B)
val no_dword_merge_r = WireInit(Bool(), init = false.B)
val ld_addr_rhit_lo_lo = WireInit(Bool(), init = false.B)
val ld_addr_rhit_hi_lo = WireInit(Bool(), init = false.B)
val ld_addr_rhit_lo_hi = WireInit(Bool(), init = false.B)
val ld_addr_rhit_hi_hi = WireInit(Bool(), init = false.B)
val ld_byte_rhit_lo_lo = WireInit(UInt(4.W), init = 0.U)
val ld_byte_rhit_hi_lo = WireInit(UInt(4.W), init = 0.U)
val ld_byte_rhit_lo_hi = WireInit(UInt(4.W), init = 0.U)
val ld_byte_rhit_hi_hi = WireInit(UInt(4.W), init = 0.U)
val ld_byte_hit_lo = WireInit(UInt(4.W), init = 0.U)
val ld_byte_rhit_lo = WireInit(UInt(4.W), init = 0.U)
val ld_byte_hit_hi = WireInit(UInt(4.W), init = 0.U)
val ld_byte_rhit_hi = WireInit(UInt(4.W), init = 0.U)
val ld_fwddata_rpipe_lo = WireInit(UInt(32.W), init = 0.U)
val ld_fwddata_rpipe_hi = WireInit(UInt(32.W), init = 0.U)
val ld_byte_hit_buf_lo = WireInit(UInt(4.W), init = 0.U)
val ld_byte_hit_buf_hi = WireInit(UInt(4.W), init = 0.U)
val ld_fwddata_buf_lo = WireInit(UInt(32.W), init = 0.U)
val ld_fwddata_buf_hi = WireInit(UInt(32.W), init = 0.U)
val ld_fwddata_lo = WireInit(UInt(64.W), init = 0.U)
val ld_fwddata_hi = WireInit(UInt(64.W), init = 0.U)
val ld_fwddata_m = WireInit(UInt(64.W), init = 0.U)
val ld_full_hit_hi_m = WireInit(Bool(), init = true.B)
val ld_full_hit_lo_m = WireInit(Bool(), init = true.B)
val ld_full_hit_m = WireInit(Bool(), init = false.B)
val bus_buffer = Module(new lsu_bus_buffer)
bus_buffer.io.scan_mode := io.scan_mode
io.tlu_busbuff <> bus_buffer.io.tlu_busbuff
bus_buffer.io.clk_override := io.clk_override
bus_buffer.io.lsu_bus_obuf_c1_clken := io.lsu_bus_obuf_c1_clken
bus_buffer.io.lsu_busm_clken := io.lsu_busm_clken
bus_buffer.io.dec_tlu_force_halt := io.dec_tlu_force_halt
bus_buffer.io.lsu_c2_r_clk := io.lsu_c2_r_clk
bus_buffer.io.lsu_bus_ibuf_c1_clk := io.lsu_bus_ibuf_c1_clk
bus_buffer.io.lsu_bus_obuf_c1_clk := io.lsu_bus_obuf_c1_clk
bus_buffer.io.lsu_bus_buf_c1_clk := io.lsu_bus_buf_c1_clk
bus_buffer.io.lsu_free_c2_clk := io.lsu_free_c2_clk
bus_buffer.io.lsu_busm_clk := io.lsu_busm_clk
bus_buffer.io.dec_lsu_valid_raw_d := io.dec_lsu_valid_raw_d
//
bus_buffer.io.lsu_pkt_m <> io.lsu_pkt_m
bus_buffer.io.lsu_pkt_r <> io.lsu_pkt_r
//
bus_buffer.io.lsu_addr_m := io.lsu_addr_m
bus_buffer.io.end_addr_m := io.end_addr_m
bus_buffer.io.lsu_addr_r := io.lsu_addr_r
bus_buffer.io.end_addr_r := io.end_addr_r
bus_buffer.io.store_data_r := io.store_data_r
bus_buffer.io.lsu_busreq_m := io.lsu_busreq_m
bus_buffer.io.flush_m_up := io.flush_m_up
bus_buffer.io.flush_r := io.flush_r
bus_buffer.io.lsu_commit_r := io.lsu_commit_r
bus_buffer.io.lsu_axi <> io.axi
bus_buffer.io.lsu_bus_clk_en := io.lsu_bus_clk_en
io.lsu_busreq_r := bus_buffer.io.lsu_busreq_r
io.lsu_bus_buffer_pend_any := bus_buffer.io.lsu_bus_buffer_pend_any
io.lsu_bus_buffer_full_any := bus_buffer.io.lsu_bus_buffer_full_any
io.lsu_bus_buffer_empty_any := bus_buffer.io.lsu_bus_buffer_empty_any
//io.lsu_bus_idle_any := bus_buffer.io.lsu_bus_idle_any
ld_byte_hit_buf_lo := bus_buffer.io.ld_byte_hit_buf_lo
ld_byte_hit_buf_hi := bus_buffer.io.ld_byte_hit_buf_hi
ld_fwddata_buf_lo := bus_buffer.io.ld_fwddata_buf_lo
ld_fwddata_buf_hi := bus_buffer.io.ld_fwddata_buf_hi
io.dctl_busbuff <> bus_buffer.io.dctl_busbuff
bus_buffer.io.no_word_merge_r := no_word_merge_r
bus_buffer.io.no_dword_merge_r := no_dword_merge_r
bus_buffer.io.is_sideeffects_r := is_sideeffects_r
bus_buffer.io.ldst_dual_d := io.ldst_dual_d
bus_buffer.io.ldst_dual_m := io.ldst_dual_m
bus_buffer.io.ldst_dual_r := io.ldst_dual_r
bus_buffer.io.ldst_byteen_ext_m := ldst_byteen_ext_m
bus_buffer.io.ld_full_hit_m := ld_full_hit_m
bus_buffer.io.lsu_bus_clk_en_q := lsu_bus_clk_en_q
ldst_byteen_m := Mux1H(Seq(io.lsu_pkt_m.bits.word.asBool -> 15.U(4.W), io.lsu_pkt_m.bits.half.asBool -> 3.U(4.W), io.lsu_pkt_m.bits.by.asBool -> 1.U(4.W)))
addr_match_dw_lo_r_m := (io.lsu_addr_r(31,3) === io.lsu_addr_m(31,3))
addr_match_word_lo_r_m := addr_match_dw_lo_r_m & !(io.lsu_addr_r(2)^io.lsu_addr_m(2))
no_word_merge_r := io.lsu_busreq_r & !io.ldst_dual_r & io.lsu_busreq_m & (io.lsu_pkt_m.bits.load | !addr_match_word_lo_r_m)
no_dword_merge_r := io.lsu_busreq_r & !io.ldst_dual_r & io.lsu_busreq_m & (io.lsu_pkt_m.bits.load | !addr_match_dw_lo_r_m)
ldst_byteen_ext_m := ldst_byteen_m(3,0) << io.lsu_addr_m(1,0)
ldst_byteen_ext_r := ldst_byteen_r(3,0) << io.lsu_addr_r(1,0)
store_data_ext_r := io.store_data_r(31,0) << Cat(io.lsu_addr_r(1,0),0.U(3.W))
ldst_byteen_hi_m := ldst_byteen_ext_m(7,4)
ldst_byteen_lo_m := ldst_byteen_ext_m(3,0)
ldst_byteen_hi_r := ldst_byteen_ext_r(7,4)
ldst_byteen_lo_r := ldst_byteen_ext_r(3,0)
store_data_hi_r := store_data_ext_r(63,32)
store_data_lo_r := store_data_ext_r(31,0)
ld_addr_rhit_lo_lo := (io.lsu_addr_m(31,2) === io.lsu_addr_r(31,2)) & io.lsu_pkt_r.valid & io.lsu_pkt_r.bits.store & io.lsu_busreq_m
ld_addr_rhit_lo_hi := (io.end_addr_m(31,2) === io.lsu_addr_r(31,2)) & io.lsu_pkt_r.valid & io.lsu_pkt_r.bits.store & io.lsu_busreq_m
ld_addr_rhit_hi_lo := (io.lsu_addr_m(31,2) === io.end_addr_r(31,2)) & io.lsu_pkt_r.valid & io.lsu_pkt_r.bits.store & io.lsu_busreq_m
ld_addr_rhit_hi_hi := (io.end_addr_m(31,2) === io.end_addr_r(31,2)) & io.lsu_pkt_r.valid & io.lsu_pkt_r.bits.store & io.lsu_busreq_m
ld_byte_rhit_lo_lo := (0 until 4).map(i =>(ld_addr_rhit_lo_lo & ldst_byteen_lo_r(i) & ldst_byteen_lo_m(i)).asUInt).reverse.reduce(Cat(_,_))
ld_byte_rhit_lo_hi := (0 until 4).map(i =>(ld_addr_rhit_lo_hi & ldst_byteen_lo_r(i) & ldst_byteen_hi_m(i)).asUInt).reverse.reduce(Cat(_,_))
ld_byte_rhit_hi_lo := (0 until 4).map(i =>(ld_addr_rhit_hi_lo & ldst_byteen_hi_r(i) & ldst_byteen_lo_m(i)).asUInt).reverse.reduce(Cat(_,_))
ld_byte_rhit_hi_hi := (0 until 4).map(i =>(ld_addr_rhit_hi_hi & ldst_byteen_hi_r(i) & ldst_byteen_hi_m(i)).asUInt).reverse.reduce(Cat(_,_))
ld_byte_hit_lo := (0 until 4).map(i =>(ld_byte_rhit_lo_lo(i) | ld_byte_rhit_hi_lo(i) | ld_byte_hit_buf_lo(i)).asUInt).reverse.reduce(Cat(_,_))
ld_byte_hit_hi := (0 until 4).map(i =>(ld_byte_rhit_lo_hi(i) | ld_byte_rhit_hi_hi(i) | ld_byte_hit_buf_hi(i)).asUInt).reverse.reduce(Cat(_,_))
ld_byte_rhit_lo := (0 until 4).map(i =>(ld_byte_rhit_lo_lo(i) | ld_byte_rhit_hi_lo(i) ).asUInt).reverse.reduce(Cat(_,_))
ld_byte_rhit_hi := (0 until 4).map(i =>(ld_byte_rhit_lo_hi(i) | ld_byte_rhit_hi_hi(i) ).asUInt).reverse.reduce(Cat(_,_))
ld_fwddata_rpipe_lo := (0 until 4).map(i =>(Mux1H(Seq(ld_byte_rhit_lo_lo(i) -> store_data_lo_r((8*i)+7,(8*i)), ld_byte_rhit_hi_lo(i) -> store_data_hi_r((8*i)+7,(8*i))))).asUInt).reverse.reduce(Cat(_,_))
ld_fwddata_rpipe_hi := (0 until 4).map(i =>(Mux1H(Seq(ld_byte_rhit_lo_hi(i) -> store_data_lo_r((8*i)+7,(8*i)), ld_byte_rhit_hi_hi(i) -> store_data_hi_r((8*i)+7,(8*i))))).asUInt).reverse.reduce(Cat(_,_))
ld_fwddata_lo := (0 until 4).map(i =>(Mux(ld_byte_rhit_lo(i), ld_fwddata_rpipe_lo((8*i)+7,(8*i)), ld_fwddata_buf_lo((8*i)+7,(8*i)))).asUInt).reverse.reduce(Cat(_,_))
ld_fwddata_hi := (0 until 4).map(i =>(Mux(ld_byte_rhit_hi(i), ld_fwddata_rpipe_hi((8*i)+7,(8*i)), ld_fwddata_buf_hi((8*i)+7,(8*i)))).asUInt).reverse.reduce(Cat(_,_))
ld_full_hit_lo_m := (0 until 4).map(i =>((ld_byte_hit_lo(i) | !ldst_byteen_lo_m(i))).asUInt).reduce(_&_)
ld_full_hit_hi_m := (0 until 4).map(i =>((ld_byte_hit_hi(i) | !ldst_byteen_hi_m(i))).asUInt).reduce(_&_)
ld_full_hit_m := ld_full_hit_lo_m & ld_full_hit_hi_m & io.lsu_busreq_m & io.lsu_pkt_m.bits.load & !io.is_sideeffects_m
ld_fwddata_m := Cat(ld_fwddata_hi(31,0), ld_fwddata_lo(31,0)) >> (8.U*io.lsu_addr_m(1,0))
io.bus_read_data_m := ld_fwddata_m(31,0)
withClock(io.active_clk) {
lsu_bus_clk_en_q := RegNext(io.lsu_bus_clk_en, init = 0.U)
}
withClock(io.lsu_c1_r_clk) {
is_sideeffects_r := RegNext(io.is_sideeffects_m, init = 0.U)
ldst_byteen_r := RegNext(ldst_byteen_m, init = 0.U(4.W))
}
}
object bus_intf extends App {
println((new chisel3.stage.ChiselStage).emitVerilog(new lsu_bus_intf()))
}
//package lsu
//import chisel3._
//import chisel3.util._
//import lib._
//import include._
//
//class lsu_bus_intf extends Module with RequireAsyncReset with lib {
// val io = IO (new Bundle {
// val scan_mode = Input(Bool())
// val clk_override = Input(Bool())
// val tlu_busbuff = new tlu_busbuff()
// val lsu_bus_obuf_c1_clken = Input(Bool())// obuf clock enable
// val lsu_busm_clken = Input(Bool())
// val lsu_c1_r_clk = Input(Clock())
// val lsu_c2_r_clk = Input(Clock())
// val lsu_bus_ibuf_c1_clk = Input(Clock())
// val lsu_bus_obuf_c1_clk = Input(Clock())
// val lsu_bus_buf_c1_clk = Input(Clock())
// val lsu_free_c2_clk = Input(Clock())
// val active_clk = Input(Clock())
// val lsu_busm_clk = Input(Clock())
// val axi = new axi_channels(LSU_BUS_TAG)
// val dec_lsu_valid_raw_d = Input(Bool())
// val lsu_busreq_m = Input(Bool())
//
// val lsu_pkt_m = Flipped(Valid(new lsu_pkt_t()))
// val lsu_pkt_r = Flipped(Valid(new lsu_pkt_t()))
//
// val lsu_addr_m = Input(UInt(32.W))
// val lsu_addr_r = Input(UInt(32.W))
//
// val end_addr_m = Input(UInt(32.W))
// val end_addr_r = Input(UInt(32.W))
// val ldst_dual_d = Input(Bool())
// val ldst_dual_m = Input(Bool())
// val ldst_dual_r = Input(Bool())
//
// val store_data_r = Input(UInt(32.W))
// val dec_tlu_force_halt = Input(Bool())
//
// val lsu_commit_r = Input(Bool())
// val is_sideeffects_m = Input(Bool())
// val flush_m_up = Input(Bool())
// val flush_r = Input(Bool())
//
// val lsu_busreq_r = Output(Bool())
// val lsu_bus_buffer_pend_any = Output(Bool())
// val lsu_bus_buffer_full_any = Output(Bool())
// val lsu_bus_buffer_empty_any = Output(Bool())
// //val lsu_bus_idle_any = Output(Bool())
// val bus_read_data_m = Output(UInt(32.W))
//
// val dctl_busbuff = new dctl_busbuff()
//
// val lsu_bus_clk_en = Input(Bool())
// })
//
// val lsu_bus_clk_en_q = WireInit(Bool(), init = false.B)
// val ldst_byteen_m = WireInit(UInt(4.W), init = 0.U)
// val ldst_byteen_r = WireInit(UInt(4.W), init = 0.U)
// val ldst_byteen_ext_m = WireInit(UInt(8.W), init = 0.U)
// val ldst_byteen_ext_r = WireInit(UInt(8.W), init = 0.U)
// val ldst_byteen_hi_m = WireInit(UInt(4.W), init = 0.U)
// val ldst_byteen_hi_r = WireInit(UInt(4.W), init = 0.U)
// val ldst_byteen_lo_m = WireInit(UInt(4.W), init = 0.U)
// val ldst_byteen_lo_r = WireInit(UInt(4.W), init = 0.U)
// val is_sideeffects_r = WireInit(Bool(), init = false.B)
// val store_data_ext_r = WireInit(UInt(64.W), init = 0.U)
// val store_data_hi_r = WireInit(UInt(32.W), init = 0.U)
// val store_data_lo_r = WireInit(UInt(32.W), init = 0.U)
// val addr_match_dw_lo_r_m = WireInit(Bool(), init = false.B)
// val addr_match_word_lo_r_m = WireInit(Bool(), init = false.B)
// val no_word_merge_r = WireInit(Bool(), init = false.B)
// val no_dword_merge_r = WireInit(Bool(), init = false.B)
// val ld_addr_rhit_lo_lo = WireInit(Bool(), init = false.B)
// val ld_addr_rhit_hi_lo = WireInit(Bool(), init = false.B)
// val ld_addr_rhit_lo_hi = WireInit(Bool(), init = false.B)
// val ld_addr_rhit_hi_hi = WireInit(Bool(), init = false.B)
// val ld_byte_rhit_lo_lo = WireInit(UInt(4.W), init = 0.U)
// val ld_byte_rhit_hi_lo = WireInit(UInt(4.W), init = 0.U)
// val ld_byte_rhit_lo_hi = WireInit(UInt(4.W), init = 0.U)
// val ld_byte_rhit_hi_hi = WireInit(UInt(4.W), init = 0.U)
// val ld_byte_hit_lo = WireInit(UInt(4.W), init = 0.U)
// val ld_byte_rhit_lo = WireInit(UInt(4.W), init = 0.U)
// val ld_byte_hit_hi = WireInit(UInt(4.W), init = 0.U)
// val ld_byte_rhit_hi = WireInit(UInt(4.W), init = 0.U)
// val ld_fwddata_rpipe_lo = WireInit(UInt(32.W), init = 0.U)
// val ld_fwddata_rpipe_hi = WireInit(UInt(32.W), init = 0.U)
// val ld_byte_hit_buf_lo = WireInit(UInt(4.W), init = 0.U)
// val ld_byte_hit_buf_hi = WireInit(UInt(4.W), init = 0.U)
// val ld_fwddata_buf_lo = WireInit(UInt(32.W), init = 0.U)
// val ld_fwddata_buf_hi = WireInit(UInt(32.W), init = 0.U)
// val ld_fwddata_lo = WireInit(UInt(64.W), init = 0.U)
// val ld_fwddata_hi = WireInit(UInt(64.W), init = 0.U)
// val ld_fwddata_m = WireInit(UInt(64.W), init = 0.U)
// val ld_full_hit_hi_m = WireInit(Bool(), init = true.B)
// val ld_full_hit_lo_m = WireInit(Bool(), init = true.B)
// val ld_full_hit_m = WireInit(Bool(), init = false.B)
//
// val bus_buffer = Module(new lsu_bus_buffer)
//
// bus_buffer.io.scan_mode := io.scan_mode
// io.tlu_busbuff <> bus_buffer.io.tlu_busbuff
// bus_buffer.io.clk_override := io.clk_override
// bus_buffer.io.lsu_bus_obuf_c1_clken := io.lsu_bus_obuf_c1_clken
// bus_buffer.io.lsu_busm_clken := io.lsu_busm_clken
// bus_buffer.io.dec_tlu_force_halt := io.dec_tlu_force_halt
// bus_buffer.io.lsu_c2_r_clk := io.lsu_c2_r_clk
// bus_buffer.io.lsu_bus_ibuf_c1_clk := io.lsu_bus_ibuf_c1_clk
// bus_buffer.io.lsu_bus_obuf_c1_clk := io.lsu_bus_obuf_c1_clk
// bus_buffer.io.lsu_bus_buf_c1_clk := io.lsu_bus_buf_c1_clk
// bus_buffer.io.lsu_free_c2_clk := io.lsu_free_c2_clk
// bus_buffer.io.lsu_busm_clk := io.lsu_busm_clk
// bus_buffer.io.dec_lsu_valid_raw_d := io.dec_lsu_valid_raw_d
//
// //
// bus_buffer.io.lsu_pkt_m <> io.lsu_pkt_m
// bus_buffer.io.lsu_pkt_r <> io.lsu_pkt_r
// //
//
// bus_buffer.io.lsu_addr_m := io.lsu_addr_m
// bus_buffer.io.end_addr_m := io.end_addr_m
// bus_buffer.io.lsu_addr_r := io.lsu_addr_r
// bus_buffer.io.end_addr_r := io.end_addr_r
// bus_buffer.io.store_data_r := io.store_data_r
//
// bus_buffer.io.lsu_busreq_m := io.lsu_busreq_m
// bus_buffer.io.flush_m_up := io.flush_m_up
// bus_buffer.io.flush_r := io.flush_r
// bus_buffer.io.lsu_commit_r := io.lsu_commit_r
// bus_buffer.io.lsu_axi <> io.axi
// bus_buffer.io.lsu_bus_clk_en := io.lsu_bus_clk_en
//
// io.lsu_busreq_r := bus_buffer.io.lsu_busreq_r
// io.lsu_bus_buffer_pend_any := bus_buffer.io.lsu_bus_buffer_pend_any
// io.lsu_bus_buffer_full_any := bus_buffer.io.lsu_bus_buffer_full_any
// io.lsu_bus_buffer_empty_any := bus_buffer.io.lsu_bus_buffer_empty_any
// //io.lsu_bus_idle_any := bus_buffer.io.lsu_bus_idle_any
// ld_byte_hit_buf_lo := bus_buffer.io.ld_byte_hit_buf_lo
// ld_byte_hit_buf_hi := bus_buffer.io.ld_byte_hit_buf_hi
// ld_fwddata_buf_lo := bus_buffer.io.ld_fwddata_buf_lo
// ld_fwddata_buf_hi := bus_buffer.io.ld_fwddata_buf_hi
// io.dctl_busbuff <> bus_buffer.io.dctl_busbuff
// bus_buffer.io.no_word_merge_r := no_word_merge_r
// bus_buffer.io.no_dword_merge_r := no_dword_merge_r
// bus_buffer.io.is_sideeffects_r := is_sideeffects_r
// bus_buffer.io.ldst_dual_d := io.ldst_dual_d
// bus_buffer.io.ldst_dual_m := io.ldst_dual_m
// bus_buffer.io.ldst_dual_r := io.ldst_dual_r
// bus_buffer.io.ldst_byteen_ext_m := ldst_byteen_ext_m
// bus_buffer.io.ld_full_hit_m := ld_full_hit_m
// bus_buffer.io.lsu_bus_clk_en_q := lsu_bus_clk_en_q
//
// ldst_byteen_m := Mux1H(Seq(io.lsu_pkt_m.bits.word.asBool -> 15.U(4.W), io.lsu_pkt_m.bits.half.asBool -> 3.U(4.W), io.lsu_pkt_m.bits.by.asBool -> 1.U(4.W)))
// addr_match_dw_lo_r_m := (io.lsu_addr_r(31,3) === io.lsu_addr_m(31,3))
// addr_match_word_lo_r_m := addr_match_dw_lo_r_m & !(io.lsu_addr_r(2)^io.lsu_addr_m(2))
// no_word_merge_r := io.lsu_busreq_r & !io.ldst_dual_r & io.lsu_busreq_m & (io.lsu_pkt_m.bits.load | !addr_match_word_lo_r_m)
// no_dword_merge_r := io.lsu_busreq_r & !io.ldst_dual_r & io.lsu_busreq_m & (io.lsu_pkt_m.bits.load | !addr_match_dw_lo_r_m)
//
// ldst_byteen_ext_m := ldst_byteen_m(3,0) << io.lsu_addr_m(1,0)
// ldst_byteen_ext_r := ldst_byteen_r(3,0) << io.lsu_addr_r(1,0)
// store_data_ext_r := io.store_data_r(31,0) << Cat(io.lsu_addr_r(1,0),0.U(3.W))
// ldst_byteen_hi_m := ldst_byteen_ext_m(7,4)
// ldst_byteen_lo_m := ldst_byteen_ext_m(3,0)
// ldst_byteen_hi_r := ldst_byteen_ext_r(7,4)
// ldst_byteen_lo_r := ldst_byteen_ext_r(3,0)
//
// store_data_hi_r := store_data_ext_r(63,32)
// store_data_lo_r := store_data_ext_r(31,0)
// ld_addr_rhit_lo_lo := (io.lsu_addr_m(31,2) === io.lsu_addr_r(31,2)) & io.lsu_pkt_r.valid & io.lsu_pkt_r.bits.store & io.lsu_busreq_m
// ld_addr_rhit_lo_hi := (io.end_addr_m(31,2) === io.lsu_addr_r(31,2)) & io.lsu_pkt_r.valid & io.lsu_pkt_r.bits.store & io.lsu_busreq_m
// ld_addr_rhit_hi_lo := (io.lsu_addr_m(31,2) === io.end_addr_r(31,2)) & io.lsu_pkt_r.valid & io.lsu_pkt_r.bits.store & io.lsu_busreq_m
// ld_addr_rhit_hi_hi := (io.end_addr_m(31,2) === io.end_addr_r(31,2)) & io.lsu_pkt_r.valid & io.lsu_pkt_r.bits.store & io.lsu_busreq_m
//
// ld_byte_rhit_lo_lo := (0 until 4).map(i =>(ld_addr_rhit_lo_lo & ldst_byteen_lo_r(i) & ldst_byteen_lo_m(i)).asUInt).reverse.reduce(Cat(_,_))
// ld_byte_rhit_lo_hi := (0 until 4).map(i =>(ld_addr_rhit_lo_hi & ldst_byteen_lo_r(i) & ldst_byteen_hi_m(i)).asUInt).reverse.reduce(Cat(_,_))
// ld_byte_rhit_hi_lo := (0 until 4).map(i =>(ld_addr_rhit_hi_lo & ldst_byteen_hi_r(i) & ldst_byteen_lo_m(i)).asUInt).reverse.reduce(Cat(_,_))
// ld_byte_rhit_hi_hi := (0 until 4).map(i =>(ld_addr_rhit_hi_hi & ldst_byteen_hi_r(i) & ldst_byteen_hi_m(i)).asUInt).reverse.reduce(Cat(_,_))
//
// ld_byte_hit_lo := (0 until 4).map(i =>(ld_byte_rhit_lo_lo(i) | ld_byte_rhit_hi_lo(i) | ld_byte_hit_buf_lo(i)).asUInt).reverse.reduce(Cat(_,_))
// ld_byte_hit_hi := (0 until 4).map(i =>(ld_byte_rhit_lo_hi(i) | ld_byte_rhit_hi_hi(i) | ld_byte_hit_buf_hi(i)).asUInt).reverse.reduce(Cat(_,_))
// ld_byte_rhit_lo := (0 until 4).map(i =>(ld_byte_rhit_lo_lo(i) | ld_byte_rhit_hi_lo(i) ).asUInt).reverse.reduce(Cat(_,_))
// ld_byte_rhit_hi := (0 until 4).map(i =>(ld_byte_rhit_lo_hi(i) | ld_byte_rhit_hi_hi(i) ).asUInt).reverse.reduce(Cat(_,_))
// ld_fwddata_rpipe_lo := (0 until 4).map(i =>(Mux1H(Seq(ld_byte_rhit_lo_lo(i) -> store_data_lo_r((8*i)+7,(8*i)), ld_byte_rhit_hi_lo(i) -> store_data_hi_r((8*i)+7,(8*i))))).asUInt).reverse.reduce(Cat(_,_))
// ld_fwddata_rpipe_hi := (0 until 4).map(i =>(Mux1H(Seq(ld_byte_rhit_lo_hi(i) -> store_data_lo_r((8*i)+7,(8*i)), ld_byte_rhit_hi_hi(i) -> store_data_hi_r((8*i)+7,(8*i))))).asUInt).reverse.reduce(Cat(_,_))
// ld_fwddata_lo := (0 until 4).map(i =>(Mux(ld_byte_rhit_lo(i), ld_fwddata_rpipe_lo((8*i)+7,(8*i)), ld_fwddata_buf_lo((8*i)+7,(8*i)))).asUInt).reverse.reduce(Cat(_,_))
// ld_fwddata_hi := (0 until 4).map(i =>(Mux(ld_byte_rhit_hi(i), ld_fwddata_rpipe_hi((8*i)+7,(8*i)), ld_fwddata_buf_hi((8*i)+7,(8*i)))).asUInt).reverse.reduce(Cat(_,_))
// ld_full_hit_lo_m := (0 until 4).map(i =>((ld_byte_hit_lo(i) | !ldst_byteen_lo_m(i))).asUInt).reduce(_&_)
// ld_full_hit_hi_m := (0 until 4).map(i =>((ld_byte_hit_hi(i) | !ldst_byteen_hi_m(i))).asUInt).reduce(_&_)
// ld_full_hit_m := ld_full_hit_lo_m & ld_full_hit_hi_m & io.lsu_busreq_m & io.lsu_pkt_m.bits.load & !io.is_sideeffects_m
// ld_fwddata_m := Cat(ld_fwddata_hi(31,0), ld_fwddata_lo(31,0)) >> (8.U*io.lsu_addr_m(1,0))
// io.bus_read_data_m := ld_fwddata_m(31,0)
//
// withClock(io.active_clk) {
// lsu_bus_clk_en_q := RegNext(io.lsu_bus_clk_en, init = 0.U)
// }
//
// withClock(io.lsu_c1_r_clk) {
// is_sideeffects_r := RegNext(io.is_sideeffects_m, init = 0.U)
// ldst_byteen_r := RegNext(ldst_byteen_m, init = 0.U(4.W))
// }
//}
//object bus_intf extends App {
// println((new chisel3.stage.ChiselStage).emitVerilog(new lsu_bus_intf()))
//}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More