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

    文章

    8728

    浏览量

    152105
  • soc
    soc
    +关注

    关注

    38

    文章

    4218

    浏览量

    219274
  • 总线
    +关注

    关注

    10

    文章

    2908

    浏览量

    88489
收藏 人收藏

    评论

    相关推荐

    EE-82:使用ADSP-2181 DSP的IO空间对另一个ADSP-2181进行IDMA引导

    电子发烧友网站提供《EE-82:使用ADSP-2181 DSP的IO空间对另一个ADSP-2181进行IDMA引导.pdf》资料免费下载
    发表于 01-14 16:21 0次下载
    EE-82:使用ADSP-2181 DSP的IO空间对<b class='flag-5'>另一个</b>ADSP-2181进行IDMA引导

    ADS1256从通道到另一个通道的切换时间是多少?

    各位工程师,你们好。我想问ADS1256从通道到另一个通道的切换时间是多少?急,谢谢
    发表于 01-06 08:08

    AFE4403 SPI总线挂载了两设备,有SPI设备通讯不上是怎么回事?

    你好,我们现在SPI总线挂载了两设备,一个是AFE4403,另一个另一个SPI设备,我发现4403的SPI通讯正常,
    发表于 11-13 07:01

    TAS5715做两通道功放,如果关掉通道,另一个通道功率会变大很多,为什么?

    TAS5715做两通道功放,如果关掉通道,另一个通道功率会变大很多,是什么原因?
    发表于 11-01 06:19

    总线传输周期包括哪四阶段

    的起始阶段,它标志着设备(如CPU)需要访问另一个设备(如内存或I/O设备)的数据或服务。 1.1 请求信号的产生
    的头像 发表于 10-12 09:05 1464次阅读

    tpa3255声道正常,另一个声音大就保护,为什么?

    TPA3255,2XBTL 模式,其中声道正常,另一个大动态时FAULT保护,OTW不亮.两声道带4R电阻负载测试都正常,280W左右,OTW会亮,几十秒后超温亮FAULT灯.
    发表于 10-11 06:43

    双开关控制灯怎么接线

    双开关控制灯的接线方法主要有以下几种,每种方法都有其特定的应用场景和接线方式: 、串联接线法 接线步骤 : 将电源线的火线(L)与
    的头像 发表于 10-09 15:57 8479次阅读

    vca821的Vcc是1和14是否可以只对引脚供电另一个悬空,内部是否是通路?

    vca821的Vcc是1和14是否可以只对引脚供电另一个悬空内部是否是通路
    发表于 09-06 07:05

    瀚海微SD NAND存储功能描述(23)速度等级测量条件和要求

    应用程序提供余量。 注:2级至6级在默认速度模式下以20MHz测量,10级在高速模式下以40MHz测量 注意事项:最低性能是在SD总线使用率达到100%时(访问时不假设有空闲时间),因此不定期写卡会降低性能。 各转速等级性能参数
    的头像 发表于 09-05 10:24 396次阅读

    电感的电流能否分流给另一个电感

    电感的电流能否分流给另一个电感,这个问题涉及到电感器的工作原理、特性以及在电路中的应用。 电感器的基本概念 电感器是种被动电子元件,其主要功能是存储能量。电感器由或多个导线绕成的
    的头像 发表于 08-21 10:02 559次阅读

    用Arduino编写ESP8266程序,定义某个IO为输入,另一个为输出为什么没效果?

    用Arduino编写ESP8266程序,定义某个IO为输入,另一个为输出,为何没效果 以下是代码: #define PIN_LED16 #define PIN_IN 5 void setup
    发表于 06-21 12:02

    如何为SPI OLED显示屏添加另一个设备?

    SPI 数据接口将图像传送到 OLED 显示屏。使用 UVC 应用说明中的说明操作 UVC 部件。如何为 SPI OLED 显示屏添加另一个设备? 谢谢。
    发表于 05-31 06:18

    cubemx在配置的时候加上freertos,freertos配置为时间轮换,会在驱动调用半切换到另一个任务吗?

    我想咨询下贵司的cubemx在配置的时候加上freertos。freertos配置为时间轮换,会在驱动调用半切换到另一个任务吗?另外驱动会有竞争,贵司cubemx生成的HAL层会加锁吗?锁的名称是什么?
    发表于 03-29 07:14

    CYT2CL是否可以通过另一个内核(CM4)控制在内核(CM0+)中配置的 SCB?

    在 CYT2CL 中,是否可以通过另一个内核(CM4)控制在内核(CM0+)中配置的 SCB?
    发表于 03-06 07:53

    在tc275上怎么用核触发另一个核产生软中断?

    在tc275上怎么用核触发另一个核产生软中断?
    发表于 02-19 08:14