zedboard如何从PL端控制DDR读写(三)——AXI-FULL总线调试

2024-04-09 15:32

本文主要是介绍zedboard如何从PL端控制DDR读写(三)——AXI-FULL总线调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要是总结一下使用AXI-FULL调试的过程。

  

  首先想到的是用RAM IP核来测试,方法是通过AXI接口向RAM写入一组数据并读出,看起来很简单,然而试了好久都没能出结果。如下图所示,其实AXI RAM就是在本地RAM接口的基础上套了一个AXI的壳

  

  在使用modelsim仿真的时候总是会抛出一个警告,具体的警告类型忘了,下次有机会再尝试。试了好多次都这样,无解

  于是转用FIFO来测试,结果一下子就跑通了。

  FIFO的自定义如下图:

  

  

  一直没搞懂这个ID是用来干嘛的,按理说应该是当系统中存在多个master或者slave的时候,用来标识不同的设备号的,但是也没找到在哪里可以配置这个ID号啊,求解。

 

  然后就是写状态机了,最初打算是用三段式状态机来实现下图的时序,结果发现三段式好像不太适合这种太紧凑的时序

  

  具体的表现如图中箭头所示,当写时序从AW(写地址通道)切换到W(写数据通道)的时候,我是通过判断valid和ready同时拉高(1)则进入下一个状态即W状态(2)的,但是从(1)到(2)的跳变必须经历一个时钟,紧接着在第三段状态机中检测到(2)并且产生实际的输出(3)这个过程中,又会经历一个时钟,这就会导致图中的T1和T2之间多出来了一个周期,时序不满足了。无奈,又换成一段式状态机继续。

 

  由于是对FIFO进行操作,burst类型自然选择是固定长度突发,写地址直接给0不变。这里说一下个人对wstrb的理解,前面也说了,这个信号是表示写阀门,也就是规定WDATA的哪些字节有效。实际上无论把wstrb写成全0还是全1,读出来的数据都是一样的,那么FIFO内部自然没有判断某些字节有效的逻辑,所以在后续读出的时候,需要由我们自行掩码。

  除此之外,个人感觉看着这一大堆的接口,首先不要怕,把所有的接口信号按不同的通道分成5组,一次只操作其中的一组,慢慢的就能完成整个时序的编写了。

 

  最后附上读写的仿真结果:

 

  数据用$random产生,再加上状态机,整个时序如行云流水般的运作起来了,想想还有点小兴奋呢

 

  既然已经看了RAM的xilinx文档,那么FIFO的也得看,这样才能显得雨露均沾。

  先来一张正常本地端口FIFO结构图

  

  所有的信号都还蛮熟悉,结构也还算了解,无非就是同一个FIFO的两个时钟域。

  接着再看AXI接口的FIFO:

  

  这都什么鬼啊,红线蓝线,那么多独立的模块,这是要干嘛?

  自习阅读官方文档,有这么一段话:

  For AXI memory mapped interfaces, AXI specifies Write Channels and Read Channels. Write Channels include a Write Address Channel, Write Data Channel and Write Response Channel. Read Channels include a Read Address Channel and Read Data Channel. The FIFO Generator core provides the ability to generate either Write Channels or Read Channels, or both Write Channels and Read Channels for AXI memory mapped. Three FIFOs are integrated for Write Channels and two FIFOs are integrated for Read Channels. When both Write and Read Channels are selected, the FIFO Generator core integrates five independent FIFOs. 

  For AXI memory mapped interfaces, the FIFO Generator core provides the ability to implement independent FIFOs for each channel, as shown in Figure 1-6. For each channel, the core can be independently configured to generate a block RAM or distributed memory or built-in based FIFO. The depth of each FIFO can also be independently configured.

  也就是说,每一个AXI通道最后都会生成成一个独立的跨时钟域FIFO,我们一开始将FIFO的类型配置成了读写,也就是五个通道全开,那么自然就是五个独立的FIFO了。

  这得占用多少资源啊,还好只是测试,不用考虑那么多。


本文转自:http://www.cnblogs.com/christsong/p/5682697.html


这篇关于zedboard如何从PL端控制DDR读写(三)——AXI-FULL总线调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888532

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插