首页 > 其他分享 >(笔记)FPGA多周期路径及set_multicycle_path详解

(笔记)FPGA多周期路径及set_multicycle_path详解

时间:2024-03-14 11:22:53浏览次数:25  
标签:multicycle set FPGA clk setup path hold

默认情况下综合工具会把每条路径定义为单周期路径,即源触发器在时钟的任一边沿启动(launch)的数据都应该由目的触发器在时钟的下一上升沿捕获(capture)。

有的设计可能存在时序例外(timing exceptions),如多周期路径、虚假路径等。数据从起点到终点的传输时间需要一个时钟周期以上才能稳定的路径,这类路径被称为多周期路径。在设计中很多地方都有涉及多周期路径,比如当个两个触发器之间的逻辑如果一个周期执行不完,这种情况一般有两个解决方案:

①插入流水线使得组合逻辑打散 ;

②使用使能信号控制,几个周期读取一次数据。

方法2就需要设定multi-cycle path,方法2和1之间是有区别的。方法1数据的吞吐量更大,方法2牺牲了数据吞吐量,但是设计中有的地方对吞吐量没有要求是可以使用这种方法的。

 

一、set_multicycle_path命令
命令格式如下:

  set_multicycle_path

    path_multiplier

    [-setup|-hold]

    [-start|-end]

    [-from from_list]

    [-through through_list]

    [-to to_list]

  • path_multiplier:默认值setup时为1,hold时为0;
  • setup|hold:表明多周期路径设置是对setup(max_delay)或者是hold(min_delay),setup时默认移动capture_clk,hold时默认移动launch_clk;
  • start:表示强制移动的为start clock即launch clock;
  • end: 表示强制移动的为end clock即capture clock。
  • ps:当start clock和end clock同频时,不用指定start/end,因为移动哪一个都一样效果。

 

二、4种不同场景
1、同频同相
如下图所示,时钟上升沿对齐,且默认的STA检查情况为单周期:

 

 

此时的multicycle默认设置如下(单周期路径默认关系):

set_multicycle_path 1 -setup -from CLK1 -to CLK2

set_multicycle_path 0 -hold -from CLK1 -to CLK2

即默认情况下:setup检查是从launch_clk的一个上升沿到capture_clk的下一个上升沿,hold检查是从launch_clk的一个上升沿到capture_clk的捕获沿的前一个沿。

现进行设置:set_multicycle_path 2 -setup -from CLK1 -to CLK2 ,对应的时序检查变为(capture_clk右移(2-1)个周期):

 

 

此时hold检查还是默认设置,即跟随capture_clk向右移动1个period。

根据STA中的“Hold Relationship”,hold检查过于宽松,需要设置:

set_multicycle_path -hold 1 -from CLK1 -to CLK2

这样hold检查向后(左)移动(延迟)1个period,由于-hold默认移动launch_clk,也就是launch_clk向前(向右)移动了1个时钟周期(也可看做capture_clk向左移动了1个时钟周期),如下图(这种情景设置只适用于多周期采样,例如存在图中的使能信号Clock Enable):

 

 

 

补充:对于多周期路径,为什么要将保持检查沿恢复到初始位置?

对于上述clk的周期为T=4ns,现在若只设置set_multicycle_path 2 -setup -from CLK1 -to CLK2后,由于hold检查比setup检查往左一个时钟周期,则要求数据到达触发器的时间范围为:[4ns+Th,8ns-Ts],此时由于数据采集每2个时钟周期一次,这样对于保持关系过于苛刻,实际数据可到达的时间范围是[0ns+Th,8ns-Ts]。所以,可以设置set_multicycle_path 1 -hold -from CLK1 -to CLK2,这样使得数据到达触发器的时间范围变为上述范围(Th为保持时间,Ts为建立时间),这样多周期路径部分电路的优化范围就变大了。

 

2、同频异相
①capture_clk比launch_clk稍晚一点(0.3ns),默认检查关系如下:

 

 

此时时钟周期为4ns,建立检查为0.3ns过小,而保持检查3.7ns过于丰富,时序很难收敛,需设置如下(hold检查的多周期路径无需设置,可以满足):

set_multicycle_path 2 -setup -from CLK1 -to CLK2

 

 

 

②目的时钟超前发送时钟0.3ns

 

 

此时建立检查3.7ns,保持检查0.3ns,比较正常无需增加约束。

 

3、慢到快
默认检查关系(最悲观):

 

 

默认设置:

set_multicycle_path 1 -setup -end -from CLK1 -to CLK2

set_multicycle_path 0 -hold -start -from CLK1 -to CLK2

现将setup放松2个周期检查,设置如下:

set_multicycle_path 3 -setup [-end] -from CLK1 -to CLK2

此时-setup默认右移capture_clk,增加-end便于可读性。

 

 

此时为遵守严谨的保持关系,需设置如下:

set_multicycle_path 2 -hold -end -from CLK1 -to CLK2

 

 

此时注意:

①由于launch_clk和capture_clk的频率不一样,所以需要用-start/end来指定移动的clk,这样PT检查才不会出错。

②由于-hold默认向右移动launch_clk,现在加上-end后即为指定向左移动capture_clk。

 

4、快到慢
时钟关系如下图,且分析最悲观情况下的建立/保持关系:

 

 

此时默认设置还是:

set_multicycle_path 1 -setup -end -from CLK1 -to CLK2

set_multicycle_path 0 -hold -start -from CLK1 -to CLK2

现在放松2个周期检查,设置如下:

set_multicycle_path 3 -setup -start -from CLK1 -to CLK2

根据严谨的保持关系,需要设置hold检查如下,其中-hold参数默认向右移动launch_clk,但由于时钟频率的不同建议加上-start增加易读性:

set_multicycle_path 2 -hold [-start] -from CLK1 -to CLK2

 

 

5、总结

 

 

 


①-setup/hold参数默认分别向右移动EndClock/StartClock;

②为了将保持沿恢复到初始位置,保持因子比建立因子小1;(异相情况除外)

对于N倍频同步时钟:

③建立数字等于两个时钟频率比N;

④将较快的时钟指定为设置对象

⑤需要使用-start/end参数对应指定强制移动StartClock/EndClock,若与setup/hold参数默认相反,则被强制移动的时钟移动方向向左;

 

版权声明:本文为博主原创文章,原文链接:https://blog.csdn.net/Jackiezhang1993/article/details/119250446

 

标签:multicycle,set,FPGA,clk,setup,path,hold
From: https://www.cnblogs.com/tdyizhen1314/p/18072460

相关文章

  • Git进阶命令-reset
    之前有关Git,写过一片文章:Git五个常见问题及解决方法一、reset命令使用场景有时候我们提交了一些错误的或者不完善的代码,需要回退到之前的某个稳定的版本,面对这种情况有两种解决方法:解决方法1:修改错误内容,再次commit一次解决方法2:使用gitreset命令撤销这一次错误的commi......
  • FPGA交通信号灯设计报告(VHDL语言)
    FPGA的大作业我选择了交通灯控制系统的设计,此课程只有2个学分,因此只需要在相应软件仿真出结果即可。以下是我的设计报告,当时写的匆忙,没有对代码进行优化改进,但仿真结果是正确的,可以给大家提供一下思路。一、任务分析1.输入和输出2.多进程3.特殊情况4.注意二、quartus......
  • m基于FPGA的Alamouti编码verilog实现,包含testbench测试文件
    1.算法仿真效果 本系统进行了Vivado2019.2平台的开发,结果如下:   2.算法涉及理论知识概要        在无线通信领域,多天线技术是提高系统容量和可靠性的关键手段之一。Alamouti编码是空时编码(STC)的一种,它为两发射天线的系统提供了一种全速率、全分集的简单编码方......
  • Edu 12 --- Simple Subset -- 题解 (一个比较巧妙的思维算法题)
    SimpleSubset:题解:  思路解析:    题目要求任意两个数的和为质数,那我们最坏情况就是任意选择一个数,此时子集为最大。    如果子集中有两个奇数或者偶数,他们两个之和一定会被2整除,那么我们只能选择一奇一偶。    如果多个奇数都为1的话,他们两两......
  • STL中的set——洛谷P5250
     1.作用/与优先队列的区别(1)插入一个元素,自动排序,保证其内部元素有序(升序)。优先队列也可以做到这一点。(2)支持任意增删一个元素,而优先队列做不到这一点,这是两者其中一个区别。(3)使用set的前提是唯一键值对,保证了其内部没有重复元素,而优先队列内部同一元素可以有多个,这是两者......
  • FPGA的FIFO部分的知识点
    看的小梅哥的新视频,FIFO这边讲的不太清楚,换正点原子的fifo听一下。后面的以太网和HDMI有空也看一下正点原子的,主要是想快速看zynq的知识,而且现在学的很多都是模仿抄代码,真正自己来还是得工程中实际应用的时候才会使用学习FIFO,先入先出,像队列。常用于数据的缓存,因为数据的读写带......
  • 生物分子体系结构预测开源模型RoseTTAFold All-Atom的conda环境部署及使用
    欢迎浏览我的CSND博客!Blockbuater_drug…点击进入文章目录前言一、RoseTTAFoldAll-Atom(RFAA)是什么?二、安装步骤1.安装mamba(非必须的,conda也可以)2.下载RoseTTAFold-All-Atom3.创建conda环境并安装4.安装SE3T5.准备cs-blast6.安装signalp67.下载序列和模板......
  • 模板匹配——set_shape_model_clutter
    通过设置杂波,来准确定位要检测对象;如下图中未设置杂波情况下,匹配结果如(3);如图(4)设置杂波后,匹配结果如图(5)**Createashapemodel.*创建一个模型read_image(ImageModel,'/bga_gap/bga_gap_01.png')gen_circle(ROI,753.869,551.624,28.4027)reduce_domain(Image......
  • 从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型2
    目录1.模块的总体结构1.1从工作空间导入输入信号1.2FIR滤波器2.Subsystem3.MATLABFunction文章灵感来源于MATLAB官方免费教程:HDLCoderSelf-GuidedTutorial考虑到MATLAB官网的英文看着慢,再加上视频讲解老印浓浓的咖喱味,我决定记录利用MATLAB&Simulink&SystemGenerat......
  • 模版匹配——set_shape_model_param
    1.'min_contrast'最小对比度SetstheminimumcontrastoftheobjectinthesearchimagesfortheshapemodelModelID.Thereby,thevalueof'min_contrast'thatwasoriginallyset,e.g.withcreate_shape_model,isoverwrittenfortheshape......