高速电路中的存储器应用与设计三
4 DDR2 SDRAM 介绍及其应用要点
1. DDR2 SDRAM 概述
DDR2(Double Data Rate 2,两倍数据速率,版本 2)SDRAM,是由 JEDEC 国际标准组织开发的、基于 DDR SDRAM 的、升级的存储技术。与 DDR SDRAM 相比,虽然其仍保持了一个时钟周期完成两次数据传输的特性,但 DDR2 SDRAM 在数据传输率、延时、功耗等方面都有了显著提高,而这些性能的提高,主要来源于以下技术的提升:4n 数据预取、ODT、Post CAS、封装等。
2. DDR2 SDRAM 的技术更新
1)4n 数据预取
DDR SDRAM 的数据预取能力是 2,即芯片内部能以 2 倍于时钟频率的速度来预取数据,这使得芯片内核工作频率仅需为外部数据传输率的一半。对此,DDR2 SDRAM 做了进一步的改进,其数据预取能力为 4,使得芯片内核工作频率仅需要为外部数据传输率的 1/4。相对于 SDRAM,芯片内核工作频率等于外部数据传输速率。所以,在同样的内核工作频率下,DDR SDRAM 的数据传输速率比 SDRAM 高 1 倍,而 DDR2 SDRAM 的数据传输率又比 DDR SDRAM 高 1 倍。
例如,在 DDR 和 DDR SDRAM 的外部数据传输率都为 400Mbps 的情况下,对于 DDR2 SDRAM 而言,其内核工作频率仅为 100MHz,而对于 DDR SDRAM,其内核工作频率为 200MHz。如果是 SDRAM,则其内核工作频率需达到 400MHz,才能提供 400Mbps 的外部数据传输率,正是因为如此高的内核频率无法在技术和工艺上得到实现,因而 SDRAM 的数据传输率无法达到 400Mbps。
利用这项技术,DDR2 SDRAM 可以在不提高内核工作频率的前提下(即无需对芯片做大的技术革新),大大提高外部数据传输速率,以获得更高的性能。值得一提的是,目前正在研发的 DDR3 SDRAM 技术,其数据传输率比 DDR2 SDRAM 又有大幅度提高,而这种性能的提高,并非来自技术上的巨大变革,仅仅只是因为采用了 8n 数据预取技术。
根据数据传输速率的不同,DDR SDRAM 有如下系列:266Mbps、333Mbps、400Mbps,而 DDR2 SDRAM 的系列如下:400Mbps、533Mbps、667Mbps、800Mbps、1066Mbps。可以看出,DDR2 SDRAM 直接从 DDR SDRAM 的最高数据传输率起步,最高可以达到 1066Mbps 以上,这种性能的大幅度提升,正是利用了 4 倍数据预取技术。正如 7.2.2 节所述,受制造工艺的限制,存储器内核频率的提高,是一项极难的技术,但数据预取倍数的提高,相对而言,却容易得多,这使得 DDR2 SDRAM 在性能提高的同时,又保持了与 DDR SDRAM 类似的成本,因此,DDR2 SDRAM 得以取代第一面世,即得到了广泛的应用。
如下图所示,提供了 DDR SDRAM 和 DDR2 SDRAM 的数据预取框图,以便读者比较。
2)ODT
ODT(On-Die Termination),即芯片内部匹配终端技术,其功能图如下图所示。
在 DDR SDRAM 应用中,需通过大量的外部终端电阻上拉到 VTT 电平(1.25V),以实现信号的匹配。以 16 位存储器芯片为例,有以下信号需要通过这种方式进行匹配:DQ[15:0]、LDQS、UDQS、UDM、LDM、ADDR[12:0]、BANK[1:0]、CS#、WE#、RAS#、CAS#、WE#,即一颗芯片需要 40 个外部上拉电阻,这种设计,极大地耗费了宝贵的 PCB 面积。同时,由于 DQ[15:0]、LDQS、UDQS、UDM、LDM 等信号是双向信号,在读写时,对匹配电阻的位置有不同的要求,因此 PCB 布局时,在匹配电阻放置位置的处理上,很难同时对读写两个方向进行兼顾,以获得最佳的信号完整性。
在 DDR2 SDRAM 中,通过 ODT 技术,将许多外部的匹配电阻移到芯片内部,从而有效地节省了大量 PCB 板面积。另外,ODT 技术还允许存储器控制器配置 DDR2 SDRAM 的内部寄存器,以达到通过控制 ODT 信号,实现对匹配电阻的阻值及其开关状态控制的目的,从而实现了读、写操作时最佳的信号完整性。
DDR2 SDRAM 芯片提供一个 ODT 引脚来控制芯片内部终端电阻的开关状态。在只有一颗 DDR2 SDRAM 芯片作为存储器控制器负载的情况下,写操作时,由于 DDR2 SDRAM 作为接收端,所以 ODT 引脚为高电平以打开芯片内部终端电阻;读操作时,由于 DDR2 SDRAM 作为发送端,所以 ODT 引脚为低电平以关闭芯片内部终端电阻。其中,ODT 引脚的状态由存储器控制器控制。
对 ODT 终端电阻 Rr 的阻值,可以通过 DDR2 SDRAM 内部的扩展模式寄存器 EMR 来设定:首先配置 EMR[15:14]=01 来设置该寄存器工作于 EMR(扩展模式寄存器)模式,然后通过 EMR[6] 和 EMR[2] 两位来设置内部 Rr 的阻值,允许配置为 Rrr 关闭、75Ω、150Ω、50Ω这两种模式中的一种。以 75Ω这种模式为例,上图中,在 DDR2 SDRAM 内部,DQ 引脚的上拉电阻和下拉电阻将被配置为 150Ω。
需要注意,DDR2 SDRAM 的 ODT 技术,只是对 DQ、DQS(LDQS、UDQS)、DM(LDQM、UDM)等信号(在使能差分 DOS 的情况下,也包括 DQS#信号)实现了内部匹配。而地址和控制信号等仍需要外部的匹配终结。
3)Posted CAS
以 DDR2 SDRAM 读操作为例说明多块数据读取时的时序问题(参见下图)。
与 SDRAM 类似,DDR2 SDRAM 也是通过 BANK 地址、ROW(行地址)和 COLUMN(列地址)三者结合来实现寻址。每一次对 DDR2 SDRAM 的操作,都以 ACT 命令(通过有效 RAS#信号实现)开始,发出该命令的同时,在地址信号线上发出本次操作的 BANK 和行地址,等待 tRCD 时间后,发起 READ 或 AUTO PRECHARGE 命令(图 7.39 的 RD AP 命令,通过有效 CAS#信号实现),该命令的作用是发出读指令,同时通过地址信号线发出本次操作的列地址。最后,等待 CAS Latency 时间之后,数据才能通过数据总线输出。
由于 DDR2 SDRAM 的存储空间相对于 DDR SDRAM 有所增加,因此 BANK 数目也相应增大。例如,DDR SDRAM 单片最大容量为 1Gbit,BANK 数目为 4,而 DDR2 SDRAM 单片最大容量为 2Gbit,BANK 数目达到了 8;DDR SDRAM 的 BANK 数目最少是 2,而 DDR2 SDRAM 的 BANK 数目最少是 4。为了提高性能,经常需要在一个 BANK 操作完成之前插入对下一个 BANK 的操作。图 7.39 中,在发出对 BANK0 的 ACT 命令之后,无需等待对应的 RD AP 命令发出,只需满足 tRRD 参数(两个相邻 ACT 命令之间的时间间隔)的要求,即可发出对下一个 BANK 的 ACT 命令。
按照这种工作模式,从图 7.39 可以发现,对 BANK2 的 ACT 命令实际上形成了一个时钟周期,该命令本来应该在 RD AP(BANK 0)的后面出现,但由于 RD AP(BANK 0)命令已经占据了该时钟周期(占用了地址总线,以发出列地址),从硬件信号来说,即,这个周期已经使能了 CAS#信号,所以无法使能对应另一个 BANK 操作的 RAS#信号,因此只能延时一个时钟周期。其结果是,本来应该是流水线式操作的数据输出流被打断,BANK1 的数据输出后,需要等待一个时钟周期,BANK2 的数据才能得到输出。数据读取间隔的出现,在一定程度上将对芯片的性能造成影响。
针对这个问题,DDR2 SDRAM 做了改进:DDR2 SDRAM 允许 RD AP 命令提前发出,甚至可以紧跟 ACT 命令发出,但是要等待一个 Additive Latency(即 AL,附加延时参数)后,该 RD AP 命令才能得到执行,如下图所示。
上图引入附加延迟 AL 后的 DDR2 SDRAM 读操作模式
在上图中,AL 被设置为 tRCD-1,此时,可实现 ACT 和 RD AP 命令背靠背地发出,只不过,DDR2 SDRAM 需要对 RD AP 命令进行抑制,直到 AL 延时满足后才能执行。
下图中,引入 AL 延时并设置 AL 为 tRCD-1 后,对于多个 BANK 数据读取的操作而言,输出数据流之间不再出现间隙。
这种为了避免 ACT 命令和 RD AP 命令冲突而提出的技术叫做 Posted CAS 技术。其本质是将 CAS#信号的使能时间段(即 RD AP 命令)直接插入到紧跟 RAS#信号的使能时间段(即 ACT 命令)之后,虽然读和写操作并没有得到提前,总的延迟时间也没有改变,但引入这种技术后,可以避免在多 BANK 操作中,可能出现的一个 BANK 的 CAS#信号和其他 BANK 的 RAS#信号发生冲突,从而提高了芯片的存储效率。可以通过配置 DDR2 SDRAM 芯片内部的 EMR 寄存器的第 3~5 位,将附加延时 AL 配置为 0~5 个时钟周期。
4)差分 DQS/DQS#信号
DDR SDRAM 采用单端 DQS 信号。
如前文所述,目前广泛应用的 DDR2 SDRAM,数据传输率最高已经达到 1066Mbps,即 DQS 和 DQ 的变化率都将达到 1066600 万次/s,其中,DQS 作为数据信号 DQ 的采样参考源,若采用单端信号已经不足以保证其在高速变化时的信号完整性。
采用差分 DQS/DQS#信号,其优势在于:减少信号间串扰的影响,减少 DQS 输出脉宽对工作电压和温度稳定性的依赖等。因此,建议在使用数据传输率为 533Mbps 以上的 DDR2 SDRAM 存储器芯片时,尽量采用差分 DQS/DQS#信号。
使能差分 DQS 信号是通过配置 DDR2 SDRAM 的 EMR 寄存器的第 10 位为 0 来实现的。
5)功耗和封装
DDR SDRAM 的电平是 SSTL-2,即信号引脚是利用 2.5V 电源供电,而 DDR2 SDRAM 则采用 SSTL-18 电平,即信号引脚是利用 1.8V 电源供电。在相同存储容量和相同数据传输率的情况下,DDR2 SDRAM 将有更低的功耗。
DDR SDRAM 的封装种类有:66 引脚的 TSOP 封装,60 引脚的 FBGA 封装。由于 DDR SDRAM 的数据传输率不是特别高,TSOP 封装能较稳定地工作在这种频率上。而 DDR2 SDRAM 的最高数据传输率已经达到 1066Mbps,在高频下,TSOP 封装过长的引脚将产生很高的感抗和寄生电容,严重影响芯片工作的稳定性。
DDR2 SDRAM 直接采用 FBGA 封装,基于其良好的电气性能和散热性,保证了芯片在高速工作下的稳定性。
根据位宽的不同,DDR2 SDRAM 分为 4 位、8 位、16 位三种不同的系列,因而无法采用统一引脚数目的封装。目前,4 位和 8 位的芯片采用 60 或 68 引脚的 FBGA 封装,16 位芯片采用 84 或者 92 引脚的 FBGA 封装。
6)OCD
OCD(Off-Chip Driver)即离线驱动调整技术。这是 DDR2 SDRAM 刚问世时开发的技术,目前,DDR2 SDRAM 芯片已不再支持该技术。
3. DDR2 SDRAM 模式寄存器配置
1)模式寄存器 MR 的配置
BANK[2:0]=000 时,选择模式寄存器 MR,如下图所示。
第 14~13 位:保留为 0。
第 12 位:PD,选择脱离 Power Down(下电)模式的速度。
第 11~9 位:WR,定义 tWR 参数的值。
第 8 位:DLL,设置在模式寄存器 MR 配置的过程中,是否对芯片内部的 DLL 进行复位。
第 7 位:TM,使能存储器的测试模式(仅用于生产)。
第 6~4 位:CAS Latency,设置 CL 参数的值。
第 3 位:BT,设置 Burst Type(突发类型)。
第 2~0 位:Burst Length(突发长度)。
2)扩展模式寄存器 EMRS 的配置
BANK[2:0]=001 时,选择扩展模式寄存器 EMRS,如下图所示。
第 14~13 位:保留为 0。
第 12 位:Out,输出使能,只有当该位配置为 0 时,DQ、DQS 等信号才能正常输出。在测试存储器静态电流 Iddq 时,需关闭所有输出,可通过 EMRS 的该位来实现。
第 11 位:RDQS,使能 RDQS(冗余 DQS)功能。只有在设计中混合有位宽为 4 和 8 的存储器时,RDQS 功能才会被用到,RDQS 不是一个常用的功能。
第 10 位:DQS#,与 DDR SDRAM 不同,DDR2 SDRAM 支持差分的 DQS/DQS#信号,该位用于使能该特性。
第 9~7 位:OCD Program,配置 OCD 功能,由于 DDR2 SDRAM 不再支持 OCD,因此寄存器中这三位需配置为[111]。
第 6、2 位:Rtt,配置芯片内置的 Rtt 电阻值,有四种选择:关闭 Rtt、75Ω、150Ω、300Ω。
第 5~3 位:Posted CAS,设置 AL 参数的值。
第 1 位:ODS,配置输出驱动能力,该位为 0 时,表示正常驱动,内置始端匹配电阻约 180Ω,该位为 1 时,表示弱驱动,内置始端匹配电阻约 40Ω。
第 0 位:DLL,使能或关闭片内 DLL 功能。
3)扩展模式寄存器 EMR2 的配置
BANK[2:0]=010 时,选择扩展模式寄存器 EMR2。
该寄存器的第 7 位用于配置温度等级(商业级、工业级),其他位应保留为 0。
4)扩展模式寄存器 EMR3 的配置
BANK[2:0]=011 时,选择扩展模式寄存器 EMR3。
该寄存器应设置为默认值 0,保留以备将来使用。
4 设计实例——DDR2 SDRAM 基于 MPC5648 的应用
1)概述
MPC5648 是 Freescale 公司推出的新一代 PowerQUICC III 系列的、高性能的处理器。其最高内核工作频率达 1.33GHz,在该工作频率下处理性能可达 3065 MIPS(MIPS:Millions of Instructions Per Second,百万条指令每秒)。一级缓存有指令缓存和数据缓存各 32KB(B 指字节,一个字节等于 8 位,即 1B=8b),二级缓存为 512KB,支持 DDR SDRAM 和 DDR2 SDRAM 存储器控制器,支持 PCI、PCI-X 和 PCI Express 接口,支持Srapid IO 接口,支持 4 个 GbE 接口。本小节将重点讨论基于 MPC5648 的 DDR2 SDRAM 接口的硬件设计。
MPC5648 支持最高数据传输率为 667Mbps 的 DDR2 SDRAM。为获得最高性能,选型中需注意不能选用数据传输率低于 667Mbps 的 DDR2 SDRAM 器件,为保证可靠运行,在选择传输率更高等级的器件,如 800Mbps 或 1066Mbps 速率等级的 DDR2 SDRAM。
本设计中选用 DDR2 SDRAM DIMM 条,每个 DIMM 条上包含 9 片 8 位的 DDR SDRAM 芯片,组成 64 位数据线和 8 位 ECC 校验线的工作方式。
2)存储接口信号线分组
可将 DDR2 SDRAM 的信号线分为 4 组,以下以 MPC5648 命名方式为准,命名和 DDR2 SDRAM 器件资料的区别仅在于信号名之前多一个字母“*”。
① 数据组:MDQS/MDQS#[8:0]、MDM[8:0]、MDQ[31:0]、MECC[7:0]。
② 地址组:MBA[2:0]、MA[15:0]、MRAS#、MCAS#、MWE#。
③ 命令组:MCS[3:0]、MCKE[3:0]、MODT[3:0]。
④ 时钟组:MCK/MCK#[5:0]。
PCB 设计中,建议布线顺序如下:VTT 电源平面及匹配电阻、VREF 电源、时钟组、数据组、地址组、命令组、VDDQ 和 VDD 电源。
对于单端信号线,阻抗控制在 50~60Ω(对 Micron 公司的存储器,建议阻抗设计的目标为 60±6Ω);对于差分对信号线,阻抗控制在 100~120Ω。
3)各组信号线的走线规则
本设计采用 8 位的 DDR2 SDRAM 芯片,因此,可将数据组分为 9 个小组:MDQS/MDQS#[0]、MDQ[7:0]、MDMQ 为第一组;MDQS/MDQS#[1]、MDQ[15:8]、MDM[1] 为第二组;依次类推;MDQS/MDQS#[8]、MECC[7:0]、MDM[8] 为第九组。
对这九个小组的数据组,要求各小组之内,走线在同一信号层并拥有相同数目的过孔,走线长度差异控制在 20mil 之内,所有的信号走线必须以完整的地平面作为参考。不同小组之间,走线长度差异控制在 500mil 之内。
对每一个小组,小组内的 8 根 MDQ 信号线的线序可以根据走线方便而进行调整。需要注意,在本设计中,采用的 DIMM 条上的存储器芯片的位宽是 8 位,因此每 8 位 MDQ 信号归入一个小组,市场上还有许多 4 位,16 位的 DIMM 条,如果需要兼容这些 DIMM 条,在硬件设计中,对数据组应谨慎分组。
数据组的信号线和其他组的信号线之间,间距要求在 25mil 以上,数据组内信号线间距要求在 10mil 以上。对于差分对 MDQS 和 MDQS#信号,走线长度差异应该控制在 10mil 之内。
对于地址/命令组,该组中,信号线长度差异应控制在 10mil 之内。走线以 1.8V 电源平面或完整的地平面作为参考。走线和其他组的信号走线间距保持在 25mil 以上。该组内信号线间距保证在 10mil 以上。
对于时钟组,差分信号对走线长度差异控制在 10mil 内,尽量在同一信号层走线,如果需要换层,两根差分对线应该一起换层。与其他组的信号间距在 25mil 以上。对于 MPC5648 一侧,一共提供了 6 对相位对齐的时钟对,即 MCK/MCK#[5:0],其目的是兼容 DIMM 条设计和分立的内存芯片设计。例如,在本设计中,如果选用分立的 8 位存储器芯片,一共需要 9 片,如果 MPC5648 只提供一对时钟对,其驱动能力无法同时满足 9 片存储芯片的要求,因此需要由 MPC5648 提供更多的时钟对输出。如果选用 Unbuffered DIMM 条,需要根据 DIMM 条的不同种类来决定需要使用多少对时钟对。对 Registered DIMM,由于 MCK/MCK#在 DIMM 条上需要经过 PLL 再送到 DDR2 SDRAM 芯片,即在 DIMM 条上已经利用 PLL 驱动器保证了该信号的驱动能力,所以只需 MPC5648 提供一对时钟对(如 MCK/MCK#[0]),与 DIMM 条相接即可。对于 Unbuffered DIMM 条而言,DIMM 条上不提供对时钟对的驱动,根据第 6 章的知识,通过计算可以知道从 MPC5648 提供的每对时钟对,能可靠地驱动 3 个 DDR2 SDRAM 芯片。因此,需要使用 MPC5648 输出的 3 对时钟对以驱动 DIMM 条上的 9 片 DDR2 SDRAM 芯片。对于没有使用到的时钟对,可以通过配置 MPC5648 的内部寄存器 RGRM 进行关闭。
4)电源设计
在电源设计方面,需要仔细计算 VTT 电源发生器及其电源平面是否能满足设计所需要的功耗;需要仔细对 VTT、VDDQ、VREF 进行去耦滤波。VTT 电源平面应该和 DIMM 条紧密相邻;VREF 走线宽度建议为 20~25mil 并和同层的其他电源或信号走线保持至少 20mil 的间距,VREF 必须能跟随 VDDQ 的变化,建议 VREF 通过电阻分压网络从 VDDQ 直接产生。分压电阻精度要求为 1%。
5)匹配电路设计
如图下图所示为 MPC5648 和 DDR2 SDRAM DIMM 条硬件接口设计。
如果使能了 ODT 功能,数据组无需外部匹配电阻,走线直接从 MPC5648 连接到 DIMM 条即可。而地址/命令组需要在 DIMM 条末端利用外部电阻 RrT 上拉到 VTT 电平以实现匹配,电阻值需要经过仿真确定。考虑到最佳的信号完整性,RrT 应放在 DIMM 条之后,即地址/命令组信号走线从 MPC5648 出来,应该先到 DIMM 条的引脚,然后再走到 RrT 电源平面实现终端匹配。对于时钟组,一般而言,DIMM 条上都包含了 100~120Ω的差分终端电阻,所以在 PCB 上无需外加匹配。
6)时序设计
设计时,还需要仔细考虑信号时序的要求。数据组信号的时序需要参考本小组的 MDQS/MDQS#信号,并利用这对差分对信号的交叉点进行采样;地址和命令组信号的时序需要参考对应的时钟组信号,并利用 CK 上升沿和 CK#下降沿的交叉点进行采样。对于 DDR2 SDRAM,建立时间和保持时间需要考虑由于信号边沿不单调而造成的时序偏差。
算公式如下:
Tsu = Tsu(onset) + Tsu(derating) (7.1)
Th = Th(hold) + Th(derating) (7.2)
其中,Tsu 和 Th 是总的建立时间和保持时间要求;Tsu(onset) 和 Th(hold) 是从器件资料能直接得到的建立时间和保持时间的基本要求,即第 5 章的 Tsetup 和 Thold 两参数;Tsu(derating) 和 Th(derating) 是根据信号及其参考时钟的真实提升速率表而得的降额值,该表格可以从 DDR SDRAM 器件资料中获得。
这种查表计算降额值的方法,将构成很大的工作量。在实际设计中,一般是利用 Hyperlynx 等仿真软件直接得到降额值,从而确定信号的时序裕量。
需要特别注意的是地址组,地址组信号的负载数目一般都比相应的时钟信号多,因此,需考虑负载对时序造成的影响。
【案例4】CPU 存储系统不识别 8 位内存条问题
某设计中,CPU 的存储器使用 DDR SDRAM DIMM 条,测试中发现,插入 4 位条(DIMM 条上的 DDR SDRAM 芯片位宽为 4),能顺利通过存储接口的测试,插入 8 位条,则测试失败。
【讨论】
DDR SDRAM DIMM 条引脚数为 184,可兼容位宽为 4、8 的内存条。
如下图所示,采用 4 位 DIMM 条时,DQS0 作为第 0 片 DDR SDRAM 芯片 D0 的 DQS 信号,DM0/DQS9 作为第 9 片 DDR SDRAM 芯片 D9 的 DQS 信号,即 4 位条不支持数据掩码功能,而将 DM0 信号复用为 DQS9。通过这种方式,D0 和 D9 分别提供了数据线 DQ[3:0]和 DQ[7:4]。
采用 8 位 DIMM 条时,DQS0 作为第 0 片 DDR SDRAM 芯片 D0 的 DQS 信号,DM0/DQS9 作为该芯片的 DM 信号,即相比 4 位条,8 位条对每八根数据线少使用了一个 DQS,该信号引脚被复用为 DM 以支持数据掩码功能。
检查 PCB 走线规则文件,发现在设计中对数据总线的分组是按 4 位分组,即 DQ[3:0]、DQS0 为一组,DQ[7:4]、DM0/DQS9 为一组,其他依次类推,组内严格地保证 DQS 与 DQ 的走线长度,而组间的要求则很松。插入 8 位条时,本应属于一组的信号线(如 DQ[7:0]、DM0/DQS9、DQS0),实际上跨了两个分组,使用一位宽内的数据线与对应的 DQS、DM 存在较大的走线长度差异,无法满足时序的要求。
改板设计时,将 DQ[7:0]、DQS0、DM0/DQS9 归为一组,并依次划分其他组,组内严格保证走线的长度,问题得到解决。
【拓展】
对于 SDRAM、DDR SDRAM、DDR2 SDRAM,为方便 PCB 设计,同一组内的数据信号线可互换,但设计中需注意两点:
要点一,地址信号线不能互换。这是由于在初始化过程中,地址信号线将被用于配置模式寄存器,对地址信号线的线序,要求与模式寄存器的位序一一对应。
要点二,不同组的数据信号线不能互换。
关键要点:
① 相对 DDR SDRAM,DDR2 SDRAM 在以下方面有了技术更新:4n 数据预取、ODT、Posted CAS、差分 DQS/DQS#、封装和功耗。
② DDR2 SDRAM 的数据传输率可以远远高于 DDR SDRAM 的原因。
③ 在时序设计时,由于信号边沿不单调,需对时序裕量进行降额。
相关文章:
高速电路中的存储器应用与设计三
4 DDR2 SDRAM 介绍及其应用要点 1. DDR2 SDRAM 概述 DDR2(Double Data Rate 2,两倍数据速率,版本 2)SDRAM,是由 JEDEC 国际标准组织开发的、基于 DDR SDRAM 的、升级的存储技术。与 DDR SDRAM 相比,虽然其…...
AndroidStudio无法识别连接夜神模拟器
下载夜神模拟器: https://www.yeshen.com/ 启动之后发现AS关联不了夜神模拟器,需要做如下的操作。 1:复制配置文件进入夜神模拟器 adb 相关的更改: 开启的命令是: 端口启动 固定: 夜神模拟器ÿ…...
Go 语言标准库中database模块详细功能介绍与示例
Go语言的标准库 database/sql 提供了与 SQL 数据库交互的通用接口,但需要搭配具体的数据库驱动(如 MySQL、PostgreSQL 等)使用。以下是 database/sql 的核心方法及示例说明: 1. 连接数据库 sql.Open(driverName, dataSourceName)…...
ai-api-union项目,适配各AI厂商api
项目地址:alpbeta/ai-api-union 需求:实现兼容各大模型厂商api的流式对话和同步对话接口,本项目现兼容智谱、豆包、通义、通义版deepseek 设计 一个ChatController类对外暴露这两个接口,入参都为ChatRequest请求类,…...
进程间通信——信号量
进程间通信——信号量 目录 一、基本概念 1.1 概念 1.2 基本操作 1.3 相关函数 1.3.1 semget创建/获取 1.3.2 semop操作信号量 1.3.3 semctl初始化/删除 二、代码操作 2.1 不用PV的 2.2 用PV 的 2.2.1 a.c 2.2.2 b.c 2.2.3 sem.h 2.2.4 sem.c 一、基本概念 1.1…...
CSS 如何设置父元素的透明度而不影响子元素的透明度
CSS 如何设置父元素的透明度而不影响子元素的透明度 在 CSS 中,设置父元素的透明度(如通过 opacity 属性)会影响所有子元素的透明度,因为 opacity 是作用于整个元素及其内容的。如果想让父元素透明但不影响子元素的透明度&#x…...
SpringBean模块(一)定义如何创建生命周期
一、介绍 1、简介 在 Spring 框架中,Bean 是指由 Spring 容器 管理的 Java 对象。Spring 负责创建、配置和管理这些对象,并在应用程序运行时对它们进行依赖注入(Dependency Injection,DI)。 通俗地讲,Sp…...
2007-2019年各省地方财政一般公共服务支出数据
2007-2019年各省地方财政一般公共服务支出数据 1、时间:2007-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政一般公共服务支出 4、范围:31省 5、指标说明:地方财政一般公共服务…...
S32K144外设实验(六):FTM输出单路PWM
文章目录 1. 概述1.1 时钟系统1.2 实验目的2. 代码的配置2.1 时钟配置2.2 FTM模块配置2.3 输出引脚配置2.4 API函数调用1. 概述 1.1 时钟系统 FTM的CPU接口时钟为SYS_CLK,在RUN模式下最高80MHz。模块的时钟结构如下图所示。 从上图中可以看出,FTM模块的功能时钟为SYS_CLK,…...
二层综合实验
拓扑图 实验要求 1.内网IP地址使用172.16.6.0/16分配 2.sw1和sW2之间互为备份 3.VRRP/STP/VLAN/Eth-trunk均使用 4.所有Pc均通过DHCP获取IP地址 5.ISP只能配置IP地址 6.所有电脑可以正常访问IsP路由器环回 实验思路 这是一个二层综合实验每当拿到一个实验看清楚要求之后都有…...
《深度剖析SQL之WHERE子句:数据过滤的艺术》
在当今数据驱动的时代,数据处理和分析能力已成为职场中至关重要的技能。SQL作为一种强大的结构化查询语言,在数据管理和分析领域占据着核心地位。而WHERE子句,作为SQL中用于数据过滤的关键组件,就像是一把精准的手术刀,…...
Python每日一题(7)
Python每日一题 2025.3.27 一、题目二、分析三、自己源代码四、deepseek答案五、源代码与ai分析 一、题目 question["""编写程序,生成包含20个随机数的列表,然后将前十个元素升序排列,后10个元素降序排列,并输出结果""" ]二、分析 今天本来写了…...
Linux命令大全:从入门到高效运维
适合人群:Linux新手 | 运维工程师 | 开发者 目录 一、Linux常用命令(每天必用) 1. 文件与目录操作 2. 文件内容查看与编辑 二、次常用命令(按需使用) 1. 系统管理与监控 2. 网络与通信 3. 权限与用户管理 三、…...
Xss复现
目录 前提: 1.什么是XSS 2.XSS 的三种主要类型 复现 第1关 第2关 前提: 1.什么是XSS XSS(跨站脚本攻击,Cross-Site Scripting) 是一种常见的 Web 安全漏洞,攻击者通过向网页注入恶意脚本ÿ…...
3.28学习总结
完成分割回文串的算法题,难点主要在如何去分割,靠什么去分割字符串 int a(char arr[]){int i,j;int lenstrlen(arr);for(i0,jlen-1;i<j;i,j--){if(arr[i]!arr[j]) return 0;}return 1;}char **path;int pathtop;char***reasult;int*ansize;int count…...
【MySQL基础】数据库及表基本操作
作为运维工程师,掌握MySQL的基础操作是日常工作的重要技能之一。本文将介绍MySQL中数据库和表的基本操作,帮助您快速上手或复习这些核心概念。 1 数据库基本操作 1.1 创建数据库 create database db_name; -- 指定字符集和排序规则 create database d…...
注意!ChatGPT 全新 AI 图像功能延迟对免费用户开放
2025 年 3 月 25 日,OpenAI 正式宣布在 ChatGPT 中推出基于 GPT-4o 模型的全新原生图像生成功能。 这一功能允许用户通过对话生成和编辑图像,支持从写实风格到插图风格的多种形式。OpenAI 首席执行官萨姆・奥特曼(Sam Altman)在社…...
玛哈特液压式精密矫平机——以精准压力,定义金属的绝对服从
板材应力不除,良率难升。液压式精密矫平机,凭借多级液压闭环技术AI动态补偿算法,攻克0.2mm超薄钛箔至65mm装甲钢板的矫平极限,平整度精度锁定0.012mm,残余应力≤3MPa,让金属从“形似平整”迈向“分子级稳定…...
HCIA【NAT】
目录 1 NAT产生背景 2 NAT作用 3 NAT分类 NAT(网络地址转换技术) 1 NAT技术产生背景 [1] IPV4地址不够用 [2] 处于IPV4到IPV6的一个过渡阶段,IPV6地址还没有完全普及 2 作用 [1] 解决IP地址不够用的问题 [2] 做公网和私网地址的转换 …...
Reactor 事件流 vs. Spring 事件 (ApplicationEvent)
Reactor 事件流 vs. Spring 事件 ApplicationEvent Reactor 事件流 vs. Spring 事件 (ApplicationEvent)1️⃣ 核心区别2️⃣ Spring 事件 (ApplicationEvent)✅ 示例:Spring 事件发布 & 监听1️⃣ 定义事件2️⃣ 发布事件3️⃣ 监听事件🔹 进阶&…...
Google开源机器学习框架TensorFlow探索更多ViT优化
一、在边缘设备优化ViTa 在边缘设备上优化 ViT(Vision Transformer)模型,主要目标是减少计算量、降低功耗、提升推理速度。以下是几种关键优化策略: 1.轻量级 ViT 变体 部分 ViT 变体专为边缘设备优化,包括…...
docker - compose up - d`命令解释,重复运行会覆盖原有容器吗
docker - compose up - d`命令解释,重复运行会覆盖原有容器吗 docker - compose up - d 是一个用于管理 Docker 容器的命令,具体含义如下: 命令含义: up:用于创建、启动并运行容器,会根据 docker - compose.yml 文件中定义的服务配置来操作。-d:表示以“分离模式”(det…...
火山dts迁移工具使用
登录后选择生态工具。(数据库传输服务DTS) 先选region 创建迁移任务 假设,mysql 选择专有网络(一般上云到火山都是专有网络) 【先选】结构迁移,全量,这些 【再选】迁移对象 (他们产研有bug,先…...
Tabby 一:如何在Mac配置保姆级教程(本地模型替换hugging face下载)
1. brew安装 mac需要先安装brew,如果本地已经安装过brew这一步可以忽略,遇到问题可以自己ai问 /bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 可能遇到source .zprofile失败,因为…...
Go 语言标准库中time模块详细功能介绍与示例
以下是 Go 语言 time 模块的详细说明及示例,涵盖时间操作、定时器、时区处理等核心功能: 一、时间基础操作 1. 获取时间 // 当前本地时间 now : time.Now() fmt.Println(now) // 2023-08-04 15:30:45.123456 0800 CST// 构造指定时间 t : time.Date(20…...
做的一些实验
先在DRMPlane::Perform函数里,把PLANE_SET_SRC_RECT或者PLANE_SET_DST_RECT设置的DRMProperty::SRC_W DRMProperty::SRC_H或者DRMProperty::CRTC_W DRMProperty::CRTC_H设置为原来1/2,都无法启动Android界面。 后来思考了一下,Log里好像打印…...
计算机网络基础:网络流量工程与优化策略
计算机网络基础:网络流量工程与优化策略 一、前言二、网络流量工程基础2.1 网络流量工程的定义与目标2.2 网络流量的测量与分析2.2.1 常用的流量测量方法2.2.2 流量数据分析三、网络流量工程的优化策略3.1 链路负载均衡策略3.1.1 基于目的地址的负载均衡3.1.2 基于流量权重的负…...
Python入门学习笔记 - 从环境搭建到基础语法
一、前期准备工作 1. 系统环境配置 防火墙设置与网络连接检查 2. 网络查看 二、计算机基础知识 1. 硬件系统 2. 计算机系统组成 三、Python简介 1. Python的特点 2. Python安装注意事项 四、Python基础语法 1. 注释的分类 2. IDE使用技巧 字体大小随滚轮滑动设置 3.…...
重温:时间窗口与滑动步长的概念
核心概念 窗口大小(Window Size) 定义窗口包含的时间步数(如过去7天、24小时等)。例如,窗口大小为5时,每个窗口包含连续的5个时间点数据。 滑动步长(Step/Stride) 窗口每次向前移动…...
数据库——MySQL字符、日期函数
一、字符函数详解 1. CONCAT() - 字符串拼接 作用:连接多个字符串,类似Java中的号。 语法: CONCAT(string1, string2, ...) 示例: SELECT CONCAT(Hello, , World) AS greeting; -- 输出:Hello World 2. UPPER()…...
Vue3.5 企业级管理系统实战(十一):全屏切换组件
本篇主要探讨如何在导航栏(Navbar)中添加全屏切换按钮,并借助功能强大的 screenfull 插件,丝滑实现全屏切换功能,为用户打造更为便捷、流畅的交互体验。 1 安装插件 screenfull screenfull 是一个轻量级的 JavaScript…...
HAL_UARTEx_ReceiveToIdle_DMA 开启,但是无法进入空闲中断;
HAL_UART_Receive_IT HAL_UARTEx_ReceiveToIdle_DMA 解决措施,关闭HAL_UART_Receive_IT函数; 因为这个函数会开启start_receive 函数中断,这个函数 将标志位一直置busy,导致一直没有进入空闲中断设置;...
第30周Java分布式入门 分布式基础
分布式基础课程笔记 一、什么是分布式? 1. 权威定义 分布式系统定义为:“利用物理架构形成多个自治的处理元素,不共享主内存,通过发送消息合作”。 2. 核心解释 物理架构与处理元素 🌟 多台独立服务器/电脑&#x…...
【商城实战(82)】区块链赋能用户身份验证:从理论到源码实践
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
一周掌握Flutter开发--9. 与原生交互(上)
文章目录 9. 与原生交互核心场景9.1 调用平台功能:MethodChannel9.1.1 Flutter 端实现9.1.2 Android 端实现9.1.3 iOS 端实现9.1.4 使用场景 9.2 使用社区插件9.2.1 常用插件9.2.2 插件的优势 总结 9. 与原生交互 Flutter 提供了强大的跨平台开发能力,但…...
DeepSeek-V3-0324对比OpenAI GPT-4o和Gemini 2.5 Pro
以下是DeepSeek-V3-0324、OpenAI GPT-4o与谷歌Gemini 2.5 Pro模型的更新点及优化对比总结: 1. DeepSeek-V3-0324 开源地址:https://huggingface.co/deepseek-ai/DeepSeek-V3-0324 核心更新与优化 性能提升: 采用6850亿参数MoE架构ÿ…...
【AI论文】LEGO拼图:大型语言模型在多步骤空间推理方面的表现如何?
摘要:多步骤空间推理涉及跨多个顺序步骤理解和推理空间关系,这对于解决复杂的现实世界应用至关重要,如机器人操作、自主导航和自动化装配。为了评估当前多模态大型语言模型(MLLMs)在获取这一基本能力方面的表现&#x…...
【深度学习】【目标检测】【OnnxRuntime】【C++】YOLOV5模型部署
【深度学习】【目标检测】【OnnxRuntime】【C】YOLOV5模型部署 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【目标检测】【OnnxRuntime】【C】YOLOV5模型部署前言Windows平台搭建依赖环境模型转换--pytorch转onnxONNXRuntime推…...
vcpkg安装指定版本的库
一.vcpkg安装 使用git将vcpkg源码克隆到本地制定目录(D:\vcpkg),并初始化 git clone https://github.com/microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh # Linux/macOS .\bootstrap-vcpkg.bat # Windows 如下图: 二.安…...
springboot 四层架构之间的关系整理笔记五
问题:service 和 多个serviceimpl 分层之间的逻辑关系? 好的!用班级活动的例子继续讲,假设班长(Service接口)要管理多种任务,而不同的班委(ServiceImpl实现类)负责不同场…...
记录一次交易耗时有毛刺TDSQL数据库排查过程
信息同步非常重要,解决问题前,务必从应用获取实例信息、sql关键字、问题时间段、问题描述。 处理步骤: 1、登陆赤兔,打开实例监控信息,检查CPU、内存、IO、缓冲命中率、proxy汇总请求量耗时情况,初步判断…...
爱普生晶体单元FC2012AN在5G RedCap中的应用
在 5G 技术向物联网领域深度渗透的今天,RedCap(5G 轻量化)作为衔接中高速物联网场景的关键技术,正加速推动工业、医疗、可穿戴等领域的智能化升级。爱普生 FC2012AN 低 ESR 晶体单元凭借其突破性的小尺寸、低功耗与高稳定性设计&a…...
Linux: 网络,arp的数量为什么会对交换机/路由器有性能的影响
这个问题也是非常普遍的问题。比如最近比较火的一个OVS相关的问题: ARP request packets put high pressure on the pinctrl thread in ovn-controller 另一个在工作种也遇到了相似的问题,当一个网络里发了同时发了小一百个GARP之后,路由器的gateway就会有ARP处理延迟。 A…...
javaWeb vue的简单语法
一、简介 两大核心优势: 声明式渲染:Vue 基于标准 HTML 拓展了一套模板语法,使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。 响应性:Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 D…...
Android 中隐藏标题栏和状态栏的方法
在Android开发中,隐藏标题栏和状态栏是实现全屏显示的常见需求。 一、隐藏标题栏 1、通过代码隐藏 对于继承自 AppCompatActivity 的 Activty,可在 onCreate() 方法中调用supportRequestWindowFeature 或 getSupportActionBar 方法来隐藏标题栏。 ove…...
Tof 深度相机原理
深度相机(TOF)的工作原理_tof相机原理-CSDN博客 深度剖析 ToF 技术:原理、优劣、数据纠错与工业应用全解析_tof技术-CSDN博客 飞行时间技术TOF_tof计算公式-CSDN博客 深度相机(二)——飞行时间(TOF)_飞行时间技术-C…...
boost.asio
as(async):异步 同步io: reactor (非阻塞)(需要注册一次,在等待消息时可以干别的事) 阻塞io网络模型 接口:read\accept\connect\write 接口返回时,io完成 异步…...
Python 装饰器(Decorators)
什么是装饰器? 装饰器(Decorator)本质上是一个 修改其他函数功能的函数。它的核心思想是:不修改原函数代码,动态添加新功能。比如: 记录函数执行时间 检查用户权限 缓存计算结果 自动重试失败操作 理解…...
django orm的优缺点
Django ORM(对象关系映射)是 Django 框架的核心组件之一,它通过将数据库表映射为 Python 类,简化了数据库操作。以下是其优缺点总结: 优点 开发效率高 用 Python 类定义数据模型,无需手写 SQL,…...
国产RISC-V车规芯片当前现状分析——从市场与技术角度出发
摘要 随着汽车产业的智能化、电动化转型加速,车规级芯片的战略地位日益凸显。RISC-V指令集凭借其开源、灵活、低功耗等优势,成为国产车规芯片的重要发展方向。本文从市场与技术两个维度出发,深入分析国产RISC-V车规芯片的现状。通过梳理国内…...