您的位置 首页 嵌入式

ISE时序束缚笔记7——Path-Specific Timing Constraints

时钟上升沿和下降沿之间的时序约束周期约束可以自动计算两个沿的的约束——包括调整非50%占空比的时钟。例:一个CLK时钟周期约束为10ns,能够应用5ns的约

  时钟上升沿和下降沿之间的时序束缚

  周期束缚可以主动核算两个沿的的束缚——包含调整非50%占空比的时钟。

  例:一个CLK时钟周期束缚为10ns,可以运用5ns的束缚到两个寄存器之间。

  不需求特定途径运用到这个比如中。

  

点击看大图

 

  相关时钟域的束缚

  为一个时钟进行周期束缚——以这个周期束缚确认相关的时钟。

  履行东西将依据它们的联系来决议怎么处理跨时钟域。

  DCM有多个输出:

  ——确认DCM输入时钟的周期束缚

  ——履行东西将会从这个周期束缚推导出其输出的束缚

  ——一切的束缚将会和原始的周期束缚相关

  不相关时钟域的束缚

  在这个比如中,周期束缚不掩盖到处于两个时钟域之间的任何延时途径。——这是默许的处理方式。

  你有必要添加一个束缚掩盖到相关时钟域之间的途径中。——例如,频率相同,可是CLK_B有一些相位偏移。

  在两个不相关的时钟域你就有必要添加一些同步电路。

  

点击看大图

 

  束缚两个时钟域之间的途径。

  ——运用Groups by NETs选项为CLK_A和CLK_B界说groups,假如你为每个时钟添加完周期束缚,这个过程将主动完结。

  ——在这个寄存器的groups之间指定快速/慢速破例束缚。

  

点击看大图

 

  多周期途径束缚

  多周期束缚运用在接连几个时钟周期内寄存器不需求更新的状况。

  ——总是至少需求一个时钟周期才更新。

  ——一般的,这样的寄存器由时钟使能信号操控。

  一个分段计数器便是这样的一个比如。

  ——COUT14每隔4个时钟周期才更新一次。

  ——这些寄存器间的途径就算是多周期途径。

  

 

  False 途径

  False途径选项将用于避免束缚掩盖到特定途径

  时序束缚优先级

  从高到低为:

  1. False途径——将会掩盖任何其它的束缚途径

  2. FROM THRU TO

  3. FROM TO

  4. 管脚指定OFFSETs

  5. Groups OFFSETs(由寄存器或许PADS出产的groups)

  6. 大局PERIOD和OFFSETs——最低优先级束缚

  这儿特权同学提示咱们留意的是,一般相似下面这样的计数器必定不可以归为多周期束缚:

  reg[15:0] counter;

  always @ (posedge clk or negedge rst_n)

  begin

  if(!rst_n) counter <= 16’d0;

  else counter <= counter+1’b1;

  end

  尽管咱们想想好像counter[1]也是2个clk改变一次,counter[2]也是4个clk改变一次……可是,咱们想想看,假如从counter=1到counter=2没有在一个clk完结,那么必定就会影响到counter=2到counter=3的改变,对吧?所以,这样的计数器不能当作多周期束缚破例。

  提纲里描绘的多周期破例的计数器应该是这样一个模型:

  reg[15:0] counter;

  always @ (posedge clk or negedge rst_n)

  begin

  if(!rst_n) counter[1:0] <= 2’d0;

  else counter[1:0] <= counter[1:0]+1’b1;

  end

  always @ (posedge clk or negedge rst_n)

  begin

  if(!rst_n) counter[15:2] <= 14’d0;

  else if(counter[1:0] == 2’b11) counter[15:2] <= counter[15:2]+1’b1;

  end

  上面两个always块里的数据互不搅扰,而且都正常作业,只要下一个always块检测到前一个always块里的counter[1:0]==2’b11时才进位加1。

  写到这儿,特权发现单从功能上来说,这两个比如是没有不同的,说白了,任何一个计数器都可以建模成后边的方式。或许说,我的问题其实没有说理解,反而被自己的比如给驳倒了。

  呵呵,换个视点考虑这个问题,究竟什么时候是多周期破例,什么时候不是?这个其实仍是要看状况的,假如你的体系实时性较高,或许会在某一特定的时钟周期用到16位计数器的计数值(如a = (counter == 16’hffff)?1b’1:1’b0; ),那么这个计数器的高位就不能算作多周期破例。而假如比如在我的一个工程里,有这样的计数器用法:cuonter[2:0]没16个clk的后8个clk需求自添加(从0到15),而高位counter[18:3]当然只要在16个clk改变一次,由于这儿counter是用于作为一个地址产生器,也便是说,我的地址是每16个clk的后8个clk用到,那么这儿的counter[18:3]便是一个8clk的多周期破例实例。

  说白了,仍是要具体问题具体分析。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/116756.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部