IFC
This commit is contained in:
parent
5b6d41e88b
commit
c8c8e05c1e
|
@ -1,4 +1,13 @@
|
|||
[
|
||||
{
|
||||
"class":"firrtl.transforms.CombinationalPath",
|
||||
"sink":"~el2_ifu_ifc_ctrl|el2_ifu_ifc_ctrl>io_miss_f",
|
||||
"sources":[
|
||||
"~el2_ifu_ifc_ctrl|el2_ifu_ifc_ctrl>io_ifc_fetch_req_f",
|
||||
"~el2_ifu_ifc_ctrl|el2_ifu_ifc_ctrl>io_exu_flush_final",
|
||||
"~el2_ifu_ifc_ctrl|el2_ifu_ifc_ctrl>io_ic_hit_f"
|
||||
]
|
||||
},
|
||||
{
|
||||
"class":"firrtl.transforms.CombinationalPath",
|
||||
"sink":"~el2_ifu_ifc_ctrl|el2_ifu_ifc_ctrl>io_ifu_pmu_fetch_stall",
|
||||
|
|
|
@ -3,7 +3,7 @@ circuit el2_ifu_ifc_ctrl :
|
|||
module el2_ifu_ifc_ctrl :
|
||||
input clock : Clock
|
||||
input reset : UInt<1>
|
||||
output io : {flip free_clk : UInt<1>, flip active_clk : UInt<1>, flip rst_l : UInt<1>, flip scan_mode : UInt<1>, flip ic_hit_f : UInt<1>, flip ifu_ic_mb_empty : UInt<1>, flip ifu_fb_consume1 : UInt<1>, flip ifu_fb_consume2 : UInt<1>, flip dec_tlu_flush_noredir_wb : UInt<1>, flip exu_flush_final : UInt<1>, flip exu_flush_path_final : UInt<31>, flip ifu_bp_hit_taken_f : UInt<1>, flip ifu_bp_btb_target_f : UInt<31>, flip ic_dma_active : UInt<1>, flip ic_write_stall : UInt<1>, flip dma_iccm_stall_any : UInt<1>, flip dec_tlu_mrac_ff : UInt<32>, ifc_fetch_addr_f : UInt<31>, ifc_fetch_addr_bf : UInt<31>, ifc_fetch_req_f : UInt<1>, ifu_pmu_fetch_stall : UInt<1>, ifc_fetch_uncacheable_bf : UInt<1>, ifc_fetch_req_bf : UInt<1>, ifc_fetch_req_bf_raw : UInt<1>, ifc_iccm_access_bf : UInt<1>, ifc_region_acc_fault_bf : UInt<1>, ifc_dma_access_ok : UInt<1>, mb_empty_mod : UInt<1>}
|
||||
output io : {flip free_clk : UInt<1>, flip active_clk : UInt<1>, flip rst_l : UInt<1>, flip scan_mode : UInt<1>, flip ic_hit_f : UInt<1>, flip ifu_ic_mb_empty : UInt<1>, flip ifu_fb_consume1 : UInt<1>, flip ifu_fb_consume2 : UInt<1>, flip dec_tlu_flush_noredir_wb : UInt<1>, flip exu_flush_final : UInt<1>, flip exu_flush_path_final : UInt<31>, flip ifu_bp_hit_taken_f : UInt<1>, flip ifu_bp_btb_target_f : UInt<31>, flip ic_dma_active : UInt<1>, flip ic_write_stall : UInt<1>, flip dma_iccm_stall_any : UInt<1>, flip dec_tlu_mrac_ff : UInt<32>, ifc_fetch_addr_f : UInt<31>, ifc_fetch_addr_bf : UInt<31>, ifc_fetch_req_f : UInt<1>, ifu_pmu_fetch_stall : UInt<1>, ifc_fetch_uncacheable_bf : UInt<1>, ifc_fetch_req_bf : UInt<1>, ifc_fetch_req_bf_raw : UInt<1>, ifc_iccm_access_bf : UInt<1>, ifc_region_acc_fault_bf : UInt<1>, ifc_dma_access_ok : UInt<1>, mb_empty_mod : UInt<1>, miss_f : UInt<1>}
|
||||
|
||||
io.ifc_region_acc_fault_bf <= UInt<1>("h00") @[el2_ifu_ifc_ctrl.scala 41:30]
|
||||
io.ifc_dma_access_ok <= UInt<1>("h00") @[el2_ifu_ifc_ctrl.scala 42:24]
|
||||
|
@ -112,6 +112,7 @@ circuit el2_ifu_ifc_ctrl :
|
|||
node _T_46 = eq(io.exu_flush_final, UInt<1>("h00")) @[el2_ifu_ifc_ctrl.scala 95:49]
|
||||
node _T_47 = and(_T_45, _T_46) @[el2_ifu_ifc_ctrl.scala 95:47]
|
||||
miss_f <= _T_47 @[el2_ifu_ifc_ctrl.scala 95:10]
|
||||
io.miss_f <= miss_f @[el2_ifu_ifc_ctrl.scala 96:13]
|
||||
node _T_48 = or(io.ifu_ic_mb_empty, io.exu_flush_final) @[el2_ifu_ifc_ctrl.scala 97:39]
|
||||
node _T_49 = eq(dma_stall, UInt<1>("h00")) @[el2_ifu_ifc_ctrl.scala 97:63]
|
||||
node _T_50 = and(_T_48, _T_49) @[el2_ifu_ifc_ctrl.scala 97:61]
|
||||
|
@ -146,7 +147,7 @@ circuit el2_ifu_ifc_ctrl :
|
|||
node _T_74 = eq(goto_idle, UInt<1>("h00")) @[el2_ifu_ifc_ctrl.scala 106:62]
|
||||
node _T_75 = and(_T_73, _T_74) @[el2_ifu_ifc_ctrl.scala 106:60]
|
||||
node next_state_0 = or(_T_72, _T_75) @[el2_ifu_ifc_ctrl.scala 106:48]
|
||||
node _T_76 = cat(next_state_0, next_state_0) @[Cat.scala 29:58]
|
||||
node _T_76 = cat(next_state_1, next_state_0) @[Cat.scala 29:58]
|
||||
reg _T_77 : UInt, clock with : (reset => (reset, UInt<1>("h00"))) @[el2_ifu_ifc_ctrl.scala 108:19]
|
||||
_T_77 <= _T_76 @[el2_ifu_ifc_ctrl.scala 108:19]
|
||||
state <= _T_77 @[el2_ifu_ifc_ctrl.scala 108:9]
|
||||
|
|
|
@ -28,7 +28,8 @@ module el2_ifu_ifc_ctrl(
|
|||
output io_ifc_iccm_access_bf,
|
||||
output io_ifc_region_acc_fault_bf,
|
||||
output io_ifc_dma_access_ok,
|
||||
output io_mb_empty_mod
|
||||
output io_mb_empty_mod,
|
||||
output io_miss_f
|
||||
);
|
||||
`ifdef RANDOMIZE_REG_INIT
|
||||
reg [31:0] _RAND_0;
|
||||
|
@ -118,14 +119,23 @@ module el2_ifu_ifc_ctrl(
|
|||
wire _T_50 = _T_48 & _T_37; // @[el2_ifu_ifc_ctrl.scala 97:61]
|
||||
wire _T_52 = _T_50 & _T_91; // @[el2_ifu_ifc_ctrl.scala 97:74]
|
||||
wire _T_53 = ~miss_a; // @[el2_ifu_ifc_ctrl.scala 97:86]
|
||||
wire mb_empty_mod = _T_52 & _T_53; // @[el2_ifu_ifc_ctrl.scala 97:84]
|
||||
wire goto_idle = io_exu_flush_final & io_dec_tlu_flush_noredir_wb; // @[el2_ifu_ifc_ctrl.scala 99:35]
|
||||
wire _T_57 = io_exu_flush_final & _T_41; // @[el2_ifu_ifc_ctrl.scala 101:36]
|
||||
wire leave_idle = _T_57 & idle; // @[el2_ifu_ifc_ctrl.scala 101:67]
|
||||
wire _T_60 = ~state[1]; // @[el2_ifu_ifc_ctrl.scala 103:23]
|
||||
wire _T_62 = _T_60 & state[0]; // @[el2_ifu_ifc_ctrl.scala 103:33]
|
||||
wire _T_63 = _T_62 & miss_f; // @[el2_ifu_ifc_ctrl.scala 103:44]
|
||||
wire _T_64 = ~goto_idle; // @[el2_ifu_ifc_ctrl.scala 103:55]
|
||||
wire _T_65 = _T_63 & _T_64; // @[el2_ifu_ifc_ctrl.scala 103:53]
|
||||
wire _T_67 = ~mb_empty_mod; // @[el2_ifu_ifc_ctrl.scala 104:17]
|
||||
wire _T_68 = state[1] & _T_67; // @[el2_ifu_ifc_ctrl.scala 104:15]
|
||||
wire _T_70 = _T_68 & _T_64; // @[el2_ifu_ifc_ctrl.scala 104:31]
|
||||
wire next_state_1 = _T_65 | _T_70; // @[el2_ifu_ifc_ctrl.scala 103:67]
|
||||
wire _T_72 = _T_64 & leave_idle; // @[el2_ifu_ifc_ctrl.scala 106:34]
|
||||
wire _T_75 = state[0] & _T_64; // @[el2_ifu_ifc_ctrl.scala 106:60]
|
||||
wire next_state_0 = _T_72 | _T_75; // @[el2_ifu_ifc_ctrl.scala 106:48]
|
||||
wire [1:0] _T_76 = {next_state_0,next_state_0}; // @[Cat.scala 29:58]
|
||||
wire [1:0] _T_76 = {next_state_1,next_state_0}; // @[Cat.scala 29:58]
|
||||
wire wfm = state == 2'h3; // @[el2_ifu_ifc_ctrl.scala 128:16]
|
||||
reg fb_full_f; // @[el2_ifu_ifc_ctrl.scala 131:26]
|
||||
wire _T_135 = _T_32 | io_exu_flush_final; // @[el2_ifu_ifc_ctrl.scala 135:61]
|
||||
|
@ -149,6 +159,7 @@ module el2_ifu_ifc_ctrl(
|
|||
assign io_ifc_region_acc_fault_bf = 1'h0; // @[el2_ifu_ifc_ctrl.scala 41:30]
|
||||
assign io_ifc_dma_access_ok = 1'h0; // @[el2_ifu_ifc_ctrl.scala 42:24]
|
||||
assign io_mb_empty_mod = _T_52 & _T_53; // @[el2_ifu_ifc_ctrl.scala 98:19]
|
||||
assign io_miss_f = _T_45 & _T_2; // @[el2_ifu_ifc_ctrl.scala 96:13]
|
||||
`ifdef RANDOMIZE_GARBAGE_ASSIGN
|
||||
`define RANDOMIZE
|
||||
`endif
|
||||
|
|
|
@ -35,7 +35,7 @@ val io = IO(new Bundle{
|
|||
val ifc_region_acc_fault_bf = Output(Bool())
|
||||
val ifc_dma_access_ok = Output(Bool())
|
||||
val mb_empty_mod = Output(Bool())
|
||||
|
||||
val miss_f = Output(Bool())
|
||||
})
|
||||
|
||||
io.ifc_region_acc_fault_bf := 0.U
|
||||
|
@ -93,7 +93,7 @@ val io = IO(new Bundle{
|
|||
fetch_bf_en := io.exu_flush_final | io.ifc_fetch_req_f
|
||||
|
||||
miss_f := io.ifc_fetch_req_f & !io.ic_hit_f & !io.exu_flush_final
|
||||
|
||||
io.miss_f := miss_f
|
||||
mb_empty_mod := (io.ifu_ic_mb_empty | io.exu_flush_final) & !dma_stall & !miss_f & !miss_a
|
||||
io.mb_empty_mod := mb_empty_mod
|
||||
goto_idle := io.exu_flush_final & io.dec_tlu_flush_noredir_wb
|
||||
|
@ -105,7 +105,7 @@ val io = IO(new Bundle{
|
|||
|
||||
val next_state_0 = (!goto_idle & leave_idle) | (state(0) & !goto_idle)
|
||||
|
||||
state := RegNext(Cat(next_state_0, next_state_0), init = 0.U)
|
||||
state := RegNext(Cat(next_state_1, next_state_0), init = 0.U)
|
||||
|
||||
flush_fb := io.exu_flush_final
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue