专题2 数字逻辑的时间约束
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
QuartusII进行时序约束设置(续)
QuartusII进行时序约束设置(续)
QuartusII进行时序约束设置(续)
编译结束后可以通过Compilation Report中的Timing Analyzer查看时序分 析结果,红色代表有问题的信号。(如将CLK50M设置为500MHz)
QuartusII进行时序约束设置(续)
3. 其它时钟最好转成Clock Enable信号。这样统一步调, 也做到时钟延时的统一,将时钟延时最小化。降低静 态时序分析的复杂性,增强可靠性。
二、数据的建立时间和保持时间
建立时间(Tsu:set up time)是指在时钟沿 到来之前数据从不稳定到稳定所需的时间,如 果建立的时间不满足要求那么数据将不能在这 个时钟上升沿被稳定的打入触发器; 保持时间(Th:hold time)是指数据稳定后保 持的时间,如果保持时间不满足要求那么数据 同样也不能被稳定的打入触发器。
参考书籍: 《Altera FPGA/CPLD设计(基础篇)》 王诚 人民邮电出版社
方法2:通过拆分组合逻辑的方法减小延时
由于一般同步电路都不止一级锁存,而要使电路稳定 工作,时钟周期必须满足最大延时要求,缩短最长延 时路径,才可提高电路的工作频率。
分割组合逻辑 : 我们可以将较大的组合逻辑分解为较小的几块,中间插入触发 器,这样可以提高电路的工作频率。这也是所谓“流水线” (pipelining)技术的基本原理。
若clk分配到普通IO管脚(如38脚)
小结:
1. 全局时钟尽可能分配到Dedicated Clock管脚,管脚数 有限时优先保证高频时钟分配到精密时钟管脚;
2. 在进行逻辑设计时,就要考虑时钟的安排,尽可能减 少全局时钟数,最好统一由1~2个全局时钟处理整个芯 片中的逻辑,子模块中最好只有1个全局时钟进行处理。 跨时钟域最好有专门的模块做时钟域隔离。
2. 使用流水线:我们平时听说的流水就是一种通过切割大的组 合逻辑(在其中插入一级或多级D触发器,从而使寄存器与寄存 器之间的组合逻辑减少)来提高工作频率的方法。比如一个32 位的计数器,该计数器的进位链很长,必然会降低工作频率, 我们可以将其分割成4位和 8位的计数,每当4位的计数器计到15 后触发一次8位的计数器,这样就实现了计数器的切割,也提高 了工作频率。(这里是同步逻辑,非异步)
din
组合逻辑
data
D
Q
output
clk
Th Tsu data
output clk
同步设计中的一个基本模型
在FPGA设计的同一个模块中常常是包含组合逻辑与 时序逻辑,为了保证在这些逻辑的接口处数据能稳定 的被处理,那么对建立时间与保持时间建立清晰的概 念非常重要。
Tdelay是组合 逻辑的延时
逻辑进行拆分的方法(续):
3. 计数器和状态机分离:若状态机中包含计数器,则将计数器移出, 改用使能信号将两者连接。在状态机中,一般也要将大的计数器移 到状态机外,因为计数器一般是经常是大于4输入的,如果再和其 它条件一起做为状态的跳变判据的话,必然会增加LUT的级联,从 而增大组合逻辑。以一个6输入的计数器为例,我们原希望当计数 器计到111100后状态跳变,现在我们将计数器放到状态机外,当计 数器计到111011后产生个enable信号去触发状态跳变,这样就将组 合逻辑减少了。
转移组合逻辑
下图上半部分,它时钟频率受制于第二个较大的组合逻辑的延时,通过适当的 方法平均分配组合逻辑,可以避免在两个触发器之间出现过大的延时,消除速 度瓶颈。
逻辑进行拆分的方法:
1. 简化输入条件:大部分FPGA都基于4输入 LUT(查找表) 的,如果一个输出对应的判断条件大于四输入的话就要由多个 LUT级联才能完成,这样就引入一级组合逻辑时延,要减少组 合逻辑,就要使输入条件尽可能的少,这样就可以级联的LUT 更少,从而减少了组合逻辑引起的时延。
还可以针对某信号节点到另一信号节点 的Tsu、Th、Tco、Tpd等其它时序参数 进行约束设置。 选择AssignmentsAssignment Editor, 例如Category中选择Tco,From选clk, To选74373的一个输出管脚,Value强制 设成0.01ns。
QuartusII进行时序约束设置(续)
Tsetup是触发 器的建立时间
Tco是触发器的 数据输出的延时
Tpd为时钟的延时
D1
Q1
D2
Q2
上升沿 统一采样
问题:
如果第一个触发器D1建立时间最大为Tsu1_max,最小 为Tsu1_min,组合逻辑的延时最大为Tdelay_max,最小为 Tdelay_min。问第二个触发器D2建立时间Tsu2与保持时间 Th2应该满足什么条件,或者是知道了Tsu2与Th2那么能容 许的最大时钟周期是多少? 这个问题是在设计中必须考虑的问题,只有弄清了这个 问题才能保证所设计的组合逻辑的延时是否满足了要求。
这时数据的保持时间必须满足:T-(T-Tco-Tdelay_min+Tpd)>=Th2 即 Tco+Tdelay_min-Tpd>=Th2 从上式也可以看出如果时钟延时Tpd=0,那么同样是要求Tco+Tdelay_min>Th2,但是 在实际的应用中由于数据的线路延时(Tco+Tdelay)远远大于触发器的保持时间即Th2所 以不必要关系保持时间。
符合要求的时序图
从图中可以看出如果: T-Tco-Tdelay>Tsu2 即: Tdelay< T-Tco-Tsu2 那么就满足了建立时间的要求,其中T为时钟的周期,这种情况下第二个触发器就 能在第二个时钟的升沿就能稳定的采到D2,时序图上图所示。
组合逻辑的延时过大时序不满足要求
如果组合逻辑的延时过大,使得T-Tco-Tdelay过小,那么将不满足要求,第二个触发器 在第二个时钟的升沿将采到的是一个不定态,如上图所示,这时电路将不能正常的工 作。 因此,可以推出保证D2正常工作的条件是:T-Tco-Tdelay_max>=Tsu2 【总结】: D2的建立时间与保持时间与D1的建立与保持时间是没有关系的,而只和D2前面的组合
在一个设计中Tsu2和Tco都是由器件决定的固定值,可 控的也只有Tdelay也就是输入端组合逻辑的延时,所以通过 尽量来减小Tdelay就可以提高系统的工作时钟。为了达到减 小Tdelay在设计中可以用下面不同的几种方法综合来实现。
方法1:通过改变走线的方式来减小延时
以altera的器件为例,我们在quartus里面的timing closure floorplan可以看到有很多条条块块,我们可以将条条块块按行和 按列分,每一个条块代表1个LAB,每个LAB里有8个或者是10个 LE。它们的走线时延的关系如下:同一个LAB中(最快) < 同 列或者同行 < 不同行且不同列。我们通过给综合器加适当的约束 (约束要适量,一般以加5%裕量较为合适,比如电路工作在 100Mhz,则加约束加到105Mhz就可以了,过大的约束效果反而 不好,且极大增加综合时间)可以将相关的逻辑在布线时尽量布 的靠近一点,从而减少走线的时延。 (底层,依赖芯片资源,微调和优化----不推荐)
两种情况需要考虑
第一种情况:假设时钟的延时Tpd为零 第二种情况:时钟存在延时
第一种情况:假设时钟的延时Tpd为零
假设时钟的延时Tpd为零,其实这种情况在FPGA设计 中是常常满足的,由于在FPGA 设计中一般是采用统 一的系统时钟,也就是利用从全局时钟管脚输入的时 钟,这样在内部时钟的延时完全可以忽略不计。这种 情况下不必考虑保持时间,因为每个数据都是保持一 个时钟节拍同时又有线路的延时,也就是都是基于 CLOCK的延迟远小于数据的延迟基础上,所以保持时 间都能满足要求,重点是要关心建立时间,此时如果 D2的建立时间满足要求那么时序图应该如下图所示。
逻辑进行拆分的方法(续):
5. 状态机的状态过多时,进行分拆简化,做成分层次状态机级联:如果状态 机的状态过多,它的状态译码逻辑将非常之巨大,这又极有可能是设计中 的关键路径,必须进行改进以提高工作频率。但是,普通的流水分隔方式 很难适用于状态机,我们该怎么处理呢?还是老思路,减少组合逻辑。我 们可以对状态的输出进行分析,对它们进行重新分类,并根据这个重新定 义成一组组小状态机,通过对输入进行选择(case语句)并去触发相应的小 状态机,从而实现了将大的状态机切割成小的状态机。在ATA6的规范中 (硬盘的标准),输入的命令大概有20十种,每一个命令又对应很多种状 态,如果用一个大的状态机(状态套状态)去做那是不可想象的,我们可 以通过case语句去对命令进行译码,并触发相应的状态机,这样做下来这 一个模块的频率就 可以跑得比较高了。
因而明确FPGA设计中决定系统时钟 的因素,尽量较小时钟的延时对保证设 计的稳定性有非常重要的意义。
如果是第一次编译或再次编译前没有进 行管脚分配,则QuartusII将自动分配管 脚并进行优化。 自动分配管脚的查看方法: ProcessingCompilation Report 再点击Fitter下面的Pin-Out File,就可看 到自动分配的管脚情况
专题2 数字逻辑的时间约束
一、时钟信号的时延Tpd
二、数据信号的建立时间Tsu和保持时间Th
三、如何提高同步系统中的工作时钟 四、不同时钟域之间的同步
一、 时钟信号的时延Tpd
时钟是整个电路最重要、最特殊的 信号,系统内大部分器件的动作都是在 时钟ຫໍສະໝຸດ Baidu跳变沿上进行,这就要求时钟信 号时延差要非常小,否则就可能造成时 序逻辑状态出错;
4. 状态机结构标准化:一般包含三个模块,一个输出模块,一个决定 下个状态是什么的模块和一个保存当前状态的模块。避免过大的组 合逻辑。
逻辑进行拆分的方法(续):
组成三个模块所采用的逻辑也各不相同。输出模块通常既包含 组合逻辑又包含时序逻辑;决定下一个状态是什么的模块通常由组 合逻辑构成;保存现在状态的通常由时序逻辑构成。
小结
综上所述,如果不考虑时钟的延时那么只需 关心建立时间,如果考虑时钟的延时那么更需关 心保持时间。 那么基于前述知识,在FPGA设计中如何提 高同步系统中的工作时钟?
三、如何提高同步系统中的工作时钟
从上面的分析可以看出同步系统时对D2建立时间Tsu2的 要求为(不考虑Tpd): T-Tco-Tdelay_max>=Tsu2 易得 T>=Tsu2+Tco+Tdelay_max (Tsu2为D2的建立时间,Tdelay_max为组合逻辑延时的最大值)
从图中可以容易的看出对建立时间放宽了Tpd,所以D2的 建立时间需满足要求: T-Tco-Tdelay_max+Tpd >=Tsu2
时钟存在延时且保持时间不满足要求
由于建立时间+保持时间之和是稳定的一个时钟周期,如果时钟有延时,同时数据的延时也 较小那么建立时间必然是增大的,保持时间就会随之减小,如果减小到不满足D2的保持时间 要求时就不能采集到正确的数据,如上图所示。
逻辑进行拆分的方法(续):
总结:提高工作频率的本质就是要减少寄存器到 寄存器的时延,最有效的方法就是避免出现大的 组合逻辑,也就是要尽量去满足四输入的条件, 减少LUT级联的数量。我们可以通过加约束、流 水、切割状态的方法提高工作频率。
QuartusII进行时序约束设置
AssignmentsSettings中选择 Timing Analysis SettingsClassic Timing Analyzer Settings 可以设置全局Tsu、Tco、Tpd、Th以及 Clock Settings、Individual Clocks的设置。
第二种情况:时钟存在延时
第二种情况如果时钟存在延时,这 种情况下就要考虑保持时间了,同时也 需要考虑建立时间。时钟出现较大的延 时大多是采用了异步时钟的设计方法, 这种方法较难保证数据的同步性,所以 实际的设计中很少采用。 此时如果建立时间与保持时间都满 足要求那么输出的时序如下图所示。
时钟存在延时但满足时序