How do I deal with aliased Bundle fields in chisel? - Chisel 多个字段赋相同Data对象值的问题 - Chisel 需要独立实例

https://www.chisel-lang.org/docs/cookbooks/cookbook#how-do-i-deal-with-aliased-bundle-fields

Chisel 多个字段赋相同Data对象值的问题

class AliasedBundle[T <: Data](gen: T) extends Bundle {
  val foo = gen
  val bar = gen
}

这个部分说了:
在 Chisel 中,如果你在 Bundle(硬件包)中对多个字段赋值为相同的 Data 对象实例,就会导致别名(aliasing)问题。因为 Chisel 需要能够区分 Bundle 中的不同字段,如果它们引用相同的内存对象,Chisel 就无法区分它们,这在硬件生成和模拟中会造成问题。

因为

在 Chisel 中,如果 foo 和 bar 是相同的 Data 对象实例,会导致几个问题:

硬件区分问题:在硬件设计中,每个信号通常对应一个物理线或寄存器。如果 foo 和 bar 是同一个实例,那么在硬件中它们将无法区分,因为它们实际上是同一个信号。

模拟和测试问题:在 Chisel 的模拟环境中,每个 Data 实例都应该能够独立变化,以便于测试不同的硬件行为。如果两个字段是同一个实例,它们将始终具有相同的值,这限制了模拟的能力和测试的覆盖范围。

预期的硬件行为:在设计硬件时,通常期望每个信号或寄存器能够独立控制和观察。如果两个字段引用同一个对象,那么对其中一个字段的修改会影响另一个字段,这通常不是设计者想要的行为。

工具链支持:Chisel 及其后端工具链(如用于生成 Verilog 或 VHDL 的工具)依赖于每个 Data 实例的唯一性来生成正确的硬件描述。别名问题会导致工具链无法正确地处理这些实例。

getVerilogString(new Top(new AliasedBundle(UInt(8.W))))
// chisel3.AliasedAggregateFieldException: AliasedBundle contains aliased fields named (bar,foo)
// 	at ... ()
// 	at repl.MdocSession$MdocApp17$Top$$anonfun$50$$anonfun$apply$37.apply(cookbook.md:301)
// 	at repl.MdocSession$MdocApp17$Top$$anonfun$50$$anonfun$apply$37.apply(cookbook.md:301)
// 	at chisel3.experimental.prefix$.apply(prefix.scala:50)
// 	at repl.MdocSession$MdocApp17$Top$$anonfun$50.apply(cookbook.md:301)
// 	at repl.MdocSession$MdocApp17$Top$$anonfun$50.apply(cookbook.md)
// 	at chisel3.internal.plugin.package$.autoNameRecursively(package.scala:33)
// 	at repl.MdocSession$MdocApp17$Top.<init>(cookbook.md:301)
// 	at repl.MdocSession$MdocApp17$$anonfun$55$$anonfun$apply$43.apply(cookbook.md:320)
// 	at repl.MdocSession$MdocApp17$$anonfun$55$$anonfun$apply$43.apply(cookbook.md:320)
// 	at chisel3.Module$.evaluate(Module.scala:92)
// 	at chisel3.Module$.do_apply(Module.scala:35)
// 	at chisel3.stage.phases.Elaborate.$anonfun$transform$2(Elaborate.scala:53)
// 	at chisel3.internal.Builder$.$anonfun$buildImpl$1(Builder.scala:1025)
// 	at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59)
// 	at chisel3.internal.Builder$.buildImpl(Builder.scala:1019)
// 	at chisel3.internal.Builder$.$anonfun$build$1(Builder.scala:1011)
// 	at logger.Logger$.$anonfun$makeScope$4(Logger.scala:148)
// 	at scala.util.DynamicVariable.withValue(DynamicVariable.scala:59)
// 	at logger.Logger$.makeScope(Logger.scala:146)
// 	at logger.Logger$.makeScope(Logger.scala:133)
// 	at ... ()
// 	at ... (Stack trace trimmed to user code only. Rerun with --full-stacktrace to see the full stack trace)

我自己的通俗理解

1)你不确定这里的val是输入还是输出。

chisel 编程注意事项 - 为什么 Chisel 需要独立实例:

在 Chisel 中,每个 Data 实例代表一个可以独立控制和观察的硬件信号。当两个字段是独立的 Data 实例时,Chisel 可以确保它们在硬件中是独立的,可以被分别驱动和观察。

**独立控制:**每台饮水机可以独立打开或关闭,控制水流的大小。
**独立观察:**可以独立观察每台饮水机的出水情况,以便于调试和测试。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生就业服务平台管理系统按照操作主体分为管理员和用户。管理员的功能包括学生档案管理、字典管理、试卷管理、试卷选题管理、试题表管理、考试记录表管理、答题详情表管理、错题表管理、法律法规管理、法律法规收藏管理、法律法规留言管理、就业分析管理、论坛管理、企业管理、简历管理、老师管理、简历投递管理、新闻资讯管理、新闻资讯收藏管理、新闻资讯留言管理、学生信息管理、宣传管理、学生管理、职位招聘管理、职位收藏管理、招聘咨询管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生就业服务平台管理系统可以提高大学生就业服务平台信息管理问题的解决效率,优化大学生就业服务平台信息处理流程,保证大学生就业服务平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理新闻信息,管理大学生就业服务平台信息,包括考试管理,培训管理,投递管理,薪资管理等,可以管理新闻信息。 考试管理界面,管理员在考试管理界面中可以对界面中显示,可以对考试信息的考试状态进行查看,可以添加新的考试信息等。投递管理界面,管理员在投递管理界面中查看投递种类信息,投递描述信息,新增投递信息等。新闻信息管理界面,管理员在新闻信息管理界面中新增新闻信息,可以删除新闻信息。新闻信息类型管理界面,管理员在新闻信息类型管理界面查看新闻信息的工作状态,可以对新闻信息的数据进行导出,可以添加新新闻信息的信息,可以编辑新闻信息信息,删除新闻信息信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值