EDN首页   博客首页

1

关于投票
TimeQuest就一定要搞定——图解Multicycle Path时序余量计算(未完待续)

在上一篇关于TimeQuest的文章中,我引用了Quartus II自带的一个示例。这个示例很有代表性——两个相位关系固定的时钟域、标准同步设计、复杂组合逻辑路径、调用了DSP资源。这个例子用来学习TimeQuest的用法和时序分析的基本原理是再好不过了。

除了上面提到的几个特点,这个例子中还包含了极为特殊的一种时序情况:跨时钟域的多周期时序分析。该示例中关于多周期的约束条件如下:

set_multicycle_path -end -setup -from [get_clocks {clk}] -to [get_clocks {clkx2}] 2
set_multicycle_path -end -hold -from [get_clocks {clk}] -to [get_clocks {clkx2}] 1

上面的约束中,clk是100MHz的时钟;clkx2是由clk二倍频得到的,频率是200MHz,与clk有0.5ns的相位差。根据上面的约束,从clk到clkx2的建立时间路径是2个clkx2周期,从clk到clkx2的保持时间路径是1个clkx2周期。

在跨时钟域时序分析中,只有当两个时钟之间有确定的时序关系时时序约束才有意义,这是本文要着重分析的内容;当两个时钟之间没有确定的相位关系时,约束二者之间的时序关系是没有意义的,针对这种情况,只能采用标准的跨时钟域数据传递处理,还要记得设置二者之间的时序路径为false_path。

 

图一、查看Multicycle约束为0的Hold Time时序余量计算

图二、查看Multicycle约束为1的Hold Time时序余量计算

图三、查看Multicycle约束为2的Hold Time时序余量计算

 

pdf

AN 481: Applying Multicycle Exceptions in the TimeQuest Timing Analyzer

系统分类: CPLD/FPGA
用户分类: Timing Analysis
标签: TimeQuest multicycle
来源: 原创
发表评论 阅读全文(384) | 回复(0)

2

关于投票
TimeQuest就一定要搞定——由QSF生成SDC

QSF是Quartus Settings File的缩写,包含了一个Quartus工程的所有约束,包括工程信息、器件信息、引脚约束、编译约束和用于Classic Timing Analyzer的时序约束。 riple

SDC是Synopsys Design Constraints的缩写,该文件用于TimeQuest Timing Analyzer的时序约束和定制报告。 riple

在TimeQuest中把Classic Timing Analyzer的约束语句转换为SDC是很容易的。在Constraints菜单下,执行Generate SDC File from QSF即可。 riple

 

以Quartus II安装路径下的\qdesigns\fir_filter项目为例,QSF文件中关于时序约束的语句如下: riple

# 约束clk为100MHz的时钟。 riple
set_global_assignment -name FMAX_REQUIREMENT "100 MHz" -section_id clocka
set_instance_assignment -name CLOCK_SETTINGS clocka -to clk

# 约束clkx2为clk的二倍频时钟,相位偏移0.5ns riple
set_global_assignment -name BASED_ON_CLOCK_SETTINGS clocka -section_id clockb
set_global_assignment -name DIVIDE_BASE_CLOCK_PERIOD_BY 2 -section_id clockb
set_global_assignment -name OFFSET_FROM_BASE_CLOCK "500 ps" -section_id clockb
set_instance_assignment -name CLOCK_SETTINGS clockb -to clkx2

# 约束所有从clk到clkx2的时序路径为Multicycle,取值2 riple
set_instance_assignment -name MULTICYCLE 2 -from clk -to clkx2

 

由该组QSF约束转换得到的SDC约束如下: riple

# Original Clock Setting Name: clocka
create_clock -period "10.000 ns" \
             -name {clk} {clk}
# Original Clock Setting Name: clockb
create_generated_clock -multiply_by 2 -offset "0.500 ns"  \
                       -source clk \
                       -name {clkx2} \
                       {clkx2}
# ** Multicycles
# QSF: -name MULTICYCLE 2 -from clk -to clkx2
set_multicycle_path -end -setup -from [get_clocks {clk}] -to [get_clocks {clkx2}] 2
set_multicycle_path -end -hold -from [get_clocks {clk}] -to [get_clocks {clkx2}] 1

从上面的例子可以看出,SDC比QSF简洁了些,在Multicycle的约束上也清晰明确了些。 riple

 

系统分类: CPLD/FPGA
用户分类: Timing Analysis
标签: TimeQuest qsf sdc
来源: 原创
发表评论 阅读全文(684) | 回复(1)
总共 , 当前 /