【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…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
