Open cisen opened 3 years ago
为什么会有src\main\scala\tilelink\Nodes.scala
这种一堆case class和object的文件?
s1s2s3代表什么?
What I understand is that s2 is the request from the core which is 2 clock cycles prior and s1 is the request 1 cycle prior.
scratchpad特征是什么?
为什么tagcode要用ecc编码?这样跟普通的直接使用数据作为tag有什么好处吗?
s0和s1、s2各代表什么?
vaddr和paddr代表什么?
s1_paddr = UInt(INPUT, paddrBits) // delayed one cycle w.r.t. req
val s2_vaddr = UInt(INPUT, vaddrBits) // delayed two cycles w.r.t. req
s1_vaddr = RegEnable(s0_vaddr, s0_valid)
s0_vaddr = io.req.bits.addr
什么是ITIM/DTIM
TLB是什么?
Bundle->ParameterizedBundle with HasCoreParameters ->CoreBundle -> ICacheBundle -> LazyModuleImp with HasL1ICacheParameters-> ICacheModule -> ICache(LazyModule) -> Frontend(LazyModule) -> HasICacheFrontend(CanHavePTW) -> RocketTile extends BaseTile with SinksExternalInterrupts SourcesExternalNotifications HasLazyRoCC HasHellaCache HasICacheFrontend -> RocketTileParams extends -> InstantiableTileParams -> WithNBigCores -> DefaultConfig -> DefaultRV32Config extends Config(new WithRV32 ++ new DefaultConfig)
val addressBits = log2Ceil(maxAddress) io.resp.paddr := Cat(ppn, io.req.bits.vaddr(pgIdxBits-1, 0))
为什么icache里面既有paddr又有vaddr?
为什么icache的s2_vaddr是在Dcache中设置的?
s0_vaddr是从cpu/TLB出来的直接地址?为什么还要传给icache?
// icache.scala
// s0的地址是完整的输入地址
val s0_vaddr = io.req.bits.addr
// frontend.scala // npc: next pc icache.io.req.bits.addr := io.cpu.npc
**io.cpu.npc的npc是什么?**
- next pc,就是下一条指令的地址
**io.req是什么?**
- 也是在bundle中定义好的:`val req = Decoupled(new ICacheReq).flip`
- req最主要的参数是:valid、fire、addr,是最原始的请求,不会延时,是s0。s1会延时1个时钟去获取参数和计算tag、是否命中,s2会输出
**既然s0和s1相差一个tick,为什么` s1_valid := s0_valid`**
**Field是什么?值又是什么?**
- https://github.com/cisen/chisel-doc/blob/master/17.%20chisel(Rocket%20Chip)%E4%B8%AD(Site-Here-Up)%E6%9C%BA%E5%88%B6%E5%8E%9F%E7%90%86(config%E6%BA%90%E7%A0%81%E8%A7%A3%E8%AF%BB).md#%E4%B8%80fieldt%E7%B1%BB
- 未来组合继承基本的数据类型
**如何调试rocket-chip?**
**Parameters如何传入?**
- `new Helloworld()(Parameters.empty)`
**lazymodule是如何开始执行的?**
```scala
// 执行module外围的语句
val ldut = LazyModule(new AdderTestHarness())
// 真正开始执行module
val dut = Module(ldut.module)
LazyModule、LazyModuleImp相当于闭包?
req是什么?
resp是什么?
请问rocket中和l1cache里的tag比较的是物理地址还是虚拟地址呢?
https://github.com/chipsalliance/rocket-chip https://zhuanlan.zhihu.com/p/140360043 https://github.com/ucb-bar/chipyard