【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 接口时序约束学习记录
1. SRAM接口 相比于DDR SDRAM,SRAM接口数据与控制信号共享同一时钟。在用户逻辑(这里记作DUA(Design Under Analysis))将数据写到SRAM中去的写周期中,数据和地址从DUA传送到SRAM中,并都在有效时…...
Git的基础使用
几条铁令!!!!! 切换分支前先提交本地的修改代码及时提交,提交过就不会丢遇到任何问题都不要删除文件目录,第一时间找人请教push前和merge前一定要pull保证代码为最新的,有冲突解决冲…...
贪吃蛇(C语言实现)
贪食蛇(也叫贪吃蛇)是一款经典的小游戏。 —————————————————————— 本博客实现使用C语言在Windows环境的控制台中模拟实现贪吃蛇小游戏。 实行的基本功能: • 贪吃蛇地图的绘制 • 蛇吃食物的功能(上、…...
使用 mysqldump 迁移 MySQL 表 OceanBase
使用 mysqldump 迁移 MySQL 表 OceanBase 一、什么是mysqldump二、使用mysqldump导出MySQL数据三、将数据导入到OceanBase四、注意 一、什么是mysqldump mysqldump 是 MySQL 数据库管理系统中的一个工具,用于将数据库中的数据导出为文本文件。它可以将整个数据库、…...
谷粒学院--在线教育实战项目【一】
谷粒学院--在线教育实战项目【一】 一、项目概述1.1.项目来源1.2.功能简介1.3.技术架构 二、Mybatis-Plus概述2.1.简介2.2.特性 三、Mybatis-Plus入门3.1.创建数据库3.2.创建 User 表3.3.初始化一个SpringBoot工程3.4.在Pom文件中引入SpringBoot和Mybatis-Plus相关依赖3.5.第一…...
Power Design【数据库设计】
Power Design【数据库设计】 前言版权推荐Power Design【数据库设计】推荐11. PowerDesigner的使用11.1 开始界面11.2 概念数据模型11.3 物理数据模型11.4 概念模型转为物理模型11.5 物理模型转为概念模型11.6 物理模型导出SQL语句补充:sqlyog导入sql文件 最后 前言 2024-3-11…...
Spring Boot中Excel数据导入导出的高效实现
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...
采购代购系统独立站,接口采集商品上货
采购代购系统独立站的建设与商品上货接口的采集是一个综合性的项目,涉及前端开发、后端开发、数据库设计以及API接口的对接等多个环节。以下是一个大致的步骤和考虑因素: 一、系统规划与需求分析 明确业务需求:确定代购系统的核心功能&…...
Redis精讲
redis持久化 RDB方式 Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中. 快照文件称为RDB文件, 默认是保存在当前运行目录. [rootcentos-zyw ~]# docker exec -it redis redis-cli 127.0.0.1:6379> sav…...
ELFK 分布式日志收集系统
ELFK的组成: Elasticsearch: 它是一个分布式的搜索和分析引擎,它可以用来存储和索引大量的日志数据,并提供强大的搜索和分析功能。 (java语言开发,)logstash: 是一个用于日志收集,处理和传输的…...
excel批量数据导入时用poi将数据转化成指定实体工具类
1.实现目标 excel进行批量数据导入时,将批量数据转化成指定的实体集合用于数据操作,实现思路:使用注解将属性与表格中的标题进行同名绑定来赋值。 2.代码实现 2.1 目录截图如下 2.2 代码实现 package poi.constants;/*** description: 用…...
【软件工程导论】——软工学绪论及传统软件工程(学习笔记)
📖 前言:随着软件产业的发展,计算机应用逐步渗透到社会生活的各个角落,使各行各业都发生了很大的变化。这同时也促使人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而,软件的规模越大、越复杂…...
C语言编译成库文件的要求
keil编译成库文件 在Keil中,将C语言源文件编译成库文件通常需要进行以下步骤: 创建一个新的Keil项目,并将所需的C语言源文件添加到该项目中。 在项目设置中配置编译选项,确保生成的目标文件符合库文件的标准格式。 编译项目&…...
Python的模块应用和文件I/O
Python 解释 Python是一种高级编程语言,以其简洁、易读和易用而闻名。它是一种通用的、解释型的编程语言,适用于广泛的应用领域,包括软件开发、数据分析、人工智能等。python是一种解释型,面向对象、动态数据类型的高级程序设计…...
设计模式之依赖倒转原则
目录 1、 基本介绍 2、 应用实例 3、 依赖关系传递的三种方式 (1) 接口传递 (2) 构造方法传递 (3) setter方式传递 4、 注意事项和细节 1、 基本介绍 依赖倒转原则(Dependence Inversion Principle)是指: 高层模块不应该依赖低层模块,二者都应该依…...
Springboot启动后想要做某些事可以通过什么方法实现?
在Spring Boot应用中,如果你想在应用启动完成后执行一些特定的操作(例如缓存预热),可以实现CommandLineRunner或ApplicationRunner接口。这两个接口都提供了一个run方法,在Spring Boot应用上下文初始化完成后会被自动调…...
网络原理初识(2)
目录 一、协议分层 1、分层的作用 2、OSI七层模型 3、TCP / IP五层(或四层)模型 4、网络设备所在分层 5、网络分层对应 二、封装和分用 发送过程(封装) 1、应用层(应用程序) QQ 2、传输层 3、网络层 4、数据链路层 5、物理…...
【C++】每日一题 92 反转链表
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 class ListNode { public:int val;ListNode* next;ListNode(int _val) {val _val;next nullptr;} };…...
算法D39 | 动态规划2 | 62.不同路径 63. 不同路径 II
今天开始逐渐有 dp的感觉了,题目不多,就两个 不同路径,可以好好研究一下 62.不同路径 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。 代码随想录 视频讲解:动态规划中如何初始化很重要&#x…...
面试官:如何在 Spring Boot 启动的时候提前运行一些特定的代码
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:如何在 Spring Boot 启动的时候提前运行一些特定的代码 在Spring Boot启动的时候提前运行一些特定的代码可以通过实现ApplicationRunner接口、Com…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
