我对于这个问题的理解是,建立时间,是在D触发器之前,需要进行组合逻辑计算的时间,包括线路的传输时间。
保持时间是指,当上升沿到达之后,需要多少时间保持数据的稳定,相关数据才能被稳定准确地输出。
在set_multicycle_path命令,需要明确两个概念,一个是setup requirement,建立时间需求。一个是hold requirement保持时间需求。建立时间需求很好理解,就是在源时钟控制寄存器到目的时钟寄存器之间传输数据的所用的时间。而然,一个源时钟发送数据的上升沿必须对应目的时钟接受数据的唯一一个上升沿。这就需要保持需求来维持。保持需要有以下两个原则:
1)当前发起沿发送的数据不能被前一个捕捉沿捕捉。
2)下一发起沿发送的数据不能被当前捕捉沿捕捉。
如下图所示,建立时间以及保持时间的组合,约束了目的时钟可以对数据进行捕捉的范围。
约束指令:
set_multicycle_path -from [get_clocks clk1] -to [get_clocks clk2] -setup -end 3
set_multicycle_path -from [get_clocks clk1] -to [get_clocks clk2] -hold -end 2
上述的两个约束,一个(-setup)是建立时间,一个(-holf)是保持时间。
-end以目的端口时钟作为时钟周期计数基准,如果是-start 表示以源时钟作为时钟周期计数标准。
原文链接:https://blog.csdn.net/lipf207/article/details/83012898
1.输入端口到FPGA内部时序单元的路径
2.FPGN内部时序单元间的路径
3. FPGA部序单元.到输出端口的路径
单元计时弧-单元输入引脚和输出引脚之间的计时弧。网络定时弧- 驱动器(输出引脚)和负载(输入引脚)之间的网络(线)的定时弧。
起点- 所有输入端口/引脚或时序单元的时钟端口/引脚都被视为起点。
终点- 顺序单元的所有输出端口/引脚或 D 引脚都被视为终点。
这里 就是setup time, 就是那个hold time。setup time和hold time对于一个触发器来说是固定的参数。也就是说要完成一次正常的数据锁存,数据必须要在setup time和hold time的时候保持稳定。在实际的电路当中一个触发器的运行周期必须满足:
这里只有 (传输延时)是可变的,与具体的电路结构设计有关。 传输的延时越短,FPGA可运行的时钟速率就越高。
检验 Setup是否满足要求,这边引入setup slack概念,只要setup slack的直大于零即setup检查满足要求,其计算公式如下:
setup slack = data required time - data arrival time
其中:
data required time = destination clock edge time + destination clock path delay - clock uncertainty- setup time
data arrival time = source clock edge time + source clock path delay + clock to output time + data path delay
公式代入可得到:
setup slack = ( destination clock edge time - source clock edge time) +(destination clock path delay - source clock path delay) - clock uncertainty - setup time - clock to output time - data path delay
= +( - )- - - -
在 Setup检查中source clock一定超前于destination clock.
、 可以通过时序约束确定其值, , 是时序单元的属性值,( - )在布局布线后其值也能确定,剩下 对 影响最大,一个设计Setup检查中的关键路径往往是 值最大的一条路径,影响其值有很多原因,如逻辑级数过多,扇出导致布线延时过大.
setup slack = data arrival time - data required time
其中:
data required time = destination clock edge time + destination clock path delay + clock uncertainty + setup time
data arrival time = source clock edge time + source clock path delay + clock to output time + data path delay
公式代入可得到:
setup slack = ( source clock edge time - destination clock edge time) + (source clock path delay - destination clock path delay) - clock uncertainty - setup time + clock to output time + data path delay
=
与Setup检查不同,在Hold检查下destination clock超前于source clock.在Setup检查中,Tdestination to source的值选取destination clock和l source clock相差最小的情况下进行分析而Hold检查中 Tsource to destination的值选取所有Setup关系分别进行分析,每一种 Setup关系对应有两种情况,然后选取所有情况中 的值大于计算对应的 :
a.取 Setup关系的前一个destination clock沿
b.取 Setup关系的destination clock沿
Vivado进行时序分析,对时钟的约束是必不可少的,设计中的时钟可分为一下几种:
Primary Clocks主时钟
Generated Clocks衍生时钟
Virtual Clocks 虚拟时钟。
1 Primary Clocks
主时钟一般是FPGA外部芯片如品振提供的时钟,通过FPGA引脚输入。Vivado进行时序分析时,以主时钟的源端点作为延时计算起始点Ons 点)。主时钟的约束命令如下:
create_clock -name <clock_name>-period <period>-waveform {<rise_time><fall_time>}[get_ports <input_port>]
2 Generated Clocks
衍生时钟是由设计内部产生,一般由时钟模块MMCM or PL或者逻辑产生,并且对应有一个源时钟,源时钟可以是系统的主时钟或者另外一个衍生时钟。约束衍生时钟时,除了定义周期,占空比,还需要指明与源时钟的关系。通过create_generated_clock命令约束衍生时钟,命令如下:
create_generated_clock -name<generated clock name>-source <master clock source pin or port>-divide_by <div_factor><pin_or_port>
3 Virtual Clocks
虚拟时钟是在FPGA设计不存在的时钟,但是FPGA与板上的其它芯片间有数据交互,属于FPGA 内部时序单元到输出端口的路径。芯片上的时钟并不是由FPGA提供,Vivado在进行这部分时序分析时并不知道芯片的时钟,因此需要定义一个虚拟时钟,然后约束输出端口的output delay。
约束虚拟时钟的命令也是create_clock,但是其不需要指定-source,如下指令:
create_clock -period 100.000 -name SCLK -waveform {0.000 50.000}
对数据时钟添加延迟add_delay进行设置。晶振内部振荡器产生的时钟频率fXTAL ≈114、285000000MHz,用户后续都无法更改。
晶振虽然可以在上电状态下通过I2C设置改变输出频率,但是重新上电后又会从Flash里加载出厂设置输出默认的上电频率。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)