FPGA设计实战演练.高级技巧篇-----读书笔记

本文详细介绍了FPGA设计中的关键概念和技术,包括PCB布线策略,如电源滤波、信号匹配和阻抗控制;FPGA供电的单调性和电源跟踪;退耦电容的作用和处理;同步和异步复位的设计与分析;状态机的编码和优化;以及设计速度和面积的优化方法。文章强调了逻辑设计的时序和面积优化,提供了代码示例,并讨论了综合和布局布线过程中的优化策略。

   第一章 从PCB开始研究FPGA设计问题

一、PCB布线

1、要求

·对所有器件进行电源滤波,均匀分配电源,降低系统噪声。

·匹配信号线,减小信号反射。

·降低并行走线之间的串扰。

·减小地反弹效应。

·进行阻抗匹配。

2、微带传输布局,走线在PCB的顶层或底层,只有一个参考平面

3、带状传输线布局,走线在PCB内层,有两个电压参考平面

 4、阻抗控制原则:单端走线控制阻抗为50Ω;差分走线控制阻抗为100Ω。生产厂家阻抗控制的偏差范围一般为正负5%左右。

5、减小微带线或带状线布局串扰的方法是:

·在布线要求允许的范围内,尽可能地加宽信号线之间的距离。走线之间尽量不要靠

近,距离保持在介质高度的3倍以上。

·传输线设计要使导体尽可能靠近地平面。这一方法使得传输线能够与地平面紧耦

合,有助于和邻近信号去耦合。

·尽可能使用差分布线方法,特别是关键网络(例如匹配长度以及每条走线串通回

转等)。

·如果存在明显的耦合,应在不同层之间布设互相垂直的单端信号。

·减小单端信号之间并行走线的长度,以较短的并行走线布线,以减小网络之间的长

耦合走线。

6、差分走线

 二、FPGA供电

1、单调性(或线性)要求,是指在上电过程中,电源轨是单调爬升而不会掉头往下掉(也称

单调非负特性)。也就是说,电源必须始终具有正斜率(或零斜率)。

2、给电源供电设计加入电压上电顺序和电源跟踪。这来源于FPGA的I/O电压必需要在核心电压上电以后才能上电的基本规律。

3、电源和地叠层分布

 

 三、退耦电容

1、退耦电容可以在电源轨波动时为其提供少量的瞬态能量。

2、为何需要退耦电容?

可以将一个退耦电容看做是一组电阻(R)、电感(L)和电容(C)的串联组合,根据真实的RLC模型可知,电容也将在某个频率点上容抗和感抗分量彼此有效抵消。所以说,一个真实的电容将会在某个频点时阻抗最小,这个阻抗最小的点被称为电容的谐振频率,在这个点上退耦电容可以提供最佳的滤除供电干扰的能力。

第二章  如何处理逻辑设计中的时钟域

1、单比特信号跨时钟域的同步处理

1、跨时钟域(Clock Domain Crossing,CDC)是指设计中存在着两个或两个以上异步时钟

域,跨时钟域设计问题目前是逻辑设计者经常面临的问题,解决这类问题的方法被称为

CDC技术,即跨时钟域技术。

2、产生压稳态的原因:

触发器的建立时间和保持时间在时钟上升沿左右定义了一个时间窗口,如果触发器

数据输人端口上的数据在这个时间窗口内发生变化(或者数据更新),那么就会产生时序违

规。存在这个时序违规是因为建立时间要求和保持时间要求被违反了,此时触发器内部的

某个节点可能会在一个电压范围内浮动,无法稳定在逻辑0或者逻辑1状态。换句话说,如

果数据在上述窗口中被采集,触发器中的晶体管不能可靠地设置为逻辑0或者逻辑1对应

的电平上。

 3、处理亚稳态的方法

1、双触发

a、 最常见的同步器就是使用两级寄存器,即使用寄存器打两拍的方式进行同步。

 应遵循原则:

级联的寄存器必须使用同一个采样时钟。

发送端时钟域寄存器输出和接收端异步时钟域级联寄存器输入之间不能有任何其他组合逻辑。

同步器中级联的寄存器中除了最后一个寄存器外所有的寄存器只能有一个扇出,即其只能驱动下一级寄存器的输入。

b、使用三级触发器对亚稳态进行同步处理

平均故障间隔时间(MTBF),对于前面讨论到的亚稳态同步器来说,这里的故障是指一个

被传输到同步触发器的信号,当它经过第一级同步触发器时处于亚稳态,在随后的一个时钟

周期内持续保持亚稳态并被采样到第二级同步器触发器, MTBF大好,所以一般在在高速设计中使用三级触发器同步。

4、同步快速信号到慢速时钟域

1、信号可能会丢失

如果丢失信号采样值对于设计来说是不允许的,那么有两种通用的应对方法可以解决这个问题:一个是开环解决方案,确保信号在无须确认的情况下可以被采集;另一个是闭环解决方案,即在跨时钟域边界时,信号需要接收端的反馈确认。

1、开环解决方案:

图2-11所示,需要将目标信号展宽到至少超过接收时钟域的时钟周期。前文提到,最佳的脉宽是至少为采样时钟周期的1.5倍,这样跨时钟域信号将会被接收时钟域的时钟至少稳定地采样一次。

 2、闭环解决方案:

在发送时钟域将控制信号当使能信号传递,并将其同步到接收时钟域,然后接收时钟域收到使能控制信号之后,将同步的控制信号反馈到发送时钟域,发生时钟域通过另外一个同步器接收此反馈回来的控制信号,并以它作为信号正确接收的握手信号。

缺点:延迟大

5、多比特信号跨时钟域同步处理

1、在接收时钟域有一个寄存器,它需要一个加载(Load)信号和一个使能(Enable)信号来加载一个数值到寄存器。如果加载和使能信号在发送时钟域的同一个时钟沿被驱动有效(即两个控制信号需要同时有效),那么这两个控制信号之间就有可能存在产生一个小歪斜的机会,这就可能导致在接收时钟域中这两个信号被同步到不同的时钟周期。在这种情况下,数据是不能被加载到寄存器的。

解决:将加载和使能两个控制信号融合成一个单比特控制信号

2、用多周期路径规划来处理

多周期路径规划是一种通用的安全传递多比特跨时钟域信号技术。多周期路径规划是指在传输非同步数据到接收时钟域时配上一个同步的控制信号,数据和控制信号被同时发送到接收时钟域,同时控制信号在接收时钟域使用两级寄存器同步到接收时钟域,使用此同步后的控制信号来加载数据,这样数据就可以在目的寄存器被安全加载。

 3、使用FIFO结构来处理多比特时钟域信号

1、FIFO在FPGA内一般是通过封装一个双口RAM来实现。

2、用格雷码做状态机

4、多时钟域设计分区划分

1、在时钟边界划分分区

2、多时钟域分区划分后的静态时序分析

3、设计中的门控时钟行波时钟的处理

行波时钟(Ripple Clock):行波时钟是指任何由寄存器驱动的时钟,常见的行波时钟为

利用逻辑(如计数器)进行时钟分频产生的时钟。

门控时钟:Altera给出的定义是,任何由非寄存器逻辑功能驱动的时钟都是门控时钟,

这些非寄存器资源大部分是FPGA内LAB里的LUT或ALUT。门控时钟可以提供一个

时钟开关功能,当然有时候门控时钟也可以是由其他组合逻辑驱动的时钟,比如时钟多路选

择器等。

5、衍生时钟处理指导原则 

1、第一个指导原则是尽量不要使用行波或门控时钟,取而代之的是使用时钟使能或

PLL。时钟分频以及逻辑门开关时钟这类技术通常都是可以使用时钟使能和PLL来替

换的。

2、如果确实需要使用派生时钟,那么建议设计中不要有跨派生时钟域的同步数据路径。

3、如果使用Altera器件,那么在跨时钟域路径上遇到保持时间时序问题时,可以在

QuartusⅡ软件中将Optimize Hold Timing选项设置到All Paths.。具体设置方法是选择

Assignments→Settings--Fitter Settings。

所以,在使用时钟多路选择器或其他由逻辑资源实现的时钟逻辑功能而不是使用时钟

控制模块时,一定要确保在一个给定时刻每个LUT或ALUT最多只能有一个输入在翻

转。

第三章 正确分析衍生时钟

1、门控时钟包括:

·时钟经过反相生成的时钟。

·时钟经过缓冲后生成的时钟。

·时钟经过使能信号控制生成的时钟。

·通过时钟多路选择器输出的时钟。

·时钟输出到FPGA外部后反馈回来的时钟。

2、衍生时钟包括:

·触发器翻转生成的时钟。

·行波计数器生成的时钟。

·同步计数器生成的时钟。

·PLL输出的时钟。

3、门控时钟分析处理

1、时钟反相生成的时钟,这会给目的寄存器产生时钟歪斜。

2、时钟经过缓冲后生成的时钟,对于时钟输入来说,最好的做法是除了将其连接到时钟专用输入脚之外,最好将它们连接到PLL。

3、经过使能处理后的时钟,有两种使能时钟。使用门控来关闭时钟的更佳方式是使用一个同步时钟使能,即动态使能时钟。

静态使能时钟:“静态”是指使能信号在器件上电和跳出复位后,就是电路正常工作时保持不变的情况。如果一个静态使能在电路正常工作的时候发生变化,那么在此变化状态后必须给电路执行复位操作。

动态使能时钟:动态使能是指使能信号可以在电路正常工作时发生变化。这类动态使能相对更加复杂一些,因为电路不但要容忍时钟在使能时潜在产生毛刺的风险,更为常见的是,使能信号必需要被同步到时钟且不能向下传递等时序问题。

实现同步门控时钟

always@ (posedge clk or negedge rst)
    if(!rst)
        q <= 1'b0
    else if(en)
        q <= d;
    else 
        q <= q;

建议使用ALTCLKCTRL函数来创建使能时钟

一个器件中时钟控制模块使用的数量受限于器件内的全局缓冲的数量;使用时钟控制模块时,如果使用了时钟使能信号且使能信号是静态信号的时候,则这些使能信号不需要进行I/0时序约束。

4、·通过时钟多路选择器输出的时钟

外部时钟:

create_clock [get_ports {clk)] -name clk_a -period 5.0-waveform {0.0 2.5}
create_clock [get_ports {clk)] -name clk_b-add -period 10.0-waveform {0.0 5.0}
set clock groups -exclusive -group {clk a}-group {clk_b}

1、每个频率都需要一个create clock语句来创建一个时钟,由于创建的这两个时钟(clka和ck_b)共享同一个时钟路径,所以必须割断这两个时钟之间的时序关系,用set_clock_groups命令。如果时钟输入的频率多于两种可能时,必须为每个可能的频率创建一个时钟分组。

内部时钟:

用于内部多路选择器的SDC命令和外部多路选择器基本类似,只是两个create_clock语句的目标是针对两个不同的端口:

create_clock [get_ports {clk_a)] -name clk_a -period 5.0-waveform {0.0 2.5}
create_clock [get_ports {clk_b)] -name clk_b-add -period 10.0-waveform {0.0 5.0}
set clock groups -exclusive -group {clk a}-group {clk_b}

为了动态地切换多路选择器的选择控制信号,同时为了确保多路选择器的输出上不出现毛刺,一个特殊的电路必需要加入到切换控制过程中。这种特殊电路通常都由状态机结构来实现,所以多路选择器的选择控制由状态机控制。

5、经外部反馈回来的时钟

反馈时钟是指那些在FPGA内部创建的时钟,输出到FPGA的引脚,然后再通过PCB走线连

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eachanm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值