fpga数字电路设计基础李桥
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意此中使用了,所以建立时间是而不 是,这种映射结果减少了一级布线时延
Slice
Slice
Slice
Slice
Tcko Tnet
Tilo
Tnet
Tilo
Tnet
Tick
对高扇出的网络使用全局驱动
设计中,有高扇出的时钟使能、三态以及其他信号吗? 使用剩余的来驱动它们,以达到更小的相差和更高的性能 使用,时钟输入的相差可以小于1 使用的方法,实例化,将相应信号连接上去
计算速度时要考虑时钟相差的影响。
使用全局驱动,可以减少时钟相差。
A
3.1
D
Q
B
3.6
D
Q
C
3.3
D
Q
3.0
12.1
3.6
时延级数怎么算?
的时延通常 布线占50%,逻辑占50% 不要忘记了时钟到输出的时间 (,输出时间)和时钟到建
立的时间 (,建立时间) - 逻辑时延级数总会包括这两级。
P
数字电路设计基础
内容概述
一、同步设计 二、速度 三、资源
一、同步设计
什么是同步设计?
同步设计:上游数据到下游逻辑单元的传递 是通过时钟来同步的。
- 只要能满足时延要求,就可以确保下游逻 辑单元能正确采样到上游数据。
异步设计:上游数据发生变化的时机是不确 定的,甚至会出现中间态。
- 下游逻辑对上游数据的采样是不确定的, 会发生数据传递的错误。
; ;
<= ‘1’ “1111” ‘0’; 为组合逻辑输出
()
()=‘1’ 用作寄存器的时钟,为异步设计,禁止!
s <= ; ; ;
二、速度
中间态、时延和速度
当寄存器间数据传递的时延超过一个时钟周期,下游寄存器不能在下 一个时钟周期采样到本时钟周期给出的上游数据,出现错误。
当时钟来临时,寄存器输入发生变化,会采样到中间态。 - 建立时间不能被满足,就会采样到中间态,最后的采样结果不确定。 避免采样不到和采样到中间态的方法是满足时延要求 系统中的最大时延决定了系统的速度,也决定了系统能正常工作的最
布线更短
计数器
此处会产生毛刺,并且与 计数器的时钟无关
相应的代码
: (3 0);
:
;
:
;
()
()
; ;
<= + 1;
<= ‘1’ “1111” ‘0’;
为组合逻辑输出
()
()
; ;
使用组合逻辑输出作时钟,是异步设计,禁止!!! <= …
毛刺和同步设计
u 组合逻辑的毛刺通常总是存在,难于甚至无法消除 u 毛刺只有在异步设计中(连接到时钟、异步复位、
例1 : (1 0);
()
() ‘1’ “11” <= + 1; ; 组合逻辑用在寄存器的D端, 为同步设计,可行
; ;
例2
: (3 0);
:
;
s:
;
()
() ‘1’ <= + 1;
; ‘1’ 用在寄存器的端,为同步设计,可行
s <= ;
;
;
;
<= ‘1’ “1111” ‘0’; 为组合逻辑输出
异步设计的更多例子(禁止)
?
我的设计通过了时间仿真,但上板调试时不干活。时间仿真对不对? - 对于异步设计,通过了时间仿真也不一定能正常工作。 要小心,时钟信号和异步复位可别产生毛刺啊。
异步快速设中计的中触发,器设会计对非者常老窄要的毛想刺着信去号作消出除反时应。钟、异步复位 信号- 以及锁存器使能端的毛刺,但这一点很困难,甚 至不可能。 同步设计的一个简单原则: 永远不要将组合逻辑产生 的信号用作时钟、异步复位/置位。
门产生的时钟有问题
此例中,计数终点信号会产生毛刺,使用该信号作时钟会引 起问题。
- 布线更短,信号变化先到达与门。与门会“感知”到1111的
中间态。由于与门为电平敏感,会输出高电平的毛刺,从而 0引11起1 寄存器的误动作1。000 计数器的操作为:
0111
1111 1000 因为更快
此处的与门为电 平敏感
D
Q
CE
R
P
D
Q
CE
R
100-4的例子
3级逻辑的速度有多快? 布线时延大致可估算为与逻辑时延相等 下面的时延是,从经过输出的时延
D
Q
D
Q
布线 布线 + 布线 + +布线 +
1.372+1.057+0.738+1.057+0.738+1.057+0.738+1.405+ 0.765 = 8.927 或者 110
锁存器的使能端)才存在问题 u 在同步设计中,由于寄存器在时钟沿才会动作,只
要能满足时延要求,就能确保采样到稳定正确的结 果 u 毛刺无法消除,但其造成的问题却可以消除 u 采用同步设计并达到时延要求
同步设计方法中的生成和使用
D
Q3
Q2
Q1
Q0
D
Q
R
对照前面异步设计中生成和使用的例子
相应的代码
: (3 0);
速度估计
用逻辑时延作为网络时延的估计
已知系统的时钟频率,可以估计允许的逻辑深度
和功能需求相对照,修改设计以满足性能需要。
在50 下使用100-4的例子:
时钟周期
20
一级布线时延
- 5 ( + + ) 2.871
允许增加时延百度文库
=15
每增加一级的时延 允许增加的级数
/ 1.5~2 ( + ) 0.738 =7~10
:
;
:
;
(, )
‘1’ <= “0000”; <= ‘-’;
() <= + 1; “1110”
<= ‘1’;
; ; ;
<= ‘0’;
此复位为寄存器信号,为同步设计,可行
注意和异步设计中信号的比较 此处为寄存器输出
同步设计的更多例子(可行)
D Q1 Q0
Counter D TC
S
D
Q
CE
R
相应的代码
D Q1 Q0
R
Counter D TC
S
D
Q
CE
R
这些例子有什么问题 ?
相应的代码
例1 : (1 0);
(, )
“11” 组合逻辑用作寄存器的异步复位, 为异步设计,禁止!!! <= “00”;
() ‘1’ <= + 1; ;
; ;
例2
: (3 0);
:
;
s:
;
()
() ‘1’ <= + 1; ;
大时钟频率。
建立时间
DQ
DQ
D
DQ
Q 当建立时间不够时,会采样到中间态,最后的采样结果不确定。
时延中包括时钟相差
下面逻辑中,数据时延很小(最大3.6),如果时钟相差较小, 该逻辑可以跑200以上。
由于存在时钟相差, B到 C的实际时延为 3.3+12.1-3.6=11.8,在100下就不能工作。
为什么要做同步设计 ?
异步设计可能会产生以下问题:
两年前我做的设计,现在却不能工作。本身有什么变化吗? - 如果采用的是异步设计,能否工作有很多无法控制的随机因素。 我的设计原来可以工作,但将重新布线后,就不行了。怎么回事? - 异步设计也许在特定布线下能工作,但布线改变后就不行了。很危险吧