运用FPGA设计分数阶混沌系统

2021-02-28 06:49湖南师范大学彭代鑫彭良玉张学丰
电子世界 2021年22期
关键词:状态变量字节时钟

湖南师范大学 彭代鑫 彭良玉 张学丰

本文研究了基于Adomian分解法求解的分数阶混沌系统,并利用FPGA的高速并行计算能力与强大的接口能力,设计了一种新颖的FPGA实现方案。FPGA在每一次计算状态变量后,将数据通过USB总线传送至电脑,实验数据在经LabVIEW处理后与数值仿真结果一致,验证了方案的可行性和正确性。此方案无需使用示波器,且分数阶算法模块工作在4倍源时钟频率200MHz,不仅为信息加密、保密通信提供理论与实验依据,同时也为混沌系统的FPGA的设计与验证带来便利。

相比于整数阶微分,分数阶微分能够描述更复杂的动力学行为,因此具有更加广阔的应用前景,Adomian分解法是常用的计算分数阶微分的算法。使用数字电路设计混沌系统,常用的有DSP和FPGA,两者都可以反复编程实现特定的混沌系统。DSP的计算模式为串行计算,从输入到输出需要经历一个相对较长的时间。而FPGA的架构非常灵活,既可以进行串行计算,又可以进行并行计算,因此FPGA可以根据需求灵活地采取计算模式,从而提升计算速度。并且可以利用FPGA芯片强大的接口能力,通过通信协议将数据传送至电脑,运用电脑对信号进行处理并显示。由于本文产生的实验数据大小在Mbit级别,USB通信速度在Mbps以上,且FPGA开发板配置了一颗USB转FIFO的芯片FT232,能将复杂的USB通信协议简化,因此采用USB通信。在本方案中,通过一个按键控制分数阶计算模块的启动,该模块在每一次计算出状态变量的值后立刻将数据写入FT232芯片,通过USB发送至电脑,在计算完设定的总点数后停止工作。数据经LabVIEW处理后与数值仿真结果一致。

1 分数阶混沌系统数学模型

已知分数阶混沌系统的数学模型如式(1)所示:

令系数a=1,分解级数N= 3,求解步长 (t-t0) =2-6,分数阶数q=0.95,状态变量初始值(x0,y0,z0) = (0.5, 0.5, 0.5),状态变量相图如图1所示。

图1 状态变量相图

2 FPGA实现

2.1 系统框图

在本方案中,采取的数制为35位定点数,采用一个异步FIFO作为数据流的缓冲与输出。算法结构如图2所示,运用Verilog HDL编程实现。其中clk0是FPGA板载的源时钟,频率为50MHz,clk是经过PLL倍频后的时钟,频率为200MHz。rst为复位信号,当复位信号为低电平时,系统复位,复位的主要作用是为寄存器类型的变量赋初值,key是启动状态变量计算模块的按键。

图2 FPGA实现与验证方案框图

2.2 工作原理及仿真结果

当按键按下时,FPGA进入工作状态,开始计算状态变量,在每一次状态变量计算完毕后,开启FIFO的写使能,把数据写至FIFO,当数据写入完毕后,关闭FIFO写使能。FIFO是先进先出队列,这里采用的是异步FIFO,写频率为200MHz,读频率为FT232自带的晶振频率60MHz,当FIFO里的读空信号不为1时,表明FIFO里写入了数据,若此时FT232芯片可写,将拉高FIFO的读使能信号并拉低芯片写使能信号,将FIFO里的数据读出到数据线上写入FT232。状态变量计算模块根据基于Adomian分解法求解后的数学方程,采用三个IP乘法器进行时分复用实现,其计算将在计数器的多个状态中完成,计数器的每个状态包含多个时钟周期,具体值为乘法器的最优时延加一,这些时钟周期又可以用一个计数器控制,这样设计能够大幅提升工作频率,计算模块时域仿真的部分波形图如图3所示,由上往下分别为clk0,clk,rst,x(t),y(t)和z(t)。

图3 时域仿真部分波形图

当每次状态变量计算完成后,状态变量的值将会通过FIFO写入FT232,由于本文采用的35位定点数的范围足够大,因此高3位可以舍去,直接传输低32位数据,每一个时钟写入8位数据,因此需要分4次才能将一个状态变量的值完全写入FIFO。传输三个状态变量总共需要12个时钟周期。写入的数据将会被FT232读取并转换为USB协议,通过USB总线发送至电脑,电脑通过USB抓包软件抓取到所有发送过来的数据。在对数据进行处理之前,把数据存为文本文档。后续用LabVIEW读取数据并通过转换算法完成16进制到10进制的转换 。

2.3 实验数据处理及结果

令每个状态变量的传输点数为N=50000,FPGA芯片型号为:Artix-7 xc7a35tfgg484-2。FPGA传送至电脑的数据为一连串的16进制序列,每两个16进制数组成一个字节,一个状态变量的点为32位,由4个字节组成。所有FPGA传输的数据的顺序为x(t1),y(t1),z(t1),x(t2),y(t2),z(t2)…。图4记录了FPGA传输至电脑的数据。

图4 FPGA传输至电脑的数据

由于每个状态变量传输的点数N=50000,有三个状态变量,因此要传输150000个点的数据,而每个点为4个字节,共计传输600000个字节,以图4中最后传输的12个字节“00 07 54 C5 00 0C 69 45 00 10 EF EF”为例,一个状态变量的点为4个字节,这12个字节为最后传输的三个状态变量的点x(tN),y(tN),z(tN)。LabVIEW读取数据时以字节为单位读取,总共读取600000字节的数据,因此可以利用索引i除以12的余数将读取数据中的x(t),y(t),z(t)分别保存到数组。然后进行16进制到10进制的转换,在这个过程中,为了使得转换算法更加通用,首先将数据转换为2进制,状态变量的每个点转换为2进制后为32位,其中最高位为符号位,11位整数位,20位小数位,然后再运用二进制到十进制的转换原理进行转换。图5为图4数据经过LabVIEW转换后得到的相图,可见其与图1一致,方案设计的正确性得到验证。

图5 LabVIEW处理得到的相图

3 结束语

本文设计了一种基于Adomian分解法的分数阶混沌系统的FPGA实现方案,其中分数阶计算模块的工作频率为源时钟的四倍频200MHz。该模块在每次计算完成后把状态变量的值通过一个异步FIFO写入FT232芯片,FT232芯片将其转化为USB协议,通过USB总线传输至电脑。所有的点经过LabVIEW处理后,得到的相图与数值仿真的相图一致,并且无数据遗漏,FPGA设计的正确性与可靠性得到验证。

猜你喜欢
状态变量字节时钟
No.8 字节跳动将推出独立出口电商APP
别样的“时钟”
一类三阶混沌系统的反馈控制实验设计
基于嵌套思路的饱和孔隙-裂隙介质本构理论
古代的时钟
No.10 “字节跳动手机”要来了?
简谈MC7字节码
有趣的时钟
一种基于主状态变量分离的降维仿真算法设计
时钟会开“花”