0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Wishbone II交易总线:速度的另一个等级

星星科技指导员 来源:嵌入式计算设计 作者:Uros Platise 2022-11-14 15:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

OpenCore和Silicore的Wishbone规范,旨在提供标准的IP核互连方案,以满足现代片上系统(SoC)设计的要求,包括CPUDMA引擎,内存接口,外设接口等。

andEuros公司自成立以来一直使用Wishbone规范,并开发了Wishbone总线的改进版本,称为Wishbone II,以提出一种先进的流水线架构,其中读写事务是分开的,总线充当事务总线。通过这种方式,可以同时进行多个事务,通过采用新的每单元锁定概念,消除路径上的所有延迟并停止 RMW 周期。当然,最终的好处是最终总线吞吐量已增加到最大。

大规模FPGA/ASIC SoC设计的设计和开发迫使设计人员实现具有标准化模块接口的模块化架构,该接口以任何可能的配置连接各种IP模块。OpenCores发布了最流行的互连架构之一,称为Wishbone B.3总线。以类似的方式,Altera引入了自己的互连方案,称为Avalon Bus,SOPC Builder和Nios(II)系统就是围绕该方案制造的。Xilinx 还推出了自己的总线,称为片上外设总线与处理器本地总线 相结合。

这些互连架构是面向单事务主/从的,这意味着只要没有收到该字,从给定地址请求单词的 CPU 就会停止自身和到目标的路径(总线)。以这种方式丢失了大量总线周期,尽管系统总线频率相对较高,但实际数据吞吐量仍低于预期。即使特殊信号引入了快速突发读取和写入,总线周期仍然会丢失,直到接收到第一个字,代价是源和目标两端的突发逻辑加倍。当访问具有较大延迟的较慢模块时,总线停滞更为明显。在这些情况下,系统性能会显著下降;例如,100 MHz 系统的吞吐量可能会下降到每秒几 MB。

这就是为什么迫切需要开发采用新概念的总线架构的原因。引入了一些新信号来支持基于 Wishbone B.3 架构的新事务总线概念,克服了延迟问题,同时保持了向后兼容性。

叉骨II交易总线概念

在我们提议的总线中,交易由一个交易向量表示,其中包含:

源(模块)地址

目标(模块)地址

算子

数据

源地址和目标地址定义路径;操作员描述要沿路径和/或目标地址执行的一个或多个操作;某些操作需要提供补充数据才能完成交易。实际实现需要额外的握手信号。

事务向量被放置在事务总线上,将向量从源传输到目标,并根据向量的请求执行面向总线的操作。一旦事务向量被放置(发送),源就没有进一步的责任,事务总线将完全控制它。然后,源已准备好发出下一个事务向量。可以事先发出多个任务或请求,每个总线周期一个,这减少了目标模块上任何预测逻辑的需求,以支持突发读取或写入作为各种突发读取的预测逻辑。

有两种类型的事务:

独立

依赖(当它们的顺序很重要时)

为了支持依赖事务,事务总线绝不能更改已放置事务的顺序。事务总线具有完全确认的机制,用于接受新的事务向量、执行内部转发并传递到目标模块。透明架构将自身反映为一个简单的输入输出黑匣子;但是,该实现基于多管道结构,其中每个 (FIFO) 行包含一个事务向量。

Wishbone II 事务总线仅提供四种基本操作:

单次读取

单次写入

细胞锁

总线锁

单次读取和写入由模块发出,其中单元和总线锁定操作位于事务总线域中。突发读取和突发写入是通过发出读取或写入事务流来完成的。RMW周期通过总线得到支持,甚至更好的是,可以使用新的单元锁定概念来促进它们,该概念不会使整个SoC总线停滞,而是将单个或多个存储单元锁定到给定的所有者。只要未解锁,其他人就无法访问这些单元格。

叉骨II信号

Wishbone II 事务向量由 Wishbone B.3 规范组成,引入了以下新信号:

WB_ACW写入确认

WB_ACR阅读致谢

WB_TGA双向地址标签

WB_ALK地址锁

在进一步的文本中,前缀WB可以更改为WBM表示主接口,WBS表示从接口,也可以留空以描述任何主接口或从接口。输入信号附加在末尾_I,输出信号带有_O。建议的总线丢弃了Wishbone B.3 ACK信号,因为它的功能现在在ACR和ACW信号之间分配。表1列出了主机和从站的完整基本信号说明。新信号以粗体标记。

叉骨二期巴士交易

写入事务

写入事务几乎与 Wishbone B.3 规范中给出的写入事务相同,除了 Wishbone II 使用 ACW 信号来确认写入周期。读写事务由与写入事务相同的读取请求组成,只是设置了目标操作信号 WE。

读取事务

读取事务由两个事务组成:

源发出的读取请求事务

目标发出的读取响应事务

读取请求由表示源的主模块发送,方法是首先发出一个写入事务,并将目标操作 WE 设置为读取。主机应设置地址标记写入向量以识别读取响应。(如果只有一个主控形状,则不需要这样做。读取请求事务的确认方式与写入事务相同。

目标通过返回由确认信号 ACR 标记的单独读取响应事务并提供有效数据和地址标记读取信息来完成事务。地址标记读取是地址标记写入的副本。

图1显示了一个示例系统,在源(主)和目标(从)设备之间的写入(输入)和读取(输出)路径上有一个流水线级。该系统在两个方向上都有 1 个循环方向;因此,请求-响应循环至少需要 2 个等待周期。从属(内存)还可以执行一些内部管理,如刷新,这增加了等待状态的总数。

图1

21

您可以看到,图 2 描述了给定示例的事务总线数据流图,其中主站放置的三个读取请求事务为 AD0、AD1 和 AD2,以及关联的返回读取响应事务为 DO0、DO1 和 DO2。假设所有三个事务的信号 WE 都被清除,以指示读取操作。事务 AD0 和 AD1 是突发事务,这意味着 AD1 = AD0 + 1,而 AD2 是同时触发的独立事务,可能是加载其中断向量的外部中断的原因,依此类推。

图2

22

每个读取请求事务由 ACW 信号确认,返回的读取响应事务由 ACR 信号标记(确认)。请注意,由于其他更高优先级的主节点或内存刷新函数等原因,延迟顺序可能不同。在前面的示例中,AD0 会立即得到确认,但需要 3 个等待周期才能返回 DO0;AD1 在 1 个周期后得到确认,而 DO1 仅在 2 个等待周期内返回,DO2 再次需要 3 个等待周期。所有三笔交易都在 9 个周期内完成;理论上,如果不添加两个说明性等待周期,它们只会在 7 个周期内完成。使用 Wishbone B.3 规范时,图 3 显示了相同的场景。

图3

23

AD0和AD1再次为突发,AD1 = AD0 + 1,AD2为独立请求。所有三个事务都在 12 个周期内完成,性能降低了 41%(在 Wishbone II 中至少 7 个周期),即使额外的硅成本,这是源和目标两端的内存突发逻辑实现。

想象一下,当系统中共存多个主站以发出第一个单词时,连续突发 Wishbone II 将在从属端执行 0 个等待周期(完全消除延迟)并且绝对没有损失(再次是 0 个等待周期)。对于以 150 MHz 运行的系统来说,更能说明问题,固定延迟为 2 个周期的长突发将产生 150 M 字的 Wishbone II 带宽,而 Wishbone B.3 仅产生 50 Mwords 的带宽。

读写周期和专用总线/地址锁定

可以使用总线 LOCK 信号进行读-修改-写循环,方法是发出读取请求和 LOCK 信号集,等待读取响应,然后进行写入,最后释放 LOCK。为了不使整个总线失速,Wishbone II 引入了使用 ALK 信号的每单元内存锁定功能,该功能的使用方式与 Wishbone LOCK 信号几乎相同,只是它不会停止整个总线,而是授予对由源 TGA 区分的给定模块的独占权限。

叉骨II驶向未来

Wishbone II 总线为 FPGA 和 ASIC 的 SoC 设计提出了一种面向事务总线的高级架构,其中架构写入和读取操作作为单独的写入和读取事务处理。每个事务都存储在一行中,多管道架构充当 FIFO 缓冲区,从多个源模块和目标模块传输多个事务。先进的锁定机制使用临时的每单元锁定机制,防止整个总线因 RMW 周期而失速。通过这种方式,整体设计数据吞吐量提高到最大,同时设计成功集成了慢速和高速、低延迟和高延迟外设和 CPU。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    9588

    浏览量

    157591
  • soc
    soc
    +关注

    关注

    40

    文章

    4619

    浏览量

    230078
  • 总线
    +关注

    关注

    10

    文章

    3055

    浏览量

    91856
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    利用泰克示波器 CAN 总线解码器加快 CAN 总线的故障排除速度

    标准规定了几种不同的数据速率,1 Mb/s 为 CAN 的最快速率。最新版本的 CAN FD(灵活数据速率)已经将传输速度提升至 10 Mb/s,同时还提高了数据包有效载荷数据字段的最大长度。为了保持信号质量,总线需要在电缆的两端使用 120Ω 终端电阻,以确保阻抗匹配。
    的头像 发表于 04-17 17:35 564次阅读
    利用泰克示波器 CAN <b class='flag-5'>总线</b>解码器加快 CAN <b class='flag-5'>总线</b>的故障排除<b class='flag-5'>速度</b>

    是否可以使用两侧 3.3V 的PCA9306断开 I2C 总线

    是否可以使用两侧 3.3V 的PCA9306断开 I2C总线?或者有更好的解决方案吗?速度并不重要,总线的设备端只有 4 从机,另一侧连接
    发表于 04-17 10:13

    请问VisionFive 2 支持哪些 SD 卡速度

    是我目前使用的,但我希望有更好的性能。 另一个方面是 nvme 使用起来不那么方便,因为我必须将 nvme 拧到位,这样会浪费很多时间。 SD卡用于推入/推出卡的小工具要方便得多。 我不明白为什么他们不能对 nvme 做同样的事情。 我发现 nvme 行业在这方面有点迟钝。
    发表于 02-06 07:02

    元服务交易评价

    功能简介 元服务交易评价是元服务平台官方提供的,反映用户对元服务交易体验的评价系统。在元服务中产生交易的用户,可以针对本元服务的交易体验进行打分、发表评论。 真实的评价内容可以帮助用户
    发表于 12-29 10:35

    请问Keil的优化等级到底该如何选择?

    在Keil MDK(Microcontroller Development Kit)中,优化等级是编译器的核心设置之,它直接影响生成代码的大小、执行速度和调试便利性。选择合适的优化等级
    发表于 11-20 07:51

    e203接口ICB转wishbone,怎么操作?

    我在用e203搭mcu,用wishbone总线实现mcu,看到e203有ICB转wishbone模块,但是8位的又和I2C总线有关,不太明白,我要的是32位的,应该怎么改,这部分转换能
    发表于 11-10 07:15

    液晶屏 智能显示模块有多个画面时怎么切换到另一个画面?

    请问 液晶屏智能显示模块有多个画面时怎么切换到另一个画面?
    发表于 10-25 10:46

    灯具IP防护等级测试标准

    (IngressProtection)等级。IP防护等级用于表示灯具外壳对固体异物(如灰尘)和液体(水)进入的防护能力,由两个数字组成,例如IP65。第一个数字表示防尘等级,第二
    的头像 发表于 10-17 16:13 3106次阅读
    灯具IP防护<b class='flag-5'>等级</b>测试标准

    配电柜IP等级测试

    、什么是IP等级?IP等级(防护等级)是国际标准化组织(ISO)对电子设备防护性能的种评估方式,旨在显示设备对外界物质(如固体物体和液体
    的头像 发表于 10-17 11:37 806次阅读
    配电柜IP<b class='flag-5'>等级</b>测试

    在PSoC™ 41xx 系列的代码执行期间是否可以将运算放大器重新分配给另一个引脚?

    您能否确认在PSoC™ 41xx 系列的代码执行期间是否可以将运算放大器重新分配给另一个引脚? 目标是让设备配备 2 运算放大器来测量和放大 2
    发表于 08-15 07:05

    如何用Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录引导程序bootlaoder

    本文介绍了如何用能够Arduino IDE下载的Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录引导程序bootlaoder
    的头像 发表于 08-08 20:16 3923次阅读
    如何用Arduino Nano/UNO R3开发板给<b class='flag-5'>另一个</b>Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录引导程序bootlaoder

    CYUSB FX3如何使用GPIF II

    我目前正在阅读手册并检查如何使用 CYUSB FX3。 我有关于如何使用 GPIF II 的问题。 我想配置16位数据总线、16位地址总线
    发表于 05-13 07:56

    使用8位数据总线时,FX3的GPIF II DQ[15:8]状态如何?

    我使用CYUSB 3013 -BZXC FX3 设备(16 位 GPIF II 数据总线版本)从 ADC 采集数据。ADC 为 10 位,但通常 8 位就足够了,因此我制作了两不同的状态机,分别
    发表于 05-09 06:44

    技术干货 | 聊聊功能安全中的ASIL 等级

    项目开发初期概念阶段就要根据相关项的功能进行失效分析,从而确定ASIL等级,以量化的方法平衡该项目开发时的安全与成本。、ASIL等级定义ASIL等级的确定基于三
    的头像 发表于 05-08 14:47 3490次阅读
    技术干货 | 聊<b class='flag-5'>一</b>聊功能安全中的ASIL <b class='flag-5'>等级</b>

    请问canmv-k230支持双核吗?如何调用另一个核心工作?

    系统使用的是Canmv-K230-micropython-V1.2.2版本. K230是双核芯片,在使用canmv-k230上没找到关于另一个核心的调用方法。 请问如何调用另一个核心工作? 你好
    发表于 04-23 06:35