首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于MSI协议withRuby在gem5中没有识别触发器

对于MSI协议withRuby在gem5中没有识别触发器
EN

Stack Overflow用户
提问于 2020-09-19 13:46:13
回答 2查看 100关注 0票数 2

我试图使用Ruby在gem5中实现MSI协议:8e9b03b640e1c20748d1123fd55fd336c37d6c以下源代码。当我运行生成时,它会引发异常并终止操作。

例外:MSI-di.sm:124:错误:未识别的函数名:'trigger_Event_Addr‘

异常发生在MSI-dir.sm文件的第219行。

代码语言:javascript
运行
复制
in_port(memQueue_in, MemoryMsg, responseFromMemory) {
        if (memQueue_in.isReady(clockEdge())) {
            peek(memQueue_in, MemoryMsg) {
                if (in_msg.Type == MemoryRequestType:MEMORY_READ) {
                    trigger(Event:MemData, in_msg.addr); //exception raised here
                } else if (in_msg.Type == MemoryRequestType:MEMORY_WB) {
                    trigger(Event:MemAck, in_msg.addr);
                } else {
                    error("Invalid message");
                }
            }
        }
    }

我云找不到任何关于触发器函数的详细文档。根据gem5文档化,要触发的参数的数量取决于机器本身,我认为这意味着变量arguments.Also,我假设触发器的实现是有效的(我假设),因为在./src/mem/ruby/protocol中,还提供了具有触发器实现的示例协议文件(Garnet_standalone-dir.sm),其中有两个参数(trigger(Event:MemData, in_msg.addr);),就像我的一样。我的系统没有dma控制器。

为什么要提出这一例外?云我是如何解决这个问题的?

注意:在通过互联网浏览了几个小时后,gem5似乎发生了很大的变化,因为本教程已经编写完毕,而且还没有更新。因此,任何有关所有更改的来源都将是非常有用的。此外,任何更新的gem5教程源代码,像这样的,将是很好的。我发现的大部分链接主要是文档。

非常感谢。小块。

EN

回答 2

Stack Overflow用户

发布于 2021-09-19 13:04:42

我只是遇到了同样的问题,在互联网上找不到任何有用的信息。但是,在我查看了我的代码之后,我发现这可能是因为我在触发器中传递的参数太少,比如由事件触发的操作需要tbe和/或cache_entry,而您没有将其传递给它们。

票数 1
EN

Stack Overflow用户

发布于 2022-05-23 12:39:03

为了添加更多信息,我认为编译器会检查状态机中声明的结构,并查找一个没有main='false‘的带有AbstractCacheEntry接口的结构,以及一个名为TBE的结构。当找到这两个结构时,触发器接受四个参数,即触发器(Event.addr、CacheEntry、TBE)。

当没有找到这两种结构时,触发器采用两个参数触发器(Event,Addr),您将需要在操作中执行任何查找操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63969494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档