打印

解答:FPGA设计方面的一些安全性问题

[复制链接]
2885|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chen0204|  楼主 | 2012-9-28 14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  Q1:FPGA设计与DSP设计相比,最大的不同之处在哪里?

  A1:这个问题要从多个角度看。它们都用于某个功能的硬件电路实现,但是它们的侧重点有所不同。这里涵盖的说一下。

  1)内部资源

  FPGA侧重于设计具有某个功能的硬件电路,内部资源是VersaTiles(ActelFPGA)之类的微小单元,FPGA的内部单元初始在编程前都是使用的是HDL语言实现硬件电路的设计描述。FPGA内部的连线资源将这些功能模块的内部和模块之间的信号连接起来,构成较大的模块。FPGA可以内部实现ALU,加法器,乘法器,累加器,FIFO,SRAM,DDRcontroller,FFT,HDLC,DMA,PWM等等数字电路,也就说我们要用其实现一个特定的或是通用的硬件功能一个或是多个模块,这些模块的各个细节都要要用HDL来描述设计实现。目前的FPGA都可以直接内嵌诸如ARM7,CoretexM1,Core8051等微处理器,用于FPGA的软核的,也有的FPGA厂商将一些硬件模块直接做到FPGA中,这些是FPGA内部的硬核。传统的FPGA都是实现纯数字电路的,业界只有Actel的FPGA实现了数模混合的PSC单芯片技术,真正的提升和扩大了FPGA的应用功能和领域。另外多数FPGA都有PLL,DLL之类的锁相环,Slew可调,Actel的还内建了OSC,RTC,Powermanager之类的硬件单元,甚至Actel的Fusion系列还内建了600kbps的12bit的ADC以及MOSFETDriver之类模拟接口,内部有UserFlashMemeory,FlashROM等资源可以实现真正的PSC,Bootloader之类的功能。

  DSP主要是算法处理,内部资源主要是乘法器,加法器之类的资源,有SPI接口,UART接口,接受一定的指令集,内部的资源基本上都是现成的,需要客户的需要而重新配置,方便于客户的使用,但是相对来讲其功能是有局限性的,所以主要用于某些特定的领域。DSP也有内嵌的锁相环,计数器,Baudrate发生器,有的DSP也有ADC模拟接口。

  2)使用的编程语言

  FPGA主要使用HDL,包括VHDl,Verilog,还有数模混合的描述语言Verilog-AMS等。DSP使用C,汇编语言编程。

  3)功能角度

  FPGA普遍用于实现数字电路模块,基本上能实现所有的数字电路,传统的数字功能模块,以及客户产品特定需求的数字处理模块。FPGA的IO桥接种类繁多,不同种类的级别的FPGA支持的IO标准和协议都不尽相同,但是这些IO的驱动能力或是电压都是可编程配置的。任何数字功能电路的实现,高速信号的处理,控制领域的信号处理,桥转换协议的实现,Actel的Fusion还能用于电流/电压检测,温度的检测,MOSFETdriver,电源管理,其独特的Flash工艺技术可以依靠电池供电工作,和掉电实时保存数据,超低功耗,多种工作模式(Static,Sleepmode),尤其IGLOO芯片的功能在Sleepmode下功耗只有5uW。这样的功耗用于手机,GPS之类的移动手持设备中能发挥更大的功能应用。另外用FPGA实现ASIC的前期的设计验证,FPGA实现DSP的功能,实现CPU的功能,MCU的功能,内存控制器,用于工业的PWM,SVPWM,Clarke,Park的正逆变换的实现,VGA控制,数据的编解码,解复用,高达上Gbps的信号的处理,协议的转换实现等等等等功能,都是DSP难以胜任的。

  DSP内部有很多现成的硬件模块和接口以及控制器,但是需要软件编程设定,可以实现PWM控制,接口控制,UART接口,SPI接口等功能。但是由于受指令集的时钟周期的限制,DSP不能处理太高的信号,至于说上Gbps的信号,LVDS之类的信号就很难以涉及了。所以相应的应用领域会有所限制。但是不同的领域客户的设计方案不同,考虑的侧重点不同,有些领域设计者也是爱好使用DSP的,诸如算法实现,协议的处理等等如果换作FPGA来处理那就得不偿失。

  FPGA和DSP的区别还有很多,这里先说一点,希望能起到抛砖引玉的作用。具体的环境和设计方案各有其用武之地,设计者要根据自己的需要来选用。
评分
参与人数 1威望 +1 收起 理由
MAMAM + 1

相关帖子

沙发
chen0204|  楼主 | 2012-9-28 14:28 | 只看该作者
  Q2:在做设计之前,如何选择FPGA呢?

  A2:一般情况下,先针对设计,列出您想要实现的功能,大致画个功能框图,然后根据其功能和系统的要求大致推算出你需要的:

  IO需求——可用IO数量、差分信号对、IO的电平格式等;
  电压源的需求——系统提供哪些电压?核电压需要多少?IO电压源需要哪些?
  封装——用TQ?VQ?PLCC?BGA?还是其它的封装形式?
  内部RAM的需求——需要双口RAM吗?需要FIFO吗?大小是多少?
  时钟及速度需求——最大的时钟速率是多少?需要多少个PLL?速度等级?全局时钟有多少?
  逻辑资源和IPcore的需求——需要哪些IP核,大致占用多少资源?
  扩展和升级的需求——是否考虑IO和逻辑资源留有一些余量,以便以后的扩展?升级是否方便?
  价格的因素。
  基本就这些,当然也可以初步选定一个型号,直接在开发软件中对你的程序进行编译、综合、布局布线等,这样能清楚地可以看到你的设计占用的资源,然后再选择合适的型号。

  Q3:FPGA对于初学者来说,应该从哪几个方面入手?

  A3:我建议初学者首先要理解FPGA的原理,这是基础,然后设计一些小型的代码,在验证设计的基础上真正的理解设计硬件的思想,那么这样的话你必然要学到如何结合FPGA资源,特点,性能等方面知识的理论才能专心于设计代码上。至于说芯片的设计安全也是必然要理解的,不然一个静电上去就毁掉芯片了,那你的老板肯定要感到Surprised了。设计的精髓就是设计的思路上的问题了,包括代码的设计技巧,系统要求的功能模块的实现方法,多个模块如何配合的代码设计,后期的验证,调试,到板级的设计调试等等,要做好FPGA设计不同于DSP,软件设计等等,精髓的东西即使现在讲给初学者,他一样是茫然的,不知道什么是什么,因为这是需要很强的功力才能理解和体会到的。需要时间需要付出,需要努力吃苦钻研技术,更需要成长的路上有良师的指导和同行朋友的交流,需要长期的积累的。到那时你就是专家了。

  Q4:用Actel的方案进行加密后,成本上有增加吗?

  A4:用ACTEL方案加密,成本不会增加。因为ACTEL的FPGA是单芯片的,所有的编程信息已经编程在FPGA内部,有了加密选项该信息不会被读出。

  Q5:作为刚接触FPGA的初学者,是否一开始就要深入了解芯片安全设计的精髓或者是原理之类的,还是应该把重点放在如何设计代码上?

  A5:了解FPGA的原理和代码设计,两者缺一不可。只有了解FPGA的结构,才能设计出更好的代码;编写代码能实现自己的设计意图,最终能熟练地使用FPGA。

  Q6:系统中运放很多都是闭环应用,但是仿真的时候经常要开环仿真,可是开环仿真不能真实模拟其实际工作环境,我该如何仿真呢?

  A6:这里应该是指的FPGA仿真吧,如果是运放的话要定好芯片之前就看懂了芯片手册了,然后在实际的环境中测试,在软件环境里仿真的话需要特别的工具,我目前不是很清楚。但是我们可以单就FPGA的仿真来谈问题。实际的环境中的仿真是板级的,但是也必须有信号源和反馈信号,否则这个闭环还是不会响应外界的信号而发挥其功能的。根据这个思想我们就要额外设计一个或是多个模块或是叫做模拟出一个信号源和接收反馈信号的模块,这里的模拟不是模拟信号的意思而是我们从设计的角度来看就是写一些Testbench,设计FPGA的会使用Verilog或是VHDL,做前端的RTL代码后我们其后可以借用Modelsim或是别的仿真软件输入满足设计需要的信号源(Testbench)查看波形,对于自己关注的节点或是信号标注以特别的名字,我们就能实现所谓的闭环仿真了。

  Q7:Actel的设计安全保护和计算机网络安全DES和RSA算法有什么联系或者是互补的关联?

  A7:ACTEL的设计安全是对设计的内容进行保密,阻止非法读取和写入;而计算机网络中的DES和RSA是对网络上流动的数据进行加密/解密。两者关系不大。

  Q8:关于全定制或半定制ASIC方面,是否也有同样安全设计?

  A8:对于全定制的ASIC,一般来说保密性不如半定制的ASIC。对于半定制的ASIC,如果定制信息很容易被读出的话,安全性就很差了;如果采用单芯片的半定制ASIC,而且定制信息不被读出,安全性就会很高。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
MAMAM + 1
板凳
MAMAM| | 2012-9-28 16:32 | 只看该作者
看一下 还好

使用特权

评论回复
地板
sgh2| | 2012-9-28 17:34 | 只看该作者
谢谢楼主分享,辛苦了

使用特权

评论回复
5
wood_ic| | 2012-9-28 17:36 | 只看该作者
总结的到位啊

使用特权

评论回复
6
hawksabre| | 2012-9-28 18:09 | 只看该作者
与开发成本很高的ASIC相比,FPGA可重复编程的性能正受到系统设计者的青睐。此外, FPGA的性能和功能也越来越强大,包括32位软处理器、SERDES、 DSP块和高性能的接口。现在的低成本FPGA甚至可以满足大批量的应用。设计人员采用FPGA能够快速开发产品,以应对产品快速上市(市场要求缩短产品的开发时间)和远程更新的需求。

  但是,把器件生产、现场更新和固件远程重构的工作外包可能会导致FPGA被复制、克隆或盗版。这对某些企业是个严重的问题,因为有些算法对企业保持竞争优势是必不可少的,而外包可能使这些算法被别人利用。因此,考虑FPGA设计的安全性是一件非常重要的事。

  FPGA有两种类型:基于SRAM、需要用外部引导器件配置的易失FPGA,以及将配置保存在内存中因而不需要外部引导器件的非易失FPGA。基于 SRAM的FPGA是易失器件。如果切断电源,配置即被删除,必须对器件进行重新配置,然后器件才能工作。这类器件可以用处理器或使用SPI或并行闪存通过JTAG端口编程。就安全性而言,它们是很脆弱的。一旦系统上电,盗版者就能轻而易举地获取FPGA的位流。 Flash和反熔丝FPGA是非易失性的器件,它们上电后即可编程,无需使用任何外部存储器。这些非易失器件拥有最高级别的安全性。但是,反熔丝FPGA受到两个方面的制约: 1 )它们不能再次编程。2 )它们的性能和内存容量有限。而Flash FPGA和SRAM FPGA是可以重复编程的。

  盗版行为分为几种类型:“克隆”复制系统元件的行为,甚至不必知道内部的逻辑。通过拦截FPGA的位流和复制配置,可以轻松地克隆一个低成本SRAM FPGA。“逆向工程”需要理解FPGA的逻辑功能,以便进行修改以满足盗版者的需要。盗版者可以分析无保护的位流以复制原先的设计,或解剖器件分析其内容。还有一个被广泛使用的盗版手段是“生产超过客户订购量的系统”,然后向市场出售多余的系统,而专利持有者却无法从中取得收益,没有任何方法可以阻止不择手段的分包商这样做。最后一种盗版方法是“盗窃服务”,盗版者通过**系统的安全设置来获得特定的服务,如收看卫星电视节目。

  打击盗版可以采用多种安全措施,最简单的方法的是使用一个保密位,防止FPGA的配置数据被截获。有了这个保密位,盗版者如果试图读取配置数据,读出的数据将全部为零。所有的FPGA都有这种类型的保护。然而,如果引导文件位于器件的外部,相对就比较容易复制配置,标准的SRAM FPGA就是这种情况 。如果配置数据是在器件内部,如非易失FPGA ,保密位就会有很好的保密效果。

  与反熔丝FPGA不同 ,SRAM FPGA和Flash FPGA是可重复编程的,它们允许用户调整设计或赋予FPGA一个全新的功能。此外,现在甚至可以远程修改FPGA配置文件,从而修改系统。虽然重构对某些应用来说是个优点,但它也可能成为一个安全隐患,因为盗版者可能拦截并获取新的码流。不过这可以通过在传输时保护位流来解决。

  虽然Flash FPGA比SRAM FPGA更安全 ,它们也有缺点。它们的密度和存储容量有限,功能和I/O的速度也有限。

  针对这些缺点,莱迪思半导体公司已经开发出一种创新的技术,它结合了以下两种技术的优点:

  * 性能和存储器容量较大的低成本SRAM

  * 可以内部存储重构数据的Flash

  莱迪思独特的flexiFLASH技术,将SRAM和Flash整合在同一个FPGA中,可以同时实现以下几个方面的优点:

  * 位流配置

  * 以最短的系统中断时间进行远程重新配置

  * 数据保护和器件加锁

  复杂系统中的设计安全性

  工程师正面临着构建日益复杂的系统的挑战。

  图1展示了一个FPGA与微处理器相连的系统 。微处理器通过一个外部PHY和一个集成在FPGA内的MAC 与以太网连接。与竞争者的产品不同,这个微处理器中还包含用户逻辑。 FPGA通过一个Flash来配置。Flash和RAM中包含有微处理器的程序和系统的数据。如果系统需要更新,就通过以太网来发送数据。为了保护设计, FPGA数据和位流都经过了加密。但是,发送到微处理器的数据和指令未加扰,因此盗版者能够查看此数据并加以复制。一种可能的解决办法是在FPGA内实现软微处理器,它可以访问FPGA的内部存储器组,而从外部却无法看到存储器组。这些存储器组可以用来存储重要的算法和数据。




                                                           图1 FPGA与微处理器相连的系统

  图2展示了同一个设计,但处理器集成在FPGA之中。图2中采用的软微处理器是LatticeMico32 。设计师构建了解扰器,因此加扰是机密的。使用解扰器允许加密的指令存储在外部存储器。为了加密位流,莱迪思为几款FPGA提供了128位AES密钥。




                                          图2 处理器集成在FPGA之中

使用特权

评论回复
7
hawksabre| | 2012-9-28 18:10 | 只看该作者
首先,工程师应用莱迪思的软件设计工具套件ispLEVER ( 7.0或更高版本)开发FPGA代码,完成综合、映射、布局布线和仿真后,产生位流,经最后验证后再用ispVM系统(莱迪思的编程工具)对电路板编程。当设计师对系统的功能感到满意时,此时就要来做保护设计的工作。可以用莱迪思的ispLEVER工具或莱迪思的编程工具ispVM System对位流加密,用户可选择128位密钥。编码的位流可以是十六进制(从0至F ,不区分大小写)或一个ASCII密钥(可用所有字母数字字符和空格,大小写敏感),然后使用任何非加密的文件编码将该位流加载到配置存储器中。




                                                           图3 用128位AES密钥保护设计

  现在密钥应该已经保存在一个可编程存储区。编程是通过器件的JTAG端口进行。应该注意到,用密钥对位流加了密,现在只能通过加密的位流对FPGA进行配置。用sysCONFIG接口或JTAG接口可以对莱迪思的FPGA进行编程。该sysCONFIG接口可以让用户使用集中配置模式,或Flash SPI ,或以并行的方式使用并行配置模式重新输入数据。符合IEEE 1149.1和IEEE 1532标准的JTAG端口允许以突发位流(或快速编程)模式、或用1532模式对数据进行编程。JTAG端口用来对器件中的AES 128位密钥编程。不需要用特别的模式来保存FPGA中的128位密钥。

  在莱迪思的FPGA中使用一个编码位流可以防止器件的配置被重新读取,但需要一些措施来确保配置能够正确地运作。位流未加密时,FPGA执行CRC操作。如果程序不正确,DONE信号保持在0,INITN变为0 。用户仍然可以访问JTAG Usercode寄存器。对FPGA的位流译码时,它存储位流用户码,用来存放FPGA应用程序的版本号。

  图4展示了加密位流的数据路径。当数据进入FPGA时,解码器读引导程序,前面所有的数据被忽略。即使解码器检测到加密的文件,如果FPGA的密钥未被编程,数据则被阻止,DONE信号保持在'0 ' (表示配置失败)。如果密钥已被编程,FPGA检查引导程序,指出后面所有的数据应通过解码器。然后FPGA检查标准引导程序,得知数据是否已被压缩。如果数据没有被压缩,则将它直接发送到解码单元。如果数据已压缩,就先把它送到解压缩引擎,然后再送到解码单元。一旦通过CRC校验,即对SRAM进行编程。DONE位被激活时,解压缩和译码擎不工作,允许其它JTAG链元件接收配置数据。




                                                   图4 加密位流的数据路径

  莱迪思的经济型ECP2/M FPGA拥有位流加密功能,内置闪存的非易失LatticeXP2 FPGA也有此功能。LatticeXP2 FPGA把SRAM映射合并入同一块芯片,设计和含有位流配置的Flash映射都在此芯片上工作。当设计师重点关注电路板的面积和快速启动时间时,这类器件特别有用。

  内置闪存的FPGA

  非易失FPGA提供额外的Flash保护安全功能,可以防止内存因意外或未经授权的操作被擦除或重新编程。Flash保护功能采用64位密钥。

  对器件进行删除或重新编程时, ispVM System会核查Flash是否被保护。如果是,就要求用户输入64位密钥,然后ispVM检查这个密钥是否与存储在器件中的密钥一致,如果一致就执行操作。但是,如果丢失了密钥,器件就再也不能被擦除了。

  这些安全性措施不仅保护了用户电路板上的设计,而且也防止了试图修改系统功能的盗版行为。这些功能还有助于远程的系统更新。莱迪思FPGA提供这一功能,使用户可以通过对FPGA重复编程来更新他们的系统,而不会中断它与周围元件的联系。此功能被称为TransFR 。

  FPGA最值得注意的的特点是设计人员很容易对器件进行重构。但是,重构通常意味着系统要中断很长时间。但是,莱迪思开发的TransFR技术将重构的影响降至最低。莱迪思的几个FPGA系列都支持TransFR技术,包括那些含有内置闪存的器件,如MachXO 、LatticeXP和LatticeXP2 ,以及像LatticeECP2 /M那样的SRAM FPGA。




                                      图5 用最短的中断系统时间进行远程更新

    TransFR是一种同时使用基本任务编程和边界扫描单元的技术。基本任务编程修改非易失存储器的内容(内部的或外部的),以便使FPGA的SRAM部分继续工作。莱迪思的FPGA拥有可以取样和预加载的边界扫描单元,可以在编程时控制FPGA的I/O。




                                                 图6 执行TransFR的4个步骤

使用特权

评论回复
8
hawksabre| | 2012-9-28 18:10 | 只看该作者
执行TransFR的4个步骤:

  1,进行基本任务编程。系统对FPGA的非易失性存储器再编程,但不会中断SRAM的功能。

  2,可以锁定I/O的状态,用户可以保持或预先确定I/O的状态。在整个重新配置过程中,I/O的值保持不变,以防止系统被关闭。

  3, 接着用JTAG命令把新的配置传输至非易失存储器。一完成对SRAM就执行全局复位,以便使该器件处于一个已知的状态。然后释放I/O的状态,并再次锁定PLL。

  4,释放输出,内部逻辑停止对I/O的监测。

  要使用TransFR,需要用到ispLEVER开发工具和ispVM。

  用户通过使用128位AES密钥加密文件和Lattice TransFR技术完成了更新过程,但仍有可能因为系统本身的弱点或违法行为引发系统故障。虽然FPGA的位流是加密的,但是非法操作或传输中的错误都可能损坏它,从而导致FPGA被阻塞,使系统无**确地重启。为了解决这个问题,莱迪思推出了“双引导 ”功能。

  双引导配置

  在配置存储器中存储两个编程文件。




                                                                      图7 双引导配置


  激活PROGRAM引脚或启动JTAG刷新指令后,FPGA下载存储在Sector 1的位流。如果CRC出错,FPGA自动恢复到Sector 0配置。Lattice XP2非易失FPGA也有此功能。该Flash元件拥有主动配置,还有一个用来存放安全( “golden” )配置的SPI Flash。

  莱迪思拥有许多能帮助设计人员保障设计安全的产品。Lattice ECP2/M FPGA是一款拥有128位AES密钥的高安全性器件。这些经济的器件提供了大存储容量(高达5.3 Mbit)、高速I/O和SERDES 。非易失性LatticeXP2 FPGA是市场上一款很独特的器件,它有着极高的安全性。由于采用了FlexiFlash技术,位流存储在器件的Flash中,并由128位AES密钥对它进行保护。此外, TransFR更是保障了绝对安全的远程系统更新。

  设计的安全性应该是设计过程的一部分,而不是事后再去考虑。无论选择了哪种技术,最重要的是要防止设计被篡改,无论这个篡改行为是无意的还是非法的。

使用特权

评论回复
9
hawksabre| | 2012-9-28 18:11 | 只看该作者
这是我再网上找的**   关于FPGA安全性问题的**   作为楼上的补充吧   希望对大家有所帮助
http://www.**.com/article/09-04/43224160904475lyu_1.html
原文网址   呵呵

使用特权

评论回复
10
gaochy1126| | 2012-9-29 08:51 | 只看该作者
讲解的不错,可惜有些没有做到

使用特权

评论回复
11
ellen325| | 2012-9-29 15:59 | 只看该作者
我觉得挺好的

使用特权

评论回复
12
robbins37| | 2012-9-30 19:58 | 只看该作者
长姿势了。不过很多都很难做到。望共同努力

使用特权

评论回复
13
wrigleymint| | 2012-9-30 20:23 | 只看该作者
安全性很重要呢 感谢楼主和甲虫哥哥

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:你说...你喜欢我? 其实...我一开始... 其实我也...唉跟你说了吧, 其实我也挺喜欢我自己的.

0

主题

152

帖子

1

粉丝