第1章 FPGA概述 1.1 FPGA的发展历程 1.2 FPGA的基本原理 1.3 FPGA的设计方法 1.4 FPGA的设计流程 1.5 总结与结论
1.1 FPGA的发展历程 早期 FPGA 可编程逻辑器件(PLD) 可编程逻辑阵列 (PLA) 可编程阵列逻辑 (PAL) Altera的CPLD Xilinx的FPGA
1.2 FPGA的基本原理 ◆基于查找表的FPGA的基本结构及逻辑实现原理 ◆基于乘积项的FPGA的基本结构及逻辑实现原理
1.2 FPGA的基本原理 ◆基于查找表的FPGA的基本结构及逻辑实现原理 查找表(Look Up Table,LUT)本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16╳1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM。这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
1.2 FPGA的基本原理 ◆基于乘积项的FPGA的基本结构及逻辑实现原理 INPUT/GCLK1,INPUT/GCLRn,INPUT/OE1,INPUT/OE2是全局时钟、清零和输出使能信号,这几个信号有专用连线与器件中每个宏单元相连,信号到每个宏单元的延时相同并且延时最短。 1.2 FPGA的基本原理 ◆基于乘积项的FPGA的基本结构及逻辑实现原理 这种FPGA的结构可分为三块:宏单元(Macrocell)、可编程连线(PIA)和I/O控制块。宏单元是器件的基本结构,由它来实现基本的逻辑功能;可编程连线负责信号传递,连接所有的宏单元;I/O控制块负责输入输出的电气特性控制,比如可以设定集电极开路输出,摆率控制,三态输出等。
1.3 FPGA的设计方法 FPGA的常用设计方法包括“自顶向下”和“自下而上”,目前大规模FPGA设计一般选择“自顶向下”的设计方法。 所谓“自顶向下”设计方法, 简单地说,就是采用可完全独立于芯片厂商及其产品结构的描述语言,在功能级对设计产品进行定义, 并结合功能仿真技术,以确保设计的正确性,在功能定义完成后,利用逻辑综合技术,把功能描述转换成某一具体结构芯片的网表文件,输出给厂商的布局布线器进行布局布线。布局布线结果还可反标回同一仿真器, 进行包括功能和时序的后验证,以保证布局布线所带来的门延时和线延时不会影响设计的性能。
1.4 FPGA的设计流程 第一步:按照“自顶向下”的设计方法进行系统划分。 第二步:输入VHDL/Verilog HDL代码 第三步:将以上的设计输入编译成标准的VHDL/Verilog HDL文件,然后将文件调入HDL仿真软件进行功能仿真 第四步:利用综合器对源代码进行综合优化处理,生成门级描述的网表文件 第五步:如果整个设计超出器件的宏单元或I/O单元资源,可以将设计划分到多片同系列的器件中。 第六步:将试配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片FPGA中
1.5 总结与结论 FPGA是近几年集成电路中发展最快的产品。本章主要对FPGA的发展历程、结构原理和设计方法与流程做了介绍。随着可编程逻辑器件的高速发展,可编程逻辑器件将进一步扩大其领地。据IC Insights的数据显示,可编程逻辑器件市场从1999年的29亿美元增长到2004的56亿美元,几乎翻了一番。可编程逻辑器件将继续向着更高密度和更大容量方向迈进。
第2章 硬件描述语言入门 2.1 VHDL入门 2.2 Verilog HDL入门 2.3 总结与结论
2.1 VHDL入门 ◆VHDL的模块组织 ◆基本的数据类型及常量、变量、信号 ◆运算符及表达式 ◆VHDL基本语句 ◆典型电路的设计
2.1 VHDL入门 ◆VHDL的模块组织 在应用VHDL描述数字系统结构时,我们使用实体(entity)-结构体( architecture )结构。 实体描述了数字系统的输入输出接口,同时还定义了一些全局常量以及与其他电路(程序模块或逻辑图模块)之间必要连接的拓扑结构。但在实体中,我们并不对电路的逻辑做任何描述,可将其看成是一个所谓的逻辑“黑盒子”。很明显,VHDL遵循EDA解决方案中自顶向下的设计原则,并能够保持良好的接口兼容性。
2.1 VHDL入门 ◆基本的数据类型及常量、变量、信号 信号 SIGNAL 信号名 [,信号名…]:数据类型 [:= 表达式]; 例如: SIGNAL wr_en : STD_LOGIC: = ‘0’; SIGNAL num1 , num2 : STD_LOGIC_VECTOR( 7downto 0 ); 变量 变量作用是对数据进行暂时存储,书写格式为: VARIABLE 变量名 [,变量名…]:数据类型 [:= 表达式]; 例如:VARIABLE rd_en : STD_LOGIC : = ‘1’; VARIABLE cnt : INTEGER ; 在变量说明中,可以直接赋给变量初始值,也可以不赋初始值,如果没赋初始值,它默认为变量数据类型的最小值。 数据类型 VHDL标准数据类型包括整数(INTEGER)、实数(REAL)、位(BIT)、位矢量(BIT_VECTOR)、标准逻辑(STD_LOGIC)、标准逻辑矢量(STD_LOGIC_VECTOR)、布尔量(BOOLEAN)、字符(CHARACTER)、字符串(STRING)及时间(TIME)类型。 为了给设计者提供自由度和灵活性,VHDL语言允许用户自定义数据类型,命令为:TYPE 数据类型名 [,数据类型名…] IS 数据类型定义 常量 常量在设计中不会发生变化,可以增加程序的可读性,书写格式为: CONSTANT 常量名 [,常量名…] :数据类型 [:= 表达式]; 例如:CONSTANT WAIT:TIME:= 20ns; CONSTANT LEN:INTEGER:= 16;
2.1 VHDL入门 VHDL语言的运算符有四类:逻辑运算符、算术运算符、并置运算符和关系运算符 本节中主要通过例子程序使读者初步理解VHDL的语法构成,书中介绍的是一个加法器完整的VHDL语句描述,包括注释、库文件说明、实体、结构体、进程语句、条件语句、例化语句等。2个4位输入信号a和b,进位输入cin,输出4位结果sum,输出向下一极进位信号cout,整个程序都由组合逻辑实现。 ◆运算符及表达式 ◆VHDL基本语句 传统的设计方式,设计者在他的CAD工作站上以基本的电路组件来组织并构成一个完整的逻辑功能,这些最基本的电路组件如AND逻辑门、OR逻辑门或缓存器在CAD工作站的屏幕中以线条和图案来表示,每个组件都必须清楚定义输出入信号和功能。在VHDL的语言中,这种所谓的SYMBOL不复存在,VHDL以实体的描述来表示一个传统线路中的SYMBOL。 ◆典型电路的设计
2.2 Verilog HDL入门 ◆Verilog HDL的模块组织 ◆基本的数据类型及常量、变量、信号 ◆运算符及表达式 ◆典型电路的设计
2.3 总结与结论 这一章我们主要学习了一些HDL语言的基本语法与我们以往学习的C语言等、PASCAL等都有相似之处,要注意的是在学习中要有意识地把HDL语言的语句与硬件结构模块联系起来,通过理解物理意义,牢牢掌握。
第3章 简单电路的HDL设计 3.1 基本组合逻辑运算 3.2 基本时序器件—寄存器 3.3 基本简单数学运算 3.4 总结与结论
3.1 基本组合逻辑运算 ◆与运算 ◆或运算 ◆异或运算 ◆ 与非运算 ◆2选1多路选择器 ◆两位比较器
3.2 基本时序器件—寄存器 ◆D触发器 ◆T触发器 ◆J-K触发器 ◆ 时序器件—移位寄存器
3.3 基本简单数学运算 ◆ 4位加法器 逐位进位加法器 超前进位加法器 进位选择加法器 3.3 基本简单数学运算 ◆ 4位加法器 输入数据同比特位进行运算时,都要等待前一比特的进位信号状态完成(建议:用在位数不超过16位的加法器)。对于多位逐位进位加法器来说,也可采用流水方式改善性能。 逐位进位加法器 输入数据同比特位进行运算时,不需要等待前一比特的进位信号。实现速度比较快,但资源占用也比较大。建议使用在16位加法器上比较合适。对于位数较多的也可采用流水方式。 超前进位加法器 由三个加法器组成,一个计算低字节;两个计算高字节。计算高字节的加法器一个令进位为1,另一个令进位为0。三部分同时计算,最后,低字节的进位选择是哪一个高字节器的输出。对于位数较多的加法器,性能的提高比较明显,但资源相对占用较多。 进位选择加法器
3.3 基本简单数学运算 ◆ 4位计数器 逐位进位计数器 格雷码逐位计数器 3.3 基本简单数学运算 ◆ 4位计数器 逐位进位计数器的特点是:每一位都要等前一位的进位输出有效后才开始变化,每一位模块之间用进位信号连接起来(推荐使用长度不超过16位)。 逐位进位计数器 应用逐位进位计数器的原理,并在其基础上加以改进,因为采用格雷码进行计数,每个状态变化时,只有1位信号发生改变,减少了毛刺现象的发生。 格雷码逐位计数器 应用超前进位计数器的基本原理加以改进,使用流水技术,减少了进位信号的传输延时,大大提高了系统效率。 流水式超前进位计数器
3.3 基本简单数学运算 ◆ 4位乘法器 移位相加乘法器 查找表乘法器 加法器树乘法器 3.3 基本简单数学运算 移位相加乘法器实现简单,它的基本设计思想就是采用一种称之为迭代的方式,根据乘数的每一位是否为1进行计算,若为1则将被乘数移位相加,这种实现方式使得在乘法计算中,每算出一乘积项就加到乘积中,此时的积称作部分积。通过对部分积的逐步移位完成乘积项与乘数的位对齐相加,直至得出结果。这种方法硬件资源耗用较少,但一个4位乘法需要4个周期才能得到结果,速度比较慢,也可采用这种思想,用全逻辑实现,但延时较大。因此,在高速的应用系统中,一般不采用该方法。 ◆ 4位乘法器 组合逻辑实现的乘法器 移位相加乘法器 查找表乘法器 查找表乘法器的基本设计思路就是将乘积直接存放在存储器中,将操作数(乘数和被乘数)作为地址访问存储器,得到的输出数据就是乘法运算的结果。 加法器树结合了移位相加乘法器和查找表乘法器的优点。事实上,从下面的示意图可看出,它采用了并行处理的架构,所以其速度快,由于主要采用与门逻辑实现逻辑功能,所以其资源耗费也较少。 加法器树乘法器
3.4 总结与结论 数字系统往往由数据通路和控制通路组成,本章主要从RTL级对组成数字系统的基本模块进行讲解,可以说掌握了这部分内容,就可以完成一些简单的数字系统的设计了。
第4章 FPGA的同步设计 4.1 同步的定义 4.2 同步部件 4.3 状态产生 4.4 中央允许产生器 4.5 同步清除 4.6 时钟歪斜的清除 4.7 异步接口 4.8 总结与结论
4.1 同步的定义 对于静态同步设计, 我们称一个系统是同步的,假若: 4.1 同步的定义 对于静态同步设计, 我们称一个系统是同步的,假若: 1.每个边缘敏感部件的时钟输入是一次时钟输入的某个函数;并且仍是象一次时钟那样的时钟信号。 2.所有存储元件(包括计数器)都是边缘敏感的,在系统中没有电平敏感存储元件。
4.2 同步部件 ◆基本的同步部件 ◆同步清除D型触发器 我们希望FPGA有一个性能,即全局复位,这是一个测试要求。在FPGA的同步设计中应避免使用异步清除D型触发器(它破坏了同步系统的两个条件),应代之以同步清除。这样就产生了第一个新的基本部件:带同步清除的D型触发器 4.2 同步部件 ◆基本的同步部件 构成同步基本部件基础的是边缘敏感D型触发器。其基本性质为,在时钟CLK输入的上升边之后,D输入端的逻辑值出现在Q输出端,而其补值出现在Q非输出端。这一过程就是取样过程。 ◆同步清除D型触发器
4.2 同步部件 ◆ T型触发器 ◆ E型触发器 最有用的存储单元之一是一种锁存器,它能够保持一个数据直到通知它锁存另一数据时为止,称为E型触发器。它有一个从其输出端到其输入端的反馈环路,使其能保持数据长达若干个时钟周期。
4.2 同步部件 ◆ 同步RS触发器 ◆ R型触发器 同步RS触发器有两个清除端,一个本地清除R和一个全局清除GC。 当复位端R和置位端S都为高电平时,没有不确定状态。在同步RS触发器复位优先于置位。 请求(R型)触发器是唯一具有一个异步电平敏感输入的,后者用于应答信号。同步清除用于全局复位,如在测试中用,它有两种结构。
4.3 状态产生 在所有标准部件中最重要的是同步二进制计数器(SBC), SBC有许多用途,其中一种即状态产生. ◆ 状态的无条件执行 通常用单状态译码器完成状态的无条件执行,此译码器连接在主计数器上。下图所示为实现这一原理的连续平均电路。它顺序取16项数据,并输出其和。每16项数据之和锁存于输出寄存器,并将累加器清除。
4.3 状态产生 在所有标准部件中最重要的是同步二进制计数器(SBC), SBC有许多用途,其中一种即状态产生. ◆ 状态的有条件执行 在根据无条件执行状态序列原则设计的电路中,转移仅限于用以实现非二进制的无条件转移类型是。其它各种电路要求用有条件转移或有条件执行一状态序列。
4.4 中央允许产生器 用不良设计方法设计的中央时钟产生器,可以用等效的同步式电路取代。后者即中央允许产生器。这一设计中采用了本章介绍的所有设计方法。图4-27中示出的简单允许产生器能够推广到和任何有条件或无条件状态的执行相结合。
4.5 同步清除 虽然本章中作为单元电路介绍的同步清除在功能上,在某些情况下,等效于异步清除,但是当一电路有全局复位功能时优先选用同步清除的理由如下: 1、某些电路具有自己的同步清除功能。可以将其用于全局清除,以节省资源。 2、混合使用全局异步清除和局部同步清除会使电路功能混乱,导致产生异常情况。 3、在许多情况下,采用同步清除的电路比异步的占用较少空间。 4、使RAM和寄存器列一类电路元件,初始化时,要求在连续几个时钟周期中清除,这意味着同步清除。
4.6 时钟歪斜的清除 同步设计的最重要求之一是将时钟歪斜减小到可以接受的程度。假设时钟缓冲符合第三章中的规则,则还有另外两种设计方法可以采用。 第一种情况是从一D型触发器的Q输出端直接馈给另一触发器的 D输入端时,延迟不足以满足第二个D型触发器对保持时间的要求。解决方法是使用一个低驱动强度的源D型触发器,并且不加缓冲。高的相对扇出有助于改进保持时间。 第二种设计方法是在各个受时钟控制的部件之后分别接入缓冲器,并在两个缓冲输出端之间接一平衡网络。若两支路由于某种原因不平衡,则有一小电流通过网络,从而消除时钟歪斜。
4.7 异步接口 ◆ 互相同步的系统 ◆ 互相异步的系统 ◆ 同步系统的异步输入 ◆ 握手发送数据的安全性 ◆ 微处理器存储器映射中的FPGA ◆ 亚稳定性
4.7 异步接口 ◆ 互相同步的系统 我们要讨论的第一种接口是普通的互相同步的两个同步系统的接口。为了满足这一类的条件,两系统必须有一公共外部时钟。用允许标志如图所示,通知在两系统之间传送数据。允许信号在时钟上升沿后经过时钟至Q端的传播时间变为有效,并保持有效至下一个时钟上升沿之后时钟至Q端的时间。故它包含一有效时钟边缘。
4.7 异步接口 ◆ 互相异步的系统 更为常见的一类异步接口是互相异步的两个内部同步的系统之间的接口。这时,重要的是,按照同步设计原理,处理请求的信号交换(握手)功能需要采用R型触发器,其应用示于图中。
4.7 异步接口 ◆ 同步系统的异步输入 本节讨论一同步系统处理独立的异步输入的方法。若FPGA只要求对单个异步到达的事件起响应,则存储立即式请求触发器,如图所示的电路,比同步R型触发器更简单。它由一D型触发器构成,其D输入端接到逻辑“1”上,异步输入连接到其时钟端。D型触发器用于此目的比异步RS触发器更适合,因为自边缘敏感D型触发器来的请求,在收到之后几乎立刻就被接收系统用上节所述方法消除。另一方面,电平敏感异步RS触发器则要求输入端上的激励(它可能是逻辑电平的阶跃变化)去掉才行。
4.7 异步接口 ◆ 握手发送数据的安全性 一般说来,围绕握手过程的保护措施愈多,数据完整性愈大,但是系统性能愈低。当通过一异步接口发送数据时,数据错误概率可以小到忽略不计,但是要以系统带宽作为代价。
4.7 异步接口 ◆ 微处理器存储器映射中的FPGA 使FPGA和一微处理器通信的简单方法是把它放在微处理器的存储器映射中。微处理器,利用片选和写允许(WE)控制线,记入数据或查询数据位置,就好像FPGA是RAM。WE的上升沿使数据存储在FPGA输入端的电平敏感锁存器中,同时使一异步式请求触发器置位。
4.7 异步接口 ◆ 亚稳定性 用于对输入数据流取样的边缘敏感触发器,只要在有效时钟边缘的两边的临界建立和保护时间中保持稳定则将正确地锁存数据。若在此期间输入数据改变,则输出将不能预测,产生所谓亚稳定现象。触发器在回到一逻辑状态之前可能进入高电平和低电平之间的几种亚稳定序列之一,如图所示。
4.8 总结与结论 当数字系统的复杂度进一步提高,数据流的速度要求进一步提升时,IC设计者就要很谨慎的考虑数字系统的时序问题,在对数字系统的定时关系进行准确的分析的基础上掌握好同步技术是高水平的IC设计者所必需的,也值得每个FPGA设计者研读。
第5章 常见的FPGA设计实例 5.1 移位寄存器设计实例 5.2 计数器设计实例 5.3 状态机设计实例 5.4 存储器设计实例 5.5 门禁系统设计实例 5.6 总结与结论
5.1 移位寄存器设计实例 m序列是最常用的一种伪随机序列,它是最长线性反馈移位寄存器序列的简称,是由带线性反馈的移位寄存器产生的序列,并且具有最长周期。 ◆ m序列的产生和性质 ◆ 对具体某一信号的连续存储 在实际设计中,如密码门、ATM提款机一类需要手动输入信息的地方,需要将某一具体信号进行连续存储,常会使用到这种移位寄存器。
5.2 计数器设计实例 几种实际应用的计数器电路。 (1) 跟踪并计算某一信号出现的次数 (2) 作控制信号的条件 (2) 作控制信号的条件 有时某些控制信号是根据计数器的某种状态的出现而发生改变, 计数器负责跟踪另外一个信号,例如移位寄存器在先动作一拍的前 提下才进行下一步的操作,或在动作几拍,或在另一个信号出现几 次的情况下改变以前的动作状态等情况。计数器在这种情况下起到 了过渡性作用。
5.3 状态机设计实例 状态机可以认为是组合逻辑和寄存器逻辑的特殊组合,它一般包括两个部分:组合逻辑部分和寄存器部分。寄存器用于存储状态,组合电路用于状态译码和产生输出信号。状态机的下一个状态及输出,不仅与输入信号有关,而且还与寄存器当前所处的状态有关。 状态机有3种表示方法:状态图、状态表和流程图。这3种表示方法是等价的,相互之间可以转换。其中状态图是最常用的一种表示方式。
5.4 存储器设计实例 存储器是数字系统的重要组成部分,数据处理单元的处理结果需要存储,许多处理单元的初始化数据也需要存放在存储器中。存储器还可以完成一些特殊的功能,如多路复用、速率变换、数值计算、脉冲成形、特殊序列产生以及数字频率合成等等。 基本的存储器类型有RAM、FIFO、ROM这三种,由于通常的设计软件提供相应的宏单元,设计者可以通过手工编程和利用宏模块这二种方式来设计各种类型的存储器。
5.5 门禁系统设计实例 图中所示为一种门禁系统的原理图,其中的控制单元实际上是一个可以控制各个组件的状态机。它包括了一个12输入键盘(数字0-9、ENT、CLR),只有一个3个数字的组合才能打开门。用户在输入3个数字的密码后还要按下ENT键,指示输入的完成。CLR键可以清除用户错误输入的数据,但必须在按下ENT键之前。正确的密码存储在12位的DIP switch中。系统最多可以允许3次输入错误,如果第4次输入错误,系统会自动报警。只有MASTER_RESET信号可以清除报警状态,而且该信号同时也可以开门,它和正确输入密码的作用是一样的。
5.6 总结与结论 通过对经典实例的分析,可以了解硬件设计中一些基本模块如何通过FPGA得到实现。但仅仅掌握上述模块的实现是远远不能满足电子设计需求的,更重要的是掌握设计方法:灵活运用FPGA设计流程开展设计,区别流程中各个部分的联系与区别;养成良好的硬件描述语言编码风格,了解硬件描述语言与电路的对应关系,提高设计的可维护性、可调试性;建立硬件意识,区分FPGA设计编码与软件设计编码,软件设计编码目的是为描述逻辑流程,FPGA设计编码是描述电路结构。模块设计是FPGA设计的根本,熟练掌握模块设计能够为进一步利用FPGA完成电子设计打好坚实的基础。
第6章 FPGA的配置与编程 6.1 Altera FPGA配置与编程 6.2 Xillinx FPGA配置 6.3 总结与结论
6.1 Altera FPGA配置与编程 FPGA的配置与编程是将用户经过软件设计与仿真验证的功能电路写入实际的FPGA芯片中的过程。所有的FPGA芯片都需要经过配置与编程才能实现用户需要的功能。 FPGA上nCONFIG的低到高变化表示配置过程的开始。配置过程包括三个阶段:复位、配置和初始化。当nCONFIG为低时候,器件处于复位状态。当器件结束复位状态时,nCONFIG必须处于逻辑高电平,使器件释放漏极开路的nSTATUS管脚。一旦nSTATUS被释放,它就会被上拉电阻拉到高电平,此时FPGA准备好开始接收配置数据。从配置开始之前到配置结束,所有的用户I/O管脚都处于高阻态。
6.2 Xillinx FPGA配置 Xillinx FPGA配置方式共有:JTAG或边界扫描方式(JTAG or Boundary Scan Mode)、SelectMAP/Slave-Parallel方式、主动串行方式(Master-serial Mode)、Slave-serial方式和编程器配置方式(Standalone Programmer Mode)。在选择配置方式之前应该了解Xillinx 公司各FPGA系列具备的配置方式,各FPGA器件系列对配置方式支持情况如下表所示
6.3 总结与结论 FPGA器件的配置对于电子系统设计者而言较为重要的内容,但常常被忽视。各种型号FPGA数据手册及对FPGA的配置,FPGA厂商的官方网站有更为详细的介绍,建议读者通过本节阅读先对FPGA器件配置产生大致的认识,再根据被配置FPGA器件的具体型号选择相关文档仔细阅读,使本节内容及FPGA公司相关文档相互配置指导您的工程实践。
第7章 FPGA的配置与编程 7.1 3DES设计流程 7.2 3DES模块划分 7.3 3DES设计过程 7.4 3DES-PCI安全卡的设计 7.5 总结与结论
7.1 3DES设计流程 3DES是DES的一个更安全的变形。DES算法运算的流程如图所示。其中S盒是3DES(DES)算法的心脏,靠它实现非线性变换。 3DES算法可以描述如下:设ek(x)和dk(x)分别表示用DES算法对64位的位串加密和解密,密钥为K;64位的密文c是通过执行下面的运算得到的: 其中K1、K2、K3是56位的DES密钥。 从密文c导出明文x的3DES的解密过程是加密过程的反过程,其描述如下:
7.2 3DES模块划分 为了获得更高的安全性,三个密钥应该是互不相同的。这样,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。对安全性需要不那么高的数据,K1可以等于K3。在这种情况下,密钥的有效长度为112位。 在通常使用的所有64位的分组密钥中,3DES是最安全的;但是,如果用软件来实现,它也是这些分组密钥中最慢的。通过硬件设计,3DES的性能胜过大多数其它用软件实现的分组密钥
7.3 3DES设计过程 流水电路构架 控制电路 密钥生成模块 DES算法运算电路 SBOX的设计与实现 3DES(DES)算法没有大量的复杂数学计算(如乘、带进位的加、模等),在加/解密过程和密钥生成过程中仅有逻辑运算和查表运算。这些特点为采用FPGA进行高速设计提供了契机。由于3DES算法本质上就是三次DES算法的运算,所以只要了解DES算法的设计过程,也就了解了3DES算法的设计过程。因此,下面就介绍一下DES算法的设计过程 流水电路构架 控制电路 ◆ DES算法高速运算电路模型设计 密钥生成模块 DES算法运算电路 SBOX的设计与实现
7.3 3DES设计过程 流 水 电 路 构 架 ◆ DES算法高速运算电路模型设计 由于DES算法中每个分组需经过16轮运算,如果采用顺序电路构架则每过16轮运算才能得到一个加密分组,大大降低了加密效率。因此如图所示,高速DES运算电路采用流水结构,16步迭代设计16个运算模块,分别称作LUN1、LUN2、…、LUN16,数据在各模块间流水运算。当系统对第i个输入的数据元素进行第j段运算的同时,还可以对第i+1个数据进行第j-1段的运算,对第i+2个输入的数据元素进行第j-2段的运算……,以此提高系统的运算效率。 流 水 电 路 构 架 随着的增加,分组的平均流水线操作时间 大大减少,加密效率大大提高
7.3 3DES设计过程 控制电路 ◆ DES算法高速运算电路模型设计 如图所示,控制电路是整个系统的控制中心,可以采用移位寄存器或计数器加译码电路构成,为减少信号毛刺,提高电路运算的稳定性与工作速度。这里选用一个17bits的串入并出移位寄存器,其中16bits用于生成算法的每轮运算的使能信号,另外1bit用于生成指示加密输出的ready信号 控制电路
7.3 3DES设计过程 密钥生成模块 ◆ DES算法高速运算电路模型设计 如图所示,与流水构架DES运算电路的工作时序相对应,其16步迭代运算所需子密钥必须同时生成。密钥生成模块由选择控制电路PC-1、选择输出、压缩置换电路PC-2构成。该部分的输入是64bits初始密钥,输出为每次迭代运算用的子密钥,使能控制信号、模式控制信号。 64bits初始密钥经过置换选择PC-1去除校验位并被分离成左右两部分,各28bits,在模式控制信号(加密或脱密)及内部状态机信号控制下,根据移位表,选择输出,经压缩置换PC-2同时形成各步迭代所需运算子密钥 密钥生成模块
7.3 3DES设计过程 DES算法运算电路 ◆ DES算法高速运算电路模型设计 如图所示为DES算法运算模块的电路构架,虚线框内所示为单轮运算。电路由初始置换电路IP、4个32位的寄存器,扩展置换E处理电路、S盒数据代替电路、P盒置换电路及末置换IP-1电路构成 DES算法运算电路
7.3 3DES设计过程 SBOX的设计与实现 ◆ DES算法高速运算电路模型设计 S盒是DES算法的关键步骤,所有其它的运算都是线性的,而S盒是一个复杂的非线性函数,正是经过S盒的非线性变换才使明文得到了很好的混乱,从而具有较强的安全性。在硬件实现时,S盒实现具有一定难度,其设计实现的好坏是影响算法整体加脱密速度的主要因素。在算法设计过程中,从资源的角度出发,应尽可能的减少FPGA器件中逻辑单元、嵌入式阵列块及嵌入式单元的耗用,但这可能以降低系统速度为代价。从速度的角度出发,应最大限度地提高系统处理速度,但这样往往需要较多资源。因此,在大多数情况下这两种选择是矛盾的。 使用verilog语言建立S盒电路模型,有两种方法可供选择:一种方法是使用verilog语言中的多重选择语句CASE,直接进行电路的行为描述;另一种方法是采用开发工具中提供的库函数,使用器件内部的EAB实现。在建立S盒的电路模型时,必须充分考虑选用器件的内部结构,采用恰当的形式进行表达,做到既能节省器件资源又能提高算法运算效率,本例中选用前一种方式。 SBOX的设计与实现
7.4 3DES-PCI安全卡的设计 ◆ 3DES卡结构设计 ◆ 6种PCI安全卡典型结构性能分析和比较
7.4 3DES-PCI安全卡的设计 ◆ 3DES卡结构设计 安全卡的硬件系统结构设计在解决高速数据传输问题中起着极为重要的作用,同时在减小设计难度和提高可靠性方面也有很大作用。3DES算法的FPGA硬件化是实现高速安全处理的必要条件。但是,若硬件结构设计不合理,即使3DES算法芯片速度再高也不能实现高速加密系统。缺乏针对高速硬件系统结构分析和研究将会产生性能不高的问题出现。因此,要想实现3DES卡的高性能,减小设计难度和提高可靠性就必须对硬件系统结构进行深入的分析和设计。 一般PCI总线安全卡由嵌入式CPU为核心的管理子系统、PCI桥、安全专用芯片、控制ASIC芯片、安防措施、数据缓冲存储电路、网络接口、USB、RS232口等组成。但是,影响实时安全处理速度的关键因素主要是嵌入式CPU、PCI桥、安全专用芯片、数据缓冲存储电路这四部分的性能和它们之间的组合关系。因此,我们就以这四部分之间的组合关系为结构归类对象,对高速PCI安全卡硬件系统结构进行分析和归类,归纳为6种典型结构。
7.4 3DES-PCI安全卡的设计 ◆ 6种PCI安全卡典型结构性能分析和比较 如图所示典型结构1的主要组成部件是:嵌入式CPU基本系统、PCI桥、安全专用芯片、双端口SRAM。 数据主要路径是:放在计算机内存的数据经PCI总线写入双端口SRAM中,卡上CPU把数据读出并交给安全专用芯片处理,然后卡上CPU再把处理后的数据写入双端口SRAM中,再经PCI总线提交给计算机系统处理。对于协议信息和安全管理信息,卡上CPU不把此类数据送给安全芯片,而是直接处理并给计算机系统返回相关信息。
7.4 3DES-PCI安全卡的设计 ◆ 6种PCI安全卡典型结构性能分析和比较 数据主要路径是:放在微机系统内存的数据经PCI总线写入双端口SRAM中,卡上CPU只读出协议信息和管理信息,直接处理并给微机系统返回相关信息。而安全芯片也作为能独立执行的智能控制器从双端口SRAM中读出数据并进行处理,然后把处理后的数据重新写入双端口SRAM中,再经PCI总线提交给微机系统处理。
7.4 3DES-PCI安全卡的设计 ◆ 6种PCI安全卡典型结构性能分析和比较 数据主要路径是:放在微机系统内存的数据经PCI总线写入输入FIFO中,卡上CPU把数据读出并交给安全芯片处理,然后卡上CPU再把处理后的数据写入输出FIFO中,再经PCI总线提交给微机系统处理。对于协议信息和安全管理信息,卡上CPU不把此类数据送给安全芯片,而是直接处理并给微机系统返回相关信息。
7.4 3DES-PCI安全卡的设计 ◆ 6种PCI安全卡典型结构性能分析和比较 数据主要路径是:放在微机系统内存的数据经PCI总线写入输入FIFO中,卡上CPU只读出协议信息和安全管理信息,直接处理并通过输出FIFO给微机系统返回相关信息。而安全专用芯片也作为能独立执行的智能控制器从输入FIFO中读出数据并进行处理,然后把处理后的数据重新写入输出FIFO中,再经PCI总线提交给微机系统处理。
7.4 3DES-PCI安全卡的设计 ◆ 6种PCI安全卡典型结构性能分析和比较 接收数据主要路径是:发方来的数据从网络接口放在网络输入数据缓冲(FIFO)中,卡上CPU读出数据并进行识别,对安全协议信息和安全管理信息,直接处理;对报文信息,卡上CPU把它们交给安全专用芯片进行处理,然后CPU再把处理后的数据写入输出FIFO中,再经PCI总线提交 给微机系统处理。 发送数据主要路径是:本地微机把要处理的数据经PCI总线写入输入FIFO中,卡上CPU把数据读出并交给安全专用芯片进行处理,然后CPU再把处理后的数据写入网络输出数据缓冲中,经网络发到目的端;对于协议信息和安全管理信息,卡上CPU不把此类数据送给安全芯片,而是直接处理并给本地微机返回相关信息,或者通过卡上的网络接口发到目的端。
7.4 3DES-PCI安全卡的设计 ◆ 6种PCI安全卡典型结构性能分析和比较 接收数据主要路径是:发方来的数据从网络接口放在网络输入数据缓冲(FIFO)中,卡上CPU只读出报头数据并进行识别,对安全协议信息和安全管理信息,直接处理;对安全报文信息,CPU通知安全专用芯片读出并进行处理,然后安全专用芯片直接把处理后的明文数据写入输出FIFO中,再经PCI总线提交给微机系统处理。 发送数据主要路径是:本地微机把要处理的明文数据经PCI总线写入输入FIFO中,卡上CPU只读出报头数据并进行识别,对明文报文信息,由安全专用芯片读出并进行处理,然后安全专用芯片直接把处理后的数据写入网络输出数据缓冲中,卡上CPU把有关报头信息加在数据前面,经网络发到目的端;对于协议信息和安全管理信息,卡上CPU直接处理并给本地微机返回相关信息,或者通过卡上的网络接口发到目的端。
7.6 总结与结论 数字逻辑的门类千变万化,但就其本质而言,只有组合逻辑和时序逻辑两大类。它们在复杂数字系统的设计中,各自承担着自己的责任。一般情况下组合逻辑可以用来完成简单的逻辑功能,如多路器、与或非逻辑运算、加法和乘法等算术运算。而时序逻辑则可以用来产生与运算过程有关的(按时间节拍)多个控制信号序列包括存储运算的结果和取出存储器中的数据。在用可综合的硬件描述语言设计的复杂运算逻辑系统中,往往用同步状态机来产生与时钟节拍密切相关(同步)的多个控制信号序列,用它来控制多路器或数据通道的开启/关闭,来使有限的组合逻辑运算器资源得到充分的运行,并寄存有意义的运算结果,或把它们传送到指定的地方,如有关部件的输入/输出端口。 通过对加密卡的设计,展示出了FPGA在加密卡上的应用,让我们从一个更高的角度来理解FPGA的设计,在以后的设计实践中也有利于从FPGA接口方面考虑来完善FPGA本身的设计。要注意的是,7.4节的重点不在于加密卡实现的细节,而在于一种系统的设计理念,仔细分析各种典型结构的好坏优劣对于提高系统设计能力是很有好处的。
8.2 设计理念的创新使FPGA向SOPC方向发展 8.3 总结与结论
8.1 工艺技术的进步使FPGA性能更强 ◆ 更高性能 ◆ 更低成本 采用深亚微米的半导体工艺后,器件在性能提高的同时,价格也在逐步降低。由于便携式应用产品的发展,对现场可编程器件的低压、低功耗的要求日益迫切。因此,无论哪个厂家、哪种类型的产品,都在瞄准这个方向而努力。例如在前面所提到的Xilinx公司的SpantanTM系列的FPGA、Altera公司的APEX 20KE器件、ACEX系列以及Actel公司的SX系列产品都是向高密度、低压、低功耗发展的典范。 不仅如此,更有新型的公司以其特色的技术加入低压、低功耗芯片的竞争。典型的如Philips Semiconductors推出的 CoolRunner 960,是一种具有960个宏单元的CPLD,无论在何种应用中,都能提供标准的6ns传输延迟、工作于3v的电压下。该器件低功耗的关键是采用了Zero Power互连阵列,它用一个由外部逻辑实现的CMOS门,代替了其它CPLD常用的对电流敏感的运放。这样当其它的相等规模的CPLD需要消耗250mA的静电流时,CoolRunner 960的耗电不到100mA。 ◆ 更低成本 采用90nm工艺的FPGA,在容量对等的前提下,生产的FPGA的硅片尺寸变得更小,使得成本大为降低。
8.2 设计理念的创新使FPGA向SOPC方向发展 ◆ IP复用 为了更好的满足设计人员的需要,扩大市场,各大现场可编程逻辑器件的厂商都在不断的扩充其知识产权(IP)核心库。这些核心库都是预定义的、经过测试和验证的、优化的、可保证正确的功能。设计人员可以利用这些现成的IP库资源,高效准确的完成复杂片上的系统设计。典型的IP核库有Xilinx公司提供的LogiCORE和AllianceCORE。 ◆ 混合FPGA 半导体产品的一贯目标是以更小的尺寸、更低的成本和更小的功耗,获得更高的质量与性能。从设计角度来看,它的趋势是以各种宏模块的集成来代替分离的芯片,混合FPGA便是这一趋势下的必然产物。 所谓混合FPGA,是指将各类数字电路单元(可编程逻辑、CPU/DSP、存储器等)和模拟电路单元(模拟线性电路、A/D、D/A等)的FPGA。 随着IC技术的成熟与厂商间的激烈竞争,混合FPGA开始吸引IC厂商的目光,这也是由于其自身的特点造成的。由于混合FPGA不必驱动芯片外的数字负载,因而可以满足产品对低功耗、高性能的要求。此外,采用混合FPGA可减少所占用的印制电路板(PCB)实际面积,从而大大地降低成本。因此,混合FPGA能以更小的尺寸、更低的成本和更小的功耗,获得更高的质量与性能,以强大的市场竞争力受到整机厂商的欢迎。
8.3 总结与结论 综上所述,我们可以看到在新世纪,以FPGA为代表的数字系统现场集成技术正朝着以下几个方向发展。 1、随着便携式设备需求的增长,对现场可编程器件的低压、低功耗的要求日益迫切。 2、芯片向大规模系统芯片挺进,力求在大规模应用中取代ASIC。 3、为增强市场竞争力,各大厂商都在积极推广其知识产权(IP)核心库。 4、动态可重构技术的发展,将带来系统设计方法的转变。