HDL FPGA 学习 - Avlon 总线,从端口传输、主端口传输,单周期、可变周期传输

news2024/10/6 14:23:41

目录

1.1 Avlon 总线

定制 外设 IP 核的框架

从端口传输

从端口信号类型

从端口传输模式列举

基本单周期读写传输

固定等待周期的读写传输

可变等待周期的读写传输(推荐)

具有建立时间和保持时间读写传输

主端口传输

主端口信号类型

主端口传输模式列举与参数说明

主端口 单/可变周期 的读传输

主端口 单/可变周期 的写传输

其它 Avalon 传输模式


编辑整理 by Staok,始于 2021.2 且无终稿。转载请注明作者及出处。整理不易,请多支持。

本文件是“瞰百易”计划的一部分,尽量遵循“二项玻”定则,致力于与网络上碎片化严重的现象泾渭分明!

本文系广泛撷取、借鉴和整理,适合刚入门的人阅读和遵守,已经有较多经验的人看一看图个乐,如有错误恭谢指出!本文已经是长期积累和堆叠而形成一定规模,不必按照从前到后的顺序去看,可以挑感兴趣的章节去看。

本文为简述风格,本意即记录要点和便于快速拾起。

本文对应的 Github/Gitee 仓库地址,本文最新的原文 和 一些源码、备查手册等等 均放在里面。


1.1 Avlon 总线

Intel FPGA Avalon 总线,其灵活特点有:

  • 时钟同步的;分主、从信号线和时序,主外设能发起传输;多主多从;
  • 主、从时钟频率可不同,位宽可不同;
  • 专用的地址总线、数据总线和控制总线,支持高达 1024 位的数据宽度、不是 2 的偶数幂的数据宽度;
  • 高性能,易实现,占用资源少,开放使用。
  • 多种模式,时延和时序可调整,定制外设 IP 核超级灵活。

若只使用 Quartus II 的 Qsys 自带的定制的 Avalon 总线外设构建 SOPC 系统,不需了解 Avalon 总线,因为这些自带外设的接口都已经写好了 Avalon 总线,在图形化连接总线时,就是在把各个外设的从 Avalon 接口挂载到 Nios II 的主 Avalon 总线上;若采用用户定制外设构建 SOPC 系统,所开发外设必须符合 Avalon 总线规范,需要熟悉 Avalon 总线。下图为典型 Avalon 架构。下图最右面上下两个外设框分别为用户自定义主端口和用户自定义从端口。

assets/典型Avalon架构.png

Avalon 主端口发起对 Avalon 总线的传输,Avalon 从端口响应来自 Avalon 总线的传输。主从端口对即在某次数据传输过程中,通过 Avalon 总线连接起来的主端口和从端口。

定制 外设 IP 核的框架

assets/定制-外设-IP-核的框架.png

从端口传输

从端口信号类型

*p.s 其中前九个(标粗体的)最常用;不带 “_ n” 后缀的都是高电平有效;还有流水线信号、突发信号、三态信号和流控信号等,没有列出。*

p.s 不带任何读写功能的、最基本信号:clk、reset_n、chipselect、address 四个,即下表中的前四个。

p.s address 地址的信号宽度最好都设置为 32 位宽,地址对齐的时候一一对应,最简便。

p.s Avalon 接口规范没有对 Avalon 外设的信号指定命名规则;Avalon 外设的信号的名字可以与信号类型名相同,也可以遵循 用户 / 系统级的命名规则。

p.s 下表只列基本信号,其它如流水线信号、突发信号、流控制信号、三态信号等不予列出。

信号类型信号宽度方向功能和使用描述
clk1INAvalon从端口的同步时钟,所有信号必须与clk同步,异步外设可以忽略clk信号。
reset_n1IN从外设复位信号。该信号有效时,从外设进入确定的复位状态。
chipselect1INAvalon从端口的片选信号。
address1~32INAvalon从端口的地址线,指定了从外设地址空间的字的地址偏移,要访问外设寄存器的地址,从0x00开始。
read1IN读从端口的请求信号。若使用了该信号,则必须使用readdata或data信号。
readdata1~1024OUT读传输时,输出到Avalon总线的数据线。若使用了该信号,则data信号不能使用。
write1IN写从端口的请求信号。若使用了该信号,必须使用writedata或data信号,writebyteenable信号不能使用。
writedata1~1024IN写传输时,来自Avalon总线的数据线。若使用了该信号,data信号不能使用。
waitrequest1OUT若从端口不能立即响应Avalon总线,用该信号来暂停Avalon总线。用于可变等待周期模式。
irq_n1OUT从外设的中断请求信号。
byteenable2,4,6,8,16,32,64,128IN按字节寻址访问使能信号。在对宽度大于8位的存储器进行写传输时,该信号用于选择特定的字节段。若使用了该信号,writedata信号必须使用,writebyteenable信号不能使用。
writebyteenable2,4,6,8,16,32,64,128IN该信号是byteenable信号和write信号的逻辑与操作。write和byteenable信号不能使用。
Begin transfer1IN在每次传输的第一个周期内有效,使用用法取决于具体外设。

32 位从端口的 byteenable 信号功能定义表如下。

byteenable[3..0]写操作
1111全 32 位写操作
00112 个低字节的写操作
11002 个高字节的写操作
0001字节 0 的写操作
0010字节 1 的写操作
0100字节 2 的写操作
1000字节 3 的写操作

IN (输入)类型的信号都是 Avalon 总线进行置位,从端口不能对其操作,从端口只能操作 OUT (输出)类型的信号。

主端口信号类型表略。

从端口传输模式列举
  • 基本单周期读写时序传输。固定等待周期的读写传输。可变等待周期的读写传输(个人推荐常用)。(只对从端口有)
  • 具有建立时间和保持时间的固定等待周期的读写传输(用于异步外设,了解)。(只对从端口有)
  • 流水线读传输(带固定延迟和可变延迟)。
  • 流控制时序传输。
  • 三态时序传输。
  • 突发时序传输。

下面分别列举时序图。可以看时序图直接上手编写逻辑,但提醒还是先多参考参考,熟悉广泛使用的成熟的编写架构和思路。

基本单周期读写传输

读时序:

assets/基本单周期读时序.png

A 沿为主端口发起 读传输,E 沿 为主端口取走要读的数据;在 E 沿之前从端口的外设必须提前在 readdata 数据线上准备好数据。

基本读传输适用于异步从外设,只要外设被选中或地址发生变化,外设就立刻返回数据。readdata 须在下一个时钟上升沿之前保持稳定。

从端口通常在 clk 下降沿 检测 chipselect 和 read 两个信号同时为高时,就认为一次读传输。

写时序:

assets/基本单周期写时序.png

A 沿为主端口发起 写传输,D 沿为主端口准备好要写的数据,在此沿从端口外设要取走数据。基本写传输适用于片内同步外设。

从端口通常在 clk 下降沿 检测 chipselect 和 write 两个信号同时为高时,就认为一次读传输。从端口可以在 D 沿取走数据。

基本写传输适用于片内同步外设。

固定等待周期的读写传输

读传输:等待周期允许从端口使用一个或多个时钟周期来捕获地址和/或返回有效 readdata,等待周期会影响从端口的吞吐量。

写传输:等待周期允许从端口使用一个或多个时钟周期来捕获地址和 writedata,等待周期会影响从端口的吞吐量。

用于同步外设访问,读传输等待周期是必须的,写传输非必须。

在 Qsys 中导入定制 IP 核时,可设要等待的固定周期,读和写时序的等待周期是一样的;可以在 clk 上升沿检测主端口的 读/写 传输。

读时序:

assets/固定等待周期读时序.png

写时序:

assets/固定等待周期写时序.png

固定等待周期写传输的一个例子:

OLED 定制外设 IP 的部分源码,从端口的写传输实现,VHDL;第二个图是软件设置固定等待周期数,要与源码中的一致。

assets/固定等待周期写-例子.png

可变等待周期的读写传输(推荐)

读传输:等待周期允许从端口使用一个或多个时钟周期来捕获地址和/或返回有效readdata,等待周期会影响从端口的吞吐量。

写传输:等待周期允许从端口使用一个或多个时钟周期来捕获地址和writedata,等待周期会影响从端口的吞吐量。

可变等待周期采用 waitrequest 信号实现,看时序图就容易明白。从端口必须在第一个总线时钟周期内设置 waitrequest 有效,直到从端口处理好数据再置 waitrequest 信号无效,然后总线在下一个时钟上升沿捕获数据,结束本次传输。

读时序:

assets/可变等待周期读时序.png

写时序:

assets/可变等待周期写时序.png

可变等待周期写传输的一个例子:

OLED 定制外设 IP 的部分源码,从端口的写传输实现,VHDL。

./assets/可变等待周期写-例子.png

具有建立时间和保持时间读写传输

具有建立时间和保持时间的固定等待周期的读写传输,用于异步外设,了解。

具有建立时间和固定等待周期的从端口读传输,对于片外从端口异步外设,在主端口发出 read 有效信号之前,需要地址和 chipselect 等信号先稳定一段时间,然后将 read 信号置位有效,这样异步外设可以在 read 上升沿开始根据其他信号做出反应,而不会引起冒险竞争,因为在 read 上升沿时其他信号均已稳定。可以设置固定等待周期。即具有建立时间、固定等待周期的读传输(建立时间和可变等待周期不能同时采用)。下图中,上面的时序图,Tsu 即建立时间。

具有建立时间和保持时间的从端口写传输,对于片外从端口异步外设,在主端口发出 write 有效信号之前,需要 address、byteenable、writedata 和 chipselect 信号保持几个周期的稳定时间。即具有建立时间、固定等待周期、保持时间的写传输。下图中,下面的时序图,C 沿到 E 沿 之间的时间 即建立时间,E 沿到 F 沿 之间的时间 即保持时间。

端口读传输和写传输的建立时间必须相同。

对于一些 ram 等芯片的时序,设置的当可以把 Avalon 总线 直连 此类芯片的总线接口,即该从端口时序通常用于片外外设。

assets/建立-保持时间时序图.png

“建立时间、固定等待周期和保持时间” 属性在 Qsys 中设置;端口读传输和写传输的建立时间必须相同;建立时间和可变等待周期不能同时采用。

主端口传输

主端口信号类型

p.s Avalon 主端口必须有三个信号:clk、address、waitrequest。

p.s 下表只列基本信号,其它如流水线信号、突发信号、流控制信号、三态信号等不予列出。

信号类型信号宽度方向必需功能及使用描述
clk1InYesAvalon主端口的同步时钟, 所有的信号必须与clk同步。
waitrequest1InYes迫使主端口等待, 直到Avalon总线准备好处理传输。
address1~32OutYesAvalon主端口到Avalon总线的地址线。 表示的是一个字节的地址, 主端口只发出字边界的地址。
read1OutNo主端口的读请求信号。 主端口不执行读传输时不需要该信号。 若使用了该信号,readdata或data信号线必须使用
readdata8,16,32,64,128,256,512,1024InNo读传输时,来自Avalon总线的数据线。 当主端口不执行读传输时,不需要该信号。 若使用了该信号,read信号必须使用,data信号不能使用。
write1OutNo主端口的写请求信号,不执行写传输时不需要该信号。使用该信号,writedata或data信号必须使用。
writedata8,16,32,64,128,256,512,1024OutNo写传输时,到Avalon交换架构的数据线。当主端口不执行写传输时,不需要该信号。使用该信号,write信号必须使用,data信号不能使用。
byteenable2,4,6,8,16,32,64,128OutNo字节使能信号。在对宽度大于8位的存储器进行写传输时,该信号用于选择特定的字节段。读传输时,主端口必须置所有的byteenable信号线有效。
Irq1,32InNo中断请求信号。 如果Irq信号是一个32位的矢量信号,那么它的每一位直接对应一个从端口上的中断信号;如果Irq是一个单比特信号,那么它是所有从外设的Irq信号的逻辑或,中断优先级irqnumber信号确定。
irqnumber6InNoirq信号为单比特信号时,使用irqnumber信号来确定外设的中断优先级。 Irqnumber的值越小,所代表的中断优先级越高。
reset1InNo全局复位信号。实现跟外设相关。
resetrequest1OutNo允许外设将整个Avalon系统复位。
主端口传输模式列举与参数说明

主端口传输模式列举:

  • 单 / 可变等待周期 的读写传输。
  • 流水线读传输(带可变延迟)。
  • 流控制时序传输;
  • 三态时序传输;
  • 突发时序传输。

主端口的等待周期、建立时间、保持时间属性:

  • 等待周期:主端口使用 waitrequest 信号接受 Avalon 总线的不确定等待周期。主端口被动地支持可变等待周期,不支持固定等待周期。
  • 建立时间和保持时间:主端口不使用建立和保持时间属性。若一个目标从外设有建立 和/或 保持时间属性,Avalon 总线管理主从端口对的信号时序的转换。
主端口 单/可变周期 的读传输

主端口 单等待周期 的读传输

主端口在 clk 上升沿后紧接着 设置目标外设地址 address 和 置 read 有效,等待 waitrequst 信号失效 便可从 readdata 取数据。

assets/主端口-单周期-的读传输.png

主端口 可变等待周期 的读传输

assets/主端口-可变周期-的读传输.png

主端口 单/可变周期 的写传输

主端口 单等待周期 的写传输

assets/主端口-单等待周期-的写传输.png

主端口 可变等待周期 的写传输

assets/主端口-可变等待周期-的写传输.png

其它 Avalon 传输模式

这里略。

  • 流水线读传输。
  • 流控制时序传输;
  • 三态时序传输;
  • 突发时序传输。
  • 中断与复位,地址对齐等内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1469339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day04-流程控制语句_循环结构(while,do...while,关键字continue,关键字break,循环嵌套)

文章目录 Day04- 循环结构学习目标1 while循环2 do...while循环4 循环语句的区别5 关键字continue6 关键字break7 循环嵌套案例1:打印5行直角三角形案例2:break结束当层循环 Day04- 循环结构 学习目标 理解for语句的格式和执行流程 随机数公式 理解…

MES管理系统生产过程控制的核心要素

MES(制造执行系统)是为优化制造业生产过程和管理而设计的软件系统,其核心要素包括: 工单管理:工单管理是MES系统最基本的功能之一,它可以跟踪和管理各种类型的工单,如生产工单、维修工单和质量…

IO进程线程复习:进程线程、通信

1.进程的创建 #include<myhead.h>int main(int argc, const char *argv[]) {printf("hello world\n");//父进程执行的内容int num520;//在父进程中定义的变量pid_t pidfork();//创建子进程if(pid>0){while(1){printf("我是父进程&#xff0c;num%d\n&…

【ubuntu】永久修改主机名

文章目录 1. 问题描述2. 解决方案 1. 问题描述 主机名过长&#xff08;后面的部分&#xff09; 2. 解决方案 查看主机名详情 hostnamectl修改指定主机名 hostnamectl set-hostname ubuntu2204 --static登出重进即可

【Java程序设计】【C00279】基于Springboot的智慧外贸平台(有论文)

基于Springboot的智慧外贸平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的智慧外贸平台 本系统分为系统功能模块、管理员功能模块、买家功能模块以及商家功能模块。 系统功能模块&#xff1a;在平台首页可以…

五篇保姆级分类诊断教程,数据特征提取+优化算法+机器学习

今天水一期&#xff0c;总结一下以前写过的几篇保姆级故障诊断。学会这几篇&#xff0c;机器学习的故障诊断你就基本合格了&#xff01; 本期内容&#xff1a;基于SABO-VMD-CNN-SVM的分类诊断。 依旧是采用经典的西储大学轴承数据。基本流程如下&#xff1a; 首先是以最小包络熵…

java spring 01 IOC源码

01.spring 中的基础是IOC

动态规划课堂1-----斐波那契数列模型

目录 动态规划的概念&#xff1a; 动态规划的解法流程&#xff1a; 题目: 第 N 个泰波那契数 解法&#xff08;动态规划&#xff09; 代码&#xff1a; 优化&#xff1a; 题目&#xff1a;最小花费爬楼梯 解法&#xff08;动态规划&#xff09; 解法1&#xff1a; 解…

mybatis中foreach批量插入并返回主键

背景 批量插入多条数据,插入成功之后每条数据中需要返回自增主键.处理办法 1.确定项目中mybatis版本,要求3.3.1以上. 查看springboot中项目版本方法: pom.xml中进入依赖(Ctrl点击进入): <dependency><groupId>org.mybatis.spring.boot</groupId><artifac…

【Flink精讲】Flink 内存管理

面临的问题 目前&#xff0c; 大数据计算引擎主要用 Java 或是基于 JVM 的编程语言实现的&#xff0c;例如 Apache Hadoop、 Apache Spark、 Apache Drill、 Apache Flink 等。 Java 语言的好处在于程序员不需要太关注底层内存资源的管理&#xff0c;但同样会面临一个问题&…

【安卓逆向】app防止截屏分析与去除

本次分析的app name为&#xff1a;5paH5qGI54uX 这款应用打开之后里面的内容是不允许截图的&#xff0c;防止截图分析&#xff1a;Android应用防止截屏_landroid/view/window;->setflags 0x2000-CSDN博客 App防止恶意截屏功能的方法&#xff1a;iOS、Android和鸿蒙系统的实…

130.乐理基础-倍增音程、倍减音程

上一个内容&#xff1a;129.乐理基础-曾音程、减音程、等音程-CSDN博客 上一个内容里练习的答案&#xff1a; 倍减音程指的是&#xff1a;比减几度还要小二分之一音数的就叫做倍减几度&#xff0c;如下图 反过来说比增还要打二分之一的是倍增 例子1&#xff1a; 例子2&#xf…

[计网底层小探索]:实现并部署多线程并发Tcp服务器框架(基于生产者消费者模型的线程池结构)

文章目录 一.网络层与传输层协议sockaddr结构体继承体系(Linux体系)贯穿计算机系统的网络通信架构图示: 二.实现并部署多线程并发Tcp服务器框架线程池模块序列化反序列化工具模块通信信道建立模块服务器主体模块任务回调模块(根据具体应用场景可重构)Tips:DebugC代码过程中遇到…

成功解决ModuleNotFoundError: No module named ‘cv2’

&#x1f525; 成功解决ModuleNotFoundError: No module named ‘cv2’ &#x1f525; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 …

如何安装自定义模块?

自定义模块的安装方式如下&#xff1a; 进行了这些操作之后&#xff0c;你就会发现&#xff0c;自己写的代码块&#xff0c;成了可以调用的模块了。

【项目实战】帮美女老师做一个点名小程序(Python tkinter)

前言 博主有一个非常漂亮的老师朋友&#x1f60d;。最近&#xff0c;她急需一个能够实现随机点名的小程序&#xff0c;而博主正好擅长这方面的技术&#x1f90f;。所以&#xff0c;今天博主决定为她制作一个专门用于点名的小程序&#x1f4aa;。 博主在美女老师面前吹完牛皮之…

消息中间件篇之RabbitMQ-消息不丢失

一、生产者确认机制 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后&#xff0c;会返回一个结果给发送者&#xff0c;表示消息是否处理成功。 当消息没有到交换机就失败了&#xff0c;就会返回publish-confirm。当消息没有到达MQ时&…

OT 安全解决方案:探索技术

IT 和 OT 安全的融合&#xff1a;更好的防御方法 OT 安全解决方案下一个时代&#xff1a; 为了应对不断升级的威胁形势&#xff0c;组织认识到迫切需要采用统一的信息技术 (IT) 和运营技术 (OT) 安全方法。IT 和 OT 安全的融合代表了一种范式转变&#xff0c;承认这些传统孤立领…

vue-nextTick(nextTick---入门到离职系列)

官方定义 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM。 个人理解 假设我们更改了某个 dom 元素内部的文本&#xff0c;而这时候我们想直接打印这个更改之后的文本是需要 dom 更新之后才会实现的。 小案例 <tem…

WordPress前端如何使用跟后台一样的Dashicons图标字体?

很多站长都喜欢在站点菜单或其他地方添加一些图标字体&#xff0c;常用的就是添加Font Awesome 图标和阿里巴巴矢量库图标iconfont。其实我们使用的 WordPress 本身就有一套管理员使用的官方图标字体 Dashicons&#xff0c;登录我们站点后台就能看到这些图标字体。那么有没有可…