芯片验证 后仿 时序检查 specify

1、setup:$setup (data_event, reference_event, limit, notifier);
当reference_event time - limit < data_event time < reference_event time时,就会报告setup time violations。

$setup (data_event, reference_event, limit, notifier);
data_event:表示需要满足建立时间约束的数据事件(通常是寄存器或信号的变化)。

reference_event:是参考事件,通常是时钟的上升沿或下降沿,用于参照建立时间的时间基准。

limit:是建立时间的上限,表示在参考事件发生之前,数据事件必须已经稳定。

notifier:是一个可选参数,用于指定一个任务或过程,以便在发生违规时进行通知

module example (
  input wire clk,
  input wire data,
  output reg result
);

  always @(posedge clk) begin
    // 假设 result 寄存器在时钟上升沿变化
    result <= data;
  end

  // 设置建立时间约束,要求 data 在时钟上升沿之前至少保持稳定 1 个时间单位
  $setup (data, posedge clk, 1);

endmodule

在这个例子中,$setup 用于确保在时钟上升沿发生之前,输入信号 data 已经稳定,至少保持 1 个时间单位。

当设计进行时序分析时,如果发现建立时间约束违规(data_event 发生在 reference_event time - limit 之前),工具会报告相应的错误或警告,以提示设计人员需要调整时序约束或电路设计

2、hold: $hold (reference_event, data_event, limit, notifier);
当reference_event time < data_event time < reference_event time + limit时,就会报告hold time violations

$hold (reference_event, data_event, limit, notifier);

reference_event:表示参考事件,通常是时钟的上升沿或下降沿,用于参照保持时间的时间基准。

data_event:表示需要满足保持时间约束的数据事件(通常是寄存器或信号的变化)。

limit:表示保持时间的上限,即在参考事件发生之后,数据事件必须在指定的时间内保持稳定。

notifier:是一个可选参数,用于指定一个任务或过程,以便在发生违规时进行通知。

例如,以下是一个示例

module example (
  input wire clk,
  input wire data,
  output reg result
);

  always @(posedge clk) begin
    // 假设 result 寄存器在时钟上升沿变化
    result <= data;
  end

  // 设置保持时间约束,要求 data 在时钟上升沿之后至少保持稳定 1 个时间单位
  $hold (posedge clk, data, 1);

endmodule

在这个例子中,$hold 用于确保在时钟上升沿发生之后,输入信号 data 已经稳定,至少保持 1 个时间单位。

当设计进行时序分析时,如果发现保持时间约束违规(data_event 发生在 reference_event time + limit 之后),工具会报告相应的错误或警告,以提示设计人员需要调整时序约束或电路设计。

3、setup/hold:$setuphold (reference_event, data_event, setup_limit, hold_limit, notifier);
s e t u p h o l d 是 setuphold是 setupholdsetup和$hold两者的联合。例如:
$setuphold (posedge clk, negedge d, 2, 1, notifier);
(建立时间最小为2,保持时间最小为1。
d的下降沿时刻最晚需要在 clk的上升沿 - 2 时刻到来,否则报违例。
d的下降沿需要在 clk的上升沿到来之后最少保持 1 个时间单位,否则报违例。)

等于
$setup (negedge d, posedge clk, 2, notifier); 和 $hold (posedge clk, negedge d, 1, notifier);
数据事件常常是数据信号,而参考事件常常是时钟信号。

$setuphold (reference_event, data_event, setup_limit, hold_limit, notifier);

reference_event:表示参考事件,通常是时钟的上升沿或下降沿,用于参照建立时间和保持时间的时间基准。

data_event:表示需要满足建立时间和保持时间约束的数据事件,通常是数据信号的变化。

setup_limit:表示建立时间的上限,即在参考事件发生之前,数据事件必须已经稳定。

hold_limit:表示保持时间的上限,即在参考事件发生之后,数据事件必须在指定的时间内保持稳定。

notifier:是一个可选参数,用于指定一个任务或过程,以便在发生违规时进行通知。

下面是一个示例

module example (
  input wire clk,
  input wire data,
  output reg result
);

  always @(posedge clk) begin
    // 假设 result 寄存器在时钟上升沿变化
    result <= data;
  end

  // 设置建立时间和保持时间约束
  $setuphold (posedge clk, negedge data, 2, 1, notifier);

endmodule

在这个例子中,$setuphold 用于同时设置建立时间和保持时间约束,确保在时钟上升沿发生之前,数据信号 data 已经稳定,并且在时钟上升沿之后保持稳定。这有助于确保逻辑门在正确的时间点对输入进行采样,以避免时序违规。

在时序分析中,如果发现建立时间或保持时间约束违规,工具会报告相应的错误或警告,以提示设计人员需要调整时序约束或电路设计。

4、recovery:$recovery (reference_event, data_event, limit, notifier);
当data_event time - limit < reference_event time < data_event time时,就会报告recovery time violations。

$recovery (reference_event, data_event, limit, notifier);

reference_event:表示参考事件,通常是某个时钟的上升沿或下降沿,作为时间基准。

data_event:表示需要满足恢复时间约束的事件,通常是某个数据信号的变化。

limit:表示恢复时间的上限,即在参考事件发生之后,数据事件必须在指定的时间内发生。

notifier:是一个可选参数,用于指定一个任务或过程,以便在发生违规时进行通知

module example (
  input wire clk,
  input wire data,
  output reg result
);

  always @(posedge clk) begin
    // 假设 result 寄存器在时钟上升沿变化
    result <= data;
  end

  // 设置恢复时间约束,要求 data_event 在时钟上升沿之后至少发生 2 个时间单位
  $recovery (posedge clk, negedge data, 2, notifier);

endmodule

在这个例子中,$recovery 用于确保在时钟上升沿发生之后,数据信号 data 的下降沿至少在 2 个时间单位内发生,以满足恢复时间约束。

当进行时序分析时,如果发现恢复时间约束违规(data_event 发生在 reference_event time - limit 之前),工具会报告相应的错误或警告,提示设计人员需要调整时序约束或电路设计。

5、removal: $removal (reference_event, data_event, limit, notifier);
当data_event time < reference_event time < data_event time + limit时,就会报告removal time violations。

$removal (reference_event, data_event, limit, notifier);

reference_event:表示参考事件,通常是某个时钟的上升沿或下降沿,作为时间基准。

data_event:表示需要满足去除时间约束的事件,通常是某个数据信号的变化。

limit:表示去除时间的上限,即在参考事件发生之前,数据事件必须在指定的时间内发生。

notifier:是一个可选参数,用于指定一个任务或过程,以便在发生违规时进行通知。

以下是一个简单的示例:

module example (
  input wire clk,
  input wire data,
  output reg result
);

  always @(posedge clk) begin
    // 假设 result 寄存器在时钟上升沿变化
    result <= data;
  end

  // 设置去除时间约束,要求 data_event 在时钟上升沿之前至少发生 2 个时间单位
  $removal (posedge clk, negedge data, 2, notifier);

endmodule

在这个例子中,$removal 用于确保在时钟上升沿发生之前,数据信号 data 的下降沿至少在 2 个时间单位内发生,以满足去除时间约束。

当进行时序分析时,如果发现去除时间约束违规(data_event 发生在 reference_event time + limit 之后),工具会报告相应的错误或警告,提示设计人员需要调整时序约束或电路设计。

6、notifier);
r e c r e m 是 recrem是 recremrecovery和$removal两者的联合。
$recrem (posedge clr, posedge clk, 2, 3, notifier); 等于
$recovery (posedge clr, posedge clk, 2, notifier); 和 $removal (posedge clr, posedge clk, 3, notifier);
数据事件常常是时钟信号,而参考事件常常是控制信号。

$recrem (reference_event, data_event, recovery_limit, removal_limit, notifier);

reference_event:表示参考事件,通常是某个控制信号的上升沿或下降沿,作为时间基准。

data_event:表示需要满足恢复时间和去除时间约束的数据事件,通常是时钟信号的变化。

recovery_limit:表示恢复时间的上限,即在参考事件发生之后,数据事件必须在指定的时间内发生。

removal_limit:表示去除时间的上限,即在参考事件发生之前,数据事件必须在指定的时间内发生。

notifier:是一个可选参数,用于指定一个任务或过程,以便在发生违规时进行通知。

以下是一个简单的示例:

module example (
  input wire clr,
  input wire clk,
  // 其他输入输出
);

  // 设置联合恢复时间和去除时间约束
  $recrem (posedge clr, posedge clk, 2, 3, notifier);

  // 其他模块逻辑

endmodule

在这个例子中,$recrem 用于同时设置联合恢复时间和去除时间约束,确保在控制信号 clr 上升沿发生之后,时钟信号 clk 的上升沿至少在 2 个时间单位内发生,并且在 clr 上升沿之前,clk 上升沿至少在 3 个时间单位内发生。

在时序分析中,如果发现恢复时间或去除时间约束违规,工具会报告相应的错误或警告,提示设计人员需要调整时序约束或电路设计。

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值