【STA】SRAM / DDR SDRAM 接口时序约束学习记录

2024-03-11 15:44

本文主要是介绍【STA】SRAM / DDR SDRAM 接口时序约束学习记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. SRAM接口

  相比于DDR SDRAM,SRAM接口数据与控制信号共享同一时钟。在用户逻辑(这里记作DUA(Design Under Analysis))将数据写到SRAM中去的写周期中,数据和地址从DUA传送到SRAM中,并都在有效时钟沿处被锁存在SRAM中。在DUA从SRAM中取数据的读周期中,地址信号从DUA传送到SRAM中去,数据信号由SRAM输出给DUA。
  DUA与SRAM的接口简化如下
在这里插入图片描述
  AC特性如下,图中Data in指写入SRAM,Data out指从SRAM读出
在这里插入图片描述
对应时序约束如下:

create_clock -name PLL_CLK -period 5 [get_pins UPLL0/CLKOUT]
create_generated_clock -name SRAM_CLK -source [get_pins UPLL0/CLKOUT] -divide_by 1 [get_ports
SRAM_CLK]
set_output_delay -max 1.5 -clock SRAM_CLK [get_ports ADDR[*]]
set_output_delay -min -0.5 -clock SRAM_CLK [get_ports ADDR[*]]
set_output_delay -max 1.7 -clock SRAM_CLK [get_ports DQ[*]]
set_output_delay -min -0.8 -clock SRAM_CLK [get_ports DQ[*]]
set_input_delay -max 3.2 -clock SRAM_CLK [get_ports DQ[*]]
set_input_delay -min 1.7 -clock SRAM_CLK [get_ports DQ[*]]

2. DDR SDRAM接口

  相比SRAM,SDRAM的数据传输采用独立时钟(DQS),且采用双边沿触发的形式传输数据,数据位宽不限为1。在SDRAM的读模式期间,DQ与DQS均由SDRAM提供,DQ总线与数据选通引脚DQS双边沿对齐。在SDRAM的写模式期间,DQ与DQS均由DUA提供,DQS与DQ总线相移90度。为了降低偏斜平衡的实现复杂度,DQS与8个DQ(及一个dm_dbi_n)一组,在FPGA中能用SelectIO的一个半字节组对应。
  DUA与SDRAM的接口简化如下
在这里插入图片描述
  CAC控制引脚在DUA处的AC特性如下
在这里插入图片描述
对应时序约束如下:

create_generated_clock -name DDRCLK -source [get_pins UPLL0/CLKOUT] -divide_by 1 [get_ports
DDRCLK]
set_output_delay -max 0.75 -clock DDRCLK [get_ports CAC]
set_output_delay -min -0.75 -clock DDRCLK [get_ports CAC]

  数据引脚在DUA处的AC特性需分情况考虑,

  • 读周期

   在读周期中,存储器输出的数据与DQS是边沿对齐的,为了满足DFF时序,通常使用DLL(或其它替代方法来实现四分之一周期延迟)来延迟DQS,从而使DQS的边沿对齐于数据有效窗口的中心。
在这里插入图片描述
  在DUA进行双边沿数据读取时,使用UFF0上升沿触发的触发器在DQS_DLL的上升沿捕获数据DQ,使用UFF5下降沿触发的触发器在DQS_DLL的下降沿捕获数据DQ。
在这里插入图片描述
  对应的时序约束如下,对于下降沿的时序约束,使用-clock_fall标识

create_clock -period 5 -name DQS [get_ports DQS]
set_input_delay 0.4 -max -clock DQS [get_ports DQ]
set_input_delay -0.4 -min -clock DQS [get_ports DQ]
set_input_delay 0.35 -max -clock DQS -clock_fall [get_ports DQ]
set_input_delay -0.35 -min -clock DQS -clock_fall [get_ports DQ]
set_multicycle_path 0 -setup -to UFF0/D
set_multicycle_path 0 -setup -to UFF5/D
  • 写周期

  写周期中DQS边沿与从DUA内存储控制器输出的DQ信号相差四分之一周期,因此存储器可以直接使用DQS选通脉冲去捕获
数据。在存储器引脚处,DQS信号必须与DQ数据窗口的中心对齐。
在这里插入图片描述
  对引脚处DQS与DQ的约束取决于DUA时钟的生成方式。

  • 两倍频时钟

  该方式下,对于DQ驱动采用两倍DQS频率的CLK2X时钟驱动,对应原理图如下
在这里插入图片描述
  对应时序约束如下,DLL会对UFF1/Q进行延时,延时时长为1.5ns

create_clock -period 3 [get_ports CLK2X]
create_generated_clock -name pre_DQS -source CLK2X -divide_by 2 [get_pins UFF1/Q]
create_generated_clock -name DQS -source UFF1/Q -edges {1 2 3} -edge_shift {1.5 1.5 1.5} [get_ports DQS]

  假设DDR SDRAM的DQ和DQS引脚之间建立时间要求分别为DQ上升沿的0.25ns和下降沿的0.4ns。类似地,假设DQ引脚上升
沿和下降沿的保持时间要求分别为0.15ns和0.2ns。DQS输出上的DLL延迟已设置为四分之一周期,即1.5ns,波形如下

在这里插入图片描述
  时序约束如下,利用-rise、-fall区分上升与下降沿

set_output_delay -clock DQS -max 0.25 -rise [get_ports DQ]
set_output_delay -clock DQS -max 0.4 -fall [get_ports DQ]
set_output_delay -clock DQS -min -0.15 -rise [get_ports DQ]
set_output_delay -clock DQS -min -0.2 -fall [get_ports DQ]
  • 内部一倍频时钟

  使用POSEDGE_REG DFF与NEGEDGE_REG DFF分别在CLK1X上升沿、下降沿生成DQ数据,利用CLK1X的高低电平作为选择器的选择信号,CLK1X为高电平时,触发器NEGEDGE_REG的输出发送到DQ;而当CLK1X为低电平时,触发器POSEDGE_REG的输出发送到DQ。从而保证在时钟CLK1X的两个边沿都有新的数据输出DQ。
  每个触发器都需要有半个CLK1X周期将数据传播到多路复用器的输入端,以保证在由CLK1X边沿选择输入数据之前,已在多路复用器的输入端口上准备好了输入数据。
在这里插入图片描述
  对应波形如下:
在这里插入图片描述
  对应时序约束如下:

create_clock -name CLK1X -period 6 [get_ports CLK1X]
create_generated_clock -name DQS -source CLK1X -edges {1 2 3} -edge_shift {1.5 1.5 1.5} [get_ports DQS]
set_output_delay -max 0.25 -clock DQS [get_ports DQ]
set_output_delay -max 0.3 -clock DQS -clock_fall [get_ports DQ]
set_output_delay -min -0.2 -clock DQS [get_ports DQ]
set_output_delay -min -0.27 -clock DQS -clock_fall [get_ports DQ]

  为了减少由于DRAM和DUA处的阻抗不匹配而引起的反射,DDR接口的DQ和DQS信号在读模式和写模式下可能使用终端电阻ODT(On-Die Termination)。在使用ODT的情况下,STA将无法提供足够的精度。这时需要使用如详尽的电路级仿真的方式来验证SDRAM的接口时序。

3. DAC接口

  下图展示了一个视频DAC(数模转换)转换接口,高速时钟将数据传输到DAC的低速时钟接口,其中UDFF0采用上升沿触发,UDAC2采用下降沿触发
在这里插入图片描述
  在这种情况下,可以根据需要将从快时钟域到慢时钟域的接口指定为多周期(两周期)路径,也可以将建立时间视作单周期
(XPLL_CLK)路径。最关键的保持时间检查是在发起沿和捕获沿重合处执行的。

这篇关于【STA】SRAM / DDR SDRAM 接口时序约束学习记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/798265

相关文章

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI