0%

ICache实现与优化

详细介绍指令缓存(ICache)的实现方法和优化策略,包括多路组相联、替换策略、突发传输等配置的影响分析。

变成两路后好像负优化了
ICache性能对比

Icache配置切换

1
2
3
4
5
6
7
8
trait IcacheConfig{
//Byte
val BlockSize: Int = 8
val WayNum : Int = 1
val SetNum: Int = 16
val Strategy: String = "RANDOM" //LRU,FIFO
val burst: String = "INCR" //INCR,WRAP
}

Icache的控制参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
wire         _GEN = state == 3'h0;	// @[src/main/AXI/AXI4.scala:162:24, :182:19]
wire _GEN_0 = state == 3'h1; // @[src/main/AXI/AXI4.scala:162:24, :182:19, :193:17]
wire [7:0] _GEN_1 = {5'h0, sizeReg}; // @[src/main/AXI/AXI4.scala:143:56, :167:22]
wire _GEN_2 = _GEN | ~_GEN_0; // @[src/main/AXI/AXI4.scala:62:17, :182:19]
wire _GEN_3 = state == 3'h2; // @[src/main/AXI/AXI4.scala:162:24, :182:19, :187:15]
wire _GEN_4 = _GEN | _GEN_0; // @[src/main/AXI/AXI4.scala:52:18, :182:19]
wire io_axi_wvalid_0 = ~_GEN_4 & _GEN_3; // @[src/main/AXI/AXI4.scala:52:18, :182:19]
wire [7:0] _wstrbReg_T = 8'h1 << _GEN_1; // @[src/main/AXI/AXI4.scala:143:56, src/main/Cache/Icache.scala:94:26]
wire _GEN_5 = _GEN_4 | ~_GEN_3; // @[src/main/AXI/AXI4.scala:48:17, :52:18, :182:19]
wire _GEN_6 = idx_beat == lenReg; // @[src/main/AXI/AXI4.scala:168:21, :170:23, :227:23]
wire _GEN_7 = io_axi_awready & io_axi_wready; // @[src/main/AXI/AXI4.scala:231:27]
wire _GEN_8 = state == 3'h3; // @[src/main/AXI/AXI4.scala:162:24, :182:19, :210:17]
wire _GEN_9 = _GEN | _GEN_0 | _GEN_3; // @[src/main/AXI/AXI4.scala:68:17, :182:19]
wire _GEN_10 = _GEN_8 & io_axi_rvalid; // @[src/main/AXI/AXI4.scala:174:19, :182:19, :244:29, :246:27]
wire _GEN_11 = io_axi_rlast | _GEN_6; // @[src/main/AXI/AXI4.scala:227:23, :248:29]
wire _GEN_12 = state == 3'h4; // @[src/main/AXI/AXI4.scala:153:38, :162:24, :182:19]
wire _GEN_13 = _GEN_8 | ~_GEN_12; // @[src/main/AXI/AXI4.scala:55:16, :182:19]