仅对英特尔可见 — GUID: mwh1409959560537
Ixiasoft
2.3.1.1. 使用同步复位
由于彼此同步的时钟启动并锁存复位信号,因此可以轻松确定数据到达时间和所需数据时间,以进行适当的slack分析。同步复位更易于与基于周期的仿真器一起使用。
复位信号可以通过两种方法到达寄存器:通过输入数据进行门输入(being gated in),或者通过LAB范围内的控制信号(synclr) 。如果使用第一种方法,那么可能会给电路增加额外的门控延迟来支持复位信号,这会导致增加的数据到达时间,并对setup slack产生负面影响。第二种方法依赖于LAB中到每个寄存器的专用布线,但这比异步复位到同一寄存器的速度慢。
以下示例显示了对外部同步复位进行的必要修改。
外部同步复位的Verilog HDL代码
module sync_reset_ext (
input clock,
input reset_n,
input data_a,
input data_b,
output out_a,
output out_b
);
reg reg1, reg2
assign out_a = reg1;
assign out_b = reg2;
always @ (posedge clock)
begin
if (!reset_n)
begin
reg1 <= 1’b0;
reg2 <= 1’b0;
end
else
begin
reg1 <= data_a;
reg2 <= data_b;
end
end
endmodule // sync_reset_ext
以下示例显示了外部同步复位的约束。由于外部复位是同步的,您只需要通过-max和-min的set_input_delay约束对reset_n信号作为一个正常输入信号进行约束。
外部同步复位的SDC约束
# Input clock - 100 MHz
create_clock [get_ports {clock}] \
-name {clock} \
-period 10.0 \
-waveform {0.0 5.0}
# Input constraints on low-active reset
# and data
set_input_delay 7.0 \
-max \
-clock [get_clocks {clock}] \
[get_ports {reset_n data_a data_b}]
set_input_delay 1.0 \
-min \
-clock [get_clocks {clock}] \
[get_ports {reset_n data_a data_b}]
更常见的是,进入器件的复位是异步的,并且必须在内部同步后才能发送到寄存器。
内部同步复位的Verilog HDL代码
module sync_reset (
input clock,
input reset_n,
input data_a,
input data_b,
output out_a,
output out_b
);
reg reg1, reg2
reg reg3, reg4
assign out_a = reg1;
assign out_b = reg2;
assign rst_n = reg4;
always @ (posedge clock)
begin
if (!rst_n)
begin
reg1 <= 1’bo;
reg2 <= 1’b0;
end
else
begin
reg1 <= data_a;
reg2 <= data_b;
end
end
always @ (posedge clock)
begin
reg3 <= reset_n;
reg4 <= reg3;
end
endmodule // sync_reset
SDC约束与外部同步复位相似,不同之处在于输入复位是异步的,因此无法对其进行约束。使用set_false_path语句剪切输入路径,以避免将这些路径被视为不受约束的路径。
内部同步复位的SDC约束
# Input clock - 100 MHz
create_clock [get_ports {clock}] \
-name {clock} \
-period 10.0 \
-waveform {0.0 5.0}
# Input constraints on data
set_input_delay 7.0 \
-max \
-clock [get_clocks {clock}] \
[get_ports {data_a data_b}]
set_input_delay 1.0 \
-min \
-clock [get_clocks {clock}] \
[get_ports {data_a data_b}]
# Cut the asynchronous reset input
set_false_path \
-from [get_ports {reset_n}] \
-to [all_registers]
同步复位的一个问题是它们相对于同步器触发器的异步输入上的短脉冲(小于一个周期)的行为。这可能是不利的,因为异步复位需要至少一个周期宽的脉冲宽度以保证被第一触发器捕获。但是,这也可以看作是一个优点,因为该电路提高了抗噪能力。异步输入上的杂散脉冲被第一个触发器捕获的机会较小,因此这些脉冲不会触发同步复位。在某些情况下,您可能希望进一步提高抗噪能力,并拒绝宽度小于n个周期的任何异步输入复位,以消除异步输入复位的抖动。