静态时序分析:SDC约束命令set_case_analysis详解

相关阅读

静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482


目录

指定值

指定端口/引脚列表

简单使用


set_case_analysis命令用于对电路进行特定模式的设定,例如对于一个工作在正常模式下的芯片,其扫描触发器的测试引脚应该设定为0;对于一个时钟选择器的选择引脚,在特定模式工作时应该为确定值。这个命令很有用,因为它可以帮助减少很多不必要的时序路径分析。

set_case_analysis指令的BNF范式(有关BNF范式,可以参考以往文章)为:

复制代码
set_case_analysis
    value port_or_pin_list
    //注:该命令的port_or_pin_list参数一定要放在value参数后

该命令可以指定端口或引脚处是恒定的1或0,或者端口或引脚处仅允许上升沿或下降沿。

指定值

参数value指定了端口或引脚处的确定值或转换方向。对于确定值,它可以是1、0、one或zero。对于转换方向,它可以是rising、falling、rise或fall。

指定端口/引脚列表

指定一个端口/引脚列表,包含端口对象或引脚对象,如果有多于一个对象,需要使用引号或大括号包围。

简单使用

首先我们可以解决静态时序分析:SDC约束命令create_clock详解一文中出现的时序路径混乱问题,原文的图7如本文图1所示,首先在输入端口clk_1和clk_2定义两个时钟。

复制代码
create_clock -period 10 [get_port clk_1]
create_clock -period 15 [get_port clk_2]

图1 有两个时钟驱动的电路单元

对于上面的电路,本意是b_reg触发器和c_reg触发器同时受时钟clk_1或时钟clk_2之一触发,但如果不使用set_case_analysis命令,在使用report_timing命令后会出现时钟clk_2和时钟clk_1之间的时序分析报告,如图2、图3所示,我们真正需要的是图4的时序报告。

图2 发射时钟是clk_2,捕获时钟时clk_1

图3 发射时钟是clk_2,捕获时钟时clk_1

图4 发射时钟是clk_2,捕获时钟是clk_2

下面我们使用set_case_analysis命令,固定选择端sel的信号为0,时序分析结果如图5和图6所示。

复制代码
set_case_analysis 0 [get_port sel]

图5 发射时钟和捕获时钟都是clk_2

图6 发射时钟和捕获时钟都是clk_2

下面我们使用set_case_analysis命令,固定选择端sel的信号为1,时序分析结果如图7和图8所示。

复制代码
set_case_analysis 1 [get_port sel]

图7 发射时钟和捕获时钟都是clk_1

图8 发射时钟和捕获时钟都是clk_1

set_case_analysis命令还会导致设定的值沿着时序路径向后传播,从而打断某些时序路径(使这些路径不能出现信号翻转),例如对于图9所示的电路图。

图9 一个简单的例子

首先在输入端口clk定义一个时钟。

复制代码
create_clock -period 10 [get_port clk]

此时如果直接使用report_timing命令,则t_reg和data_out_reg之间的时序路径会正常报告,如图10所示。

图9 两个触发器间的时序报告

现在我们使用set_case_analysis命令固定使能信号enable为0,这就使得与门U4的输出固定为0,无法翻转,因此t_reg和data_out_reg之间的时序路径被打断了,如图10所示。

图10 两个触发器间的时序路径被打断了

这就相当于编写Verilog代码时,直接将与门的一个输出引脚固定为0,这也会打断时序路径(假设电路没有被逻辑优化),如图11所示的电路图。

图11 编写代码时指定引脚值为0

在图11中,我们设法使得某些器件不被优化掉,并构造了一个奇怪的电路图。此时在逻辑上讲,与门的输出是一个固定值0,此时使用report_timing命令无法看到t_reg和data_out_reg之间的时序路径,如图12所示。

图12 两个触发器间的时序路径被打断了

但是我们再来看一下图13所示的电路图(假设电路没有被逻辑优化),可以看出与门U2的输出是一个固定值0,但是此时使用report_timing命令可以看到t_reg和data_out_reg之间的时序路径,如图14所示。这代表了,即使DC会考虑某些情况下电路的逻辑情况,但不是所有。

图13 与门U2的输出引脚值为0

图14 两个触发器间的时序报告

如果此时在编写Verilog代码时又将enable信号固定为1(假设电路没有被逻辑优化),则时序路径又会被打断,如图15所示。

图15 编写代码时指定引脚值为0

这代表着,如果在写Verilog时固定了某个电路中某个引脚或端口的信号值,则这个确定值也会沿着时序路径传播,并可能打断路径,但推荐使用set_case_analysis命令来完成这一目标。

最后要注意的是,确定值的传播会在到达时序路径终点而停止,并不会继续传播下去,比如图15中的data_out_reg到输出端口的时序路径并不会因为与门U2的输出为确定值0而被打断。

相关推荐
FPGA_小田老师11 小时前
FPGA基础知识(十):深入理解建立时间与保持时间违例
fpga开发·时序约束·建立时间违例·保持时间违例
贝塔实验室13 小时前
LDPC 码的度分布
线性代数·算法·数学建模·fpga开发·硬件工程·信息与通信·信号处理
javajenius1 天前
Quartus II下载安装教程Quartus II 18保姆级安装步骤(附安装包)
其他·fpga开发
颜子鱼1 天前
FPGA中复位信号的省略
fpga开发
cycf1 天前
面向模块的综合技术之过约束(十)
fpga开发
颜子鱼1 天前
FPGA-状态机架构
fpga开发
颜子鱼1 天前
FPGA-状态机
fpga开发
GateWorld1 天前
FPGA设计中的“幽灵信号:一条走线,两种命运——浅析路径延迟导致的逻辑错误
fpga开发
云雾J视界2 天前
RISC-V开源处理器实战:从Verilog RTL设计到FPGA原型验证
fpga开发·开源·verilog·risc-v·rtl·数字系统
我爱C编程2 天前
【仿真测试】基于FPGA的完整BPSK通信链路实现,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计
fpga开发·bpsk·帧同步·viterbi译码·频偏锁定·定时点