加密后数据为 128 位位宽,由于光纤中传输的数据为 16 位位宽,故需要设计 一个位宽转换模块。
AES 加密后输出速率与光纤传输速率不一致,为异步信号。我们设计了一个 FIFO 控制模块,并调用了 IP 核进行设计。
我们在 vivado 中编译 IP 核数据,并调用 modelsim 观察我们测试数据,放大 图 4-5 后可观察以下重要数据:
block:送入的带加密数据
new_block :加密以后输出的 128 位数据(每次加密迭代循环都有输出)
DATA_TURE:当加密完成后,根据 ready 信号使能取出当前 128 位加密完成的数据
fifo_out_r:将 128 位数据转化成 16 位数据,并从 FIFO 端输出
next:使能拉高时,表示当前加密完成,可送入新的待加密数据
ready :当前数据加密完成,可以读取该数据
4.3 混沌序列密钥设计
通过前文的分析,我们选择了 logistic 模型。在 jupyter notebook IDE 上用 python 调用 matlab 库设计了 logistic 模型,迭代 200 次生成的序列如图 4-6。
改变不同的 u 值产生的模型仿真图 4-7 如下(初值 X0=0.5):
通过观察当 u 的取值在 3.8~4.0 左右时模型进入混沌现象。
接着测试模型对初值的敏感程度,设置初值 x0=0.631999999983 u0=3.899999999906 和 x1=0.631999999284,u1=3.899999999906 两者产生的序列的 差值变化如图 4-8,设置初值 x0=0.631999999983 u0=3.899999999906 和 x1=0.631999999983,u1=3.899999999208 两者产生的序列的差值变化如图 4-9。
可以看出设置的初值仅仅只是相差 E-10,最后产生的序列相差很大。
将算法移植到 FPGA 平台,包括每次迭代循环的计算模块。为了避免模块的 输出直接又作为输入引起实现违规,将每次的输出信号引出,在另一个模块里缓 存。等待计算模块计算完成时,将上一次的计算结果作为新的数据作为计算模块 的输入。另外为了灵活与加密解密模块的数据位宽对接,设计了拼接模块,可以 灵活定制输出数据位宽与时序。整体模块化 RTL 图如图 4-10。
设计完成后分析系统模型输出数据的 Lyapunov 指数(简称李氏指数),它刻 画非线性系统混沌特性的有效方法之一,只要李氏指数大于零,则系统是混沌的。最终在硬件上生成的数据,通过软件分析其李氏指数为 0.4953767618,验证了该 模型为混沌系统。
4.4 针对语音/文字加密数据进行特定的帧定制
普通光纤传输的传输方式分为流传输和帧传输,而流传输由于其不可靠性, 以及不适合控制和定制的特点,我们选择了帧传输,如图 4-12 为普通的光纤通信 帧传输。
由于加密数据为 128 位位宽数据,而光纤中每次传输 16 位位宽数据,故八次 传输周期传输一个 128 位的加密数据。如果采用普通的数据流传输的话,一旦中 间有丢包,后续所有的数据将会错误,这在我们加密通信中是绝不允许的。
为了解决该问题,我们针对 AES 算法定制了一种帧结构(如图 4-13)。我们 将每一个 128 位加密数据作为一次传输的帧结构,而每次的前 16 位作为该帧结构 的帧头,这样做的好处就是:
1.帧结构传输不容易产生误码和丢包
2.即使丢包 我们也不会影响下一个数据的传输。
我们在该项目的测试中,测试向量为上述四个 128 位数据循环发送。我们在 原来的帧结构的基础上,又封装了一层光纤链路自带的帧结构,以四个 128 位数 据为光纤传输的一个大帧结构。保证了链路传输的可靠性。
图 4-13 中的 tx_d_i 信号为我们发送到链路中的数据信号,以 b6ed 为例,该 16 位数据为加密后的 3 号测试向量起始 16 位数据,后面紧跟 7 个剩余的 16 位数 据,组成一个完整的 128 位加密数据。通过我们的帧定制操作,极大的提高了我 们加密传输的可靠性。
4.5 接收端对语音/文字加密数据帧数据恢复
接收端对帧数据进行恢复,去除定制的帧头帧尾,并消除原有 Aurora 协议不 定时发送的无效数据带来的误码。
如图 4-14 所示,我们将光纤接收端接收到的数据(rx_d_i)接收下来,并将 其进行 16 位转 128 位操作,输出数据为 fifo_out_rx,我们对比测试向量的数据发 现,我们的数据是正确无误的。
4.6 发送端对视频流数据进行外流水线设计
针对视频流数据,我们同时使用 15 个加密模块,分别错开一个周期进行同时 加密。如图 4-15 蓝色箭头所指:每个加密模块完成加密后,将加密数据送至寄存 器缓存,使得我们的加密效率提高了 15 倍。
系统综合测试分析
IBERT(Integrated Bit Error Ratio Tester)是 Xilinx 提供的用于调试 FPGA 芯片 内高速串行接口的工具。它通过 JTAG 总线提供了 FPGA 到 Vivado Serial I/O Analyzer 的通道。通过 IBERT 用户可以定制线速率、参考时钟速率、参考时钟来 源,总线宽度。它同时还额外需要一个系统时钟,这个时钟可以来自 GTX 收发器 或者其它 FPGA 管脚。
使用 IBERT 进行 GTP 通道的验证有以下三个步骤:
1.生成 ibert 核:根据硬件高速串行总线的需求来定制和生成 iber 核。
2.使用上一步的 ibert 核自动生成 ibert 参考设计并生成 Bit 文件。
3.使用 Seiral I/O Analyzer 连接到 IBERT 核,并验证高速串行通道的状态
我们在 vivado 中生成该测试工具,对 SFP+光口实际发出的数据进行测速和信 号完整性分析。如图 5-1 所示。我们可以在图的正下方观察到该链路的实际速率为 5Gbps,速率完全满足我们的设计需求;误码率越低,颜色越偏向蓝色(深蓝色);当误码率越高,颜色越偏向红色,眼图张开的大小就代表信号质量的好坏。我们 通过观察眼图可以发现,蓝色区域很大,且角度张开合理。结合图 5-2,通过 5Gbps 速率的光纤传输 4.557E10 Bit 数据后,误码率仅为 2.195E-11,远低于官方规定的 误码率 1.E-10 标准,可以得出结论:信号完整性分析良好,信号质量传输可靠。
同时我们通过算法在硬件上的优化,可以占用很少的资源到达所需要求,如 图 5-3 和图 5-4 所示,可以看出很低的资源利用率。
总结
本设计具有很高的实用价值,在保密通信领域,视频安防监控领域,军用或 民用视频/音频传输领域,都有极强的应用场景。
本次作品的难点和创新点在于:
1. AES 加密算法在 FPGA 上的实现;
2. AES 算法在光纤链路上的算法移植;
3.针对 AES 算法在光纤发送端进行特定的帧定制;
4.针对视频流做了外流水线设计,保证视频数据低延迟传输;
5.混沌序列的设计;
6.高速通信中时序约束和信号完整性分析。
参考文献
[1] 7 Series FPGAs GTX/GTH Transceivers User Guide
[2] Vivado Design Suite User Guide
[3] Aurora 8B/10B v11.0 LogiCORE IP Product Guide
[4] Small Form-factor Pluggable (SFP) Transceiver MultiSource Agreement (MSA)
[5] Xilinx.Aurora 8B/10B Protocol Specification.Revision 2.2[M].Xilinx, 2010,10:16-90
[6] L.Henzen and W.Fichtner,"FPGA parallel-pipelined AES-GCM core for 100G Ethernet applications[C]", 2010 Proceedings of ESSCIRC, Seville, 2010, pp. 202-205.
[7]赵文虎,王志功,费瑞霞,朱恩,吴微.基于逻辑设计的光纤通信 8B/10B 编解码方法 研究[J].电路与系统学报,2003(02):48-53.
[8]王志功.光纤通信系统超高速集成电路设计[J].中国科学,2000(03):35-40.
[9]谢郁洁.基于 FPGA 的核间高速接口的设计与验证[D].电子科技大学,2014.
[10]何少恒.基于 SFP光纤通信接口的高速IQ数据传输系统设计与实现[D].中北大 学,2016.
[11]王小伟.AES 加密算法的研究与 IP 核设计实现[D].哈尔滨工业大学,2013.
[12]Yufeng Liu,Xiangyang Xu,Hao Su.AES Algorithm Optimization and FPGA Implementation[J].IOP Conference Series: Earth and Environmental Science,2019,267(4).
[13]杨静.一种 AES 算法加密传输系统的设计与实现[J].电子设计工 程,2019,27(03):123-126+131.
[14]何德彪,胡进,陈建华.基 FPG 的高 AE 实现[J].华中科技大学学报(自然科学 版),2010,02:101-104.