Axi接口的DDR3:参数,时序,握手机制

news2024/9/30 11:33:28

参考

AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?_axi wrap-CSDN博客

 还有官方手册,名字太长想起来再写。

Transaction/Burst/Transfer/Beat

        Transaction指一次传输事务,实际上包括了address phase, data phase与response phase,但由于AXI协议主要为data的传输服务,且AXI的data传输为burst-based,因此通常将Transaction与Burst等同。
        Transfer是Burst的组成元素,一个Burst可以由一个或多个Transfer构成。而一个Beat指一拍,如果一个Transfer只需一拍,那么Transfer也可以等同于Beat。

总结:Transaction ≈ Burst > Transfer ≈ Beat。

对齐


        根据对齐长度的不同,分为几类:

        对单个transfer的num_of_bytes对齐,即start_addr可以被num_of_bytes整除,称为对齐传输、否则为非对齐传输。在非对齐传输中,可能会存在某些Byte无效的情况,通过STRB进行byte valid的标识。一般所说的对齐指的就是这种对齐。
        对单个burst的总byte量(num_of_bytes * burst_len)对齐,

        此时WRAP传输的start_addr = lower_bound_addr。即不存在到达上界回卷的情况,与INCR无异。这种对齐通常是用于计算WRAP的边界地址的。

参数

s_axi_awlen:Burst length

s_axi_awsize:Burst size

        字节数 = 2^s_axi_awsize

        如果 AXI 总线比突发大小更宽,则 AXI 接口必须根据传输地址确定每次传输要使用数据总线的哪些字节通道。请参见第 A3-52 页的数据读写结构。
        任何传输的大小不得超过事务中任一代理的数据总线宽度

数值和

位宽挂钩。

s_axi_awburst:Burst type

        INCR最常用。其余的类似于交叉读写。

FIXED

In a fixed burst:

        • The address is the same for every transfer in the burst.
        • The byte lanes that are valid are constant for all beats in the burst. However, within those byte lanes, the actual bytes that have WSTRB asserted can differ for each beat in the burst.
This burst type is used for repeated accesses to the same location such as when loading or emptying a FIFO.

         • 突发中每次传输的地址都相同。
        • 有效的字节通道对于突发中的所有节拍都是恒定的。然而,在这些字节通道内,对于突发中的每个节拍,已置位 WSTRB 的实际字节可能有所不同。
        此突发类型用于重复访问同一位置,例如加载或清空 FIFO 时。

  1. 同一个burst内每个transfer的地址保持一致。
  2. 同一个burst内byte lanes保持一致,但可以通过WSTRB选择每个transfer的有效bytes。
  3. 常用于对同一位置的重复访问,例如读或清空FIFO。
INCR

        Incrementing.

        In an incrementing burst, the address for each transfer in the burst is an increment of the address for the previous transfer. The increment value depends on the size of the transfer. For example, the address for each transfer in a burst with a size of four bytes is the previous address plus four.

        This burst type is used for accesses to normal sequential memory

        在递增突发中,突发中每次传输的地址是前一次传输的地址的增量。增量值取决于传输的大小。例如,大小为四个字节的突发中每次传输的地址是前一个地址加四。
        这种突发类型用于访问正常的顺序内存。

  1. 同一个burst内地址随transfer递增。
  2. 地址递增量为一个transfer的大小。
  3. 常用于对normal sequential memory的访问。
WRAP

         A wrapping burst is similar to an incrementing burst, except that the address wraps around to a lower address if an upper address limit is reached.

        The following restrictions apply to wrapping bursts:

        • the start address must be aligned to the size of each transfer

        • the length of the burst must be 2, 4, 8, or 16 transfers.

        The behavior of a wrapping burst is:

        • The lowest address used by the burst is aligned to the total size of the data to be transferred, that is, to ((size of each transfer in the burst) × (number of transfers in the burst)). This address is defined as the wrap boundary.

        • After each transfer, the address increments in the same way as for an INCR burst. However, if this incremented address is ((wrap boundary) + (total size of data to be transferred)) then the address wraps round to the wrap boundary.

        • The first transfer in the burst can use an address that is higher than the wrap boundary, subject to the restrictions that apply to wrapping bursts. This means that the address wraps for any WRAP burst for which the first address is higher than the wrap boundary.

        This burst type is used for cache line accesses.

        回绕突发与递增突发类似,不同之处在于,如果达到地址上限,则地址回绕到较低地址。

        以下限制适用于回绕突发:

        • 起始地址必须与每次传输的大小对齐。

        • 突发的长度必须为 2、4、8 或 16 个传输。

        回绕突发的行为是:

        • 突发使用的最低地址与要传输的数据的总大小对齐,

        即与((突发中每次传输的大小)×(突发中传输的数量))对齐。

        该地址被定义为回绕边界。

        • 每次传输后,地址都会以与 INCR 突发相同的方式递增。

        然而,如果这个递增的地址是((回绕边界)+(要传输的数据的总大小)),则该地址回绕到回绕边界。

        • 突发中的第一次传输可以使用高于回绕边界的地址,但须遵守回绕突发的限制。这意味着对于第一个地址高于回绕边界的任何 WRAP 突发,地址会回绕。

        这种突发类型用于高速缓存行访问。

        start address需按照transfer的大小进行对齐(Align)。

        burst length只能从2,4,8,16中取值。

        地址递增达到upper boundary时回卷到lower boundary。upper boundary与lower boundary的地址计算在后文介绍。

        通常用于从memory中读取cache line。

        因为master对cache的访问通常是cache line中的某些bytes,但当发生cache miss时,从memory读回来的是整个cache line。而此时master发送的地址却不一定是cache line的起始地址,而起始地址可能位于中间,因此递增到upper boundary时需要回卷到lower boundary,才能将该cache line读完。

Burst address

        本节提供了确定突发内传输的地址和字节通道的方法。这些方程使用以下变量:

        Start_Address 主站发出的起始地址。
        Number_Bytes 每次数据传输的最大字节数。
        Data_Bus_Bytes 数据总线中的字节通道数。
        Aligned_Address 起始地址的对齐版本。
        Burst_Length 突发内的数据传输总数。
        Address_N 突发传输N的地址。对于突发中的第一次传输,N 为 1。      

        Wrap_Boundary 回绕突发内的最低地址。
        Lower_Byte_Lane 传输的最低寻址字节的字节通道。
        Upper_Byte_Lane 传输的最高寻址字节的字节通道。
        INT(x) x 的向下舍入的整数值。
        这些方程确定突发内的传输地址:  

        • Start_Address = AxADDR

        • Number_Bytes = 2 ^ AxSIZE

        • Burst_Length = AxLEN + 1

        • Aligned_Address = (INT(Start_Address / Number_Bytes) ) × Number_Bytes。
        此等式确定突发中第一个传输的地址:

        • Address_1 = Start_Address。
        对于 INCR 突发以及地址未包装的 WRAP 突发,此等式确定突发中第一次传输后任何传输的地址:

        • Address_N = Aligned_Address + (N – 1) × Number_Bytes。
        对于WRAP 突发,Wrap_Boundary 变量定义回绕边界:

        • Wrap_Boundary = (INT(Start_Address / (Number_Bytes × Burst_Length)))

                                        × (Number_Bytes × Burst_Length)。
        对于 WRAP 突发,如果

        Address_N = Wrap_Boundary + (Number_Bytes × Burst_Length),

        则:

                • 对当前传输使用此等式:

                        — Address_N = Wrap_Boundary

                • 对任何后续传输使用此等式:

                        — Address_N = Start_Address + ((N – 1) ) × Number_Bytes)

                                                    – (Number_Bytes × Burst_Length)。
        这些公式确定突发中首次传输使用哪些字节通道:

        • Lower_Byte_Lane = Start_Address –

                                        (INT(Start_Address / Data_Bus_Bytes)) × Data_Bus_Bytes

        • Upper_Byte_Lane = Aligned_Address + (Number_Bytes – 1) –

                                            (INT(Start_Address / Data_Bus_Bytes)) × 数据总线字节。
        这些公式确定突发中第一次传输后的所有传输使用哪些字节通道:

        • Lower_Byte_Lane = Address_N –

                                                        (INT(Address_N / Data_Bus_Bytes)) × Data_Bus_Bytes

        • Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes – 1。
数据传输至:

        • DATA((8 × Upper_Byte_Lane) + 7 : (8 × Lower_Byte_Lane))。

s_axi_wstrb:Write strobes 写数据选通掩码

        The WSTRB[n:0] signals when HIGH, specify the byte lanes of the data bus that contain valid information. There is one write strobe for each eight bits of the write data bus, therefore WSTRB[n] corresponds to WDATA[(8n)+7: (8n)].

        WSTRB[n:0] 信号为高电平时,指定包含有效信息的数据总线的字节通道。写数据总线的每 8 位有 1 个写选通,因此 WSTRB[n] 对应于 WDATA[(8n)+7: (8n)]。

        A master must ensure that the write strobes are HIGH only for byte lanes that contain valid data.

        主设备必须确保仅对于包含有效数据的字节通道写选通为高电平。

        When WVALID is LOW, the write strobes can take any value, although this specification recommends that they are either driven LOW or held at their previous value.

        当 WVALID 为低电平时,写选通脉冲可以采用任何值,尽管本规范建议将它们驱动为低电平或保持在先前的值。

Narrow transfers窄传输

        When a master generates a transfer that is narrower than its data bus, the address and control information determine which byte lanes the transfer uses:

        当主设备生成比其数据总线窄的传输时,地址和控制信息决定传输使用哪些字节通道:

        • in incrementing or wrapping bursts, different byte lanes are used on each beat of the burst

        • in a fixed burst, the same byte lanes are used on each beat. Figure A3-8 and Figure A3-9 on page A3-53 give two examples of byte lanes use. The shaded cells indicate bytes that are not transferred.

        • 在递增或回绕突发中,在突发的每个节拍上使用不同的字节通道。

        • 在固定突发中,在每个节拍上使用相同的字节通道。 A3-53 页上的图 A3-8 和图 A3-9 给出了字节通道使用的两个示例。阴影单元表示未传输的字节。

        In Figure A3-8

        • the burst has five transfers

        • the starting address is 0

        • each transfer is eight bits

        • the transfers are on a 32-bit bus

        • the burst type is INCR.

Handshake process:握手机制

        总结:写入数据的一方(作为主机时),在从机准备好接收数据的时候通过READY 信号提供数据,当准备好数据以后通过VALID来实现握手并且发送

        写地址,写数据,读地址:

                                     主机——操作设备

                                     从机——目标设备

        写应答,读数据:

                                     主机——操作设备

                                     从机——目标设备

        All five transaction channels use the same VALID/READY handshake process to transfer address, data, and control information.

        This two-way flow control mechanism (双向流量控制机制)means both the master and slave can control the rate at which the information moves between master and slave.

        The source generates the VALID signal to indicate when the address, data or control information is available. The destination generates the READY signal to indicate that it can accept the information. Transfer occurs only when both the VALID and READY signals are HIGH.
On master and slave interfaces there must be no combinatorial paths between input and output signals.

        源生成 VALID 信号以指示地址、数据或控制信息何时可用。目的地生成 READY 信号以表明它可以接受信息。仅当 VALID 和 READY 信号均为高电平时才会发生传输。在主接口和从接口上,输入和输出信号之间不得存在组合路径。
        Figure A3-2 to Figure A3-4 on page A3-40 show examples of the handshake process.
In Figure A3-2, the source presents the address, data or control information after T1 and asserts the VALID signal.

        A3-40 页上的图 A3-2 至图 A3-4 显示了握手过程的示例。在图 A3-2 中,源在 T1 后呈现地址、数据或控制信息并置位 VALID 信号。
        The destination asserts the READY signal after T2, and the source must keep its information stable until the transfer occurs at T3, when this assertion is recognized.

        目标端在 T2 之后断言 READY 信号,并且源端必须保持其信息稳定,直到 T3 发生传输(此时此断言被识别)。

不允许源等到 READY 置位后才置位 VALID。

一旦 VALID 被置位,它必须保持置位状态,直到握手发生,在时钟上升沿,VALID 和 READY 均被置位。

        在图A3-3中,在T1之后,在地址、数据或控制信息有效之前,目的地断言READY,表明它可以接受该信息。源提供信息,并在 T2 之后断言“有效”,并且当该断言被识别时,传输发生在 T3。在这种情况下,传输发生在单个周期内。        

允许目的地在断言相应的 READY 之前等待 VALID 被断言。
如果断言 READY,则允许在断言 VALID 之前取消断言 READY。

        在图A3-4中,在T1之后,源和目的地都恰好表明它们可以传输地址、数据或控制信息。在这种情况下,传输发生在时钟上升沿,此时可以识别 VALID 和 READY 的断言。这意味着转移发生在 T2。

通道握手信号

        AXI协议下每个通道都有自己的 VALID/READY 握手信号对。

        表 A3-1 显示了每个通道的信号。

写地址通道

        主设备仅在驱动有效地址和控制信息时才能置位 AWVALID 信号。置位后,AWVALID 必须保持置位状态,直到从设备置位 AWREADY 后出现时钟上升沿。(反过来也成立)
        AWREADY 的默认状态可以是高电平或低电平。本规范建议默认状态为高。当 AWREADY 为高电平时,从机必须能够接受提供给它的任何有效地址。

注:本规范不建议默认 AWREADY 状态为低电平,因为它强制传输至少需要两个周期,一个周期断言 AWVALID,另一个周期断言 AWREADY

写数据通道

        在写突发期间,主机仅在驱动有效写数据时才能置位 WVALID 信号。置位后,WVALID 必须保持置位状态,直到从设备置位 WREADY 后出现时钟上升沿。
        WREADY 的默认状态可以为高电平,但前提是从机始终可以在单个周期内接受写入数据。
        主设备在驱动突发中的最终写传输时必须断言 WLAST 信号。

写响应通道

        仅当从设备驱动有效的写响应时,它才能置位 BVALID 信号。置位后,BVALID 必须保持置位状态,直至主机置位 BREADY 后的时钟上升沿。BREADY 的默认状态可以为高电平,但前提是主器件始终可以在单个周期内接受写响应。 

读地址通道

        主设备仅在驱动有效地址和控制信息时才能置位 ARVALID 信号。置位后,ARVALID 必须保持置位状态,直到从设备置位 ARREADY 信号后出现时钟上升沿。
        ARREADY 的默认状态可以是高电平或低电平。本规范建议默认状态为高。如果 ARREADY 为高电平,则从机必须能够接受提供给它的任何有效地址。

注意:本规范不建议默认 ARREADY 值为 LOW,因为它强制传输至少需要两个周期,一个周期用于断言 ARVALID,另一个周期用于断言 ARREADY。

读数据通道

        从机仅在驱动有效读数据时才能置位 RVALID 信号。置位后,RVALID 必须保持置位状态,直到主机置位 RREADY 后的时钟上升沿。即使从机只有一个读数据源,它也必须仅在响应数据请求时断言 RVALID 信号。
        主接口使用 RREADY 信号来指示它接受数据。 RREADY 的默认状态可以为高电平,但前提是主器件能够在启动读事务时立即接受读数据。
        从设备在驱动突发中的最终读传输时必须断言 RLAST 信号。

具体时序

初始化完成:init_calib_complete

        初始化完成,

        即标志着SDRAM中的上电后的刷新,预充电,配置寄存器等行动的结束,可以对DDR3 SDRAM进行操作。

        ui_clk_sync_rst,mmcm_locked没有复位完成,锁定相位前也不宜操作,但是他们的完成时间要远早于init_calib_complete,便可以不用太关心。

第一处握手:AW~写地址通道

s_axi_awready期间准备好提供地址和各种配置信息,突发长度和突发尺寸等。

        此处配置的是突发长度为3,突发尺寸为2^4=16个字节。

        输入s_axi_awvalid的高电平表示发送数据(地址和各种配置信息)可用,

        此时握手成立,

        地址信息会在参考时钟的下一个上升沿发出。

        可参考图A3-3

第二处握手:写数据通道 

类似的,

        s_axi_wready等待接收写入数据和选通脉冲,

        s_axi_wvalid表示此时的写入数据和选通脉冲有效

        s_axi_wlast表示最后一个brust的突发完成,也标志着s_axi_wvalid的结束。

                同时握手结束。

        

        一个用户时钟以后给予应答。

第三处握手:写应答通道

这一部分便完成了一个简单的Axi时序。

第四处握手:Ar~读地址通道

第五处握手:R~读数据通道

感慨:

        本身工作频率就是倍频后的,而且上升下降都传数据,真的好快呀。

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

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

相关文章

Git版本管理及使用规范

git是目前为止版本管理的最常用工具之一,利用git的功能,可以很容易的实现版本的发布和留档,让原本杂乱的版本管理问题变得较为简单。 Git分支管理和常用流程 Git的常用分支包括:tag(git的功能,并不是真正的分支)、ma…

测试报告和结果分析 —— allure整合pytest生成测试报告

一、生成HTML测试报告的三种方式: 1、unittest和HTMLTestRunner整合 2、allure和pytest整合 3、Jenkins中安装allure插件(Jenkins安装插件出错,不能正常使用) 二、allure整合pytest生成html测试报告: 1.下载allur…

云服务介绍

云服务 1.概念 云服务,顾名思义就是云上的服务,简单的来说就是在云厂商(例如 AWS、阿里云)那里买的服务。 目前国内云厂商有阿里云、腾讯云、华为云、天翼云、Ucloud、金山云等等,国外有亚马逊的 AWS、Google 的 GC…

C++ 读MTK代码 综测校准 PSU经典接口读各种型号开关电源电压或电流 visa

为啥要使用接口?因为有多个电源,接口都相似的。再加型号上层很少改动(类型切换)或不用改。 为啥要使用友元?友元函数的主要作用是允许外部函数或类访问被声明为友元的类的私有成员。 如果不使用友元怎么做?最后回答。 1.C定义dl…

SpringBoot Web 分层解耦

目录 分层解耦三层架构介绍代码拆分 分层解耦耦合问题解耦思路 IOC&DIIOC&DI入门IOC详解bean的声明组件扫描 DI详解 在SpringBoot Web请求响应这篇文章的案例中提到,解析XML数据,获取数据的代码,处理数据的逻辑的代码,给页…

教你如何给『linux』打补丁

前言 我们在参与某些开源项目的过程当中,经常会遇到漏洞之类的问题,需要我们打补丁解决。尤其是 Linux 源码,源码代码量较多,在修改完内核并发布新内核的时候,基本采用补丁的方式进行发布,而不是将整个内核…

【LeetCode刷题】2两数相加

2. 两数相加 JAVA代码 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xf…

MAC-设置mysql开机自启动

mac 设置mysql开机自启动 - MoonyHee - 博客园

学习网络编程No.8【应用层协议之HTTP】

引言: 北京时间:2023/10/9/13:03,一晃好多天过去了,9月14号的文章终于在昨天发出去了,也是许久没有更文了,国庆放假期间由于各种原因,在王者峡谷和铲子世界遨游的不亦乐乎,有待改善…

Ubuntu deadsnakes 源安装新版 python

前言 适用于 Ubuntu 安装 python3.11 等新版本。 因为比较常用并且不想重新编译就记录一下,方便以后面向CV安装。 安装 添加 deadsnakes ppa 源 sudo add-apt-repository ppa:deadsnakes/ppa更新 apt sudo apt update安装 python3.11 sudo apt install python…

Node编写获取用户信息接口

目录 前言 初始化路由模块 使用postman发送get获取用户信息请求 初始化路由处理函数模块 获取用户基本信息 前言 在前两篇文章中已经介绍了如何编写用户注册接口以及用户登录接口,这篇文章介绍如何获取用户信息,本篇文章建立在Node编写用户登录接口…

国民技术N32G031 keil开发环境搭建

国民技术N32G031 keil开发环境搭建 目录 国民技术N32G031 keil开发环境搭建1 keil uVison5安装2 安装N32G031的pack包3 JLink添加Device(非必须)结束语 1 keil uVison5安装 这个网上的教程大把,我这里就不说了,同学们自行下载安装…

图像压缩(2)《数字图像处理》第八章 8.1节 基础知识

图像压缩(1)《数字图像处理》第八章8.1节基础知识 一. 前言二.引言三.基础知识8.1.1 编码冗余8.1.2 空间冗余和时间冗余8.1.3 不相关的信息8.1.4图像信息的度量8.1.5保真度准则8.1.6 图像压缩模型8.1.7 图像格式、容器和压缩标准四. 小结 一. 前言 始于…

Linux阻塞IO(高级字符设备二)

阻塞IO属于同步 IO,阻塞IO在Linux内核中是非常常用的 IO 模型,所依赖的机制是等待队列。 一、等待队列介绍 在 Linux 驱动程序中,阻塞进程可以使用等待队列来实现。等待队列是内核实现阻塞和唤醒的内核机制,以双循环链表为基础结…

【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构

完全解耦的时间片轮询框架构 简介项目代码timeslice.htimeslice.clist.hlist.c 创建工程移植代码实验函数说明timeslice_task_inittimeslice_task_addtimeslice_tak_deltimeslice_get_task_num 结尾 简介 timeslice是一个时间片轮询框架,他是一个完全解耦的时间片轮…

力扣刷题 day54:10-24

1.十进制整数的反码 每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推。注意,除 N 0 外,任何二进制表示中都不含前导零。 二进制的反…

【Java 进阶篇】使用 Java 和 Jsoup 进行 XML 处理

XML(可扩展标记语言)是一种常用的数据交换格式,它被广泛用于在不同系统之间传递和存储数据。Java作为一种强大的编程语言,提供了多种方式来处理XML数据。其中,Jsoup 是一个流行的Java库,用于解析和操作XML文…

【数据结构练习题】消失的数字 --- 三种解法超详解

✨博客主页:小钱编程成长记 🎈博客专栏:数据结构练习题 🎈相关博文:添加逗号 消失的数字 1. 🎈题目2. 🎈解题思路✨方法一:先排序,再找缺失的值✨方法二:按位…

怎么禁止员工上班追剧

怎么禁止员工上班追剧 安企神终端安全管理软件下载使用 说到员工上班追究打游戏摸鱼,其实是一种不负责任的行为,这样的行为不仅会影响到工作效率,还会给周围的同事带来不好的工作氛围,会造成恶性循环,所以&#xff0…

windows下安装配置CGAL

一、下载安装Boost、CGAL 下载地址:https://sourceforge.net/projects/boost/files/boost-binaries/ Boost是CGAL的强制依赖项。SourceForge上提供了Boost的二进制版本(此版本无须编译,可直接使用)。Boost安装程序会同时安装Boos…