Aurora 64B/66B 协议介绍

Posted 庸医~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Aurora 64B/66B 协议介绍相关的知识,希望对你有一定的参考价值。

简介

        Aurora 是一个用于在点对点串行链路间移动数据的可扩展轻量级链路层协议。这为物理层提供透明接口,让专有协议或业界标准协议上层能方便地使用高速收发器。虽然使用的逻辑资源非常少,但 Aurora 能提供低延迟高带宽和高度可配置的特性集。

特性:

  • 高带宽,仅受限于收发器的数据速率
  • 支持大量键合线路,实现较高的总带宽
  • 支持全双工和单工通道
  • 无限帧尺寸/灵活组帧
  • 小型逻辑封装,采用标准的 AXI-ST 接口。
  • 内置流程控制和热插拔支持

         Aurora 广泛用于需要背板、电路板间和芯片间连接的应用。细分市场包括有线通信、存储、服务器、测试测量、工业、消费和医疗等。此外,Aurora 也可用作嵌入式处理器应用中的调试端口 

速率

Aurora 64B/66B核心吞吐量取决于收发器数量、收发器类型和所选收发器的目标线速率

        对于GTH收发器,从单车道设计到16车道设计,吞吐量分别为0.48 Gb/s到254.06 Gb/s。GTY收发器的吞吐量范围为0.455 Gb/s ~ 400gb /s,支持的线路速率范围为0.5 Gb/s ~ 25.7813 Gb/s。当线路速率大于16.375 Gb/s时,考虑到设计中的车道分条差异,GTY的最大吞吐量可能不准确

        64B/66B编码相对8B/10B编码提供了理论上的性能提升,因为它的传输开销非常低(3%),而8B/10B编码的传输开销为25%

66B/64B编码

        64B/66B编码将64bit数据或控制信息编码成66bit块传输,66bit块的前两位表示同步头,主要由于接收端的数据对齐和接收数据位流的同步。同步头有“01”和“10”两种,“01“表示后面的64bit都是数据,“10”表示后面的64bit是数据信息。

        数据信息0和1不一定是平衡的,因此需要进行加扰。

        64b/66b编码没有办法限制Run Length(即数据流中的连续的0或者连续的1长度)到一个比较小的值,只能通过选择合适的多项式来取得相对最优的DC Balance和相对较低的较大值得Run Length的概率。显然,采用64b/66b编码,对串行收发器的CDR提出了非常高的要求。

扰码

        扰码的数学原理使用了多项式,多项式的选择通常是基于扰码的特性,包括生成数据的随机度,以及打乱连0和连1的能力。一个简单的扰码器包含一组排列好的触发器,用于移位数据流。大部分的触发器只需要简单地输出下一个比特流即可,但是在复杂的扰码电路中,触发器需要与数据流中的历史比特进行逻辑运算(与和或运算)

64B/66B核心的主要功能模块

•通道逻辑:每个GT收发器由通道逻辑模块的实例驱动,该模块初始化每个收发器,处理控制字符的编码和解码,并执行错误检测。

•全局逻辑:核心中的全局逻辑模块为通道初始化执行通道绑定。在操作期间,通道跟踪由Aurora 64B/66B协议定义的Not Ready空闲字符,并监视所有通道逻辑模块的错误。

•RX用户界面:axis - stream接收(RX)用户界面将数据从通道移动到应用程序,并执行流量控制功能。

•TX用户界面:axis - stream传输(TX)用户界面将数据从应用程序移动到通道,还执行流控制TX功能。标准时钟补偿模块嵌在核心内部。该模块控制时钟补偿(CC)字符的周期性传输。

通道延时

        对于默认的单通道配置,通过Aurora 64B/66B核心的延迟是由通过协议引擎(PE)以及通过GTX和GTH收发器的管道延迟引起的。PE管道延迟随着AXI4-Stream接口宽度的增加而增加。收发器延迟由收发器特性决定。

        为了说明延迟,Aurora 64B/66B模块在GTX、GTH和GTY收发器中的逻辑和FPGA中实现的协议引擎(PE)逻辑之间进行了分区。

        该图说明了数据路径的延迟。

Go语言库系列之aurora

背景介绍

今天跟大家推荐一款可以给终端输出上色的工具--aurora。

技术图片

极速上手

准备工作

初始化项目

go mod init aurora

演示项目结构

.
├── go.mod
├── go.sum
└── main.go

安装aurora包

go get -u github.com/logrusorgru/aurora

代码演示

首先引入aurora库

import . "github.com/logrusorgru/aurora"

输出一个品红颜色的内容,Magenta是以颜色命名的方法

fmt.Println("Hello,", Magenta("Aurora"))

再输出一个加粗的青色的名称

fmt.Println(Bold(Cyan("Cya!")))

完整代码如下

package main

import (
	"fmt"

	. "github.com/logrusorgru/aurora"
)

func main() {
	fmt.Println("Hello,", Magenta("Aurora"))
	fmt.Println(Bold(Cyan("Cya!")))
}

运行后输出内容如下

技术图片

更多玩法

支持格式化输出函数

除了换行输出函数外,aurora还支持格式化输出函数

msg := fmt.Sprintf("My name is %s", Green("pingyeaa"))
fmt.Println(msg)

技术图片

链式调用

我们可以嵌套调用,来个绿底加粗红字

fmt.Println(BgGreen(Bold(Red("pingyeaa"))))

技术图片

还可以进行链式调用,同样可以达到相同效果,这种方式的可读性更高一些

fmt.Println(Red("pingyeaa").Bold().BgGreen())

更简便的写法

除了链式调用外,还有一种更简便的写法,就是通过位或运算符来实现

fmt.Println(Colorize("Greeting", GreenFg|RedBg|BoldFm))

官方定义了10种常量,感兴趣的同学可以自行研究源码

const (

	BlackBg   Color = (iota << shiftBg) | flagBg // 40, 100
	RedBg                                        // 41, 101
	GreenBg                                      // 42, 102
	YellowBg                                     // 43, 103
	BlueBg                                       // 44, 104
	MagentaBg                                    // 45, 105
	CyanBg                                       // 46, 106
	WhiteBg                                      // 47, 107

	BrightBg Color = ((1 << 3) << shiftBg) | flagBg // -> 100

	BrownBg = YellowBg

	maskBg = (0xff << shiftBg) | flagBg
)

同样也可以搭配链式调用使用

fmt.Println(Red("x").Colorize(GreenFg))

支持灰阶

所谓灰阶,是将最亮与最暗之间的亮度变化,区分为若干份

技术图片

方法中的数字代表灰色深度的数值,支持背景和文字上色

fmt.Println("  ",
	Gray(1-1, " 00-23 ").BgGray(24-1),
	Gray(4-1, " 03-19 ").BgGray(20-1),
	Gray(8-1, " 07-15 ").BgGray(16-1),
	Gray(12-1, " 11-11 ").BgGray(12-1),
	Gray(16-1, " 15-07 ").BgGray(8-1),
	Gray(20-1, " 19-03 ").BgGray(4-1),
	Gray(24-1, " 23-00 ").BgGray(1-1),
)

技术图片

支持闪烁

fmt.Println(Blink("Blink"))

限制

格式化输出函数中的%T%p是没办法上色的

r := Red("red")
var i int
fmt.Printf("%T %p
", r, Green(&i))
aurora.value %!p(aurora.value={0xc42000a310 768 0})

但是可以通过在外层嵌套颜色来解决

fmt.Println(Red(fmt.Sprintf("%T %p
", r, Green(&i))))

Go语言库代码示例,欢迎star
https://github.com/pingyeaa/golang-examples

感谢大家的观看,如果觉得文章对你有所帮助,欢迎关注公众号「平也」,聚焦Go语言与技术原理。
技术图片



以上是关于Aurora 64B/66B 协议介绍的主要内容,如果未能解决你的问题,请参考以下文章

64B/66B编码

基于FPGA的DES加解密系统开发(5000字详细介绍欢迎订阅)

基于FPGA的CAN接口开发

基于FPGA的CAN接口开发

ZYNQ之FPGA学习----EEPROM读写测试实验

怎样新建Quartusproject—FPGA新手教程