前言
作为一种可编程逻辑器件,FPGA在过去的二十年中从电子设计的外围器件逐渐演变为数字系统的核心。伴随半导体工艺技术的进步,FPGA器件的设计技术取得了飞跃发展及突破。
近期,FPGA在芯片界的作用不容忽视。无论是呼吸机的核心“大脑”,还是新基建中的5G通信、人工智能和云计算,FPGA都扮演着重要角色。下面是我对FPGA的理解和对一些问题的回答。
本文首发于微信公众号“FPGA学习者”,更多精彩内容敬请关注
1、什么叫FPGA
FPGA(Field Programmable Gate Array,现场可编程逻辑阵列),是一种硬件可重构的体系结构,和嵌入式芯片的最大区别就是可以进行并行运算,内部是基于硬件描述语言编程的逻辑门阵列;
通过硬件编程,可以随时改变它的应用场景,它可以模拟CPU、GPU等硬件的各种并行运算。可以通过与目标硬件的高速接口互联,在系统层面实现加速。
2、什么叫数字IC
FPGA(Field Programmable Gate Array,现场可编程逻辑阵列),是一种硬件可重构的体系结构,和嵌入式芯片的最大区别就是可以进行并行运算,内部是基于硬件描述语言编程的逻辑门阵列;
通过硬件编程,可以随时改变它的应用场景,它可以模拟CPU、GPU等硬件的各种并行运算。可以通过与目标硬件的高速接口互联,在系统层面实现加速。
3、FPGA设计流程
FPGA开发主要有以下步骤:
①系统规划、②设计输入、③行为仿真、④逻辑综合、⑤综合后仿真(可选)、⑥综合后设计分析(时序及资源)、⑦设计实现(包括布局布线及优化)、⑧布线后仿真、⑨板级调试、⑩程序固化。
3.1系统规划
即在项目开始之前,对系统功能定义和模块进行划分,对器件资源、成本、设计复杂度等进行评估,从而制定合理的设计方案与器件选型。
3.2RTL输入
RTL,Register Transfer Level,直译为寄存器转换级(或寄存器传输级),通俗来讲,就是使用硬件描述语言Verilog HDL/VHDL进行硬件编程或者使用原理图输入。
3.3行为仿真/功能仿真
在编译前对用户所设计的电路进行逻辑功能验证,此时是没有任何延迟信息的,仅对初步的功能进行检测。
3.4逻辑综合
综合的含义就是将高级层次的描述转化为低级层次的描述,就目前层次来看,综合优化是指将设计输入编译成基本逻辑单元组成的逻辑连接网表。
3.5综合后仿真(可选)
综合后仿真检查综合结果是否和原设计一致。仿真时,可以估计门延时带来的影响,但是无法估计线延时,因此和布线后的实际情况有一定的差距。
3.6综合后设计分析(时序及资源)
综合之后会告诉我们,目前的系统设计消耗了多少 FPGA的资源,比如,消耗了多少 LUT、RAM等等。
3.7设计实现(包括布局布线及优化)
利用实现工具把逻辑映射到目标器件结构的资源中。布局将逻辑网表中的硬件原语和底层单元合理的配置到芯片内部的固有硬件结构上,需要在速度最优与面积最优之间做出选择;布线在布局的基础上,利用芯片内部的各种连线资源,合理正确的连接各个元件。
3.8布线后仿真
意思与前面的综合后仿真一致,因为此时已经进行了布局布线,所以在时序中包含的延迟信息更真实。能较好地反映芯片的实际工作情况。
3.9板级调试
产生使用的数据文件,下载到 FPGA芯片中,测试实际运行结果。可以使用嵌入式逻辑分析仪进行查看。
3.10程序固化
确保当前的设计已经完全符合要求后,将程序固化到FPGA所连接的FLASH芯片中,这样掉电后数据不丢失。
4、什么是毛刺(glitch)?又如何消除呢?
由于信号在FPGA内部通过不同的逻辑单元以及不同的走线到达逻辑门时产生延时,在多路信号变化的瞬间,组合逻辑电路常常产生小的尖峰,即毛刺信号。
毛刺信号有可能对下一级电路产生误触发,从而导致系统出错;这是由FPGA内部结构特性决定的,该现象在FPGA设计中是不可避免的。
该如何消除毛刺呢?
该如何消除毛刺呢?
1️⃣利用冗余项法,修改函数表达式
若函数表达式中可能会出现A+A’状态,或卡诺图中出现两圆相切的情形,对应的电路就可能会产生险象,因此需要增加冗余项来消除险象。
但该法对于计数器型产生的毛刺是无法消除的。
2️⃣采样法
由于冒险多出现在信号发生电平跳变的时刻,即在输出信号的建立时间内会产生毛刺,而在保持时间内不会出现,因此,在输出信号的保持时间内对其进行采样,就可以消除毛刺信号的影响;
常用的采样方法有 2 种:
一种使用一定宽度的高电平脉冲与输出相与,从而避开了毛刺信号,取得输出信号的电平值。这种方法必须保证采样信号在合适的时间产生,并且只适用于对输出信号时序和脉冲宽度要求不严的情况。
另一种更常见的方法叫锁存法,利用D触发器的输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号。由于在时钟的上升沿时刻,输出端Q=D,当输入的信号有毛刺时,只要不发生在时钟的上升沿时刻,输出就不会有毛刺。这种方法类似于将异步电路转化为同步电路,实现简单,但同样会涉及到时序问题。
3️⃣吸收法
由于产生的毛刺实际上是高频窄脉冲,在输出端接上小电容进行滤波,就可以滤除毛刺。但输出波形的边沿性变差,在对波形要求较严格时,应再加入整形电路,该方法不宜在中间级使用。
4️⃣延迟法(感觉不太靠谱的样子)
因为毛刺最终是由于延迟造成的,所以可以找出产生延迟的支路。对于相对延迟小的支路,加上毛刺宽度的延迟可以消除毛刺。但有时随着负载增加,毛刺会继续出现,而且,当温度变化,所加的电压变化或要增加逻辑门时,所加的延迟是不同的,必须重新设计延迟线,因而这种方法也是有局限性的。而且采用延迟线的方法产生延迟会由于环境温度的变化而使系统可靠性变差。
5️⃣硬件描述语言法
这种方法是从硬件描述语言入手,找出毛刺产生的根本原因,改变语言设计,产生满足要求的功能模块,来代替原来的逻辑功能块。比如计数器中可以使用格雷码计数代替二进制码,因为格雷码每次变化时只有一位发生改变,不会与其他位的变化产生毛刺信号。
5.D触发器
D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。
因此,D触发器在数字系统和计算机中有着广泛的应用。触发器具有两个稳定状态,即"0"和"1",在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态。
触发方式有电平触发和边沿触发两种,D触发器的次态取决于触发前D端的状态,即Q(n+1)=D。因此,它具有置0、置1两种功能。
D触发器的应用很广,可用做数字信号的寄存,移位寄存,分频和波形发生器等等。
代码实现:
module d_flip_flop(
input clk,
input d,
output reg q
);
always@(posedge clk)begin
q <= d; //上升沿有效的时候,把d捕获到q
end
endmodule
总结
以上就是今天要讲的内容,本文仅仅简单回答了FPGA相关的五个问题,更多知识可以关注本账号的“每天学习一点FPGA知识点”系列分享。