精华内容
下载资源
问答
  • 2022-03-20 23:27:54

    (10)Vivado 异步时钟约束

    1 文章目录

    1)文章目录

    2)时序约束引言

    3)FPGA时序约束课程介绍

    4)Vivado 异步时钟约束

    5)技术交流

    6)参考资料

    2 时序约束引言

    1)什么是静态时序分析?

    通俗来说:在输入信号到输出信号中,因为经过的传输路径、寄存器、门电路等器件的时间,这个时间就是时序。开发工具不知道我们路径上的要求,我们通过时序约束来告诉开发工具,根据要求,重新规划,从而实现我们的时序要求,达到时序的收敛。

    2)什么是时序收敛?

    一个好的FPGA设计一定是包含两个层面:良好的代码风格和合理的约束。时序约束作为FPGA设计中不可或缺的一部分,已发挥着越来越重要的作用。毋庸置疑,时序约束的最终目的是实现时序收敛。时序收敛作为 FPGA设计的重要验证手段之一,是保证FPGA正常工作的必要条件。那么当时序无法收敛时我们应该采取怎样的措施呢?

    3 FPGA时序约束课程介绍

    1)FPGA时序基本约束方法;

    2)建立时间;

    3)保持时间;

    4)亚稳态;

    5)周期约束;

    6)输入输出延迟约束方法;

    7)时序例外约束方法;

    8)异步时钟约束方法;

    9)时钟服用约束方法;

    10&#x

    更多相关内容
  • 异步电路是我们在进行IC设计时候必须要跨越的一道坎,必须要掌握的基础知识。个人认为对异步电路的理解以及处理经验是衡量一个IC前端水平的重要指示。不过最可怕的是哪怕你想的再明白理解的再清楚,也还是可能会翻车...

    异步电路是我们在进行IC设计时候必须要跨越的一道坎,必须要掌握的基础知识。个人认为对异步电路的理解以及处理经验是衡量一个IC前端水平的重要指示。不过最可怕的是哪怕你想的再明白理解的再清楚,也还是可能会翻车,简单说异步电路堪称IC芯片出错重灾区。当然正因为如此,一般的IC设计中会把异步处理做单独的模块设计,需要进行异步处理时调用对应功能的module即可。

    下文综合了我自己对异步电路的理解和实操,书中所学技巧与经验以及网上其他大牛的总结讲解,我尝试用最易于理解掌握的方式进行表达也算是对自己所学的记录,如有侵权请告知立即删除。

    无论我们是去面试、和前端后端交流还是听大佬们聊天,总会听到“跨异步”“异步处理”“异步FIFO”“跨异步打拍”“异步电路”这些词没事就蹦出来,所以第一篇文章我们就来探讨下到底什么是异步电路。

     

    有异步就肯定有同步,基本含义上来说异步和同步都是针对时钟而言的。同步时钟sync是指时钟之间相位相对确定,异步时钟async是指时钟之间相位不确定。看到一些地方认为同步时钟sync是指时钟之间频率和相位都相对确定,异步时钟async是指时钟之间频率或相位不确定,也不能说没有道理吧。不过我坚持认为根源是在相位确不确定上,例如33M和100M时钟就一定不可能是同步时钟,因为无论如何做不到相位保持一致;而50M和100M时钟就有可能是同步时钟,因为相位可以保持一致。

    下面就是典型的异步电路结构。

    因此我们可以得出结论:频率不同不一定同步异步,同源时钟不一定同步异步,归根到底看有没有固定的相位。顺便多说一句,后端的大佬对于异步的理解跟前端偶尔有所出入,尤其是在进行时序收敛时候,典型的场景就是芯片子系统之间即使在同步时钟域,也会按照异步时钟域来进行时序收敛。

    还有一种特殊场景,即使一组寄存器都由同一时钟驱动,也可能存在异步问题,那就是异步复位的情景。我们我们知道复位可以区分为同步复位和异步复位(当然一般使用同步复位异步撤离或者同步复位同步撤离,这个就先不讨论了)。

    always @(posedge clk or negedge rst_n)

    always @(posedge clk)

    而对于同步复位,复位信号是不会放在敏感列表中的,因此在综合时会被综合成如图2的形式作为数据输入触发器,那么此时如果复位信号由异步时钟驱动,那么这个电路结构实际也构成了异步场景。

    有时钟就可以划分出一块时钟域,一个时钟域是指使用某一同步时钟驱动的逻辑单元(当然一般是指时序逻辑单元,非时钟驱动的器件先往后站啊)集合,这个集合中一般有什么东西呢?最常见的肯定就是我们总写的D触发器啦,当然还有处于同步时钟下的FIFO啊、SDRAM啊、引脚啊都能算进来,总之在某一同步时钟驱动的所有时序单元都算进来就好了。

    一个芯片多模块之间可能是同一时钟域(单时钟域)下的,也有可能是在异步时钟域(多时钟域)下的,我盲猜应该是多时钟域占大头吧,毕竟现在的芯片越做越大越做越复杂了。

    正是因为多时钟域的存在,才引出了信号的跨时钟域处理问题也就是我们要探究的异步电路种种,这个慢慢写吧。话说那天某孩子忽然问我,“既然跨异步有这么多问题,那为啥不用同一个时钟呢,省了多少事啊”,这个问题当时我是懵了一下。很多场景下跨异步是不可避免的或者说多时钟域是不可避免的,例如例如前后两个模块的吞吐能力不同,串并转换模块,本来信号就属于不同系统但是必须进行交互(例如cpu通过cpu接口读写芯片内部信号),为了功耗考虑尽量降低部时钟域分模块的时钟频率等。

    对于多时钟域的信号处理,必然是由发送时钟域(源时钟域)经过同步电路(同步器)到达接收时钟域(目的时钟域),这个过程可以称之为信号跨异步,电路结构称之为异步电路。

    展开全文
  • 用DC综合异步电路zz

    千次阅读 2016-02-19 23:18:00
    1177.entry用DC综合异步电路 一般来说是不能用同步电路的综合工具来综合异 步电路。同步电路会自动插入缓冲器,而这些缓冲器可能毁坏QDI电路的时序特性。然而手动生成门级网表又如何保证DRC能满足流片要求呢?在我...
    http://benjaminweber-space.spaces.live.com/Blog/cns!902D90E6B6C36ACF!1177.entry用DC综合异步电路

    一般来说是不能用同步电路的综合工具来综合异步电路。同步电路会自动插入缓冲器,而这些缓冲器可能毁坏QDI电路的时序特性。然而手动生成门级网表又如何保证DRC能满足流片要求呢?在我看来,为了满足max transition和maxcapacitence要求,缓冲器仍然是不可避免的。使用综合工具来综合异步电路仍然有可取之处。

    回到主题。在这个帖子里,我会讲一些用DC综合异步电路的基本问题:

    1. 异步元件库
      实际上这个并不是很重要。当然我们需要建一个基本的硬件元件库。对于4-phase的异步电路来说,同步电路的元件库就基本够用。比如说一个C-element就可以用如下的语句描述:
      assign Z = (I1&I2) | (I1&Z) |(I2&Z);
      这种方式看 起来很好,但是在后面会遇到问题。更好的方式是使用目标元件库来搭建一个C-element,比如:
      module c2 ( a0, a1, q );
      input a0;
      input a1;
      output q;
      AO222EHD U1 ( .A1(q), .A2(a0), .B1(q), .B2(a1), .C1(a0), .C2(a1),.O(q) );
      endmodule
      这样做的好处有两点:我们可以直接找到一个C-element的pin;在必要的时候可以使用dont_touch来保护C-element不被拆解。
    2. timing loop
      异 步电路有很多timing loop。无论是否设定延迟优化约束,这些timingloop都必须被打断。否则DC很可能会产生错误的结果或者使用过多的内存而产生内部错误。
      打断这些timingloop可以用set_disable_timing命令。以下给出了如何把所有C-element的反馈回路打断:
      foreach_in_collection celln  [get_references-hierarchical c2_*] {
      set_disable_timing [get_object_name $celln]/U1 -from A1 -to O
      set_disable_timing [get_object_name $celln]/U1 -from B1 -to O
      }
      这里我们使用get_references来获得所有的C-element。对于每一个C-element,从反馈pin到输出的时间计算都被禁止,这样一个C-element就不存在timing loop了。在这里也可以看到直接用目标原件搭建异步元件库的好处。
    3. 限制 buffer的使用
      元件库往往提供了不同驱动能力的缓冲器,从很小到很大。而实际的综合过程中,禁止使用驱动能力过小或过大的缓冲器往往能得到更好的时序并减少运行时间。驱动能力过小的缓冲器对时序没有太大的帮助,可能增大走线的难度同时增加了门数量(placement时间变长)。过大的缓冲器有较大的输入负载并有着较高的动态功耗。
    4. 限制max_transition和max_capacitence
      实际实验发现,即使没有设定任何延时约束,使用合适的DRC约束仍然能改变电路的速度性能。这里给出的建议是使用适中的max_transition和max_capacitence会得到较好的速度结果。
    5. 使用set_max_delay来约束延时
      显然在没有时钟的情况下我 们不能使用clock来约束电路。用virtualclock往往也是行不通的。异步电路的控制电路较为复杂,直接使用virtual clock意味着使用input port到outputport的简单约束。然而这种约束得到的关键路径往往和实际的关键路径相差甚远。用set_max_delay来设定更为细化的路径约束有更好的结果。需要指出的是,DC默认set_max_delay的起点不能是其他时序路径的中间点。也就是说,一旦一个pin被设为一个path的起点,那么它也被设上了disable_timing的属性。所以,用set_max_delay来打断timingloop也是一个有效的方法(在该约束的理解上,SoC encounter和ICC不同,所以最好使用ICC为布局布线工具)。
    6. 合理的约束
      所有的路径最好都有约束。这里包括关键路径和主要的反馈路径。但是他们有区别。对于关键路径我们需要它尽量得快,但是反馈路径,只要足够快就可以。所以在约束的时候,对于关键路径可以过约束,但是对于反馈路径,一定不能过约束。
    7. 使用不同的权重
      DC的slack计算是negtive_slack*weight。通过控制不同路径的weight,我们就能够告诉DC先解决那些路径的时序问题(DC先解决slack最大的路径)。设定不同路径的权重可以使用group_path命令。
    8. min library
      同步电路往往使用min_max分析。用max library分析setup,同时用minlibrary分析hold。对于异步电路来说,我们不需要分析hold问题(max_delay属于setup,min_delay属于hold)。这样我们就可以把min library换成typicallibrary。这样有一个好处,就是DC生成的sdf文件中,min_delay实际上是typ_delay。如果需要得到在typical环境下的速度性能,仿真的时候使用sdf的min delay就可以了。
    展开全文
  • VIVADO异步时钟约束之实例演示

    千次阅读 2021-07-27 18:27:22
    异步时钟约束首先需要对FPGA内部的时钟非常熟悉,然后,FPGA设计中,异步时钟之间已经经过异步时钟同步化处理,异步时钟约束可以提高编译器的编译效率,同时可实现FPGA布局布线的最优化。 示例演示 synthesis完成后...

    前言

    vivado在synthesis之后,需要对工程中的时钟进行约束,其中包括异步时钟的约束。
    异步时钟约束首先需要对FPGA内部的时钟非常熟悉,然后,FPGA设计中,异步时钟之间已经经过异步时钟同步化处理,异步时钟约束可以提高编译器的编译效率,同时可实现FPGA布局布线的最优化。

    示例演示

    synthesis完成后,打开综合设计,点击flow navigator中的report clock interaction(也可在tcl对话框中输入“report_clock_interaction -delay_type min_max -significant_digits 3 -name timing_1”命令),打开时钟交互窗口,观察FPGA设计中内部时钟之间的交互关系。如下图所示:
    在这里插入图片描述
    时钟交互报告界面中红色部分即为存在异步时钟域交互,但未进行异步时钟约束,需要根据实际情况进行异步时钟约束。
    如果FPGA设计中异步时钟之间均采取了异步时钟同步化处理,可将上述标红的区域都进行异步时钟约束.
    建议FPGA设计中,异步时钟域下的信号均进行异步时钟同步化处理,可有效的减少电路实现中的亚稳态情况,同时提高FPGA运行的稳定性,异步时钟同步化可参考本人博客“单bit信号跨时钟域处理及时序约束”。 (https://blog.csdn.net/aaaaaaaa585/article/details/118093422?spm=1001.2014.3001.5501)
    异步时钟域之间约束可以采用set_clock_groups命令,具体语法见博客“VIVADO异步时钟域约束(groups)”
    (https://blog.csdn.net/aaaaaaaa585/article/details/116067981?spm=1001.2014.3001.5501)
    常用的语法为:

    set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks clock_name]
    

    该语法下,约束clock_name的时钟以及由clock_name生成的时钟之间互为异步关系,且与设计中的其他时钟也均为异步时钟关系。
    clock_name的获取,可以在TCL窗口中输入get_clocs获得;
    在这里插入图片描述
    其中每个时钟具体的信息,可以通过report_clocks命令得知。
    在这里插入图片描述
    在这里插入图片描述
    对于产生的时钟,同一个master clock产生的时钟,可以使用-include_generated_clocks 只约束一次。
    下述约束示例为结合上图中的时钟交互报告进行的时序约束:

    set_clock_groups -asynchronous -group virt_clk
    set_clock_groups -asynchronous -group [get_clocks ctrl_clk25m]
    set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks clk_25m]
    set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks Sodimms_sys_clk_p]
    set_clock_groups -asynchronous -group [get_clocks rxoutclk_out[0]_4]
    set_clock_groups -asynchronous -group [get_clocks txoutclk_out[0]_4]
    set_clock_groups -asynchronous -group [get_clocks rxoutclk_out[0]]
    set_clock_groups -asynchronous -group [get_clocks txoutclk_out[0]]
    set_clock_groups -asynchronous -group [get_clocks rxoutclk_out[0]_8]
    set_clock_groups -asynchronous -group [get_clocks txoutclk_out[0]_8]
    

    约束后,打开时钟交互报告窗口,可以看到约束后的时钟交互报告:
    在这里插入图片描述
    可以看到异步时钟已全部约束。

    上述约束语法,相比较与set_false或者不使用-include_generated_clocks选项时的约束命令会少很多,代码简洁性更好。

    展开全文
  • 异步本身呢是一种常见的信号处理,不过呢一旦处理不当就会引发多种电路危机,而这些电路危机大多与亚稳态有或多或少的关系。 亚稳态是我们老生常谈的问题了,再来复习一下什么是亚稳态呢。 在数字电路中信号处于...
  • (13)异步复位管脚伪路径约束 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)异步复位管脚伪路径约束 5)技术交流 6)参考资料 2 时序约束引言 1)什么是静态时序分析? 通俗来说...
  • 1、什么是同步逻辑和异步逻辑,同步电路和异步电路的区别是什么?同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。电路设计可分类为同步电路和异步电路设计。同步电路利用时钟脉冲使其...
  • 1、什么是同步逻辑和异步逻辑,同步电路和异步电路的区别是什么?同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。电路设计可分类为同步电路和异步电路设计。同步电路利用时钟脉冲使其...
  • (15)Vivado时钟组约束异步时钟域 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado时钟组约束异步时钟域 5)技术交流 6)参考资料 2 时序约束引言 1)什么是静态时序分析? ...
  • 最近工作涉及到同步电路的时序设计,这里追根溯源的总结下同步电路和异步电路时序设计及流水线思想 1:什么是同步逻辑和异步逻辑? 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。...
  • (32)物理管脚时钟设置异步约束 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)物理管脚时钟设置异步约束 5)技术交流 6)参考资料 2 时序约束引言 1)什么是静态时序分析? 通俗...
  • 一、异步时序逻辑电路特点及分类 1.特点:没有统一时钟脉冲信号,电路状态的改变是外部输入信号变化直接作用的结果; 在状态转移过程中,各存储部件的状态变化发生不同步,不同状态维持时间也不一定相同; 在研究...
  • 才会根据和触发器的输入确定状态转移方向,否则触发器状态不变) 根据对输入的约束,分析时可以排除两个或两个以上输入端同时出现脉冲以及输入端无脉冲出现情况 分析步骤: 写出电路的输出函数和激励函数表达式 列出...
  • 为了克服异步电路实现工具不统一、实现复杂度较高的问题,提出了一种新的异步流水线实现流程。基于功能将实现流程分为同步时序约束和异步控制实现两个部分,对同步时序约束采用虚拟时钟,对异步控制实现采用真实延时...
  • (46)FPGA同步复位与异步复位(异步复位) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA同步复位与异步复位(异步复位) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1...
  • 浅谈IC设计中亚稳态的问题以及信号同步电路简单实现 亚稳态与跨时钟域 高级FPGA设计技巧!多时钟域和异步信号处理解决方案 高级FPGA设计技巧!多时钟域和异步信号处理解决方案 1.1 什么是亚稳态 假设器件输出在...
  • 9.异步电路和同步时序电路的区别 异步电路: 电路核心逻辑有用组合电路实现; 异步时序电路的最大缺点是容易产生毛刺; 不利于器件移植; 不利于静态时序分析(STA)、验证设计...
  • 以及输入引脚到输出引脚〈纯组合逻辑〉、输入引脚到闷步元件、同步元件到输出引脚,还有Clk1到Clk2之间的异步路径, 在进行周期Period约柬之前,需要对电路的时钟周期进行估计,不要便用过松或过紧的约束。...
  • Verilog典型电路设计 华为.rar 一种将异步时钟域转换成同步时钟域的方法.pdf 华为coding style.rar 华为FPGA设计流程指南.doc 华为FPGA设计规范.rar 华为VHDL设计风格和实现.rar 华为专利:一种快速无毛刺的时钟倒换...
  • 什么是同步逻辑和异步逻辑,同步电路和异步电路的区别是什么
  • **伪路径是指该路径存在,但该路径的电路功能不会发生或者无须时序约束。 创建伪路径的好处:可以减少工具运行优化时间,增强实现结果,避免在不需要进行时序约束的地方花费较多时间。 设置伪路径一般用在:①跨时钟...
  • 周期约束分析

    2021-01-19 23:10:01
    以及输入引脚到输出引脚〈纯组合逻辑〉、输入引脚到闷步元件、同步元件到输出引脚,还有Clk1到Clk2之间的异步路径, 在进行周期Period约柬之前,需要对电路的时钟周期进行估计,不要便用过松或过紧的约束。...
  • 行波时钟,也就是一个触发器的输出用作另一个触发器的时钟输入,经常用在异步计数器和分频电路设计中,如下图所示: 异步计数器/分频时钟虽然原理简单、设计方便,但级连时钟(行波时钟)最容易造成时钟偏差,级数...
  • 如下图3所示: 此时有两种方式去完成完整正确的约束: ①在mux的输出点创建2个派生时钟,且另外用一个额外的时钟分组将这2个派生时钟设置为物理互斥(-physically_exclusive)。 ②在MUX/I0前加一个时钟门控ICG如下...
  • 异步复位同步释放

    2022-03-16 16:03:57
    复位信号可以分为同步复位和异步复位两大类。 同步复位:指的是当复位信号发生变化时,并不立即生效,而是等到有效时钟沿采集到复位信号的变化后,才会对寄存器进行复位操作。从同步复位的描述中,就可发现同步复位...
  • 时序约束分析的概念

    2020-10-18 16:56:48
    很多人询问关于约束、时序分析的问题,比如:如何设置setup,hold时间?如何使用全局时钟和第二全局时钟(长线资源)?如何进行分组约束?如何约束某部分组合逻辑?如何通过约束保证异步
  • SDC设计约束(1)——时钟相关约束

    千次阅读 2021-08-03 00:47:59
    Synopsys(SDC)设计约束——时钟相关约束

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,168
精华内容 1,667
关键字:

异步电路约束