FPGA设计与应用教学课件.ppt
FPGA设计与应用设计与应用 早期FPGAFPGA设计与应用设计与应用基于查找表的基于查找表的FPGA的基本结构及逻辑实现原理的基本结构及逻辑实现原理 FPGA的配置应用的配置应用 基于乘积项的基于乘积项的FPGA的基本结构及逻辑实现原理的基本结构及逻辑实现原理 FPGA设计与应用设计与应用基于查找表的基于查找表的FPGA的基本结构及逻辑实现原理的基本结构及逻辑实现原理 查找表(查找表(Look Up TableLook Up Table,LUTLUT)本质上就是一个)本质上就是一个RAMRAM。目前。目前FPGAFPGA中中多使用多使用4 4输入的输入的LUTLUT,所以每一个,所以每一个LUTLUT可以看成一个有可以看成一个有4 4位地址线的位地址线的161161的的RAMRAM。当用户通过原理图或。当用户通过原理图或HDLHDL语言描述了一个逻辑电路以后,语言描述了一个逻辑电路以后,FPGAFPGA开开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAMRAM。这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。出地址对应的内容,然后输出即可。 FPGA设计与应用设计与应用基于乘积项的基于乘积项的FPGA的基本结构及逻辑实现原理的基本结构及逻辑实现原理 这种这种FPGA的结构可分为三块:宏单元的结构可分为三块:宏单元(Macrocell)、可编程连线()、可编程连线(PIA)和)和I/O控制块。控制块。宏单元是器件的基本结构,由它来实现基本的逻辑宏单元是器件的基本结构,由它来实现基本的逻辑功能;可编程连线负责信号传递,连接所有的宏单功能;可编程连线负责信号传递,连接所有的宏单元;元;I/O控制块负责输入输出的电气特性控制,比如控制块负责输入输出的电气特性控制,比如可以设定集电极开路输出,摆率控制,三态输出等。可以设定集电极开路输出,摆率控制,三态输出等。 INPUT/GCLK1,INPUT/GCLRn,INPUT/OE1,INPUT/OE2是全局是全局时钟、清零和输出使能信号,这时钟、清零和输出使能信号,这几个信号有专用连线与器件中每几个信号有专用连线与器件中每个宏单元相连,信号到每个宏单个宏单元相连,信号到每个宏单元的延时相同并且延时最短。元的延时相同并且延时最短。 FPGA设计与应用设计与应用 FPGA的常用设计方法包括的常用设计方法包括“自顶向下自顶向下”和和“自下而上自下而上”,目前大规模目前大规模FPGA设计一般选择设计一般选择“自顶向下自顶向下”的设计方法。的设计方法。 所谓所谓“自顶向下自顶向下”设计方法设计方法, 简单地说简单地说,就是采用可完全独立于芯片厂商及就是采用可完全独立于芯片厂商及其产品结构的描述语言其产品结构的描述语言,在功能级对设计产品进行定义在功能级对设计产品进行定义, 并结合功能仿真技术并结合功能仿真技术,以以确保设计的正确性确保设计的正确性,在功能定义完成后在功能定义完成后,利用逻辑综合技术利用逻辑综合技术,把功能描述转换成某把功能描述转换成某一具体结构芯片的网表文件一具体结构芯片的网表文件,输出给厂商的布局布线器进行布局布线。布局布输出给厂商的布局布线器进行布局布线。布局布线结果还可反标回同一仿真器线结果还可反标回同一仿真器, 进行包括功能和时序的后验证进行包括功能和时序的后验证,以保证布局布线以保证布局布线所带来的门延时和线延时不会影响设计的性能。所带来的门延时和线延时不会影响设计的性能。FPGA设计与应用设计与应用第一步:按照第一步:按照“自顶向下自顶向下”的设计方法进行系统划分。的设计方法进行系统划分。 第二步:输入第二步:输入VHDL/Verilog HDL代码代码 第三步:将以上的设计输第三步:将以上的设计输入编译成标准的入编译成标准的VHDL/Verilog HDL文件,文件,然后将文件调入然后将文件调入HDL仿真仿真软件进行功能仿真软件进行功能仿真 第四步:利用综合器对源代码进行综合优化处理,生成门级描述的网表文件 第五步:如果整个设计超出器件的宏单元或I/O单元资源,可以将设计划分到多片同系列的器件中。 第六步:将试配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片FPGA中 FPGA设计与应用设计与应用 FPGAFPGA是近几年集成电路中发展最快的产品。本章主要对是近几年集成电路中发展最快的产品。本章主要对FPGAFPGA的发展历的发展历程、结构原理和设计方法与流程做了介绍。随着可编程逻辑器件的高速发展,程、结构原理和设计方法与流程做了介绍。随着可编程逻辑器件的高速发展,可编程逻辑器件将进一步扩大其领地。据可编程逻辑器件将进一步扩大其领地。据IC InsightsIC Insights的数据显示,可编程的数据显示,可编程逻辑器件市场从逻辑器件市场从19991999年的年的2929亿美元增长到亿美元增长到20042004的的5656亿美元,几乎翻了一番。亿美元,几乎翻了一番。可编程逻辑器件将继续向着更高密度和更大容量方向迈进可编程逻辑器件将继续向着更高密度和更大容量方向迈进。FPGA设计与应用设计与应用FPGA设计与应用设计与应用VHDL的模块组织的模块组织 基本的数据类型及常量、变量、信号基本的数据类型及常量、变量、信号 运算符及表达式运算符及表达式 VHDL基本语句基本语句 典型电路的设计典型电路的设计 FPGA设计与应用设计与应用VHDL的模块组织的模块组织 在应用在应用VHDLVHDL描述数字系统结构时,我们使用实体(描述数字系统结构时,我们使用实体(entityentity)- -结构结构体体( architecture )( architecture )结构。结构。 实体描述了数字系统的输入输出接口,同时还定义了一些全局常量实体描述了数字系统的输入输出接口,同时还定义了一些全局常量以及与其他电路(程序模块或逻辑图模块)之间必要连接的拓扑结构。以及与其他电路(程序模块或逻辑图模块)之间必要连接的拓扑结构。但在实体中,我们并不对电路的逻辑做任何描述,可将其看成是一个所但在实体中,我们并不对电路的逻辑做任何描述,可将其看成是一个所谓的逻辑谓的逻辑“黑盒子黑盒子”。很明显,。很明显,VHDLVHDL遵循遵循EDAEDA解决方案中自顶向下的设解决方案中自顶向下的设计原则,并能够保持良好的接口兼容性。计原则,并能够保持良好的接口兼容性。 FPGA设计与应用设计与应用基本的数据类型及常量、变量、信号基本的数据类型及常量、变量、信号 数据类型 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; 变量 变量作用是对数据进行暂时存储,书写格式为: VARIABLE 变量名 ,变量名:数据类型 := 表达式; 例如:VARIABLE rd_en : STD_LOGIC : = 1; VARIABLE cnt: INTEGER ; 在变量说明中,可以直接赋给变量初始值,也可以不赋初始值,如果没赋初始值,它默认为变量数据类型的最小值。 信号 在电路中,连线将元器件连接起来组成系统,在VHDL语言中,信号就起着连线的作用,书写格式为: SIGNAL 信号名 ,信号名:数据类型 := 表达式; 例如: SIGNAL wr_en : STD_LOGIC: = 0; SIGNAL num1 , num2 : STD_LOGIC_VECTOR( 7downto 0 ); FPGA设计与应用设计与应用运算符及表达式运算符及表达式 VHDL基本语句基本语句 典型电路的设计典型电路的设计 VHDL语言的运算符有四类:逻辑运算符、算术运算符、并置运算符和关系运算符 传统的设计方式,设计者在他的CAD工作站上以基本的电路组件来组织并构成一个完整的逻辑功能,这些最基本的电路组件如AND逻辑门、OR逻辑门或缓存器在CAD工作站的屏幕中以线条和图案来表示,每个组件都必须清楚定义输出入信号和功能。在VHDL的语言中,这种所谓的SYMBOL不复存在,VHDL以实体的描述来表示一个传统线路中的SYMBOL。 本节中主要通过例子程序使读者初步理解VHDL的语法构成,书中介绍的是一个加法器完整的VHDL语句描述,包括注释、库文件说明、实体、结构体、进程语句、条件语句、例化语句等。2个4位输入信号a和b,进位输入cin,输出4位结果sum,输出向下一极进位信号cout,整个程序都由组合逻辑实现。 FPGA设计与应用设计与应用Verilog HDL的模块组织的模块组织 基本的数据类型及常量、变量、信号基本的数据类型及常量、变量、信号 运算符及表达式运算符及表达式 Verilog HDL基本语句基本语句 典型电路的设计典型电路的设计 FPGA设计与应用设计与应用 这一章我们主要学习了一些这一章我们主要学习了一些HDLHDL语言的基本语法与我们以往学习的语言的基本语法与我们以往学习的C C语语言等、言等、PASCALPASCAL等都有相似之处,要注意的是在学习中要有意识地把等都有相似之处,要注意的是在学习中要有意识地把HDLHDL语言语言的语句与硬件结构模块联系起来,通过理解物理意义,牢牢掌握。的语句与硬件结构模块联系起来,通过理解物理意义,牢牢掌握。 FPGA设计与应用设计与应用FPGA设计与应用设计与应用与运算与运算 或运算或运算 异或运算异或运算 与非运算与非运算 2 2选选1 1多路选择器多路选择器 两位比较器两位比较器 FPGA设计与应用设计与应用D D触发器触发器 T T触发器触发器 J-KJ-K触发器触发器 时序器件时序器件移位寄存器移位寄存器 FPGA设计与应用设计与应用 4 4位加法器位加法器 逐位进位加法器逐位进位加法器 超前进位加法器超前进位加法器进位选择加法器进位选择加法器 输入数据同比特位进行运算时,都要等待前一比特的进位信号状态完成(建议:用在位数不超过16位的加法器)。对于多位逐位进位加法器来说,也可采用流水方式改善性能。 输入数据同比特位进行运算时,不需要等待前一比特的进位信号。实现速度比较快,但资源占用也比较大。建议使用在16位加法器上比较合适。对于位数较多的也可采用流水方式。 由三个加法器组成,一个计算低字节;两个计算高字节。计算高字节的加法器一个令进位为1,另一个令进位为0。三部分同时计算,最后,低字节的进位选择是哪一个高字节器的输出。对于位数较多的加法器,性能的提高比较明显,但资源相对占用较多。 FPGA设计与应用设计与应用 4 4位计数器位计数器 逐位进位计数器逐位进位计数器 格雷码逐位计数器格雷码逐位计数器 流水式超前进位计数器流水式超前进位计数器 逐位进位计数器的特点是:每一位都要等前一位的进位输出有效后才开始变化,每一位模块之间用进位信号连接起来(推荐使用长度不超过16位)。 应用逐位进位计数器的原理,并在其基础上加以改进,因为采用格雷码进行计数,每个状态变化时,只有1位信号发生改变,减少了毛刺现象的发生。 应用超前进位计数器的基本原理加以改进,使用流水技术,减少了进位信号的传输延时,大大提高了系统效率。 FPGA设计与应用设计与应用 4 4位乘法器位乘法器 组合逻辑实现的乘法器组合逻辑实现的乘法器 移位相加乘法器移位相加乘法器 查找表乘法器查找表乘法器 移位相加乘法器实现简单,它的基本设计思想就是采用一种称之为迭代的方式,根据乘数的每一位是否为1进行计算,若为1则将被乘数移位相加,这种实现方式使得在乘法计算中,每算出一乘积项就加到乘积中,此时的积称作部分积。通过对部分积的逐步移位完成乘积项与乘数的位对齐相加,直至得出结果。这种方法硬件资源耗用较少,但一个4位乘法需要4个周期才能得到结果,速度比较慢,也可采用这种思想,用全逻辑实现,但延时较大。因此,在高速的应用系统中,一般不采用该方法。 查找表乘法器的基本设计思路就是将乘积直接存放在存储器中,将操作数(乘数和被乘数)作为地址访问存储器,得到的输出数据就是乘法运算的结果。 加法器树乘法器加法器树乘法器 加法器树结合了移位相加乘法器和查找表乘法器的优点。事实上,从下面的示意图可看出,它采用了并行处理的架构,所以其速度快,由于主要采用与门逻辑实现逻辑功能,所以其资源耗费也较少。 FPGA设计与应用设计与应用 数字系统往往由数据通路和控制通路组成,本章主要数字系统往往由数据通路和控制通路组成,本章主要从从RTLRTL级对组成数字系统的基本模块进行讲解,可以说掌级对组成数字系统的基本模块进行讲解,可以说掌握了这部分内容,就可以完成一些简单的数字系统的设握了这部分内容,就可以完成一些简单的数字系统的设计了。计了。 FPGA设计与应用设计与应用FPGA设计与应用设计与应用对于静态同步设计,对于静态同步设计, 我们称一个系统是同步的,假若:我们称一个系统是同步的,假若: 1.1.每个边缘敏感部件的时钟输入是一次时钟输入的某个函数;并且仍是象每个边缘敏感部件的时钟输入是一次时钟输入的某个函数;并且仍是象一次时钟那样的时钟信号。一次时钟那样的时钟信号。 2.2.所有存储元件(包括计数器)都是边缘敏感的,在系统中没有电平敏感所有存储元件(包括计数器)都是边缘敏感的,在系统中没有电平敏感存储元件。存储元件。 FPGA设计与应用设计与应用基本的同步部件基本的同步部件 同步清除同步清除D D型触发器型触发器 构成同步基本部件基础的是边缘敏感D型触发器。其基本性质为,在时钟CLK输入的上升边之后,D输入端的逻辑值出现在Q输出端,而其补值出现在Q非输出端。这一过程就是取样过程。 我们希望FPGA有一个性能,即全局复位,这是一个测试要求。在FPGA的同步设计中应避免使用异步清除D型触发器(它破坏了同步系统的两个条件),应代之以同步清除。这样就产生了第一个新的基本部件:带同步清除的D型触发器 FPGA设计与应用设计与应用 T T型触发器型触发器 E E型触发器型触发器 最有用的存储单元之一是一种锁存器,它能够保持一个数据直到通知它锁存另一数据时为止,称为E型触发器。它有一个从其输出端到其输入端的反馈环路,使其能保持数据长达若干个时钟周期。 FPGA设计与应用设计与应用 R R型触发器型触发器 同步同步RSRS触发器触发器 请求(R型)触发器是唯一具有一个异步电平敏感输入的,后者用于应答信号。同步清除用于全局复位,如在测试中用,它有两种结构。 同步RS触发器有两个清除端,一个本地清除R和一个全局清除GC。当复位端R和置位端S都为高电平时,没有不确定状态。在同步RS触发器复位优先于置位。 FPGA设计与应用设计与应用 状态的无条件执行状态的无条件执行 在所有标准部件中最重要的是同步二进制计数器(在所有标准部件中最重要的是同步二进制计数器(SBCSBC), SBC, SBC有许多用途,其中一种有许多用途,其中一种即状态产生即状态产生. . 通常用单状态译码器完成状态的无条件执行,此译码器连接在主计数器上。下图所示为实现这一原理的连续平均电路。它顺序取16项数据,并输出其和。每16项数据之和锁存于输出寄存器,并将累加器清除。 FPGA设计与应用设计与应用 状态的有条件执行状态的有条件执行 在所有标准部件中最重要的是同步二进制计数器(在所有标准部件中最重要的是同步二进制计数器(SBCSBC), SBC, SBC有许多用途,其中一种有许多用途,其中一种即状态产生即状态产生. . 在根据无条件执行状态序列原则设计的电路中,转移仅限于用以实现非二进制的无条件转移类型是。其它各种电路要求用有条件转移或有条件执行一状态序列。 FPGA设计与应用设计与应用 用不良设计方法设计的中央时钟产生器,可以用等效的同步式电路取代。后者即中央允许产生器。这一设计中采用了本章介绍的所有设计方法。图4-27中示出的简单允许产生器能够推广到和任何有条件或无条件状态的执行相结合。 FPGA设计与应用设计与应用 虽然本章中作为单元电路介绍的同步清除在功能上,在某些情况下,等效于异步虽然本章中作为单元电路介绍的同步清除在功能上,在某些情况下,等效于异步清除,但是当一电路有全局复位功能时优先选用同步清除的理由如下:清除,但是当一电路有全局复位功能时优先选用同步清除的理由如下: 1 1、某些电路具有自己的同步清除功能。可以将其用于全局清除,以节省资源。、某些电路具有自己的同步清除功能。可以将其用于全局清除,以节省资源。 2 2、混合使用全局异步清除和局部同步清除会使电路功能混乱,导致产生异常情况。、混合使用全局异步清除和局部同步清除会使电路功能混乱,导致产生异常情况。 3 3、在许多情况下,采用同步清除的电路比异步的占用较少空间。、在许多情况下,采用同步清除的电路比异步的占用较少空间。 4 4、使、使RAMRAM和寄存器列一类电路元件,初始化时,要求在连续几个时钟周期中清除,和寄存器列一类电路元件,初始化时,要求在连续几个时钟周期中清除,这意味着同步清除。这意味着同步清除。 FPGA设计与应用设计与应用 同步设计的最重要求之一是将时钟歪斜减小到可以接受的程度。假设时钟缓冲同步设计的最重要求之一是将时钟歪斜减小到可以接受的程度。假设时钟缓冲符合第三章中的规则,则还有另外两种设计方法可以采用。符合第三章中的规则,则还有另外两种设计方法可以采用。 第一种情况是从一第一种情况是从一D D型触发器的型触发器的Q Q输出端直接馈给另一触发器的输出端直接馈给另一触发器的 D D输入端时,延输入端时,延迟不足以满足第二个迟不足以满足第二个D D型触发器对保持时间的要求。解决方法是使用一个低驱动强度型触发器对保持时间的要求。解决方法是使用一个低驱动强度的源的源D D型触发器,并且不加缓冲。高的相对扇出有助于改进保持时间。型触发器,并且不加缓冲。高的相对扇出有助于改进保持时间。 第二种设计方法是在各个受时钟控制的部件之后分别接入缓冲器,并在两个缓第二种设计方法是在各个受时钟控制的部件之后分别接入缓冲器,并在两个缓冲输出端之间接一平衡网络。若两支路由于某种原因不平衡,则有一小电流通过网冲输出端之间接一平衡网络。若两支路由于某种原因不平衡,则有一小电流通过网络,从而消除时钟歪斜。络,从而消除时钟歪斜。 FPGA设计与应用设计与应用 互相同步的系统互相同步的系统 互相异步的系统互相异步的系统 握手发送数据的安全性握手发送数据的安全性 同步系统的异步输入同步系统的异步输入 亚稳定性亚稳定性 微处理器存储器映射中的微处理器存储器映射中的FPGA FPGA FPGA设计与应用设计与应用 互相同步的系统互相同步的系统 我们要讨论的第一种接口是普通的互相同步的两个同步系统的接口。为了满足这一类的条件,两系统必须有一公共外部时钟。用允许标志如图所示,通知在两系统之间传送数据。允许信号在时钟上升沿后经过时钟至Q端的传播时间变为有效,并保持有效至下一个时钟上升沿之后时钟至Q端的时间。故它包含一有效时钟边缘。 FPGA设计与应用设计与应用 互相异步的系统互相异步的系统 更为常见的一类异步接口是互相异步的两个内部同步的系统之间的接口。这时,重要的是,按照同步设计原理,处理请求的信号交换(握手)功能需要采用R型触发器,其应用示于图中。 FPGA设计与应用设计与应用 同步系统的异步输入同步系统的异步输入 本节讨论一同步系统处理独立的异步输入的方法。若FPGA只要求对单个异步到达的事件起响应,则存储立即式请求触发器,如图所示的电路,比同步R型触发器更简单。它由一D型触发器构成,其D输入端接到逻辑“1”上,异步输入连接到其时钟端。D型触发器用于此目的比异步RS触发器更适合,因为自边缘敏感D型触发器来的请求,在收到之后几乎立刻就被接收系统用上节所述方法消除。另一方面,电平敏感异步RS触发器则要求输入端上的激励(它可能是逻辑电平的阶跃变化)去掉才行。 FPGA设计与应用设计与应用 握手发送数据的安全性握手发送数据的安全性 一般说来,围绕握手过程的保护措施愈多,数据完整性愈大,但是系统性能愈低。当通过一异步接口发送数据时,数据错误概率可以小到忽略不计,但是要以系统带宽作为代价。 FPGA设计与应用设计与应用 微处理器存储器映射中的微处理器存储器映射中的FPGA FPGA 使FPGA和一微处理器通信的简单方法是把它放在微处理器的存储器映射中。微处理器,利用片选和写允许(WE)控制线,记入数据或查询数据位置,就好像FPGA是RAM。WE的上升沿使数据存储在FPGA输入端的电平敏感锁存器中,同时使一异步式请求触发器置位。 FPGA设计与应用设计与应用 亚稳定性亚稳定性 用于对输入数据流取样的边缘敏感触发器,只要在有效时钟边缘的两边的临界建立和保护时间中保持稳定则将正确地锁存数据。若在此期间输入数据改变,则输出将不能预测,产生所谓亚稳定现象。触发器在回到一逻辑状态之前可能进入高电平和低电平之间的几种亚稳定序列之一,如图所示。 FPGA设计与应用设计与应用 当数字系统的复杂度进一步提高,数据流的速度要求进一步提升时,当数字系统的复杂度进一步提高,数据流的速度要求进一步提升时,ICIC设计设计者就要很谨慎的考虑数字系统的时序问题,在对数字系统的定时关系进行准确的者就要很谨慎的考虑数字系统的时序问题,在对数字系统的定时关系进行准确的分析的基础上掌握好同步技术是高水平的分析的基础上掌握好同步技术是高水平的ICIC设计者所必需的,也值得每个设计者所必需的,也值得每个FPGAFPGA设设计者研读。计者研读。 FPGA设计与应用设计与应用FPGA设计与应用设计与应用 m m序列的产生和性质序列的产生和性质 对具体某一信号的连续存储对具体某一信号的连续存储 m序列是最常用的一种伪随机序列,它是最长线性反馈移位寄存器序列的简称,是由带线性反馈的移位寄存器产生的序列,并且具有最长周期。 在实际设计中,如密码门、ATM提款机一类需要手动输入信息的地方,需要将某一具体信号进行连续存储,常会使用到这种移位寄存器。 FPGA设计与应用设计与应用 几种实际应用的计数器电路。几种实际应用的计数器电路。 (1 1) 跟踪并计算某一信号出现的次数跟踪并计算某一信号出现的次数 (2 2) 作控制信号的条件作控制信号的条件 有时某些控制信号是根据计数器的某种状态的出现而发生改变,有时某些控制信号是根据计数器的某种状态的出现而发生改变,计数器负责跟踪另外一个信号,例如移位寄存器在先动作一拍的前计数器负责跟踪另外一个信号,例如移位寄存器在先动作一拍的前提下才进行下一步的操作,或在动作几拍,或在另一个信号出现几提下才进行下一步的操作,或在动作几拍,或在另一个信号出现几次的情况下改变以前的动作状态等情况。计数器在这种情况下起到次的情况下改变以前的动作状态等情况。计数器在这种情况下起到了过渡性作用。了过渡性作用。 FPGA设计与应用设计与应用 状态机可以认为是组合逻辑和寄存器逻辑的特殊组合,它一般包括两状态机可以认为是组合逻辑和寄存器逻辑的特殊组合,它一般包括两个部分:组合逻辑部分和寄存器部分。寄存器用于存储状态,组合电路用个部分:组合逻辑部分和寄存器部分。寄存器用于存储状态,组合电路用于状态译码和产生输出信号。状态机的下一个状态及输出,不仅与输入信于状态译码和产生输出信号。状态机的下一个状态及输出,不仅与输入信号有关,而且还与寄存器当前所处的状态有关。号有关,而且还与寄存器当前所处的状态有关。 状态机有状态机有3 3种表示方法:状态图、状态表和流程图。这种表示方法:状态图、状态表和流程图。这3 3种表示方法是种表示方法是等价的,相互之间可以转换。其中状态图是最常用的一种表示方式。等价的,相互之间可以转换。其中状态图是最常用的一种表示方式。 FPGA设计与应用设计与应用 存储器是数字系统的重要组成部分,数据处理单元的处理结果需要存存储器是数字系统的重要组成部分,数据处理单元的处理结果需要存储,许多处理单元的初始化数据也需要存放在存储器中。存储器还可以完储,许多处理单元的初始化数据也需要存放在存储器中。存储器还可以完成一些特殊的功能,如多路复用、速率变换、数值计算、脉冲成形、特殊成一些特殊的功能,如多路复用、速率变换、数值计算、脉冲成形、特殊序列产生以及数字频率合成等等。序列产生以及数字频率合成等等。 基本的存储器类型有基本的存储器类型有RAMRAM、FIFOFIFO、ROMROM这三种,由于通常的设计软件这三种,由于通常的设计软件提供相应的宏单元,设计者可以通过手工编程和利用宏模块这二种方式来提供相应的宏单元,设计者可以通过手工编程和利用宏模块这二种方式来设计各种类型的存储器。设计各种类型的存储器。 FPGA设计与应用设计与应用 图图中中所示为一种门禁系统的原理所示为一种门禁系统的原理图,其中的控制单元实际上是一图,其中的控制单元实际上是一个可以控制各个组件的状态机。个可以控制各个组件的状态机。它包括了一个它包括了一个1212输入键盘(数字输入键盘(数字0 09 9、ENTENT、CLRCLR),只有一个),只有一个3 3个个数字的组合才能打开门。用户在数字的组合才能打开门。用户在输入输入3 3个数字的密码后还要按下个数字的密码后还要按下ENTENT键,指示输入的完成。键,指示输入的完成。CLRCLR键键可以清除用户错误输入的数据,可以清除用户错误输入的数据,但必须在按下但必须在按下ENTENT键之前。正确的键之前。正确的密码存储在密码存储在1212位的位的DIPDIPswitchswitch中。中。系统最多可以允许系统最多可以允许3 3次输入错误,次输入错误,如果第如果第4 4次输入错误,系统会自动次输入错误,系统会自动报警。只有报警。只有MASTERMASTERRESETRESET信号可信号可以清除报警状态,而且该信号同以清除报警状态,而且该信号同时也可以开门,它和正确输入密时也可以开门,它和正确输入密码的作用是一样的。码的作用是一样的。 FPGA设计与应用设计与应用 通过对经典实例的分析,可以了解硬件设计中一些基本模块如何通过通过对经典实例的分析,可以了解硬件设计中一些基本模块如何通过FPGAFPGA得到实现。但仅仅掌握上述模块的实现是远远不能满足电子设计需求的,得到实现。但仅仅掌握上述模块的实现是远远不能满足电子设计需求的,更重要的是掌握设计方法:灵活运用更重要的是掌握设计方法:灵活运用FPGAFPGA设计流程开展设计,区别流程中各设计流程开展设计,区别流程中各个部分的联系与区别;养成良好的硬件描述语言编码风格,了解硬件描述语个部分的联系与区别;养成良好的硬件描述语言编码风格,了解硬件描述语言与电路的对应关系,提高设计的可维护性、可调试性;建立硬件意识,区言与电路的对应关系,提高设计的可维护性、可调试性;建立硬件意识,区分分FPGAFPGA设计编码与软件设计编码,软件设计编码目的是为描述逻辑流程,设计编码与软件设计编码,软件设计编码目的是为描述逻辑流程,FPGAFPGA设计编码是描述电路结构。模块设计是设计编码是描述电路结构。模块设计是FPGAFPGA设计的根本,熟练掌握模设计的根本,熟练掌握模块设计能够为进一步利用块设计能够为进一步利用FPGAFPGA完成电子设计打好坚实的基础。完成电子设计打好坚实的基础。 FPGA设计与应用设计与应用FPGA设计与应用设计与应用 FPGA FPGA的配置与编程是将用户经过软件的配置与编程是将用户经过软件设计与仿真验证的功能电路写入实际的设计与仿真验证的功能电路写入实际的FPGAFPGA芯片中的过程。所有的芯片中的过程。所有的FPGAFPGA芯片都需芯片都需要经过配置与编程才能实现用户需要的功要经过配置与编程才能实现用户需要的功能。能。 FPGA FPGA上上nCONFIGnCONFIG的低到高变化表示的低到高变化表示配置过程的开始。配置过程包括三个配置过程的开始。配置过程包括三个阶段:复位、配置和初始化。当阶段:复位、配置和初始化。当nCONFIGnCONFIG为低时候,器件处于复位状态。为低时候,器件处于复位状态。当器件结束复位状态时,当器件结束复位状态时,nCONFIGnCONFIG必须必须处于逻辑高电平,使器件释放漏极开处于逻辑高电平,使器件释放漏极开路的路的nSTATUSnSTATUS管脚。一旦管脚。一旦nSTATUSnSTATUS被释被释放,它就会被上拉电阻拉到高电平,放,它就会被上拉电阻拉到高电平,此时此时FPGAFPGA准备好开始接收配置数据。准备好开始接收配置数据。从配置开始之前到配置结束,所有的从配置开始之前到配置结束,所有的用户用户I/OI/O管脚都处于高阻态。管脚都处于高阻态。 FPGA设计与应用设计与应用Xillinx FPGAXillinx FPGA配置方式共有:配置方式共有:JTAGJTAG或边界扫描方式或边界扫描方式(JTAG or Boundary Scan (JTAG or Boundary Scan Mode)Mode)、SelectMAP/Slave-ParallelSelectMAP/Slave-Parallel方式、主动串行方式(方式、主动串行方式(Master-serial ModeMaster-serial Mode)、)、Slave-serialSlave-serial方式和编程器配置方式(方式和编程器配置方式(Standalone Programmer ModeStandalone Programmer Mode)。在选择配)。在选择配置方式之前应该了解置方式之前应该了解Xillinx Xillinx 公司各公司各FPGAFPGA系列具备的配置方式,各系列具备的配置方式,各FPGAFPGA器件系列对器件系列对配置方式支持情况如下表所示配置方式支持情况如下表所示 FPGA设计与应用设计与应用FPGAFPGA器件的配置对于电子系统设计者而言较为重要的内容,但器件的配置对于电子系统设计者而言较为重要的内容,但常常被忽视。各种型号常常被忽视。各种型号FPGAFPGA数据手册及对数据手册及对FPGAFPGA的配置,的配置,FPGAFPGA厂商的厂商的官方网站有更为详细的介绍,建议读者通过本节阅读先对官方网站有更为详细的介绍,建议读者通过本节阅读先对FPGAFPGA器件器件配置产生大致的认识,再根据被配置配置产生大致的认识,再根据被配置FPGAFPGA器件的具体型号选择相关器件的具体型号选择相关文档仔细阅读,使本节内容及文档仔细阅读,使本节内容及FPGAFPGA公司相关文档相互配置指导您的公司相关文档相互配置指导您的工程实践。工程实践。 FPGA设计与应用设计与应用 FPGA设计与应用设计与应用 3DES 3DES是是DESDES的一个更安全的变形。的一个更安全的变形。DESDES算法运算的流程如图所示。其中算法运算的流程如图所示。其中S S盒是盒是3DES3DES(DESDES)算法的心脏,靠它实现非线性变换。)算法的心脏,靠它实现非线性变换。 3DES算法可以描述如下:设ek(x)和dk(x)分别表示用DES算法对64位的位串加密和解密,密钥为K;64位的密文c是通过执行下面的运算得到的: 其中K1、K2、K3是56位的DES密钥。从密文c导出明文x的3DES的解密过程是加密过程的反过程,其描述如下: FPGA设计与应用设计与应用 为了获得更高的安全性,三个密钥应该是互不相同的。这样,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。对安全性需要不那么高的数据,K1可以等于K3。在这种情况下,密钥的有效长度为112位。 在通常使用的所有64位的分组密钥中,3DES是最安全的;但是,如果用软件来实现,它也是这些分组密钥中最慢的。通过硬件设计,3DES的性能胜过大多数其它用软件实现的分组密钥 FPGA设计与应用设计与应用 DES算法高速运算电路模型设计算法高速运算电路模型设计 流水电路构架流水电路构架 控制电路控制电路 密钥生成模块密钥生成模块 DES算法运算电路算法运算电路 SBOX的设计与实现的设计与实现 3DES(DES)算法没有大量的复杂数学计算(如乘、带进位的加、模等),在加/解密过程和密钥生成过程中仅有逻辑运算和查表运算。这些特点为采用FPGA进行高速设计提供了契机。由于3DES算法本质上就是三次DES算法的运算,所以只要了解DES算法的设计过程,也就了解了3DES算法的设计过程。因此,下面就介绍一下DES算法的设计过程 FPGA设计与应用设计与应用 DES算法高速运算电路模型设计算法高速运算电路模型设计 流流水水电电路路构构架架 由于DES算法中每个分组需经过16轮运算,如果采用顺序电路构架则每过16轮运算才能得到一个加密分组,大大降低了加密效率。因此如图所示,高速DES运算电路采用流水结构,16步迭代设计16个运算模块,分别称作LUN1、LUN2、LUN16,数据在各模块间流水运算。当系统对第i个输入的数据元素进行第j段运算的同时,还可以对第i+1个数据进行第j-1段的运算,对第i+2个输入的数据元素进行第j-2段的运算,以此提高系统的运算效率。 随着的增加,分组的平均流水线操作时间 大大减少,加密效率大大提高FPGA设计与应用设计与应用 DES算法高速运算电路模型设计算法高速运算电路模型设计 控控制制电电路路 如图所示,控制电路是整个系统的控制中心,可以采用移位寄存器或计数器加译码电路构成,为减少信号毛刺,提高电路运算的稳定性与工作速度。这里选用一个17bits的串入并出移位寄存器,其中16bits用于生成算法的每轮运算的使能信号,另外1bit用于生成指示加密输出的ready信号 FPGA设计与应用设计与应用 DES算法高速运算电路模型设计算法高速运算电路模型设计 密密钥钥生生成成模模块块 如图所示,与流水构架DES运算电路的工作时序相对应,其16步迭代运算所需子密钥必须同时生成。密钥生成模块由选择控制电路PC-1、选择输出、压缩置换电路PC-2构成。该部分的输入是64bits初始密钥,输出为每次迭代运算用的子密钥,使能控制信号、模式控制信号。 64bits初始密钥经过置换选择PC-1去除校验位并被分离成左右两部分,各28bits,在模式控制信号(加密或脱密)及内部状态机信号控制下,根据移位表,选择输出,经压缩置换PC-2同时形成各步迭代所需运算子密钥 FPGA设计与应用设计与应用 DES算法高速运算电路模型设计算法高速运算电路模型设计 DES算法算法运算运算电路电路 如图所示为DES算法运算模块的电路构架,虚线框内所示为单轮运算。电路由初始置换电路IP、4个32位的寄存器,扩展置换E处理电路、S盒数据代替电路、P盒置换电路及末置换IP-1电路构成 FPGA设计与应用设计与应用 DES算法高速运算电路模型设计算法高速运算电路模型设计 SBOX的设计的设计与实现与实现 S盒是DES算法的关键步骤,所有其它的运算都是线性的,而S盒是一个复杂的非线性函数,正是经过S盒的非线性变换才使明文得到了很好的混乱,从而具有较强的安全性。在硬件实现时,S盒实现具有一定难度,其设计实现的好坏是影响算法整体加脱密速度的主要因素。在算法设计过程中,从资源的角度出发,应尽可能的减少FPGA器件中逻辑单元、嵌入式阵列块及嵌入式单元的耗用,但这可能以降低系统速度为代价。从速度的角度出发,应最大限度地提高系统处理速度,但这样