DDR3AXI4接口读写仿真

前文已经介绍了DDR3和AXI4总线的相关知识,我们知道MIG ip核除了可以生成native接口还能生成AXI4接口,今天就练习一下将AXI4接口的DDR3打包成FIFO。首先我们生成一个AXI4接口的MIG ip核,其余步骤与Native接口的ip核相同,如果我们勾选AXI4接口的话,会多出如下界面的配置,

Data Width:表示axi_full接口读写数据的位宽,如果前面将DDR3芯片时钟设置为用户时钟频率的4倍,那么此处将读写数据位宽设置为DDR3数据位宽的8倍时,读写速率达到最大。原因在于DDR3芯片的突发一般是8,如果DDR3一次传输16位,8次传输128位数据,且DDR3的时钟是用户时钟的4倍,双沿传输数据。那么DDR3芯片突发一次,用户也只能传输一次数据,当用户一次传输数据位宽等于DDR3一次突发传输数据时,效率达到最大。但前面我们的摄像头输入数据是16位,因此在这里的位宽设置为128时并不能达到最大传输速率。

Arbitration Scheme:仲裁机制,由于DDR3芯片只有一组数据,而axi_full的读、写接口支持同时传输数据。当选用“TDM”时,读、写操作同时到达时,将交替进行。由于MIG IP自带仲裁机制,用户侧就不需要再考虑读写仲裁问题。

Narrow Burst设置位0即可。

地址位宽会根据DDR3芯片型号自动得到,不能设置。

ID位宽,axi_full协议每个通道都有ID信号,这里需要设置该信号位宽,默认即可。

接下来进行DDR3读写控制的设计,整体思路如下:

首先确定读、写FIFO的突发长度,然后根据写FIFO的读突发长度拉高开始信号,还需要声明一个状态变量,确定当前是否为写状态,DDR3初始化完成且当前状态不是写状态且写FIFO的读计数达到突发长度且当前写FIFO的读复位忙处于低电平时拉高开始信号,与此同时拉高s_axi_awvalid信号,当写地址通道握手成功后拉高s_axi_wvalid信号,实现写数据通道握手,开始向DDR3中写入数据,同时进入写状态,当前数据为一次突发写数据的最后一位时拉高s_axi_wlast信号,当s_axi_wlast与s_axi_wready与s_axi_wvalid信号同时为高时拉高s_axi_bready信号,与s_axi_bvalid信号进行握手,再定义一个写地址计数器对地址进行计数,需要注意的是每完成一次突发写后,地址并不是加一,突发写长度设置为128,位宽为128,而一个地址能够存储一个字节也就是8bit数据,因此每完成一次突发写地址应该加上128×128÷8=2048,当写地址达到设置的最大地址时可认为读出数据是有效的;进入读数据工程,定义一个读开始信号,当然此处的读是由DDR3中读取数据到读FIFO中,定义一个读状态,当前状态不是读状态且读FIFO的写侧不处于复位状态且读FIFO的写侧数据个数小于一次突发长度且读数据有效信号时拉高读开始信号,同时进入读状态,当检测到读开始信号拉高后拉高s_axi_arvalid与s_axi_ar_arready进行写通道握手,握手成功后紧接着拉高s_axi_rready信号,进行读数据通道握手当s_axi_rlast与s_axi_rvalid同时为高时拉低s_axi_rready信号,读过程结束。关于读写FIFO的读写使能信号,可以在写数据通道成功握手时拉高写FIFO的读使能信号,向DDR3中写入数据,同样的,可以将s_axi_rvalid赋值给读FIFO的写有效信号,同时声明两个读写复位计数器,当计数器计满时表示复位完成,防止FIFO初始化还没有完成就向里面写入数据。

下面来看仿真,整个仿真过程可以说是一波三折,首先就是部分信号的位宽对不上,导致仿真过程出现未知态,信号也失去了驱动能力,还有就是用VSC自动生产的teastbench,读写地址的最大值最小值信号也在testbench中进行了声明,但我没有对它们进行赋值,从而出现了未知态。

然后就是本次仿真最头疼也是最简单的问题,如下图所示,其他错误改正后可以进行仿真,但是我的s_axi_awready信号总是在s_axi_awvalid拉高的同时马上拉低,导致写地址通道不能完成握手,困扰我两天半后终于让我发现了问题,问题也很简单,读写控制模块中的复位信号是由MIG ip核输出的,而这个复位信号是高电平有效信号,我平时用的都是低电平复位信号,因此才会出现这种问题,浪费了好长时间,希望自己以后可以仔细一点,同时以后一定要搞清楚每个信号的来源和作用,防止这种错误再发生。

仿真验证:

复位完成,写FIFO读侧数据等于一次突发长度减2,拉高开始信号,进入写状态。

同时拉高s_axi_awvalid信号,完成写地址通道握手,握手完成后立马拉高s_axi_wvalid信号,进行写数据通道握手。

开始写入数据。

当前数据为一次突发写最后一位数据且写数据通道完成握手。

写响应通道握手。

开始读取数据。

读地址握手。

读地址握手完成立马拉高s_axi_rready信号。

读取第一个数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3.0 使用echarts与echarts-gl 实现3D饼图

效果 安装echarts npm install echarts npm install echarts-gl 3d饼图组件&#xff1a; <template><div style"width: 100%; height: 100%" ref"echart"></div> </template><script setup> import { reactive, ref, onMou…

质量追溯管理在MES系统中举足轻重

1. 质量追溯管理概述 质量追溯管理是指通过记录和监控产品在生产过程中的关键信息&#xff0c;确保在产品出现质量问题时&#xff0c;能够迅速追踪到问题源头&#xff0c;并采取相应措施的一种管理方法。在现代制造业中&#xff0c;质量追溯管理对于保障产品质量、提升客户满意…

关于 vue/cli 脚手架实现项目编译运行的源码解析

1.vue项目运行命令解析 在日常开发中&#xff0c;vue 项目通过vue-cli-service脚手架包将项目运行起来&#xff0c;常用的命令例如&#xff1a; npm run serve npm run build 上述执行命令实际一般对应为项目中 package.json 文件的 scripts属性中编写的脚本命令&#xff0c;在…

Python 课程5-NumPy库

在数据处理和科学计算中&#xff0c;NumPy 是一个非常强大且基础的库。除了基本的创建数组功能之外&#xff0c;NumPy 提供了许多强大的函数和方法&#xff0c;用于执行高级的矩阵运算、统计分析、逻辑操作等。以下是一些常用且非常有用的 NumPy 指令&#xff0c;涵盖了创建数组…

java: 程序包org.junit.jupiter.api不存在

明明idea没有报错&#xff0c;引用包也没问题&#xff0c;为啥提示java: 程序包org.junit.jupiter.api不存在&#xff1f; 配置&#xff01;还TMD是配置&#xff01; 如果是引用包的版本不对或者其他&#xff0c;直接就是引用报错或者pom里面飘红了。 这个应该是把generat…

设置使用阿里云服务器DNS

由于云服务器是从腾讯云迁移到阿里云&#xff0c;然后使用ssl验证时一直无法使用dns验证&#xff0c;也无法创建三级域名&#xff0c;原来需要把阿里云服务器改成阿里云的dns使用 如果使用其他服务器DNS会下面会显示当前DNS服务器&#xff0c;

冯诺依曼体结构与系统

冯诺依曼结构 我们的计算机&#xff0c;以及服务器&#xff0c;还有我我们日常使用的洗衣机都遵循冯诺依曼体结构。 以我们日常使用qq聊天时举例&#xff0c;冯诺依曼体结构可以这样画 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成 输入单元…

基于SpringBoot+Vue+MySQL的美术馆管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着文化艺术产业的蓬勃发展&#xff0c;美术馆作为展示与传播艺术的重要场所&#xff0c;其管理工作变得日益复杂。为了提升美术馆的运营效率、优化参观体验并加强艺术品管理&#xff0c;我们开发了基于SpringBootVueMySQL的美…

SAP B1 营销单据 - 单据字段介绍(中)

背景 营销单据&#xff0c;SAP B1 中一群神秘的单据&#xff0c;在官方说明文档中并未指明【营销单据】范围&#xff0c;却经常使用这一说法。它们结构相似&#xff0c;在 用户定义字段(UDF) 功能里统一受【营销单据】部分增加字段的影响&#xff0c;可以相互复制&#xff08;…

POI生成Excel文件增加数据验证(下拉序列)

POI版本为5.2.2 正常的如果不超过255字符的数据验证可以参照如下代码&#xff1a; /*** <p>设置某列的数据验证</p>* param Sheet 作用于哪一个sheet* param colIndex 需要增加数据验证的列的索引* String[] names 数据验证的序列&#xff0c;就是excel下拉列表的内…

codesys将自定义的功能块或者函数保存到本地库

将通过ST代码实现的自定义功能保存到codesys的本地库&#xff0c;其他project可以直接实现调用。提高灵活性和效率。 1、创建库工程 这里可能会提示涉及个别库没有安装或版本更新&#xff0c;根据提示安装对应库或更新即可。 2、添加功能块和函数 3、编写功能块和函数的参数定…

【Linux】查看操作系统开机时初始化的驱动模块列表的一个方法

这个方法是摸索出来的&#xff0c;也不一定对&#xff1a; 1、驱动层module_init(module_init_function)作为模块初始化&#xff0c;并且提供模块内部初始化的函数名&#xff1b; 2、找到所有驱动目录drivers下所有module_init(module_init_function)&#xff0c;在内核6.9.0…

js 深入理解生成器

目录 概述1 . 生成器基础2. 与普通函数的区别3. 通过 yield 中断执行3.1 yield 是干嘛的&#xff1f;3.2 yield 和 return 的区别3.3 每个生成器对象作用域都是独立的3.4 yeild 的使用位置3.5 生成器对象作为可迭代对象3.6 使用 yield 实现输入和输出3.6.1 yield实现输入3.6.1 …

4G物联网智能电表是什么?什么叫4G物联网智能电表?

4G物联网智能电表是一种结合了4G无线通信技术的新型电能计量设备&#xff0c;用于实时采集和传输用户的用电数据。它通过集成现代信息技术和电力电子技术&#xff0c;不仅能够精确测量电力消耗&#xff0c;还能实现远程数据传输、数据分析、远程控制等多种功能。本文将详细介绍…

【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况(2)

运维监控系列文章入口&#xff1a;【运维监控】系列文章汇总索引 文章目录 四、grafana集成influxdb监控java 虚拟机以及方法耗时情况1、添加grafana数据源2、添加grafana的dashboard1&#xff09;、选择新建dashboard方式2&#xff09;、导入dashboard 3、验证 关于java应用的…

CSS学习17--CSS3 过渡、2D变形、3D变形、动画

CSS3 过渡、2D变形、3D变形、动画 一、过渡二、2D变形 transform1.移动 translate2.缩放 scale3. 旋转 rotate4. 倾斜 skew 三、3D变形1. rotateX&#xff08;&#xff09;rotateY&#xff08;&#xff09; rotateZ&#xff08;&#xff09;2. 体会透视 perspective3. translat…

[数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;138 标注数量(xml文件个数)&#xff1a;138 标注数量(txt文件个数)&#xff1a;138 标注类别…

CleanMyMac X2024破解版mac电脑清理工具

今天&#xff0c;我要跟大家分享一个让我彻底告别电脑卡顿的秘密武器——CleanMyMac X。这不仅仅是一款普通的清理工具&#xff0c;它是你电脑的私人健身教练&#xff0c;让电脑焕发青春活力&#xff01; CleanMyMac直装官方版下载地址&#xff1a; http://wm.makeding.com/i…

【通用分割模型】SAM 2论文翻译

文章目录 摘要1 引言2 相关工作3 任务&#xff1a;可提示视觉分割4 模型5 数据5.1 数据引擎5.2 SA-V数据集 6 零样本实验6.1 视频任务6.1.1 提示视频分割6.1.2 半监督视频对象分割6.1.3 公平性评估 6.2 图像任务 7 与半监督VOS的最新技术的比较8 数据和模型消融8.1 数据消融8.2…

JavaSE篇之内部类和图书系统

1.内部类(类中类) 在Java中&#xff0c;将一个类定义在另一个类内部&#xff0c;前者称为内部类&#xff0c;后者称为外部类。 注意事项&#xff1a; 1. 1.静态内部类&#xff08;被static修饰的内部类&#xff09; 1.在静态内部类的方法中不能直接引用外部类的成员变量&…