Day1
目录
文章目录
0、建立时间和保持时间
0.1 定义
-
建立时间 Tsu:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间。
建立时间决定了该触发器之间的组合逻辑的最大延迟。
-
保持时间 Th:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的时间。
保持时间决定了该触发器之间的组合逻辑的最小延迟
0.2 计算方法
建立时间需要满足:
T
c
l
k
≥
T
c
q
+
T
s
e
t
u
p
+
T
c
o
m
b
T_{clk} ≥ T_{cq} + T_{setup} + T_{comb}
Tclk≥Tcq+Tsetup+Tcomb
保持时间需要满足:(跑得不能太快,以免数据被冲刷掉)
T
c
q
+
T
c
o
m
b
≥
T
h
o
l
d
T_{cq}+T_{comb}≥T_{hold}
Tcq+Tcomb≥Thold
第二个时钟沿到来时,D2采集数据 data,同时 D1 在采集数据 new data,所以 data 的尾部在第二个时钟沿到来时开始从 D1 的输入端开始向前传输,经过 Tcq 和 Tcomb 后到达 D2的输入端,所以第二个时钟沿到来之后 data 稳定的时间为Tcq+Tcomb。
计算slack:
- setup slack:Tclk - Tcomb - Tsetup - Tcq = Tslack
- hold slack: Tcq + Tcomb - Thold = Tslack
0.3 解决办法
对于建立时间违例的解决办法
- 降低时钟频率,即增大时钟周期
- 再时钟路径上加缓冲器(buffer),让时钟晚到来。
- 更换具有更小器件延迟的触发器。
- 组合逻辑优化或插入寄存器,缩短关键路径。
对于保持时间违例的解决办法
- 在数据路径上插 buffer
- 更换具有更大器件延迟的触发器
- 优化时钟路径,让时钟更早到来。
可以看出,保持时间和建立时间基本是相反的。但是保持时间与时钟周期无关
0.5、锁存器Latch和触发器flip-flop
锁存器是一种电平敏感的储存电路。其优缺点如下:
- 优点:
- 面积比ff小
- 速度比ff快
- 缺点:
- 电平触发,非同步设计,很难保证没有毛刺
- latch将静态时序分析变得极为复杂
触发器是边沿触发的存储电路。其优缺点如下:
- 优点:
- 边沿触发,同步设计
- STA分析简单
- 缺点
- 面积较大,消耗的门电路较多
1、亚稳态
1.1 亚稳态理论
亚稳态是由于违背了触发器的建立和保持时间而产生的(多发生于跨时钟传播)。 设计中任何一个触发器都有特定的建立和保持时间,在时钟上升沿前后的这段时间窗口内,数据输入信号必须保持稳定。如果信号在这段时间发生了变化,那么输出将是未知的或者成为“亚稳态。
1.2 亚稳态窗口
建立时间+保持时间。一般来讲,工艺越好,所需的建立时间和保持时间就越少,那么,发生亚稳态的概率就越低。
1.3 亚稳态公式
亚稳态窗口由建立时间和保持时间决定,亚稳态窗口越小,器件进入亚稳态的概率越小。
平均无故障时间:
1
故障率
=
M
T
B
F
1
=
e
(
t
r
/
τ
)
W
f
c
f
d
\frac{1}{\bold{故障率}}=MTBF_{1}=\frac{e^{(t_{r}/\tau)}}{Wf_{c}f_{d}}
故障率1=MTBF1=Wfcfde(tr/τ)
M T B F 2 = e ( t r / τ ) W f c f d × e ( t r / τ ) MTBF_{2}=\frac{e^{(t_{r}/\tau)}}{Wf_{c}f_{d}} × {e^{(t_{r}/\tau)}} MTBF2=Wfcfde(tr/τ)×e(tr/τ)
tr : 亚稳态最大分辨时间,是指触发器能够保持亚稳态输出,并不会引起故障的时间(从时钟沿开始)
W: 亚稳态窗口
fc = 时钟频率
fd =异步信号边沿频率 (降低异步频率可以减小亚稳态发生概率)
增大MTBF:增加同步寄存器链的长度,提高设计的时序裕量
1.4 避免亚稳态
当违背建立时间、保持时间时,亚稳态就会出现。以下条件可能会发生:
- 输入信号是异步信号。(异步复位信号)
- 时钟偏移高于容限值。
- 信号在两个不同频率或者相同频率但是相位和偏移不同的时钟域下的跨时钟域工作。
- 组合延迟使触发器的数据输入在亚稳态窗口内发生变化(不满足时序要求)。
亚稳态是不能根除的,但是可以减小亚稳态发生的概率。
1.4.1、对异步信号进行同步处理
①. 使用多级同步器
使用两级以上寄存器采样可以有效地减少亚稳态继续传播的概率。原理是使第一个触发器的输出端存在亚稳态,经过一个Clk周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。理论上如果再添加一级寄存器,使同步采样达到3级,则末级输出为亚稳态的概率几乎为0。
②. 使用时钟倍频电路的多级同步器
解决多级同步器花费时间较长的局限
③ 采用响应更快的触发器
④ 改善时钟质量,用边沿变化快速的时钟信号
⑤ 采用FIFO对跨时钟域数据进行缓冲设计
FIFO具体设计见Day2
2、时钟与复位
2.1 同步设计
在同步设计中,由单个主时钟和单个主置位/复位驱动设计中所有的时序期间。
- 避免使用行波计数器
-
避免使用门控时钟
时钟线上的门控单元会导致时钟偏移,并会引入尖峰脉冲作用于触发器。门控时钟的设计在综合后会出现问题。
- 避免双边沿或者混合边沿时钟
- 避免触发器驱动另一个触发器的异步复位端
第二级触发器的输出不仅仅只受时钟边沿的影响,这违背了同步设计的原理。此外,该电路还包含第二级触发器时钟和复位之间 的潜在竞争冒险。
-
避免在设计中出现组合环路
- 可以通过插寄存器打断组合环路
-
避免数字设计中的延迟链(反相器链)
-
避免使用异步脉冲产生器
-
使用同步的方法产生脉冲
这种方案也被称为上升沿检测
-
module edge_detect(
input clk,
input nrst,
input data,
output pose_edge,
output nege_edge,
output both_edge
)
reg [1:0] data_r;
always@(posedge clk, negedge nrst) begin
if(!nrst) begin
data_r <= 2'b00;
end
else begin
data_r <= {data_r[0],data};
end
end
assign pose_edge = (~data_r[1]) & data_r[0];
assign nege_edge = data_r[1] & (~data_r[0])
assign both_edge = data_r[1] ^ data_r[0];
endmodule
2.2 时钟方案
- 设计者应该尽可能避免在内部产生时钟,因为操作不当,它会导致设计功能和时序问题。
- 如果非使用不可,那么应该在时钟产生逻辑后插入寄存器。遮掩就能很大的规避毛刺的问题。
实际上,大部分设计可以规避分频时钟的触发。比如说,不直接使用分频时钟,而是使用分频逻辑产生一个使能信号,触发仍旧使用之前的时钟。
- 分频时钟
- 对主时钟分频
- 时钟应该用寄存器产生(时序输出)
- 尽量避免行波计数器产生时钟
- 但是,功耗较高的系统很适用(门少)。
- 多路时钟
- mux选择时钟(会有时钟偏移的)
- Clock Gating(门控时钟)
Clock Gating是一种减少功耗的有力手段。
2.3 门控时钟方法学
同步设计中的三大功耗来源:
- 在每个时钟沿变化的组合逻辑所产生的功耗
- 由触发器产生的功耗
- 设计中时钟树产生的功耗
时钟树几乎消耗了整个芯片功耗的50%,因此最好始终在根部产生或关闭时钟,以使整个时钟树关闭。
2.3.1. 不含锁存器的门控时钟电路
这种电路要求控制信号EN要拉高一整个CLK点高电平周期,不然,时钟的高电平周期将被截断
2.3.2. 基于锁存器的门控时钟电路
latch + AND gating
由于锁存器能够捕捉到使能信号并使它保持到完整的时钟脉冲,因此使能信号只需要在时钟上升沿附近保持稳定即可。
latch + OR gating
2.4 复位信号的设计策略
2.4.1 同步复位设计
always @ (posedge clk) begin
if(!rst_n) begin
out <= 1'b0;
end
else if (load) begin
out <= in;
end
end
仿真器不能分辨同步设计的复位信号,可能会综合出图15这样的电路,当load状态为x态时,就没办法复位电路。
为了避免这种情况,要通过综合提供的编译指令,告知综合工具指定的信号是同步复位信号。综合工具会将该信号”拉“得尽可能接近触发器,以避免初始化问题得发生。
优点:
- 同步复位保证电路100%同步。
- 同步复位会综合为更小得触发器,特别在该复位信号被触发器得输入逻辑门控时。暂时不太懂
- 同步复位确保复位只发生在有效时钟沿。时钟可以作为过滤掉毛刺得手段。
- 在一些设计中,复位由一组内部条件产生。这是推荐同步复位,可以滤掉毛刺。
缺点:
- 不是所有ASIC库都带有内置得同步复位触发器。
- 复位由组合逻辑产生或经过多级组合电路时,会出现潜在问题。x态
- Clock Gating电路中,复位信号发出时,时钟可能关闭,就不能使用同步复位。这时只能使用异步复位,并且在时钟恢复前移除复位信号。
2.4.2 异步复位设计
always @ (posedge clk or negedge rst_n) begin
if(!rst_n) begin
out <= 1'b0;
end
else if (load) begin
out <= in;
end
end
优点:
- 保证数据路径的干净
- 不管有没有时钟都能复位
缺点:
- DFT时,不能直接被I/O引脚驱动
- 异步过程可能产生亚稳态,例如恢复时与时钟沿太近(异步复位,同步释放)
- 板级或系统复位产生噪声和毛刺引发伪复位(延时过滤以解决 )
2.4.3 异步复位,同步释放
所谓异步复位同步释放,就是在rst_n信号为低时,立刻进行复位,即复位信号与时钟相互独立;而rst_n信号由低到高释放时,为了防止亚稳态的出现,将rst_n信号用DFF向后延一周期,外部复位信号不会在出现释放时与clk信号竞争,整个系统将与全局时钟clk信号同步
这里的第二个触发器用于移除由于异步撤销的复位信号与时钟上升沿过于接近所导致的亚稳态。
module sync_async_reset(
input clk,
input rst_n_i,
output rst_n_sync
);
reg rst_n_1;
reg rst_n_2;
wire rst_n_sync;
always@(posedge clk or negedge rst_n_i) begin
if(!rst_n_i) begin
rst_n_1 <= 1'b0;
rst_n_2 <= 1'b0;
end
else begin
rst_n_1 <= 1'b1;
rst_n_2 <= rst_n_1;
end
end
assign rst_n_sync = rst_n_2;
endmodule
参考文献
Mohit Arora. 硬件架构的艺术:数字电路的设计方法与技术[M].