当前位置: 首页 > news >正文

Vivado中Tri_mode_ethernet_mac的时序约束、分析、调整——(一)时序约束的基本概念

1、基本概念

推荐阅读,Ally Zhou编写的《Vivado使用误区与进阶》系列文章,熟悉基本概念、tcl语句的使用。

《Vivado使用误区与进阶》电子书开放下载!!

2、Vivado中的语法例程

1)语法例程

约束的语句可以参考vivado中的,注意其中的rise_data是指由上升沿采样的数据,默认由fall发出。实际使用时也可以由rise发出rise_data,并由rise采样,比如以太网MAC IP中的用法。

  

2)input约束

input delay:外部时钟发送沿到数据头的最大/最小延时;

  • 中心对齐DDR:

采样时,时钟沿直接采样自己下方的数据即可。由发送方调整好对齐关系。

  • Edge-Aligned(clock directly to FF)DDR

      边沿对齐,时钟边沿和数据边沿同时变化(数据不是该时钟沿发出的,而是上一个沿发出的),采样时可对clk延时1/4周期时间完成中心对齐采样。

 

  • Edge-Aligned(clock with MMCM)DDR

注意此处的MMCM是指phase shift mode采用waveform ,而不是latency模式。采用latency模式的时的约束同clock directly to FF。

3)output约束

output delay:数据头到达采样沿的最大最小时间(这是下游器件对FPGA管脚处的时序要求)。不论是skew based还是setup/hold based,都是告知FPGA数据头/尾到采样沿需要的时间max/min。

3、时序分析

    input,output中的-max用于分析setup,-min用于分析hold。vivado中对output做时序分析的点在FPGA的输出管脚端,即在此处比大小slack。

4、forwarded clock

源同步输出时的clock处理方式用ODDR转发,相位不翻转180°时用如下源语及约束,反相180时.D1(1'b0),.D2(1'b1),时钟约束中增加-invert。

   ODDRE1 #(
      .IS_C_INVERTED(1'b0),           // Optional inversion for C
      .IS_D1_INVERTED(1'b0),          // Unsupported, do not use
      .IS_D2_INVERTED(1'b0),          // Unsupported, do not use
      .SIM_DEVICE("ULTRASCALE_PLUS"), // Set the device version for simulation functionality (ULTRASCALE,
                                      // ULTRASCALE_PLUS, ULTRASCALE_PLUS_ES1, ULTRASCALE_PLUS_ES2)
      .SRVAL(1'b0)                    // Initializes the ODDRE1 Flip-Flops to the specified value (1'b0, 1'b1)
   )
   ODDRE1_clk (
      .Q(O_src_clk),   // 1-bit output: Data output to IOB
      .C(W_rsc_clk),   // 1-bit input: High-speed clock input
      .D1(1'b1), // 1'b1 -same with clk,1'b0 -invert to clk
      .D2(1'b0), // 1'b0 -same with clk,1'b1 -invert to clk
      .SR(!I_rst_n)  // 1-bit input: Active-High Async Reset
   ); 

create_generated_clock -name O_src_clk -source [get_pins clk_wiz_0_inst/clk_out1] -multiply_by 1 [get_ports O_src_clk]

http://www.lryc.cn/news/519055.html

相关文章:

  • 车载网络:现代汽车的数字心跳
  • python基础和redis
  • w~自动驾驶~合集16
  • 最长的指定瑕疵度的元音子串
  • 每日算法Day15【组合、组合总和III、电话号码的字母组合】
  • C语言教程——指针进阶(2)
  • 调和级数不为整数的证明
  • 基于微信小程序的在线学习系统springboot+论文源码调试讲解
  • 基于 Boost.Asio 和 Boost.Beast 的异步 HTTP 服务器(学习记录)
  • 有机物谱图信息的速查技巧有哪些?
  • Eureka缓存机制
  • 【LC】78. 子集
  • 协同过滤算法私人诊所系统|Java|SpringBoot|VUE|
  • Docker部署Naocs-- 超细教程
  • [java基础-集合篇]优先队列PriorityQueue结构与源码解析
  • 12. C语言 数组与指针(深入理解)
  • Postman接口测试基本操作
  • MySQL--2.1MySQL的六种日志文件
  • spring task使用
  • 【FPGA】时序约束与分析
  • LLM的MoE由什么构成:门控网络,专家网络
  • HTML-多媒体标签
  • MySQL笔记大总结20250108
  • stm32week3
  • uniapp 的uni.getRecorderManager() 录音功能小记
  • 【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法
  • RT-DETR代码详解(官方pytorch版)——参数配置(1)
  • 腾讯云AI代码助手编程挑战赛-凯撒密码解码编码器
  • 搭建docker私有化仓库Harbor
  • 【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)