FPGA之道(72)提高设计的综合性能(四)提高设计的移植性与保密性

前言

本文节选自《FPGA之道》。

提高设计的移植性

移植是一个和重用有些类似的问题,不过还是有些区别。移植主要指的是系统级的拷贝、修改,而重用则主要指的是部分拷贝、修改。FPGA设计经常会涉及到移植的问题,例如公司第一代和第二代产品之间,它们总的来说大同小异,但细节方面的硬件架构或者FPGA芯片型号却可能会有所不同,那么这时就需要做移植。如果一个FPGA设计在最初没有多做考虑,那么在今后进行移植时,花在移植上的时间和精力很可能会比重新设计一遍还要多,这显然是我们所不希望的。
下面,我们就来介绍一些常用的提高设计移植性的方法:

保持良好的代码风格

FPGA设计的移植工作肯定会涉及到对原来代码的一些阅读和修改,因此,如果能够在HDL代码编写之初,就采用良好的代码风格来增强代码的可理解性,那么势必会有利于移植代码时的阅读和修改。
关于代码风格的一些建议,请参考【本篇->编程思路->代码风格】章节中的介绍。

按照硬件依赖性区分代码

有一些HDL代码是纯功能性的代码,也就是说,无论用什么编译工具,都能够顺利完成编译,例如【本篇->编程语法】章节中介绍的绝大部分例子(有些不能编译的情况是因为FPGA的编译器并不支持所有的HDL语法)。因为这样的HDL代码是不依赖于特定硬件结构的,因此,只要目标器件是FPGA芯片,均能够完成这些HDL代码所描述的功能。
而另一些HDL代码则是和目标FPGA器件紧密相关的,也就是说,换个不同的FPGA芯片,编译就会失败。例如,你以Xilinx公司的FPGA器件为目标,FPGA设计中调用了一个DCM,由于DCM为Xilinx公司FPGA芯片的特有硬件资源,所以如果你将这段代码移植到Altera公司的编译器上,必然会失败。即使是同公司、同系列的FPGA芯片,也不能掉以轻心,因为它们的硬件资源种类和数量均会有所不同。
鉴于以上两点,在进行HDL代码设计时,最好能够将那些与硬件相关的HDL代码和纯功能性HDL代码区分开来,分别封装成一类模块,这样再日后的移植工作中,便可以比较容易的定位需要修改的地方,将那些硬件相关的模块在新的目标器件中进行重新定义。

少使用专有IP核

IP核是个好东西,它能够帮助我们快速完成一个较为复杂的FPGA设计,因为站在巨人的肩膀上,能够让我们看得更远,不过如果谈到FPGA设计的移植性的话,IP核可是个大麻烦。
因为,IP核,顾名思义,就是别人的专利,因此大部分IP核都不是以HDL源码的形式出现的,为了技术保密,通常多为网表文件。而网表文件并不是跨平台通用的,因为不同平台对网表中的基本单元会有不同的定义,并且不同厂商对于同一个功能的IP核,例如除法器,其输入、输出相对于时钟的节拍也会有所不同。所以,使用IP核会给移植带来一些困难。
对于那些日后确定要进行移植的设计,建议还是尽量少用IP核,对于一些不是那么复杂的功能,例如图像的平滑算法、常用的FIFO和RAM等,其实可以自己编写HDL来实现。这样一来,在日后的移植工作中,这部分功能将可以直接移植。

提高设计的保密性

这是一个尔虞我诈、山寨迭起、竞争激烈的年代,在这样一个大环境中,没点保密意识可不行。要不然,今天你生产了个A产品,明天就有人生产了一个功能一摸一样的B产品,价钱还比你便宜;或者今天你生产了个C产品,明天就有人生产了一个D产品,D产品一开机,就让你的C产品全部失灵;等等,你说这可让人怎么活啊?虽说现在的黑客技术高超,破解达人也层出不穷,被破解或破坏是早晚的事,但是在这样一个不断推陈出新的信息化时代,大家打的都是时间战,如果破解或破坏一个产品需要的时间太长,那么也就失去了破解的意义。因此,作为一名FPGA开发者来说,设计的时候不要太过实在,让我们给那些不怀好意的家伙多设置一些障碍吧!
下面,我们就来介绍一些常用的提高设计保密性的方法:

动态配置参数法

动态配置参数法适用于防止别人不劳而获,复制自己FPGA设计的情况。目前来说,绝大部分FPGA芯片都是基于SRAM的,因此掉电后就成了一片空白。为了在下次上电后,让FPGA芯片重新具有期望的逻辑功能,电路板上都需要为FPGA芯片搭配放置一块专门用来存储FPGA配置内容的FLASH芯片。那么,FLASH芯片本身是一个存储芯片,可以轻易的读取出其内部的内容,只要将FLASH配置芯片中的内容复制出来,别人就可以轻松在其它地方复现你的FPGA设计。
所以,如果你的FPGA设计一上电就具有了全部的功能,那么盗取你FLASH内容的人也就“得来全不费工夫”,同样轻松具有了这些功能。因此,为了保护自己的劳动成果,可以将FPGA内部一些重要算法所使用的重要参数设计成为动态配置的形式,即,系统上电后,FPGA设计不能马上工作,它还必须从别处(这个“别处”可以是单片机、ARM等等)获取一些参数,才能完成正确的功能。这样一来,那些破解者如果不同时破解单片机等等外围器件,仅仅复制走FLASH配置芯片中的内容是没有任何用处的。例如,基于数字信号处理方面的应用,可以将其中的FIR滤波器的系数设置成为动态配置的,这样就可以较好的保护自己的劳动成果。

采用具有保密性的技术

采用具有保密性的技术,这一方法适用于防止别人窃听或者干扰自己产品的工作。在通信领域,有很多具有代表性的这类方法,例如,信源编、解码,信道编、解码,加、解密,调频、跳频等等技术。

发布了806 篇原创文章 · 获赞 1541 · 访问量 151万+

猜你喜欢

转载自blog.csdn.net/Reborn_Lee/article/details/105024245