阐明在 simics 中实现的 risc5 平台架构中的连接性和内存实现

问题描述 投票:0回答:1

问题 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

simics
1个回答
0
投票

关于 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。

© www.soinside.com 2019 - 2024. All rights reserved.