深入理解FPGA电子系统设计:基于Quartus Prime与VHDL的Altera FPGA设计
上QQ阅读APP看书,第一时间看更新

4.2 数据选择器

在FPGA内部有大量的数据选择器(又称多路选择器或多路开关),通过数据选择器对数据的传输通道进行选择,从而实现电路逻辑和时序功能。例如前面介绍的FPGA最小可编程逻辑构成单元——4输入LUT,就是以4个输入信号作为地址选择信号,将16个数据存储单元作为数据输入通道的16选1数据选择器。从行为描述的角度看,输出信号的获得取决于地址信号,因此可以把地址信号作为判断条件,采用与4.1节相似的方法,通过对条件的判断获得输出值,具体可参考本书第2章中介绍的几种数据选择器的设计方法。

数据选择器的另一个应用是在算法设计中实现非线性运算,下面以DES(Data Encryption Standard)算法中S盒的设计为例进行介绍。DES是广泛地应用于诸如POS、ATM等数据加密领域的分组对称密码算法,关于DES算法的详细设计大家可以参考本书第8章密码算法设计。S盒是整个DES算法中唯一的非线性变换部件,DES算法中共有8个S盒,每个S盒是一个4行、16列的表,表中数据为4位长的二进制数据,S盒的输入为6位数据,其中第1、6位组合构成一个2位的数,对应表中的某一行,第2到第5位组合构成一个4位的数,对应表中的某一列,其交叉点的数据作为S盒的4位输出项。8个S盒的内容各不相同,但设计方法相同,下面以S1盒为例介绍其设计,S1盒的内容如表4-2所示。

表4-2 S1盒

S盒的设计也是根据输入获得输出,可以有多种方法,这里采用双case语句,通过case语句的嵌套,形成一个6输入、4输出的查找表。即当输入DATA=D0D1D2D3D4D5时,以D0、D5组合作为行,以D1、D2、D3、D4组合作为列,在S1表中查得对应的4位二进制数,作为选择函数S1的输出。设计程序如例4.2所示。

【例4.2】基于双case语句S盒的设计。

ModelSim下的仿真结果如图4-2所示,与表格结果一致。S2~S8的设计与S1盒设计方式相同,只是case语句中各分支的输出信号取值不同。

图4-2 S1盒的仿真波形

值得注意的是,若DES算法中的8个S盒全部使用case语句设计,将占用FPGA芯片大量的寄存器资源,不利于算法其他功能的实现。考虑到S盒的设计与查找表结构相同,因此可以利用FPGA芯片丰富的存储器资源,将S盒的输入作为ROM的地址,S盒的输出作为ROM的存储数据。其中,ROM的地址add与S盒的输入data之间的关系如下:

     add(5 downto 0) <= data(5)&data(0)&data(4 downto 1);

再使用S盒时直接调用ROM存储器即可,这样可以节省芯片的逻辑资源,有利于进行密码算法其他逻辑模块的设计。有关基于ROM的S盒的设计请参见5.3节。