深入 AXI4总线 (四):RAM 读取实战

2023-11-02

光说不练,云玩家。这篇文章中我们就通过访问一个 AXI4 接口的 RAM 的实际操作,加深我们对 AXI4 总线的理解。

我们的实验平台是 ISE 14.7 以及 modelsim 10.2, RAM 的 ip 使用 ISE 的 block memory generator 生成,Intel 方面的工具和 ip 我不是太熟悉,但想必很多内容都是共通的。

Native V.S AXI4 ?

首先使用 ip 核生成器生成一个 AXI4 的 ip 核,我们先比较一下 Native 接口和 AXI4 接口的 RAM。

一号选手:Native

首先登场的是一号选手:Natiiiive,他有着小小的身板,地址,输入数据,输出数据,使能,时钟接口错落有致,简洁分明。小快灵是他的信仰,好用好上手是他的宣言。

二号选手:AXI4

接下来登场的是 AXIFour,他的身板恐怕是 Native 的三倍,更大的身板,更大的力量是他的座右铭。“通用性”,“标准总线”是他挂在嘴上的口头禅

Ok,Stop,两者之间其实并不是一个竞争关系,没有孰胜孰劣的比较。Native 接口数据线更少,但不够通用,自然也没有总线的概念;AXI4 支持标准化的,通用总线访问,可以将多个 RAM 挂载到一条总线上,通过 ID 区分不同的 RAM,但接口要确实复杂地多。

AXI 总线读写 RAM 实战

首先构建 AXI4 接口的 RAM ip核,在工程中添加 ip 核文件

选择 AXI 协议,另外关于 AXI-Lite 协议将会在以后的文章中介绍。AXI-Lite 协议简化了 AXI 协议,但不支持突发传输操作。

在 Slave Option 中选择 Memory Slave,因为 RAM 作为一个存储介质,不能主动发起操作,在 AXI 传输中只能作为从机。作为从机有两种选项,Memory Slave 作为存储介质,使用完整的 AXI 总线;Peripheral Slave 不是很熟悉,在该模式下不支持突发传输。

在 Memory Type 中,如果使用 AXI 总线,则只能选择单口RAM。而 Native 接口是支持多种模式的,包括 ROM,双口 RAM 等。

Native 接口下可以选择多种模式

之后选择适合的数据总线宽度和 RAM 深度即可以生成 RAM 。

在工程中为新生成的 ip 核添加 testbench。

首先是非突发传输(突发传输长度为 1 的突发传输。。)写入与读取操作,即写入地址,写入一次数据。读取操作时,也先写入数据,然后读取。下图中为了说明一些细节,进行了两次同样的流程。

Testbench 的时序部分

initial begin
 // Initialize Inputs
        //....初值均赋为0 除 bready 外
        s_axi_bready = 1;
        

 // Wait 100 ns for global reset to finish
 #100;
 
 // Add stimulus here
        s_aresetn = 1;
 
 repeat(2) begin
 #100;
 //aw channel
            s_axi_awaddr = 32'b100;
            s_axi_awlen = 0;
            s_axi_awsize = 3'b010;
            s_axi_awburst = 0;
 #20;
            s_axi_awvalid = 1;
 #20;
 //wait(s_axi_awready == 1 && s_aclk == 1);
            s_axi_awvalid = 0;

 #100;
 //w channel
            s_axi_wdata = 32'h01020304;
            s_axi_wstrb = 4'b1111;
            s_axi_wlast = 1;
            s_axi_wvalid = 1;
 #20;
            s_axi_wlast = 0;
            s_axi_wvalid = 0;
            s_axi_wstrb = 4'b0;
 
 #100;
 //ar channel
            s_axi_araddr = 32'b100;
            s_axi_arlen = 0;
            s_axi_arsize = 3'b010;
            s_axi_arburst = 0;
 #20;
            s_axi_arvalid = 1;
 #20;
 //wait(s_axi_arready == 1 && s_aclk == 1);
            s_axi_arvalid = 0;
 
 #100;
 //r channel
            s_axi_rready = 1;
 end

 end

 always #10 s_aclk = ~s_aclk;

我们关注一些细节,有关 RAM IP 核的一些特性,比如当完成一次写入时,RAM 的 AXREADY 信号会拉低约 6 个时钟之后,才会拉高允许下一次地址写入发生;而 XREADY 信号则会保持低电平直到下一次地址地址写入之后,才会拉高准备接收数据。

通过实践发现了 AXI4 在读取时的一个特性,如果在读取时,将突发传输长度设为 2,突发传输宽度设为 16 位,数据总线宽度为 32 位,即通过两次 16 位传输读取写入的 32 位数据 0x01020304。实践后发现,实际上会读取两次 0x01020304,需要主机自行整理数据,因为主机实际上知道,自己读取的数据宽度是 16 位,数据总线宽度为 32 位。

读者可以通过仿真结果看到本系列之前的文章中提到,握手机制,AXI 各信号线的含义以及突发传输机制等。

ljgibbs:深入 AXI4 总线(一)握手机制​zhuanlan.zhihu.com图标ljgibbs:深入 AXI4 总线(二)架构​zhuanlan.zhihu.com图标ljgibbs:深入 AXI4 总线(三)突发传输机制​zhuanlan.zhihu.com图标

 

接下来尝试突发传输操作

Testbench 部分

// Wait 100 ns for global reset to finish
 #100;
 
 // Add stimulus here
        s_aresetn = 1;
 
 repeat(2) begin
 #100;
 //aw channel
            s_axi_awaddr = 32'b100;
            s_axi_awlen = 8'd3;
            s_axi_awsize = 3'b010;
            s_axi_awburst = 2'b01;
 #20;
            s_axi_awvalid = 1;
 #20;
 //wait(s_axi_awready == 1 && s_aclk == 1);
            s_axi_awvalid = 0;


 #100;
 //w channel
            s_axi_wdata = 32'h01020304;
            s_axi_wstrb = 4'b1111;
 repeat (3) begin
            s_axi_wdata = s_axi_wdata + 1'b1;
            s_axi_wvalid = 1;
 #20;
            s_axi_wvalid = 0;
 #20;
 end
            s_axi_wdata = s_axi_wdata + 1'b1;
            s_axi_wvalid = 1;
            s_axi_wlast = 1;
 #20
            s_axi_wlast = 0;
            s_axi_wvalid = 0;
 #100;
 //ar channel
            s_axi_araddr = 32'b100;
            s_axi_arlen = 8'd7;
            s_axi_arsize = 3'b001;
            s_axi_arburst = 2'b01;
 #20;
            s_axi_arvalid = 1;
 #20;
 //wait(s_axi_arready == 1 && s_aclk == 1);
            s_axi_arvalid = 0;

 #100;
 //r channel
            s_axi_rready = 1;
 end

 end

突发传输类型为 INCR,写入时,突发传输长度为 4,宽度为 32 位;读取时长度为 8,宽度为 16 位,仿真的结果和预期一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入 AXI4总线 (四):RAM 读取实战 的相关文章

  • ZYNQ 在linux 通过AXI_GPIO操作电平

    在petalinux 通过AXI GPIO操作电平 以zynq为例 xff0c vivado工程 xff1a axi gpio n都是选择的一位输出 xff1a 管脚约束 xff1a set property SEVERITY Warnin
  • zynq gpio linux,ZYNQ 在linux 通过AXI_GPIO操作电平

    在petalinux 通过AXI GPIO操作电平 以zynq为例 xff0c vivado工程 xff1a axi gpio n都是选择的一位输出 xff1a 管脚约束 xff1a set property SEVERITY Warnin
  • ZYNQ7000-AXI GPIO详解

    摘要 AXI GPIO是ZYNQ的一个IP核 xff0c 它能够将PS侧的AXI4 Lite接口转成PL侧的IO口 xff0c 可解决PS侧IO口不够用的问题 本文就AXI GPIO的概念 作用 配置与使用做了详细说明 xff0c 展示了示
  • stm32 代码RAM溢出

    KEIL编译程序后报下边错误 xff1a 原因是因为代码的全局变量太多或全局的数组太大导致程序编译后RAM溢出 xff0c 建议先查看有没有比较大的全局数组 BootLoader BootLoader axf Error L6406E No
  • Testing RAM in Embedded Systems

    Testing RAM in Embedded Systems Version 2 April 2007 Version 2 1 April 2007 Version 2 2 June 2009 Version 2 3 August 200
  • ZYNQ中的GPIO与AXI GPIO

    GPIO GPIO 一种外设 xff0c 对器件进行观测和控制MIO 将来自PS外设和静态存储器接口的访问多路复用到PS引脚上处理器控制外设的方法 通过一组寄存器包括状态寄存器和控制寄存器 xff0c 这些寄存器都是有地址的 xff0c 通
  • 在EBAZ4205 zynq7010上运行AXI_DMA中断回环测试

    在EBAZ4205 zynq7010上运行AXI DMA loop interrupt 整体的布局图 这是上面的一张接口图 下面对每个模块附上截图 AXI DMA的输出mm2s introut s2mm introut接到PS系统的中断触发
  • RAM、ROM、SRAM、DRAM、SSRAM、SDRAM、FLASH、EEPROM的区别

    RAM Random Access Memory 随机存储器 存储单元的内容可按需随意取出或存入 且存取的速度与存储单元的位置无关的存储器 这种存储器在断电时将丢失其存储内容 故主要用于存储短时间使用的程序 按照存储信息的不同 随机存储器又
  • AXI Narrow Transfer、Unaligned Transfer

    本文为转载内容 原文链接 深入 AXI4 总线 三 传输事务结构 知乎 读写数据结构 在 AXI 数据传输过程中 主要涉及到窄位宽数据传输 Narrow Transfer 非对齐传输 Unaligned Transfer 以及混合大小端传输
  • Xilinx ISE、MicroBlaze系列教程

    本文是Xilinx MicroBlaze系列教程的第0篇文章 这个系列文章是我个人最近两年使用Xilinx MicroBlaze软核的经验和笔记 以Xilinx ISE 14 7和Spartan 6 Vivado 2018 3和Artix
  • 如何在 Debian 9 上添加交换空间

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 通常 运行 Debian 虚拟机时不存在交换分区 因此唯一的选
  • 当处理器尝试访问不存在的物理地址时会发生什么?

    想象一台内存小于 3 GB 的 32 位 x86 计算机 其 CPU 设置为禁用分页和平段描述符 0x0作为基础 0xffffffff作为数据和代码的有效限制 当ring0中的指令尝试使用a时会发生什么mov指令引用不受任何内存地址支持的物
  • CPU 如何从 RAM 访问应用程序和数据

    在应用程序加载到 RAM 并打开文件后 因此文件的数据也存储在 RAM 中 我在理解 CPU 如何从 RAM 访问应用程序和数据时遇到了一些困难 根据我的理解 CPU 只是在程序计数器滴答时从 RAM 获取指令或在中断后执行任务 那么它如何
  • C++ new / new[],它是如何分配内存的?

    我现在想知道这些指令如何分配内存 例如 如果我得到代码怎么办 x new int 5 y new int 5 如果这些都被分配了 那么它在 RAM 中的实际情况是什么样的 是否为每个变量保留整个块 或者块 内存页或如何称呼它 32 位上的
  • RAM 如何以 O(1) 的速度访问内存中的任何位置

    我们被告知 RAM 内存的抽象是一个长字节数组 对于 CPU 来说 访问它的任何部分都需要相同的时间 能够同时访问 4 GB 在我的计算机上 中的任何字节的设备是什么 因为这对我来说似乎不是一个微不足道的任务 我问过同事和我的教授 但没有人
  • 将大文件读入 R

    我是 R 的新手 但我知道它会因 大 文件而窒息 我正在尝试读取 200MB 的数据文件 我已经尝试过 csv 格式 并将其转换为制表符分隔的 txt 但在这两种情况下 我在文件加载之前就用完了 4GB RAM R 使用 4GB 或内存来加
  • 增加蚂蚁的记忆

    我有一个关于内存使用的问题 我有 8 GB RAM 我的 ant 设置如下 set ANT OPTS Xmx512m XX MaxPermSize 2G 现在 我已经安装了 16 GB 的 RAM 但是当我运行 ant clean all
  • 如何获取 Java7 应用程序的 CPU、RAM 和网络使用情况

    我找到了这篇旧文章如何在 Java 中监控计算机的 cpu 内存和磁盘使用情况 https stackoverflow com questions 47177 how to monitor the computers cpu memory
  • 大师系统要求

    我们将使用 Virtuoso 来存储 RDF 三重计数一开始将为 1 亿 我需要知道典型的 RAM CPU 磁盘等应该是什么 查询将使用 SPARQL 并且查询会有点复杂 请提供您的意见 Virtuoso 版本 6 x 三元组 四元组 的平
  • “calloc”不会自动消耗 RAM 中的内存

    根据这个问题的回答 malloc 和 calloc 之间的区别 https stackoverflow com questions 1538420 difference between malloc and calloc answer 15

随机推荐

  • 网关架构演进

    1 前言 天翼账号是中国电信打造的互联网账号体系产品 利用中国电信管道优势为企业提供用户身份认证能力 其中网关系统是天翼账号对外能力开放体系的重要组成 业务侧它以集中入口 集中计费 集中鉴权管控为目标 技术侧它支持隔离性 可配置 易开发 动
  • 什么是IO Pad?

    1 什么是IO pad IO pad是一个芯片管脚处理模块 即可以将芯片管脚的信号经过处理送给芯片内部 又可以将芯片内部输出的信号经过处理送到芯片管脚 输入信号处理包含时钟信号 复位信号等 输出信号包含观察时钟 中断等 IO pad模块可以
  • 防止浏览器嗅探音视频--blob对象在audio和video标签中的使用

    现在的浏览器很聪明 会对页面中的mp3 MP4等内容进行嗅探下载 但是对于部分付费或敏感内容 我们并不想版权资源被嗅探 这就需要使用html5 提供的 blob 对象对文件内容进行保护 blob格式的资源是无法被嗅探的 具体可以参考一下 b
  • 使用R语言计算DataFrame数据中指定范围多个数据列的两两相关系数

    使用R语言计算DataFrame数据中指定范围多个数据列的两两相关系数 在数据分析和统计建模中 了解数据列之间的相关性是非常重要的 R语言提供了许多函数来计算数据集中数据列之间的相关系数 本文将介绍如何使用R语言中的cor函数来计算Data
  • Hadoop的shuffle原理和过程图解

    wordcount为例详细阐述shuffle的实现过程 1 对HDFS输入的文件进行切割为KV形式 2 在mapper方法中执行 分割单词为KV形式 3 shuffle在Map端的三个操作 partition 多节点的相同K合并 sort
  • OpenCv中计算图像像素最大值、最小值、均值和方差

    1 寻找图像像素的最大值最小值 寻找图像最大值最小值的函数 minMaxLoc 函数 minMaxLoc 函数原型 void cv minMaxLoc InputArray src double minVal double maxVal 0
  • 浮点数——科学计数法、浮点数表示、加减运算和浮点数的使用

    目录 1 2浮点数 1 2 1 科学计数法 1 2 2 浮点数表示 1 符号位 2价码位 1 2 3 加减运算 1 2 4 浮点数的使用 1 2浮点数 浮点数是采用科学计数法来表示的 由符号位 有效数字 指数三部分组成 使用浮点数存储和计算
  • 性能测试------LoadRunner

    1 常见的性能问题 1 内存泄漏 软件运行的时候没有回收内存 导致内存越来越慢 2 CPU使用率达到了100 3 线程死锁 阻塞 造成系统运行越来越慢 4 查询的速度越来越慢 5 受外部系统的影响越来越大 2 为什么要进行性能测试 1 获取
  • three.js源码翻译及案例(五)-GLTFLoader.js

    写在前面 Three中的加载脚本很多 但是核心思想是差不多的 就是文件用文件解析器加载 图片用图片解析器加载 然后json转换为对象 但是由于gltf格式可以自己编辑所以有的源码参考意义不大 glb及拓展材质都没用上就还没有翻译 以后可能会
  • xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)

    最近项目到了最后的阶段 测试完一切ok后 准备打包以及提交 不料看到网上众教程 好多都是老版本的 现在IDE实现方式改了 那些方法好多都找不到 绕了一大圈 才搞明白流程 现在记录下来 以便朋友们查阅 开发环境 xcode4 4 1 ipho
  • 李胜溢9.5 : 最新黄金原油行情走势分析及布局操作指南。

    趋势价值交易 是所有投资者走向盈利的必经之路 没有捷径 也不要心存侥幸 任何一个投资者从初入市场 到走向盈利 都需要经历亏损再到保本再到盈利的过程 市场绝对不是投机者长久的天堂 一次的投机成功不代表可以善始善终 只有稳定不断的持续盈利才能成
  • pytorch seq2seq+attention机器翻译注

    准备深入学习一下神经网络的搭建方法的时候 选了机器翻译来试试 正好查了很多资料 发现pytorch里有例子 就结合自己的理解和探究记录一下 原文实现代码 https pytorch org tutorials intermediate se
  • Android Studio方法红色的解决办法

    前言 本人一共经历过以下几种飘红的情景 一 复制代码 很多方法的包没有导进来 这就是android studio和eclipse的差别 解决方法有两种 1 点击红色的方法 然后ALT Enter Import class 即可完成导入 2
  • Git错误non-fast-forward的解决方法

    目录 1 问题描述 2 分析问题 3 解决问题 3 1 先合并之前的历史 再进行提交 提倡使用 3 2 丢弃之前的历史 强推 谨慎使用 1 问题描述 当要push代码到git时 出现提示 git push origin master To
  • 数据库入门(SQL SEVER)之SQL语句删除单行数据,所有行数据,表和数据库

    1 删除单行数据 2 删除所有行数据 3 删除表和数据库 一 在该页面上直接单击右键选择删除 1 2选择 数据库 gt SSMSTest gt 表 右键单击直接删除整个表 连带着数据也删除了 不过要注意表有没有外键约束 有的话不能删除主表
  • 在windows和linux上传或下载文件

    一 使用xshell在windows和linux上传或下载文件 有个很简单的方法就是rz sz 1 工具安装 需要安装工具 yum install lrzsz 使用工具 安装的rz sz就是Linux Unix同Windows进行文件传输的
  • 关于解决VC运行C语言程序闪退的问题

    关于解决VS运行C语言程序闪退的问题 最近使用VS2017调试C语言控制台程序 一直出现程序正常运行结束就闪退 看不到控制台的的运行结果 经过查资料尝试 得到几种解决方法 1 在return 0 前加上getchar 利用getchar 函
  • K-最近邻法(KNN)简介

    K 最近邻法 K Nearest Neighbor KNN 最初由Cover和Hart于1968年提出 是一个在理论上比较成熟的分类算法 KNN是一类可用于分类或回归的技术 作为一个非参数学习算法 K 最近邻并不局限于固定数目的参数 我们通
  • ubuntu 22.04 国内镜像阿里云/163源/清华大学/中科大--转--已验证

    Ubuntu 22 04 LTS 五年长期支持版本 直到2027年4月 1 备份原配置 sudo cp etc apt sources list etc apt sources list bak 2 清华大学镜像 复制以下命令即可一键切换到
  • 深入 AXI4总线 (四):RAM 读取实战

    光说不练 云玩家 这篇文章中我们就通过访问一个 AXI4 接口的 RAM 的实际操作 加深我们对 AXI4 总线的理解 我们的实验平台是 ISE 14 7 以及 modelsim 10 2 RAM 的 ip 使用 ISE 的 block m