Aurora-64B/10B、XDMA与DDR结合设计高速数据流通路设计/Aurora光纤设计/XDMA读取DDR设计/基于FPGA的高速数据传输设计

因最近想通过FPGA把数据从光纤传到PC,借此机会和大家一起学习Aurora、XDMA结合DDR

制作不易,记得三连哦,给我动力,持续更新!!!   

完整工程文件下载:XDMA读写DDR工程   提取码:4sxh


         根据前几个章节的学习,已经把DDR、XDMA的相关介绍和设置,已经配置完成了,接下来就再次升华一下,再把一个高速接口Aurora添加进来,完全实现一个 光纤-> PCIE 高速传输通路,此设计适用于各大进行高速数据传输的项目,最大速度可以达到10G。

        太多了理论知识,我也不想在这里废话,咱们直接来干货!!

        为了此次设计,可以进行下板测试,咱们需要把Aurora的发送和接收连接在一起,然后通过FPGA产生数据,通过Aurora发送,同时Aurora接受过来,然后把数据存储到DDR,并且通过XDMA连接到PCIE,通过XDMA驱动,在主机端读出数据,最终来验证读出来的数据是否和自己产生的数据匹配,通过添加ILA,抓取各个状态的数据状态。

        测试环境介绍:       

                1、FPGA主芯片:zynq7100

                2、光纤连接线

                3、PCIE主机(Windows10系统)(linux也可以,但是本文采用的Windows)

                4、vivado版本:2019.2

一、设计框图

二、设计思路                

2.1 Aurora数据产生模块设计

       2.1.1 代码设计

        此模块就需要借助之前的文章,Aurora的配置说明,不会的小伙伴记得去我的主页翻一下,然后就得到了一个官方的Aurora例子,咱们通过修改这个个例子,进行数据产生、发送、接受,该说不说xilinx真的很良心,再次点赞!!!!

        配置介绍:

                1、Aurora速度:10.125Gbps

                2、Aurora时钟:156.25Mhz

                3、接口模式:Framing模式

        先分析一下官方例子中的各个模块作用:

我们只需修改FRAME_GEN模块即可产生自己的数据,(AXI协议数据) 下面是具体修改的内容:

部分代码:

 assign reset_i = RESET || (!CHANNEL_UP);
    assign RESET_ii = RESET ; 
    assign resetUFC = reset_i; 
    
    assign i_ready = !TX_DST_RDY_N;
   
    integer i=0;
    reg     [31:0] count;
    reg     [63:0] array [0:3];
    
    initial begin
        array[0] = 64'h0000_0101_0202_0303;
        array[1] = 64'h0404_0505_0606_0707;
        array[2] = 64'h0808_0909_0A0A_0B0B;
    end
    
    reg [3:0] c_state, n_state;

   localparam   IDLE        = 0,
                DATA        = 1,
                DATA2       = 2,
                LAST_DATA   = 3,
                STOP        = 4;

    always @ (posedge USER_CLK) begin
        if (reset_i)
            c_state <= 0;
        else
            begin 
                c_state <= n_state;
            end
    end

    always @(*) begin
        case (c_state)

            IDLE    :   begin
                            n_state = DATA;
            end

            DATA    :   begin
                            if (i == 2 && i_ready)
                                n_state = LAST_DATA;
                            else
                                n_state = DATA;
            end 

            LAST_DATA   :   begin
                          if(i_ready)      
                                n_state = STOP;
                        else
                            n_state = LAST_DATA;
            end

            STOP    :   begin
                            if (count >=200_000_000)
                                n_state = DATA; 
                            else
                                n_state = STOP;
            end

            default :   ;


        endcase
    end

然后再自己建立一个顶层,(因为开发板的时钟和复位可能不符合Aurora协议),然后把这个设计例化到顶层,添加好约束文件,综合、实现、生成、bit文件。

     2.1.2 发送数据验证

        添加ILA到工程,具体采集的几个信号如下:(包括了发送数据部分、接受数据部分、Aurora状态部分)

然后重新编译工程,下载bit文件到开发板

打开ILA界面,抓取tx_valid和tx_ready同时为高电平的时候的触发:(此时光纤必须回环连接)

如上图可以发现,就是按照咱们代码里的一样,发送出来三组数据00--0B

由此可以验证发送数据没问题!!

2.1.3 接受数据验证

        紧接着我们可以来验证一下接受数据信号,同样在刚刚的ILA里,把接受数据的一些列信号移动到一起:

如上图可以发现,接受的数据和发射的数据完全一致,因为是Framing模式,所以数据接收并没有ready信号。

由此可以验证发送数据没问题!!

2.2 xdma、DDR链路模块设计

        xdma、DDR链路本次设计采用block design设计

        配置介绍:

                1、PCIE链路速度:x4  5.0T

                2、PC操作系统:Windows10

                3、DDR:DDR3                

        2.2.1 代码设计

        首先先建立一个BD设计文件:

        然后可以基于以前的XDMA读写DDR系列文章,来根据你的硬件搭建,我这边就不过多介绍了,直接展示搭建完成的截图。

别忘了给分配地址:

然后把BD设计生成verilog代码,并且置为顶层:

添加好约束文件,综合、实现、生成、bit文件。

2.2.2 XDMA读写DDR验证

        下载bit文件到开发板,并且重启主机

        在powershell打开xdma驱动文件夹,并运行test.exe文件:

如上图所示,表示PCIE 向DDR写入4096字节,然后又从DDR读出4096字节,对比数据,数据一致。

由此可以验证XDMA读写DDR没问题!!

2.3 Aurora、XDMA、DDR连接设计

        Aurora和XDMA模块,在前面都是单独测试的,现在我们需要把他们连接起来,实现完整的通路,也是我们这篇文章的重点内容

        (1)首先把Aurora的文件置为顶层

        (2)在BD设计中添加数据接口,以及读写DDR部分代码,如下图所示                

        (3)编译一下BD文件,然后把BD设计例化到,Aurora的代码中,如下图所示     

          (4)同时也需要把DDR3,PCIE的端口添加到Aurora的顶层上面    

       (5)最终的工程层次关系如下:       

        (6)然后添加约束文件,综合、实现、生成、bit文件。

三、设计测试

        3.1 modelsim仿真测试

        首先先对设计进行仿真测试,确保读写DDR模块无误,此次测试需要我们重新创建一个工程,单独仿真使用,这个我们的工程文件里面也包括。        

        由上图可以看见,数据从产生到FIFO,然后再写入到DDR整个链路的数据完整无丢失,这样可以确认我们的写入DDR模块没问题,接下来就可以下班进行测试,相信应该也没什么大问题!!

        3.2 下板测试

        经过上面的设计,以及单独的测试,相信离我们的目标已经很接近了,下面就来展示一下测试的结果。

        将最终的bit文件下载到开发板,然后重启主机

        还是和刚刚的一样,使用XDMA驱动,来读取数据,读取从0地址4096个字节的数据,读取指令:

 .\xdma_rw.exe c2h_0 read 0x0000000 -b -f datafile4K_rd.bin -l 4096

然后使用二进制查看软件,查看datafile4k_rd.bin这个文件即可,作者使用的软件是HxD.exe,需要的小伙伴自行去下载即可。

如上图看出来,读出来的数据和写入的数据完全一致

还可通过ILA观察数据的写入过程,这边添加几个ILA的状态截图

光纤接受数据:

读写DDR状态:

PCIE读取状态:

由此可以验证本次设计整体没问题!!,终于大功告成啦!!!

如果感觉文章对您有用,麻烦三连支持一下,方便下次用到的时候,就可以快速找到我,非常感谢您的支持!!!

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

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

相关文章

[Algorithm][前缀和][和为K的子数组][和可被K整除的子数组][连续数组][矩阵区域和]详细讲解

目录 1.和为 K 的子数组1.题目链接2.算法原理详解3.代码实现 2.和可被 K 整除的子数组1.题目链接2.算法原理详解3.代码实现 3.连续数组1.题目链接2.算法原理详解3.代码实现 4.矩阵区域和1.题目链接2.算法原理详解3.代码实现 1.和为 K 的子数组 1.题目链接 和为 K 的子数组 2.…

网络安全攻击溯源的重要性及挑战

网络安全攻击溯源是一个复杂且至关重要的过程&#xff0c;它涉及对网络攻击事件的来源进行追踪和分析&#xff0c;以便确定攻击者的身份、动机和攻击路径。在IP技术背景下&#xff0c;网络安全攻击溯源更是显得尤为重要&#xff0c;因为IP地址作为网络设备的唯一标识&#xff0…

Kafka 3.x.x 入门到精通(02)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通&#xff08;02&#xff09;——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.1.1 解压文件2.1.2 安装ZooKeeper2.1.3 安装Kafka2.1.4 封装启动脚本 2.2 集群启动2.2.1 相关概念2.2.1.1 代理&#xff1a;Broker2.2.1.2 控制器&#xff1a;Controller …

css中新型的边框设置属性border-inline

一、概念与背景 border-inline 是 CSS Logical Properties and Values 模块中的一个属性&#xff0c;用于控制元素在流内&#xff08;inline&#xff09;方向上的边框。该模块旨在提供与书写模式&#xff08;writing mode&#xff09;无关的布局和样式描述方式&#xff0c;使得…

【现代交换原理与通信网技术】期末突击

文章目录 自己老师画的重点1. 程控交换机结构2. 测试模拟电路的七项功能3.中继电路的六项功能4.数字用户电路和模拟用户电路比较5.路由规划的基本原则6.七路信令的结构7.随路信令和公共信道信令8.软交换9.无极网和分级网10.路由选择.流量控制的原则/方法11.电路交换&&分…

解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域

解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务&#xff08;Spring MVC Springboot&#xff09;同时允许跨域 Tomcat 配置允许跨域Web 项目配置允许跨域Tomcat 同时允许静态文件和 Web 服务跨域 偶尔遇到一个 Tomcat 部署项目跨域问题&#xff0c;因为已经处理过…

企业微信hook接口协议,ipad协议http,外部联系人图片视频文件下载

外部联系人文件下载 参数名必选类型说明file_id是StringCDNkeyopenim_cdn_authkey是String认证keyaes_key是Stringaes_keysize是int文件大小 请求示例 {"url": "https://imunion.weixin.qq.com/cgi-bin/mmae-bin/tpdownloadmedia?paramv1_e80c6c6c0cxxxx3544d9…

设计模式-状态模式在Java中的使用示例-信用卡业务系统

场景 在软件系统中&#xff0c;有些对象也像水一样具有多种状态&#xff0c;这些状态在某些情况下能够相互转换&#xff0c;而且对象在不同的状态下也将具有不同的行为。 为了更好地对这些具有多种状态的对象进行设计&#xff0c;我们可以使用一种被称之为状态模式的设计模式…

【Android】android 10 jar_sdk_library添加

前言 当前项目遇到客户&#xff0c;Android 10 平台&#xff0c;需要封装jar_sdk_library给第三方应用使用。其中jar_sdk_library中存在aidl文件。遇到无法编译通过问题。 解决 system/tools/aidl修改 Android.bp修改

vue中web端播放rtsp视频流(摄像头监控视频)(海康威视录像机)

一、ffmpeg安装​​​​​​ ffmpeg下载 https://ffmpeg.org/download.html找ffmpeg-release-essentials.zip点击下载&#xff0c;下载完解压ffmpeg.exe 程序运行 二、配置ffmpeg环境变量 添加成功后验证是否生效任意地方打开cmd窗口输入 ffmpeg 打印如下表示成功 三、node…

Ribbon负载均衡器

1. 负载均衡器 目前主流的负载方案分为以下两种&#xff1a;&#xff08;面试题&#xff09; 1.1 服务端负载均衡 在消费者和服务提供方中间使用独立的代理方式进行负载&#xff0c;有硬件的&#xff08;比如 F5&#xff09;&#xff0c;也有软件的&#xff08;比如 Nginx&a…

【重磅开源】MapleBoot项目开发规范

基于SpringBootVue3开发的轻量级快速开发脚手架 &#x1f341;项目简介 一个通用的前、后端项目模板 一个快速开发管理系统的项目 一个可以生成SpringBootVue代码的项目 一个持续迭代的开源项目 一个程序员的心血合集 度过严寒&#xff0c;终有春日&#xff…

uniapp配置了pages.json 的 tabbar 国际化,小程序切换语言没有实时切换

如上图&#xff0c;按照uniapp官方文档配置了tabbar的国际化 但是微信小程序实时切换语言没有实时刷新 解决方案&#xff1a; 在App.vue中加入以下代码&#xff1a; 在onLaunch中执行方法即可

LLM大语言模型(十二):关于ChatGLM3-6B不兼容Langchain 的Function Call

背景 基于本地的ChatGLM3-6B直接开发LangChain Function Call应用&#xff0c;发现其输出的action和action_input非常不稳定。 表现为生成的JSON格式回答非常容易出现不规范的情况&#xff0c;导致LangChain的Agent执行报错&#xff0c;或者进入死循环。 ChatGLM3-6B不兼容La…

SQLAlchemy的使用

SQLAlchemy中filter函数的使用 https://blog.csdn.net/m0_67093160/article/details/133318889 创建临时字段 select id , CONCAT(‘内容’) AS fullname from example_table;

设计模式之外观模式

1、详细介绍 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为子系统的一组接口提供了一个统一的入口点&#xff08;外观类&#xff09;。外观模式简化了客户端与子系统之间的交互&#xff0c;屏蔽了子系统内部的复杂性&#xff0c;使客户…

【Unity】UnityEvent(一)

​UnityEvent----高效管理游戏事件的利器 在游戏开发中&#xff0c;事件系统是实现各种功能的关键组成部分。它允许我们将不同对象之间的交互解耦&#xff0c;使得代码更加模块化和易于维护。而UnityEvent作为Unity引擎提供的一种强大的事件系统工具&#xff0c;为开发者提供了…

c++ - 模板(一)

文章目录 一、函数模板 一、函数模板 1、概念 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型产生函数的特定 类型版本。 2、原理 函数模板是一个蓝图&#xff0c;它本身并不是函数&#xff0c;是编译器用…

宜搜科技死磕港交所上市:从搜索引擎到广告投放,业绩疲态凸显

近日&#xff0c;宜搜科技控股有限公司&#xff08;下称“宜搜科技”&#xff09;向港交所递交招股书&#xff0c;计划在香港主板上市&#xff0c;中银国际为其独家保荐人。 值得注意的是&#xff0c;宜搜科技已在资本市场辗转多年。该公司曾于2014年向纽交所递交上市申请&…

Web3与传统互联网:挑战、融合与共生

引言 Web3技术正以惊人的速度改变着我们的互联网体验。作为一个基于区块链的去中心化互联网模型&#xff0c;Web3不仅带来了创新和变革&#xff0c;还引发了与传统互联网之间的对比和讨论。本文将深入探讨Web3与传统互联网之间的关系&#xff0c;挑战&#xff0c;以及可能的融…