hslogic_基于FPGA的混沌加密

·本课题,将浮点运算转换为大位宽的二进制计算,这样不仅可以简化计算过程,同时保证了算法的精度。

·通过查看相关资料,混沌加密友三种方式,叠加,相乘以及线性运算,但是没有异或,所以,这里,我们使用混沌叠加的方式进行加密。

·有些模块,在设计上的需要,没法单独写成模块,所以我们在说明文档中尽量给你写清楚怎么设计的。

    本系统的基本结构,我们遵循你所提供的结构进行,整个框图如下所示:

首先实现使用MATLAB进行算法的仿真,我们得到的仿真结果如下所示:

这个是混沌模型的基本仿真,说明公式以及初始值选取的正确性。

这个程序是混沌加密调制解调系统的MATLAB浮点仿真结果图,说明上面的结果是正确的。

从上面的仿真结果可知,以定点进行仿真,只要量化宽度满足一定要求之后,其完全不影响系统的精度。

根据上面的介绍,我们可以编写了如下的程序:

自上而下,依次为:

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

下面对各个模块进行介绍。

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

  

接口含义分别为:

系统时钟

系统复位

测试并行信号的产生使能信号

测试并行信号

加密模块的使能信号

串行输出

串行信号组帧输出

加密输出

解密输出

解密输出信号的符号判决

搜帧模块的相关峰输出

搜帧模块的使能输出

搜帧模块的数据输出

最后串并转化的使能

最后串并转化的数据输出

顶层模块,主要功能就是产生测试数据,16位宽的并行数据:

然后是分别调用加密调制模块和解密解调模块:

具体的接口含义,我们在介绍这些子模块的时候进行说明。

 

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

 

加密模块的接口含义是

时钟,复位,输入并行信号的使能信号,输入并行信号,串行输出,组帧后的输出,加密信号:

其中:

 

加密输出信号o_T_signal反馈给lorenz混沌模块进行迭代,迭代后的yn输出进行加密。

 

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

 

分别为系统时钟,复位,数据输入,混沌y输出,加密信号输出。

其基本原理,是通过信号和混沌信号的叠加来实现的。

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

其接口是

系统时钟,复位,加密反馈信号,混沌xyz输出。

注意,这里我们采用的是基于浮点原理的定点计算方法,由于在FPGA中直接采用浮点计算算法比较复杂,而且比较耗资源,而传统的定点计算精度不够,因此,这里我们采用的是基于浮点的定点计算,即进行位宽扩展,相乘之后进行截位的方法。

通过这个思想,lorenz算法可以转换为:

//y(n+1) = 0.028*x(n)      - 0.001*x(n)*z(n) + 0.999*y(n);   

//x(n+1) = 0.99*x(n)       + 0.01*y(n);

//z(n+1) = 0.001*x(n)*y(n) + 0.9973333*z(n);                             

 

//y(n+1) = 1835*x(n)      - 66*x(n)*z(n) + 65470*y(n);   

//x(n+1) = 64881*x(n)     + 655*y(n);

//z(n+1) = 66*x(n)*y(n)   + 65361*z(n);

 

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

 

接口分别为,系统时钟,复位,输入串行数据,数据使能,输出数据,输出数据使能。

这里加入组帧模块的主要功能就是

在接收端,当解调出正确的信号的时候,我们无法知道何时进行串并转化才能够得到正确的并行信号,即我们无法知道数据哪位是起始位置。

所以加入帧头之后,在接收端进行帧头搜索,我们就可以得到数据的起始位置。

这里,我们的做法是在数据头部加入连续的训练序列。组帧后的数据格式如下所示:

 

其中前面的h就是多个训练序列,后面的data就是实际的信号数据。

 

 

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

 

分别为系统时钟,复位,数据使能,并行数据,串行数据使能,串行数据。

其基本原理是通过计数器的方式进行的。这里就不多做介绍了。

 

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

 

其接口分别为

系统时钟

复位

接收到的加密信号

解密输出

解密输出的判决信号

搜帧模块的相关峰输出

搜帧模块的使能输出

搜帧模块的数据输出

最后串并转化的使能

最后串并转化的数据输出

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

接口为时钟,复位,输入信号,混沌信号yn,解密输出。

其基本原理为想减计算。

 

 

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

这个模块和发送端的相同。

 

 

 

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

 

接口为时钟,复位,输入解密后的数据,搜帧模块的相关峰输出,

搜帧模块的使能输出,

搜帧模块的数据输出,

其基本原理就是伪码匹配滤波的原理。

 

 

系统顶层文件

——加密调制模块

————加密子模块,lorenz混沌序列产生模块,组帧模块,并串模块。

——解密解调模块

————解密子模块,Lorenz混沌序列产生模块,搜帧模块,串并模块。

接口为时钟,复位,搜索到帧头后的使能信号,输入搜索到帧头以后的解密数据,输出并行使能,输出并行信号。

整个系统的综合结果如下所示

仿真结果如下所示:

 

 

 

 

 

四、如何下载到硬件

    最后你要下载到板子上,你只需配置其管脚即可。

其顶层的文件的管脚为:

1

i_clk

系统时钟,就是接到硬件板子上的晶振位置。

2

i_rst

系统复位,随便接到板子上的key数字按键上。

3

o_signal_enable

测试并行信号的产生使能信号,不用接板子,

4

o_signal

测试并行信号,这个信号为了验证,你可以接signaltapII上

5

o_enable

加密模块的使能信号,不用接板子

6

o_serial_dout

串行输出,接板子上的测试脚或者signaltapII上

7

o_serial_frame

串行信号组帧输出,接板子上的测试脚或者signaltapII上

8

o_T_signal

加密输出,这个信号为了验证,你可以接signaltapII上

9

o_dout

解密输出,可以接signaltapII上

10

o_dout_sign

解密输出信号的符号判决,接板子上的测试脚或者signaltapII上

11

o_peak

搜帧模块的相关峰输出,不用接板子

12

o_peak_enable,

搜帧模块的使能输出,不用接板子

13

o_peak_dout

搜帧模块的数据输出,接板子上的测试脚或者signaltapII上

14

o_enable2

最后串并转化的使能,不用接板子

15

o_voice_dout

最后串并转化的数据输出,接板子上的测试脚或者signaltapII上

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/108588694
今日推荐