问题标签 [rocket-chip]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rocket-chip - 使用 APB 的配置无法详细说明
我在 Configs.scala 中创建了以下配置:
类 APBConfig 扩展配置(新 WithDebugAPB ++ 新 TinyConfig)
我尝试使用以下命令构建它:
/rocket/rocket-chip/vsim$ make CONFIG=freechips.rocketchip.system.APBConfig
并得到以下错误:
作为参考,使用 WithJtagDTMSystem 代替 WithDebugAPB 有效。
任何想法可能是什么问题?
riscv - 构建VCS模拟器后如何使verilog为CAD工具做好准备
我已经使用一些配置(默认、DualCoreConfig、RoCCExampleConfig 等)成功构建了 VCS 模拟器,并在 vism/generated-src 下获取了所需文件现在如何在 CAD 工具中使用/准备这个文件(概要)
我是否需要任何处理来编译 Verilog 文件以在 CAD 工具中运行,或者我该怎么做?
谢谢
chisel - 使用外交时的 IP 块生成/测试。可以给虚拟节点吗?
我一直在研究利用外交的火箭芯片,我对外交如何运作的整体结构有一个不错的掌握。(我不完全理解它,但足以自己创建一些示例)。我想开发一些 IP,其主要目标是regmap
通过使用*RegisterRouter
.
如果我使用/修改 Rocket-chip 中的 RegisterNodeExamples 之一,我会得到以下信息:
我目前正在使用 APB,因为我非常熟悉 AMBA 协议,并且它具有diplomacy
包下最小的代码库。我可以这样做,以便以后使用 AMBA 或 TL 协议。
我的问题
有没有办法仅MyDeviceController
作为独立组件生成verilog?
我无法弄清楚是否存在。显然,如果我只是尝试实例化,我将收到未连接MyDeviceController
的内部参数的错误。node
我不确定您是否可以提供“虚拟”节点连接?或者,如果有一些方法可以处理。
为什么我想这样做
最好在没有完整 SoC 的情况下在其自己的测试环境中独立测试 IP。
我当前的解决方法/解决方案
为了解决这个问题,我基本上创建了一个“包装器”,它创建APBMasterNode
并连接到APBRegisterNode
in MyDeviceController
。
一个问题是我必须为每个 APB 信号创建一些控件。如果我不这样做,Chisel/FIRRTL 编译器/生成器将不会为MyDeviceController
. 这就是您在上面看到的myreg
用于执行一些基本 APB 事务的计数器。
包装器如下所示:
我可以将此包装器/主控器创建为典型的测试组件,然后在我的 testenv 中将MyDeviceController
RTL 实例化,但是我想知道是否还有其他解决方案。外交似乎是相当全面的(我理解为什么),但正在寻找有关如何为外交基础设施流程处理 IP 级别开发的建议。
谢谢
chisel - 如何在凿子中同步 2 个时钟域之间的包
我正在尝试在不同时钟域的 2 个模块之间同步一束信号。我可以通过在它们之间手动实例化 AsyncQueue 来做到这一点,并且还可以为每一侧连接时钟和重置。似乎有一种似乎不太可行的方法来做到这一点,AsyncBundle
我需要一些指导方针来理解如何做到这一点。在源端(在 clkA)我有:
val ioA = IO(Decoupled(UInt(32.W))
在接收器侧(在 clkB)我有:
val ioB = IO(Decoupled(UInt(32.W).flip)
所以做这样的事情是有道理的(我不确定下面的代码是否正确):
以上有意义吗?我也注意到FromAsyncBundle
创建一个DecoupledIO
它会替换我在捆绑包中定义的那个还是只是为了交叉?如果它确实取代了我如何驱动它,例如从某些逻辑推送数据和有效。过境点两边的时钟会怎样?
chisel - 检索 RegInit 的重置值
RegInit
有没有办法通过探测产生的类型的成员来获取 a 的重置值?我可以看到 RegInit 将返回类型(例如UInt
)。例如,我将有一个寄存器,我想通过regmap
.init
不是可访问的成员,但在此处显示以暗示它是我正在寻找的。
有没有办法做到这一点,以便在任何时候RegFieldDesc
使用重置描述都可以匹配硬件而不必保留另一个变量?
一种解决方法/解决方案是3.U
在我的示例val
中根据任何参数进行更改并简单地传递它,但不确定是否还有其他可以使用的东西。
chisel - 扩展数据类型或添加信息的方式
似乎Data
Chisel 中的大多数/所有类型都是密封类,不允许用户从它们扩展。是否可以添加有关某些用户定义字段的信息或将来添加支持?
我认为在某些情况下,获取更多信息可能会有所帮助:
端口描述可能用于文档
电压电平/偏置
- 如果您正在做一些芯片顶级连接,您可能必须进行某些连接
- 很多时候,信号上都会放置一个
set_dont_touch
(一个 SDC,不要与 Chisel 混淆dontTouch
),因此可以添加这些用于自动 SDC 约束。
建模目的
- Chisel 显然不处理行为建模,但有时会使用 Verilog/SV
real
进行建模。这可用于打印出这些信号用于任何后期处理的位置。
- Chisel 显然不处理行为建模,但有时会使用 Verilog/SV
我不希望 Chisel 处理所有实际案例(例如制作文档或处理连接),但如果可以添加/扩展这些成员,用户可以在构建期间和/或在详细说明额外流程之后检查这些.
谢谢
chisel - 访问 regmap RegFields
我正在尝试找到一种干净的方法来访问regmap
用于*RegisterNode
创建文档和测试文件的方法。TLRegisterNode
具有通过 some 生成 json的方法Annotations
。这些是在regmap
方法中通过将它们添加到ElaborationArtefacts
对象来完成的。其他协议似乎没有这些注释。
无论如何要在详细说明后或期间迭代“ regmap
”注册字段?
我不能只访问 regmap,因为它不是真正的 val/var,因为它是一种方法。我不太清楚这些信息存储在哪里。我真的不相信它实际上是在“存储”任何信息,因为它只是创建硬件以将指定的逻辑附加到基于 RegisterNode 的逻辑。
JSON 输出实际上对我来说很好,因为我可以编写一个后处理脚本来将 JSON 转换为我需要的格式,但我想知道我是否可以访问这些信息,或者我是否可以在最后添加一个自定义函数调用。我无法扩展case class *RegisterNode
,但我不确定是否可以添加自定义函数以在regmap
方法结束时运行。
这是我快速拼凑的东西:
然后,用户可以创建一个自定义函数来运行并将其传递给 regmap 或 RegisterRouter
这只是我的一个简单示例。我相信,如果这样的事情是可能的,那会更好的是有一个Seq
可以添加到在方法RegisterNode
结束时运行的函数regmap
,类似于TLRegisterNode
当前的工作方式。因此,用户可以添加任意号码,而您仍然可以使用该regmap
呼叫。
背景(不是问题的直接部分):
我有一个多年来构建的统一注册脚本,用于描述特定 IP 的注册。它的工作方式与 RegField/node.regmap 非常相似,只是它显然不了解外交等。它将生成 Verilog,以及用于 DV 的各种文件(用于简单 Verilog 模拟的基本定义和更复杂uvm_reg_block
的定义,还具有描述子系统直至 SoC 级别的多个 IP 的能力)。它还将为 SW 和 Sphinx reStructuredText 打印出 C 头文件以用于文档。
外交实际上解决了我一直在处理的主要问题之一,所以我显然试图将我的大部分新设计推向 Chisel/Diplo。
riscv - 如何在火箭芯片生成器中创建内存,合成后将映射为 FPGA 中的块 ram?
我尝试使用 Mem(1024,UInt(width=xLen)); 但是在Xilinx vivado中合成生成的verilog文件后,内存映射为分布式ram。理解和编辑生成的 RTL 文件真的很难。是否有任何明确的方法来定义可以推断为块 ram 的内存。?
感谢和问候,
rocket-chip - 构建火箭芯片工具时“bitbang_swd”的多重定义
我正在尝试根据此处的说明构建火箭芯片工具:https ://github.com/chipsalliance/rocket-tools/blob/master/README.md
我面临以下错误:
我不明白同一个包含文件如何被包含两次。
感谢任何克服此问题的支持。
git - 在 Rocket-chip 的快速指令期间 Git 卡住了
当我在rocket-chip中尝试快速指令时,它卡住了。
之后git submodule update --init --recursive
,没有更多的响应,只显示:
这是一个错误吗?或者我应该如何快速入门?
谢谢。
JL