问题 1:澄清 HART 内核中的连接性和内存实现
在检查 HART 核心时,我找不到任何超出 UART 的 IO 实现,并且不存在 AXI 总线。在这个场景中组件/对象是如何连接的?此外,没有 mem_bus 的迹象。有人可以详细说明一下 HART 核心中的内存是如何实现的吗?
问题 2:HART 内核中缓存实现的可能性
鉴于没有明确提及 HART 核心中的某些组件(例如 mem_bus),我很好奇在该架构中实现缓存的可行性。有人可以提供关于缓存是否可以在 HART 核心中实现的见解吗?
问题3:了解HART核心组件:PS、Virtio_entropy、Clint和Cell
在探索 HART 核心时,我遇到了 PS、Virtio_entropy、Clint 和 Cell 等术语。有人可以阐明这些组件在 HART 架构中代表什么吗?
我们正在尝试使用 simics 创建 risc5 平台架构图
这是所有组件的树:
https://drive.google.com/file/d/1XF10J5A-q-Nj6iq5QJSJLCATvO3Kvtfm/view?usp=sharing
关于 RISC-V 简单设计的一般说明:模型中的“hart”只是 hte 处理器核心。中断控制器和定时器被视为独立的内存映射设备。
在检查 HART 核心时,我找不到任何超出 UART 的 IO 实现,并且不存在 AXI 总线。在这个场景中组件/对象是如何连接的?此外,没有 mem_bus 的迹象。有人可以详细说明一下 HART 核心中的内存是如何实现的吗?
内存总线由
phys_mem
对象表示。要将新事物连接到系统,请构建它们的模型并将其寄存器组映射到 phys_mem。系统的 RAM 只是映射到该内存空间的一个对象。这一切都在核心外部 - 核心所做的就是将内存操作发送到 phys_mem
对象。
完整的对象图:
simics> list-objects -tree max-depth = 2 namespace = board
┐
├ boot ┐
│ └ image
├ cell ┐
│ └ ps
├ cell_context
├ cell_rec0
├ clint
├ console ┐
│ ├ con
│ └ serial
├ disk0 ┐
│ ├ disk_image
│ └ virtio_disk
├ disk1 ┐
│ ├ disk_image
│ └ virtio_disk
├ disk2 ┐
│ ├ disk_image
│ └ virtio_disk
├ eth
├ hart[0] ┐
│ └ extensions
├ hart[1] ┐
│ └ extensions
├ hart[2] ┐
│ └ extensions
├ hart[3] ┐
│ └ extensions
├ phys_mem
├ plic
├ ram ┐
│ └ image
├ serial0
├ uart0
├ virtio_entropy
└ virtio_net
和默认内存映射:
simics> board.phys_mem.map
┌───────────┬─────────────────────────────────┬──┬──────┬───────────┬──────┬────┬─────┬────┐
│ Base│Object │Fn│Offset│ Length│Target│Prio│Align│Swap│
├───────────┼─────────────────────────────────┼──┼──────┼───────────┼──────┼────┼─────┼────┤
│ 0x1000│board.boot │ │0x0000│0x0004_0000│ │ 0│ │ │
│0x0200_0000│board.clint.bank.regs │ │0x0000│ 0xc000│ │ 0│ │ │
│0x0c00_0000│board.plic.bank.regs │ │0x0000│0x0400_0000│ │ 0│ 8│ │
│0x1000_0000│board.uart0.bank.regs │ │0x0000│ 0x0011│ │ 0│ 8│ │
│0x1001_0000│board.virtio_net.bank.mmio │ │0x0000│0x0001_0000│ │ 0│ 8│ │
│0x1002_0000│board.disk0.virtio_disk.bank.mmio│ │0x0000│0x0001_0000│ │ 0│ 8│ │
│0x1003_0000│board.disk1.virtio_disk.bank.mmio│ │0x0000│0x0001_0000│ │ 0│ 8│ │
│0x1004_0000│board.disk2.virtio_disk.bank.mmio│ │0x0000│0x0001_0000│ │ 0│ 8│ │
│0x1008_0000│board.virtio_entropy.bank.mmio │ │0x0000│0x0001_0000│ │ 0│ 8│ │
│0x8000_0000│board.ram │ │0x0000│0x8000_0000│ │ 0│ │ │
└───────────┴─────────────────────────────────┴──┴──────┴───────────┴──────┴────┴─────┴────┘
鉴于没有明确提及 HART 核心中的某些组件(例如 mem_bus),我很好奇在该架构中实现缓存的可行性。有人可以提供关于缓存是否可以在 HART 核心中实现的见解吗?
要添加缓存,您可以使用 simple-cache-tool。搜索文档。基本上,处理器核心可以将所有访问发送到缓存模型。分析器用户指南第 5 章讨论了这一点。
在探索 HART 核心时,我遇到了 PS、Virtio_entropy、Clint 和 Cell 等术语。有人可以阐明这些组件在 HART 架构中代表什么吗?
您读过https://community.intel.com/t5/Blogs/Products-and-Solutions/Software/Introducing-RISC-V-in-the-Simics-Simulator/post/1496444吗?那里解释了熵设备,它为 SSH 初始化提供了必要的随机性。
对象
cell
和 cell.ps
用于管理 Simics 多线程模拟。有关详细信息,请参阅 Simics 手册“API 参考手册”第 2 章“线程模型”。在文档中搜索“cell”也会找到这个。
对象
clint
是常见的RISC-V中断控制器,称为CLINT。