原创 TimeQuest使用和实例

2010-7-31 14:04 6740 9 10 分类: FPGA/CPLD

一.基本SDC实例


Synopsys设计约束(SDC)格式提供简单而又直接的方法来约束最简单和最复杂的设计。以下是最简单的SDC文件内容,约束设计中的所有时钟(端口和引脚)、输入I/O通道、输出I/O通道。


# Global fMAX of 100 MHz
# All detected clocks will be constrained with a 100 MHz requirement


derive_clocks -period "100MHz"


# Automatically apply a generate clock on the output of phase-locked loops (PLLs)


# This command can be safely left in the SDC even if no PLLs exist in the design


derive_pll_clocks


# Constrain the input I/O path


set_max_delay -from [all_inputs] -to [all_registers] 1


set_min_delay -from [all_inputs] -to [all_registers] 2


# Constrain the output I/O path


set_max_delay -from [all_registers] -to [all_outputs] 3


二.多周期排除


采用Synopsys设计约束(SDC)命令set_multicycle_path,您可以规定相对于目的时钟或者源时钟的允许时钟周期数,使数据能够在源寄存器和目的寄存器之间正确传输。这在以下情况时非常有用。


在图1的简单电路中,目的寄存器reg2需要两个多周期。寄存器reg2应在每个时钟周期对数据进行锁存 。


图1. 寄存器至寄存器多周期通道


78d2c9fb-d4b4-4deb-bd47-e9f91cba5b56.JPG



下面的SDC命令对上面电路的时钟进行约束。


#Constrain the base clock


create_clock -period 10.000 [get_ports clkin]


 


#Constrain the PLL output clock


create_generated_clock -source inst|inclk[0] -multiply_by 2 \-name inst|clk[1] inst|clk[1]


 


#Constrain the input and output ports


set_input_delay -clock clk_in 1.2 [get_ports data_in]
set_input_delay -clock clk_in 1.5 [get_ports async_rst]
set_output_delay -clock clk_in 2 [get_ports data_out]


#Apply a multicycle of 2 to registers reg1 and reg2
#By default the multicycle is relative to the destination clock waveform set_multicycle_path -to [get_pins reg2|*] 2



三.约束生成时钟


采用 Synopsys 设计约束 (SDC) 命令 create_generated_clock ,您可以建立任意数量以及任意深度的生成时钟。这在以下情况时非常有用 ( 参见图 1 和图 2) 。


在图 1 的简单电路中,寄存器 div2reg 输出需要一个生成时钟。


图1.2 分频生成时钟


a6d1f309-46ee-4952-b2d3-82d348608c6a.JPG



下面的 SDC 命令对上面电路的时钟进行约束。


#Constrain the base clock


create_clock -add -period 10.000 \
             -waveform { 0.000 5.000 } \
             -name clock_name \
             [get_ports clock]


#Constrain the divide by 2 register clock


create_generated_clock -add -source clock \
             -name div2clock \
             -divide_by 2 \
             -master_clock clock_name \
             [get_pins div2reg|regout]


在图2的简单电路中,寄存器 div2reg 输出需要一个生成时钟。


图2. PLL生成时钟


48edea6b-ab49-47c0-859d-56fae906dc22.JPG



下面的 SDC 命令对上面电路的时钟进行约束。


#Constrain the base clock


create_clock -add -period 10.000 \
             -waveform { 0.000 5.000 } \
             -name clock_name [get_ports clock]


#Constrain the output clock clock


create_generated_clock -add -source PLL_inst|INCLK[0] \
             -name PLL_inst|CLK[1] \
             -multiply_by 2 \
             -master_clock clock_name \
             [get_pins PLL_inst|CLK[1]]


四.TimeQuest时钟多路复用实例


TimeQuest分析器简化了利用Synopsys设计约束(SDC)命令来约束复杂时钟结构的过程,例如多路复用时钟。以下介绍三个实例电路,以及对其进行约束的SDC命令。


1 . 片外时钟多路复用


图 1 所示是一个简单的寄存器至寄存器电路,通过clk端口进行同步。


04fb5537-95e5-4ea2-8892-52f244bdf7da.JPG


图 1. 片外时钟多路复用



clk 端口由一个片外多路复用器驱动,该复用器在两个时钟之间进行选择,一个时钟的周期是10ns ,另一个是8ns。下面的SDC命令显示了怎样对clk端口分配多路时钟,以及怎样加入一个排除指示,使FPGA中的两个时钟决不会同时有效。


# Create the two clocks on the port


create_clock -name clk_100 -period 10 [get_ports clk]


create_clock -name clk_125 -period 8 [get_ports clk] -add


# Set the two clocks as exclusive clocks


set_clock_groups -exclusive -group {clk_100} -group {clk_125}


2 . 片内时钟多路复用


图2显示了FPGA中一个简单的寄存器至寄存器电路,它带有一个时钟多路复用器,含两个时钟端口:clkA和clkB 。


图2. 片内时钟多路复用


ca86d8a5-7c37-45ce-b502-32ce9c905f7f.JPG



假设周期是10ns的时钟驱动clkA端口,周期是8ns的时钟驱动clkB端口。下面的SDC命令显示了怎样分配时钟。该例与前面的例子相似,但是时钟分配给不同的端口。


# Create a clock on each port


create_clock -name clk_100 -period 10 [get_ports clkA]


create_clock -name clk_125 -period 8 [get_ports clkB] -add


# Set the two clocks as exclusive clocks


set_clock_groups -exclusive -group {clk_100} -group {clk_125}


3 . 交联时钟多路复用


图3中的时钟电路要复杂一些,FPGA中含有交联时钟多路复用。


图3. 交联时钟多路复用


5065f0cd-0c4d-4229-8a37-0b9f736b2de8.JPG



在这个例子中,必须使用set_clock_groups命令指明,时钟A和D、A和B、C和D、B和C决不会同时有效。


create_clock -name A -period 10 [get_ports clkA]


create_clock -name B -period 8 [get_ports clkB]


create_clock -name C -period 8 [get_ports clkC]


create_clock -name D -period 10 [get_ports clkD]


# cut paths between clocks


set_clock_groups -exclusive -group {A C} -group {B D}


五.约束最大斜移


TimeQuest时序分析器不支持规定最大斜移的单个约束,但是您可以规定相对于时钟端口的建立和保持时间,来约束源同步接口。下面的例子采用了图1中的简单源同步电路。


图1. 源同步接口图


7864e2fd-ab9a-43fa-9131-cc36378d77e3.JPG



约束输出总线的斜移


该实例对接口进行约束,在clk_out信号之后的2至3ns , data_out 总线的所有比特传输至片外。假设clk_in和clk_out周期为8ns。下面的等式和实例介绍了怎样建立时序要求,以满足图2中的时序关系。


图2. 源同步时序图


8126d56b-66ad-4a05-aeba-1bbf144060a2.JPG



这些等式显示了怎样为 set_output_delay –min 命令计算数值,该命令在目的时钟设置2ns保持要求。对于源时钟和目的时钟相同的保持要求计算, <latch> - <launch> = 0 。


latch - launch = 0 ns


output delay = latch - launch - 2 ns


output delay = -2 ns


这些等式显示了怎样为 set_output_delay 命令计算数值,该命令在目的时钟设置3ns建立要求。对于源时钟和目的时钟相同的建立要求计算, <latch> - <launch> = clock period 。


latch - launch = 8 ns


output delay = latch - launch - 3 ns


output delay = 5 ns


最后,下面的约束将所有计算合并在一起,为源同步输出加上时序要求。


set period 8.000


create_clock -period $period -name clk_in \


    [get_ports clk_in]


derive_pll_clocks


set_output_delay -add_delay \


    -clock ddr_pll_1_inst|altpll_component|pll|CLK[0] \


    -reference_pin [get_ports clk_out] -min -2.000 \


    [get_ports data_out*]


set_output_delay -add_delay \


    -clock ddr_pll_1_inst|altpll_component|pll|CLK[0] \


    -reference_pin [get_ports clk_out] \


    -max [expr $period - 3.000] [get_ports data_out*]


六.基本源同步输出


这些实例介绍了采用Synopsys设计约束(SDC)来约束源同步输出时序的两种方法。如果要约束源同步输出时序,必须采取方法规定相对于FPGA时钟驱动输出的输出延时。


生成时钟


您可以在 FPGA 时钟输出端口建立一个生成时钟。生成时钟自动计算与源时钟的延时。必须进行以下三种约束来约束图 1 中简单电路的输出。


·基本时钟驱动 clk_in 端口


·clk_out 端口的生成时钟


·data_out 端口的输出延时约束,相对于 clk_out 端口的生成时钟。


图1.带有生成时钟的源同步约束


6afc6742-4c44-4e4f-be67-af4702564158.JPG



以下 SDC 命令对输出进行约束。


# Define the input clock


create_clock -period 10 -name clk_100 [get_ports clk_in]


# Apply a generated clock to the output of the PLL


create_generated_clock -name pll_output \


    -source [get_pins inst|altpll_component|pll|INCLK[0]] \


    [get_pins inst|altpll_component|pll|CLK[0]]


# Apply a generated clock to the clk_out port


create_generated_clock -name clk_out \


    -source [get_pins inst|altpll_component|pll|CLK[0]] \


    [get_ports clk_out]


set_output_delay -clock clk_out 1.200 [get_ports data_out]


-reference_pin选项


-reference_pin选项是Altera专用SDC扩展,简化了对源同步输出的约束。通过set_input_delay/set_output_delay命令使用-reference_pin选项时,需要规定相对于网表中引脚和端口的输入或者输出延时。


-reference_pin选项自动包括特定端口或者引脚的时钟延时。对于源同步输出,输出延时是相对于输出时钟端口。在图2的电路中,clk_in端口和clk_out端口的延时包含在 -reference_pin选项中。


图2.带有-reference_pin 选项的源同步约束


b2c2c13b-61fb-49b8-a085-1257f40644c7.JPG



下面的SDC命令对输出进行约束。这个例子中不需要生成时钟,这是因为-reference_pin选项含有延时 。


# Define the input clock


create_clock -period 10 -name clk_100 [get_ports clk_in]


# Apply a generated clock to the output of the PLL


create_generated_clock -name pll_output \


    -source [get_pins inst|altpll_component|pll|INCLK[0]] \


    [get_pins inst|altpll_component|pll|CLK[0]]


# Set the output delay with the -reference_pin option


set_output_delay -clock pll_output -reference_pin [get_ports clk_out] \1.200 [get_ports data_out]


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户380721 2012-8-16 10:08

蛮不错的。
相关推荐阅读
用户211539 2015-09-28 16:21
FPGA采购和技术咨询:3044959554
Altera Xilinx  FPGA采购和技术咨询QQ:3044959554...
用户211539 2014-02-12 23:05
【博客大赛】Altera CycloneIV SerDes应用和仿真
Altera CycloneIV SerDes应用和仿真 KevinWan   基本原理 SerDes是SERializer和DESerializer的英文缩写,即串行收发器。 Altera SerD...
用户211539 2014-02-10 17:36
【博客大赛】基于FPGA的CIC以及补偿滤波器的设计
基于FPGA的CIC以及补偿滤波器的设计 KevinWan   CIC滤波器 CIC滤波器最早是由Hogenauer提出的,后来出现了不少改进的结构形式。CIC滤波器的特点: 只需要加法器,无需乘法器...
用户211539 2014-02-10 17:29
【博客大赛】SPWM的FPGA设计
SPWM的FPGA设计 KevinWan   SPWM:正弦波脉宽调制,将正弦半波N等分,把每一等分的正弦曲线与横轴所包围的面积用一个与此面积相等的等高矩形脉冲来替代。三角波载波信号U...
用户211539 2014-02-09 15:58
【博客大赛】Altera ALTMEPHY DDR2应用和仿真--基于QuartusII下例化的IP
Altera ALTMEPHY DDR2应用和仿真 --基于QuartusII下例化的IP KevinWan Modelsim仿真(本文是基于QuartusII下例化的IP,非Qsys) 编译如下库:...
用户211539 2014-02-09 15:55
Altera ALTMEPHY DDR2详细介绍(三)
Altera ALTMEPHY DDR2详细介绍(三) KevinWan 接口规则 配置DDR2 SDRAM控制器 DDR2 SDRAM的配置中的大部分参数都是相关数据手册中的参数,通常需要修改的包括...
EE直播间
更多
我要评论
1
9
关闭 站长推荐上一条 /1 下一条