以下内容摘自《步步惊芯——软核处理器内部设计分析》一书

PC机一般都提供PCI插槽,各种板卡(包括显卡、语音卡、网卡,甚至用户自制的板卡)只要满足PCI接口标准,就可以直接插在PC机的PCI插槽使用,十分方便。同样的道理,目前有很多IP核的研发者或公司,为了方便不同研发者或公司的IP核能够直接连接,就要求这些IP核遵守共同的接口标准。在片上系统(SoC)中,处理器核与其他IP核通过共享总线互通互联,这些IP核必须遵守相同的总线规范。总线规范定义了IP核之间的通用接口。目前常见的片上总线规范有ARM公司的AMBA、IBM公司的CoreConnect、Altera公司的Avalon,以及本节介绍的Wishbone,笔者不对这些规范进行比较,只介绍Wishbone规范。

Wishbone总线规范是Silicore公司最先提出的,由于其开放性,现在已有不少用户群,特别是一些免费的IP核,大多数都采用Wishbone规范。Wishbone除了开放、免费,还有简单、灵活、轻量、支持用户自定义标签的特点。目前已有B4版本的规范,OR1200中遵循的是Wishbone B2与B3版本的规范,用户可以自行配置是采用B2还是B3规范。

Wishbone有多种互联方式:点对点、数据流、共享总线、交叉互联等。OR1200内部使用的都是点对点连接方式。在点对点连接方式中,有一个主设备,一个从设备,连接关系如图3.3所示,注意图中输出信号使用“_O”结束,输入信号使用“_I”结束,同时所有的信号都是高电平有效。

图3.3 Wishbone总线规范点对点互联方式

图3.3中主从设备接口的含义如下:

(1)CLK_I、RST_I:分别是时钟信号、复位信号,由外部输入。

(2)DAT_O/DAT_I:主设备和从设备的之间的数据信号,数据可以由主设备传送给从设备,也可以由从设备传送给主设备。一对主设备和从设备之间最多存在两条数据总线,一条用于主设备向从设备传输数据,另一条用于从设备向主设备传输数据。

(3)ADR_O/ADR_I:地址信号,主设备输出地址到从设备。

(4)WE_O/WE_I:写使能信号,主设备输出到从设备,代表当前周期中进行的操作是写操作还是读操作,1代表写,0代表读。

(5)SEL_O/SEL_I:数据总线选择信号,标识当前操作中数据总线上哪些比特是有效的,以总线粒度为单位。SEL_O/SEL_I的宽度为数据总线宽度除以数据总线粒度。比如一个具有32位宽、粒度为1个字节的数据总线的选择信号应定义为SEL_O(3:0)/SEL_I(3:0),SEL(4’b1001)代表当前操作中数据总线的最高和最低字节有效。

(6)CYC_O/CYC_I:总线周期信号,CYC_O/CYC_I有效代表一个主设备请求总线使用权或者正在占有总线,但是不一定正在进行总线操作(是否正在进行总线操作取决于选通信号STB_O/STB_I是否有效)。只有该信号有效,Wishbone主设备和从设备之间的其它信号才有意义。CYC_O/CYC_I信号在一次总线操作过程中必须持续有效,比如一次块读操作可能需要多个时钟周期,那么CYC_O/CYC_I信号必须在多个时钟周期中持续有效。

(7)STB_O/STB_I:选通信号。选通有效代表主设备发起一次总线操作。只有选通信号有效时(此时CYC_O/CYC_I也必须为高),ADR_O/ADR_I、DAT_O/DAT_I、SEL_O/SEL_I才有意义。

(8)ACK_O/ACK_I:实际还可以有ERR_O/ERR_I、RTY_O/RTY_I,都表示主从设备间的操作结束方式信号。ACK 表示成功,ERR 表示错误,RTY 表示重试。操作总是在某一总线周期内完成的,因此操作结束方式也称为总线周期结束方式。成功是操作的正常结束方式,错误表示操作失败,造成失败的原因可能是地址或者数据校验错误,写操作或者读操作不支持等。重试表示从设备当前忙,不能及时处理该操作,可以稍后重新发起。接收到操作失败或者重试后,主设备如何响应取决于主设备的设计者。

(9)TAGN_O/TAGN_I:标签信号,用户可以利用标签信号传递自定义的信息。

一个总线周期由多个不同的时钟周期构成,完成单次读/写操作、块读/写操作、读改写操作,总线周期也相应分为单次读/写周期、块读/写周期、读改写周期。本节重点介绍单次读/写周期。

一般情况下,一次操作由主设备和从设备控制信号的一次握手,以及同时进行的地址和数据总线的一次传输构成。当主设备将CYC_O置高,一个总线周期开始,此后当STB_O为高时,一次总线操作开始。CYC_O和STB_O可以同时从低电平变为高电平,表示发起总线周期的同时开始一次总线操作,因此在只有一个主设备时可以将两者合并为一个信号。在OR1200中就直接将CYC_O、STB_O合并成CYCSTB_O。

主从设备之间信号虽然很多,但单次读写操作实际上十分简单。单次读操作的Wishbone总线信号如图3.4所示,此处是从主设备的角度观察信号变化。

图3.4 Wishbone总线单次读操作时主设备的信号(不考虑TAGN_O/TAGN_I)

在时钟上升沿0,主设备将地址信号ADR_O、适当的SEL_O放到总线上,将WE_O置低表示读操作,将CYC_O、STB_O置高表示一次总线操作开始。在时钟上升沿1到达之前,从设备检测到主设备发起的操作,将适当的数据放到主设备的输入信号DAT_I,同时将主设备的ACK_I置高作为对主设备STB_O的响应。从设备可以在ACK_I有效之前插入任意数量的等待状态。

在时钟上升沿1,主设备发现ACK_I信号为高,将DAT_I采样,并将STB_O和CYC_O置低表示操作完成。从设备发现STB_O置低后,将主设备的输入信号ACK_I也置低。单次读操作就完成了。

单次写操作的Wishbone总线信号如图3.5所示,此处还是从主设备的角度观察信号变化。

图3.5 Wishbone总线单次写操作时主设备的信号(不考虑TAGN_O/TAGN_I)

在时钟上升沿0,主设备将地址信号ADR_O、数据信号DAT_O放到总线上,将WE_O置高表示写操作,将适当的SEL_O放到总线上指示从设备DAT_O中哪些字节是有效的,将CYC_O、STB_O置高表示一次总线操作开始。

在时钟上升沿1到达之前,从设备检测到主设备发起的操作,将锁存DAT_O的数据,同时将主设备的ACK_I置高作为对主设备STB_O的响应。从设备可以在ACK_I有效之前插入任意数量的等待状态。

在时钟上升沿1,主设备发现ACK_I信号为高,将STB_O和CYC_O置低表示操作完成。从设备发现STB_O置低后,将主设备的输入信号ACK_I也置低。单次写操作就完成了。

以上介绍了Wishbone总线规范的单次读/写操作的操作周期,在OR1200中将STB_O与CYC_O合并成了一个信号CYCSTB_O,所以对于单次读/写操作我们可以简单的认为CYCSTB_O为1时,总线操作开始,依据WE_O的值决定是读还是写,当ACK_I为1时表示总线操作结束。

读/写周期实际就是连续的多个单次读/写周期,在块读/写周期中CYC_O、STB_O持续有效,本章3.6节的理想取指模型中使用的就是块读/写周期。

在第一章介绍OR1200内各个模块的时候提到模块WB_BIU,这是一个Wishbone总线接口单元,使得OR1200可以访问具备Wishbone总线接口的外设、存储器等。实际在OR1200内部也大量使用到了Wishbone规范,比如:CPU模块与IMMU、IMMU与QMEM、QMEM与ICache、ICache与WB_BIU之间都使用到了Wishbone总线规范。图3.6中加粗的连线表示模块之间使用的是Wishbone总线规范。使用的都是点对点互联标准。

图3.6 Wishbone总线规范在OR1200内部大量使用

Wishbone总线快速了解相关推荐

  1. 片上总线Wishbone 学习(二)Wishbone总线标准介绍

    片上总线Wishbone 学习(二)Wishbone总线标准介绍 Wishbone总线产生.发展 市场是推动技术前进的主要动力,人们对各种电子产品不断的更新,更好,更完美的追求刺激了技术的不断升级和创 ...

  2. OR1200处理器中Wishbone总线接口模块WB_BIU介绍

    下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 WB_BIU模块是OR1200处理器与外部Wishbone总线连接的接口模块.15.1节给出了WB_BIU模块的对外连接关系,并指出 ...

  3. AMBA与Wishbone总线简介

    什么是AMBA片上总线? 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的So ...

  4. 使用STM32Cube MX为STM32 CAN总线快速配置上手教程_HAL库_CAN协议_STM32_附波特率计算工具

    使用STM32Cube MX为STM32 CAN总线快速上手教程_HAL库_CAN协议_STM32 前言 博主也是刚接触CAN协议的新手,如有不对的地方欢迎交流 本文旨在使用STM32Cube MX快 ...

  5. 经济型EtherCAT运动控制器(十):EtherCAT总线快速入门

    本节主要介绍XPLC006E多轴经济型EtherCAT总线运动控制器控制EtherCAT总线驱动器的方法,分别介绍硬件接线方法,控制器与EtherCAT总线驱动器如何通讯,EtherCAT总线驱动器相 ...

  6. 步步惊“芯”——软核处理器内部设计分析

    <步步惊"芯"--软核处理器内部设计分析> 基本信息 作者: 雷思磊 出版社:电子工业出版社 ISBN:9787121204890 上架时间:2013-6-22 出版日 ...

  7. 新书出版:步步惊“芯” —软核处理器内部设计分析

    china-pub预售地址:http://product.china-pub.com/3768163 内容简介 ······ 本书以开源32位软核处理器OR1200为研究对象,像引导读者如做解剖学实验 ...

  8. 片上总线Wishbone 学习—— 转载请注明出处:http://blog.csdn.net/ce123

    片上总线Wishbone 学习(零)前言 声明:版权所有,欢迎转载! 转载请注明出处:http://blog.csdn.net/ce123 为了更加升入的理解片上系统,比如S3C2440等,今天开始学 ...

  9. 片上总线Wishbone 学习(一)片上总线综述

    转自http://blog.csdn.net/ce123_zhouwei/article/details/6926425 片上总线Wishbone 学习(一)片上总线综述 1 引言 传统的IC设计方法 ...

最新文章

  1. userscript.user.js 文件头
  2. 微软:“不好意思,我们还不够Cool,不能运行”
  3. jeesite如何已生成数据的数据源_如何在postman中自动生成接口请求数据,这个功能你需要知道,可结合浏览器和两大抓包工具使用...
  4. 《程序员面试宝典》精华 底层部分
  5. 人工智能重点汇总(搜索策略、博弈、贝叶斯、SVM、神经网络、弧相容、SVM、决策树、反向传播、卷积神经网络)
  6. 去除NSLog时间戳及其他输出信息
  7. paper 134:结构张量structure tensor(二)
  8. word2vec数学原理详解
  9. 解决mac系统大小写切换异常问题
  10. unison实现文件双向同步
  11. NYOJ-845-无主之地1-2013年11月3日00:08:18
  12. Latex大括号及多行公式
  13. 酷宇宙大学:代币经济学(第四课)如何评估代币的效用?
  14. 内蒙古大学计算机学院团支部书记,内蒙古大学团委鼓励研支团勇做新时代弄潮儿...
  15. CUDA编程: GPU与CPU之间使用全局统一内存的完整代码及编译
  16. 《阿凡达2》中的图鲲,我找到了现实中的原型!
  17. [程序员学英语]英语发音规则
  18. 计算机网络路由器的配置连接不上,为什么路由器连接不上_我的电脑换了一个路由器怎么就连接不上网络呢...
  19. 关于 GeneXus 起源的几点思考
  20. 2019年高考数学立体几何解题技巧分析策略

热门文章

  1. Mac升级node版本
  2. MSM8916 海信M9模块学习记录一:编译及烧录android5.1源码
  3. 【多元统计分析】09.独立性检验与正态性检验
  4. 教资篇(1)—高中信息技术科目
  5. uni-app的video禁止快进及seek()上的小坑
  6. flask项目中出现Error: While importing ‘manager‘, an ImportError was raised.
  7. HDU - 4960 Another OCD Patient 真实的DP
  8. ROS moveit cartesian_demo 机械臂笛卡尔空间路径速度限制
  9. mixpanel实验教程(2) 支持你啊
  10. 什么是人工智能?你需要知道的关于人工智能的一切