Aurora8B10B(二) 从手册和仿真学习Aurora8B10B

news2024/9/24 11:24:55

一. 简介

在上篇文章中,主要结合IP配置界面介绍了一下Aurora8B10B,这篇文章将结合文档来学习一下Aurora8B10B内部的一些细节 和 相关的时序吧。文档主要是参考的是这个 pg046-aurora-8b10b-en-us-11.1

二. Aurora8B10B内部细节

在手册上,对Aurora8B10B的内部并没有做非常信息的说明,所以我们也不用纠结的特别深入,大概的了解一下有效带宽延时大概是多少就可以了,重点还是放在如何使用上。

  1. 数据: 在用户发送每一帧数据的时候,Aurora8B10都会在数据的开始位置增加2byte的SCP和末尾增加2btye的EOF来表示数据帧的开始和结束标志(如果用户的数据btye数为奇数的话,会为其增加额外的一个PAD byte来使数据为偶数)。所以为了最大传输带宽,用户每次传输的数据byte数最好为偶数。
  2. 时钟补偿: 传输通道每10000 bytes需要进行一次时钟补偿,每次时钟补偿需要发送12 bytes的数据,需要消耗6个或者3个时钟周期,在这期间用户是不能进行数据传输的,有效带宽又进一步减少了。
  3. 传输延时:从发送端发送第一个数据开始,到接收端接收到第一个数据结束所消耗的时间,最小的延时为41个用户时钟周期,对时延有要求的话,这里需要着重注意。

需要注意的点,就以上三点,其它更细节的地方可以去研究官方文档。

微信公众号 : FPGA之旅 出品

三. Aurora8B10B 模块信号

这部分才是学习的重点,同样对于一些不重要的信号,或者这个信号很重要,但是在我使用的过程中,这个重要的信号我不care的,在下面的介绍中就一笔带过了,有对应需求的可以在官方文档里快速查找对应信号的功能(这样介绍起来,毕竟太费键盘了O(∩_∩)O)。

本次设计的IP配置如下(上篇文章中 已经对IP的配置进行了详细的讲解):

  1. 数据位宽4Btyes,线速率6.25,GT Refclk 125M,INT(DRP) CLk 50,数据模式双向,接口是Framing,其它都没有选
  2. GT 收发器选择一个Lane,Shared Logic选择 in core,其它的都不勾选。

最后得到的端口信号如下,接口信号挺多的,但是设计上使用到的却只有那么几个而已,和DDR MIG IP差不多,下面就按类别进行介绍。

请添加图片描述

  1. IO信号: 连接到对应bank的IO Pin上
// GT Serial I/O
.rxp                                (       aurora_rxp_pin_i            ),
.rxn                                (       aurora_rxn_pin_i            ),
.txp                                (       aurora_txp_pin_o            ),
.txn                                (       aurora_txn_pin_o            ),

  1. GT的参考时钟: 由外部差分时钟输入,引脚相对固定

    // GT Reference Clock Interface
    .gt_refclk1_p                       (       gt_refclk1_p_i              ),
    .gt_refclk1_n                       (       gt_refclk1_n_i              ),
    .gt_refclk1_out                     (       gt_refclk1_out              ),
    
  2. 错误标识信号: 当出现错误时,对应信号会拉高

 // Error Detection Interface
.frame_err                          (       aurora_error[0]             ),
.hard_err                           (       aurora_error[1]             ),
.soft_err                           (       aurora_error[2]             ),
  1. IP初始化成功信号: 当IP初始化成功,并且接收方与发送方握手成功后拉高,只需要对channel_up信号进行判断即可
 // Status
.lane_up                            (                                   ),
.channel_up                         (       channel_up                  ),
  1. 系统接口: 只需要操作gt复位和系统复位两个信号即可,初始化时钟自行输入即可,可以是单端信号(IP配置时勾选即可)。这个两个复位信号是在初始化时钟域下进行的。

​ loopback用来设置回环模式的,power_down设置0即可正常工作

复位说明:
请添加图片描述
请添加图片描述

    // System Interface
.sync_clk_out                       (                                   ),
.gt_reset                           (       gt_reset                    ),
.reset                              (       reset                       ),
.sys_reset_out                      (                                   ),
.gt_reset_out                       (                                   ),
.power_down                         (       'd0                         ),
.loopback                           (       'd0                         ),
.tx_lock                            (                                   ),
.init_clk_p                         (       init_clk_p_i                ),
.init_clk_n                         (       init_clk_n_i                ),
.init_clk_out                       (       init_clk_out                ),
.tx_resetdone_out                   (                                   ),
.rx_resetdone_out                   (                                   ),
.link_reset_out                     (                                   ),
  1. 动态配置信号,在IP运行过程中,可以对其进行动态配置,一般来说,用不到,可以不用管
//DRP Ports
.drpclk_in                          (   init_clk_out                    ),  
.drpaddr_in                         (   'd0                             ), 
.drpen_in                           (   'd0                             ), 
.drpdi_in                           (   'd0                             ), 
.drprdy_out                         (                                   ), 
.drpdo_out                          (                                   ), 
.drpwe_in                           (   1'b0                            ), 
  1. GT COMMON信号输出: 由于我们选择的是in core,所以在IP里面包含了这个模块,输出的信号可以给其他收发器使用。
//____________________________COMMON PORTS_______________________________{
.gt0_pll0refclklost_out             (                                   ),
.quad1_common_lock_out              (                                   ),
//----------------------- Channel - Ref Clock Ports ------------------------
.gt0_pll0outclk_out                 (                                   ),
.gt0_pll1outclk_out                 (                                   ),
.gt0_pll0outrefclk_out              (                                   ),
.gt0_pll1outrefclk_out              (                                   ),
//____________________________COMMON PORTS_______________________________}
.pll_not_locked_out                 (                                   )
  1. 用户接口: 最后就是我们的用户接口了,是一个非常简单的AXI stream接口 ,直接看时序图吧
.user_clk_out                           (   user_clk_out                    ),
    // AXI TX Interface
.s_axi_tx_tdata                         (   s_axi_tx_tdata                  ),
.s_axi_tx_tkeep                         (   s_axi_tx_tkeep                  ),
.s_axi_tx_tvalid                        (   s_axi_tx_tvalid                 ),
.s_axi_tx_tlast                         (   s_axi_tx_tlast                  ),
.s_axi_tx_tready                        (   s_axi_tx_tready                 ),
    
    // AXI RX Interface
.m_axi_rx_tdata                         (   m_axi_rx_tdata                  ),
.m_axi_rx_tkeep                         (   m_axi_rx_tkeep                  ),
.m_axi_rx_tvalid                        (   m_axi_rx_tvalid                 ),
.m_axi_rx_tlast                         (   m_axi_rx_tlast                  ),

请添加图片描述
请添加图片描述

其中tlast和tkeep两个信号需要注意一下,在发送接收一帧数据时,在最后一个数据需要tlast会拉高,同时tkeep会指示最后一个数据中有效的byte数是多少。

四. 仿真

仿真的时候,我们只需要给时钟和复位信号就可以了,主要观察到channel_up信号拉高了,就说名IP可以正常使用了, tb如下:

    reg gt_reset;
    reg reset;
    reg aurora_rst_n_i;
    reg gt_refclk1_p    ;
    reg gt_refclk1_n    ;
    reg init_clk_p      ;
    reg init_clk_n      ;
    wire aurora_rxp_pin  ;
    wire aurora_rxn_pin  ;
    wire aurora_txp_pin  ;
    wire aurora_txn_pin  ;


    assign aurora_rxp_pin = aurora_txp_pin;
    assign aurora_rxn_pin = aurora_txn_pin;
    always@(*) #2.5 gt_refclk1_p <= ~gt_refclk1_p;
    always@(*) gt_refclk1_n <= ~gt_refclk1_p;
    always@(*) #10 init_clk_p <= ~init_clk_p;
    always@(*) init_clk_n <= ~init_clk_p;
    initial begin
        gt_refclk1_p = 1'b1;
        gt_refclk1_n = 1'b0;
        init_clk_p   = 1'b1;
        init_clk_n   = 1'b0;
        aurora_rst_n_i = 1'b1;
        gt_reset = 1'b0;
        reset    = 1'b0;
   
        #10
        reset = 1'b1;
        #100
        gt_reset = 1'b1;
        #1000
        gt_reset = 1'b0;
        #200
        reset = 1'b0;
    end

请添加图片描述

仿真到360us的时候,channel_up拉高了。就可以根据时序图正常进行读写操作了。到这里就结束了,可以根据自己需要进行读写设计了。

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

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

相关文章

pytorch中数据预处理模块:transforms详解

1 tranforms概述 1.1 torchvision介绍 torchvision是pytorch的计算机视觉工具包&#xff0c;主要有以下三个模块&#xff1a; torchvision.transforms&#xff1a;提供了常用的一系列图像预处理方法&#xff0c;例如数据的标准化&#xff0c;中心化&#xff0c;旋转&#xff…

设计模式——外观模式(结构型)

引言 外观模式是一种结构型设计模式&#xff0c; 能为程序库、 框架或其他复杂类提供一个简单的接口。 ​ 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。 正常情况下&#xff0c; 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确的顺序执行方法等。…

记录 | 不限速下载vscode

在下载 vscode 的时候往往会遇到一个问题就是下载的贼慢 下面教不限速下载的方式 将下面红框内的内容进行替换 替换为&#xff1a; vscode.cdn.azure.cn然后你会发现下载速度就起飞了

开辟“护眼绿洲”,荣耀何以为师?

文 | 智能相对论 作者 | 佘凯文 俗话说&#xff0c;眼睛是心灵的窗户&#xff0c;可如今&#xff0c;人们对于这扇“窗户”的保护&#xff0c;似乎越来越不重视。 据人民日报今年发布的调查显示&#xff0c;中国眼病患病人数2.1亿&#xff0c;近视患者人数多达6亿&#xff0…

智能优化算法应用:基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于头脑风暴算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.头脑风暴算法4.实验参数设定5.算法结果6.…

救命~这件国风旗袍女儿穿也太好看了吧

这款中式提花改良版旗袍 一眼就戳中了我的心巴 整件精美刺绣好看不大众 两侧网纱的加持增添仙气缥缈感 穿上厚实不显臃肿 袖口处拼接毛毛徒增可爱俏皮的感觉 穿上过年过节满满的焦点呀~

C语言学习----字符串数组和字符串指针

&#x1f308;在C Primer Plus 第六版中第11章的字符串和字符串函数讲的很好~ 对于字符串和字符串指针的用法又更深入了解了一些~ &#x1f42c; 本blog为 C Primer Plus 的记录~ ☘️对于字符串指针和数组更加深入了解~ &#x1f33a;省流&#xff1a;1️⃣字符串常量被储存在…

【第1期】SpringSecurity基于角色和权限的细粒度接口权限控制

SpringSecurity 细粒度权限控制 一、Role 和 Authority的区别 角色用来表示某一类权限的集合&#xff0c;权限粒度更小&#xff0c;方便细粒度控制 二、创建用户、角色、权限相关表&#xff1a; CREATE TABLE common_user (id bigint(20) NOT NULL COMMENT 主键id,login_na…

1.electron之纯原生js/jquery的桌面应用程序(基础篇)

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

linux离线安装libreoffice

安装步骤 1.安装JAVA环境jdk 2.下载离线安装包libreoffice 3.安装libreoffice 4.配置字体防止乱码 1.安装JAVA环境JDK 这个网上自己搜下&#xff0c;资料漫天飞 2.下载libreoffice离线安装包 下载地址 Download LibreOffice | LibreOffice - Free Office Suite - B…

Redis第1讲——入门简介

Java并发编程的总结和学习算是告一段落了&#xff0c;这段时间思来想去&#xff0c;还是决定把Redis再巩固和学习一下。毕竟Redis不论是在面试还是实际应用中都是极其重要的&#xff0c;在面试中诸如Redis的缓存问题、热key、大key、过期策略、持久化机制等&#xff1b;还有在实…

Windows11安装python模块transformers报错Long Path处理

Windows11安装python模块transformers报错&#xff0c;报错信息如下 ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: C:\\Users\\27467\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\Local…

CSS文本样式(详解)

CSS文本样式 &#x1f367; 文本颜色&#x1f9c1;文本缩进&#x1f368;文本对齐&#x1f365;文本行高&#x1f95d;文本装饰 &#x1f367; 文本颜色 属性&#xff1a;color 作用&#xff1a;设置文本颜色 属性值&#xff1a; 颜色表示方式表示含义属性值颜色名称预定义的…

matplotlib如何在label中加入字符并换行【已解决】

最近在跑一个超参数的实验&#xff0c;但是发现x轴的刻度就很丑 显然&#xff0c;lr和theta在一行显得很冗余 这个是此时的label x_labels [$\t{lr0.05}\ \tθ10}$, 40, 60] 正常加换行符即可&#xff0c;但是要加上$$ x_labels [$\t{lr0.05}\ $\n$ \tθ10}$, 40, 60] 大…

基于ssm游戏美术外包管理信息系统源码和论文

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;线下管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

Python数据科学视频讲解:Python集合

2.14 Python集合 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解2.14节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学应用的全流程&#xff0c;包括数据科学应用…

dcoker-compose一键部署EFAK —— 筑梦之路

简介 EFAK&#xff08;Eagle For Apache Kafka&#xff0c;以前称为 Kafka Eagle&#xff09;是一款由国内公司开源的Kafka集群监控系统&#xff0c;可以用来监视kafka集群的broker状态、Topic信息、IO、内存、consumer线程、偏移量等信息&#xff0c;并进行可视化图表展示。独…

Dockerfile:创建镜像,创建自定义的镜像。

Docker的创建镜像的方式&#xff1a; 基于已有镜像进行创建。 根据官方提供的镜像源&#xff0c;创建镜像&#xff0c;然后拉起容器。是一个白板&#xff0c;只能提供基础的功能&#xff0c;扩展性的功能还是需要自己定义&#xff08;进入容器进行操作&#xff09; 基于模板进…

VSCode配置代码片段,提升效率必备!

1.点击文件—> 首选项------>配置用户代码片段 2、新建用户代码片段 3、以js的控制台输出为例 {//片段名称"console.log": {"prefix": "cls",//呼出命令"body": ["console.log($1)"//具体片段],"descriptio…