时间:2024-07-29 来源:网络搜集 关于我们 0
由于FPGA设计的灵活性、高定制型,决定了FPGA在产品设计中的重要位置,在此就不再啰嗦。
但是在FPGA的升级过程中,需要有refresh的过程,该过程会导致FPGA的逻辑重新跑,从而导致GPIO的状态会发生异常变化。
为了解决该问题,lattice和Altera的FPGA均提出了一种无缝升级的解决方案---Hitless.
先来学习一下Lattice的解决方案,Altera的解决方案有所出入,但大体意思是一致的。
如下图是整体的逻辑实现框图,大体分为三个模块: IO模块、Hitless Feature和User Design.其中,IO模块使用了Lattice硬件管脚的特性;Hitless Feature是Hitless功能实现的控制灵魂;User Design是用户自己的设计逻辑。
IO模块:
Altera的方案实现还是有差距的,后续有机会再学习一下。如下图所示,是FPGA的IO管脚示意图。FPGA的IO管脚可以通过IP核或者库文件进行配置,Lattice的FPGA使用BB模块进行例化处理,而Altera的FPGA使用GPIO lite intel FPGA IP模块来例化。
上图各个信号的理解如下:
T: enable signal,buffer的使用信号;
B: inout,对应着FPGA的pin脚;
O: output signal,输出信号给用户逻辑;
I: input signal, 用户逻辑输出信号给该模块;
逻辑关系是:
assign B = I;
assign O = B;
在要求管脚锁定时,可以设置assign I = O; 从而使整个模块形成一个闭环系统,如下图所示
其中,Hitless Feature模块就是控制 I(Input) 信号输入逻辑的灵魂控制模块;
同时,借助于Lattice的TransFR功能,可以有效地缩短更新RAM的时间,避免在刷新RAM过程中导致上述逻辑失效;
Hitless Feature:
该灵魂模块其实也是靠用户自行设计的,基本逻辑是当FPGA被刷新重启时,内部逻辑自行先把I(Input)信号引导O(ouput)端,实现在refresh时GPIO管脚状态的自动锁存;等到定义时间timeout后,然后切换到用户逻辑中。
大家可以考虑一下,refresh过程其实分为上电过程的refresh和升级后的refresh两个过程,如果上电过程的refresh也用上述操作,就会存在上电的一段时间内GPIO的电平不能随用户逻辑来变动,所以就存在功能异常的情况。为了避免这种情况,需要有硬件信号来区分当前是上电过程的refresh还是刷新过程的refresh,该方案的实现可以简单应用RC延时电路来实现。
再回到这个逻辑框图,了解到IO模块的原理后,就可以清晰的定义Hitless Feature这个灵魂模块了,该模块也可以参考Lattice官网提供的解决方案,在此就不赘述了。
Altera的方案实现还是有差距的,后续有机会再学习一下。