状态机是组合逻辑和寄存器逻辑的特殊组合,尤其适合于数字系统的控制设计。系统的状态在一定的条件下相互转移。分析DES的算法结构可以发现,轮运算是相同的,只是输入子密钥不同,同时各轮的子密钥都可以通过密钥移位再经过一个压缩置换操作直接得到,所以通过密钥移位现经过一个压缩置换操作直接得到,所以将轮运算作为一个共享模块,反复进行该操作,其输入参数由状态机控制部分提供,主要是密钥移位的位数。只在空闲状态下将轮运算结果输出。因数据端是16位,故每个状态机模块中进行四轮轮运算。
流水线处理是高速设计中的一个常用设计手段。如果某个设计的处理流程可分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈,前一个步骤的输出是下一个步骤的输入,则可以考虑用流水线设计方法提高系统的工作频率。流水线设计是一种技巧,它在很长组合路径的中间点引入寄存器。寄存器会增加等待时间,但却能增加速度,减少逻辑级。此外,附加寄存器虽然会增加一定的功耗,但却极大地减少了毛刺。流水线处理方式之所以频率较高,是因为复制了处理模块,它是FPGA设计中面积换取速度思想的具体体现。DES的16轮运算结构是相同的,符合流水线设计的要求,所以基于DES的结构特点,将前面的状态机模块作为流水线的一个单元,这样DES共有四个状态,串联起来形成四级流水线。因状态机中有寄存器,能保证流水线的工作,所以各单元间不需再加寄存器。状态机及流水线结构如图3所示,图中给出了由密钥直接生成各子密钥的移位数。将DES模块复制三份,就形成了16级流水线,所不同的是流水线内部是状态机结构,所以每四个时钟周期才会得到一组加/解密结果。这种结构同样适用于数据端是8位和32位的。
2.3 S盒的设计和接口设计
在3DES算法中,S盒代替是算法的关键所在。其它的运算都是线性的,易于分析和实现,而S盒是非线性的,因此S盒的设计和优化将直接影响整个系统的性能。DES的8个S盒都是6输入、4输出的结构,适合于用ROM来实现,因此用VHDL定义如下结构设计的ROM:
input:in std_logic_vector(5 downto 0);
output :out std_logic_vector(3 downto 0);
subtype s_word is std_logic_vector(3 downto 0);
subtype s1_rangeij is integer range 0 to 63;
type s_type is array(s1_rangeij) of s_word;
constant s:s_type:=(("1110"),("0100"),("1101"),("0001")……);
function logic2int(din:std_logic_vector(t downto 0))return s1_rangeij -二进转换为十进制
output<=s(logic2int(input));
经综合后,每个S盒只用了24个逻辑单元。
3DES是64位分组大小的加密算法,数据线一般是8位、16位或32位,为此增加了输入、输出接口,这部分接口完成的功能就是串/并转换和并/串转换。以16位输出接口为例,设计中将加/解密出来的数据从低位到高位在valid信号有效的情况下同时存入四个16位寄存器,再通过一个选择器依次将数据送出。该选择器不同于普通的多路选择器,它是由valid信号触发其内的计数功能,从而依次将寄存器中数据输出,如图4所示。输入接口要简单一些,只需一个64位可移位的寄存器,在第四个16位数据到来后才将这一组64位数据送给加密模块。这种结构非常容易用硬件描述语言实现。
2.4 总体结构
通过一个密钥控制模块为3DES提供三个56位的密钥以及加/解密控制信号。密钥的输入是28位的,所产生的三个56位密钥并不是同一时间提供给3DES的,相互之间有16个时钟的延时,这样可以保证修改密钥后并不影响先前流水线的工作。再加上输入、输出接口就构成了该设计的总体结构,如图5所示。限于图的大小,不影响理解的部分信号没有画出。加/解密的流程是先输入六组28位的密钥,然后就可以发送需要加/解密的数据了,中间可以有间断,如果需要更改密钥,也是先输入改后的密钥,再输入数据,可实时更改,无需等到流水线中最后一组数据加/解密完成。
本设计在ALTERA公司的Quartus II环境下用VHDL、Verilog HDL实现设计输入,采用同步时钟,成功编译、综合、适配和仿真,并下载到Stratix系列FPGA芯片EP1S25F780C5中。在综合的过程中用逻辑锁等技术进行了优化。消耗逻辑单元16250个,设计时钟频率可达95.07MHz。