既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
DUA和
S
D
R
A
M
SDRAM
SDRAM之间的总线及其方向。由命令、地址和控制引脚(通常称为
C
A
C
CAC
CAC)组成的第一条总线将使用以下标准方案:在存储器时钟的一个时钟沿(或每个时钟周期一次)处发送信息。双向总线由
D
Q
DQ
DQ(数据总线)和
D
Q
S
DQS
DQS(数据选通脉冲)组成,
D
D
R
DDR
DDR接口的不同之处就在于双向数据选通
D
Q
S
DQS
DQS。
D
Q
S
DQS
DQS选通脉冲可用于一组数据信号,这使得数据信号(每字节一个或每半字节一个)与选通脉冲的时序紧密匹配。如果时钟是整个数据总线共用的时钟,那么使用时钟信号进行这种紧密匹配可能不可行。双向选通信号
D
Q
S
DQS
DQS可用于读操作和写操作,并且在选通脉冲的两个边沿(下降沿和上升沿,或称双倍数据速率)上都可捕获数据。在
S
D
R
A
M
SDRAM
SDRAM的读模式期间,
D
Q
DQ
DQ总线与数据选通引脚
D
Q
S
DQS
DQS(而不是存储器的时钟引脚)同步,即
D
Q
DQ
DQ和
D
Q
S
DQS
DQS从
S
D
R
A
M
SDRAM
SDRAM中被输出时彼此是对齐的。而对于另一个方向,即当
D
U
A
DUA
DUA发送数据时,
D
Q
S
DQS
DQS将相移
90
90
90度。请注意,数据
D
Q
DQ
DQ和选通
D
Q
S
DQS
DQS的沿均来自
D
U
A
DUA
DUA内部的存储器时钟。
如上所述,对于一组
D
Q
DQ
DQ信号(
4
4
4个或
8
8
8个bit)存在一个数据选通
D
Q
S
DQS
DQS。这样做是为了使
D
Q
S
DQS
DQS和
D
Q
DQ
DQ的所有bit之间的偏斜平衡(skew balancing)要求更容易满足。例如,如果对于一个字节使用一个
D
Q
S
DQS
DQS,则一组中只需平衡
9
9
9个信号(
8
8
8个DQ和
1
1
1个
D
Q
S
DQS
DQS),这比平衡
72
72
72位的数据总线和时钟要容易得多。
上面的描述并不是对
D
D
R
S
D
R
A
M
DDR,, SDRAM
DDRSDRAM接口的完整说明,但足以说明这种接口的时序要求。
图9-10显示了典型
D
D
R
S
D
R
A
M
DDR,, SDRAM
DDRSDRAM接口中
C
A
C
CAC
CAC总线(在
D
U
A
DUA
DUA处)的
A
C
AC
AC特性。
# DDRCLK is typically a generated clock of the PLL
# clock internal to DUA:
create_generated_clock -name DDRCLK \
-source [get_pins UPLL0/CLKOUT]\
-divide_by 1 [get_ports DDRCLK]
# Set output constraints for each bit of CAC:
set_output_delay -max 0.75 -clock DDRCLK [get_ports CAC]
set_output_delay -min -0.75 -clock DDRCLK [get_ports CAC]
在某些情况下,尤其是与无缓冲(unbuffered)存储器模块接口时,地址总线可能会比时钟驱动更大的负载。在这种情况下,地址信号对存储器的延迟要比时钟信号大,并且这种延迟差异可能会导致
A
C
AC
AC特性不同于图9-10中所示(???)。
D
Q
S
DQS
DQS和
D
Q
DQ
DQ的对齐方式在读周期和写周期中有所不同,以下小节将对此进行进一步探讨。
9.3.1 读周期(Read Cycle)
在读周期中,存储器输出的数据与
D
Q
S
DQS
DQS是边沿对齐(edge-aligned)的,如图9-11中波形所示。图中的
D
Q
DQ
DQ和
D
Q
S
DQS
DQS代表存储器引脚上的信号。数据(
D
Q
DQ
DQ)由存储器在
D
Q
S
DQS
DQS的每个沿上发出,并且
D
Q
DQ
DQ改变数据的时刻也与
D
Q
S
DQS
DQS的下降沿和上升沿对齐。
由于
D
Q
S
DQS
DQS选通信号和
D
Q
DQ
DQ数据信号彼此对齐,因此
D
U
A
DUA
DUA内部的存储控制器(memory controller)通常使用
D
L
L
DLL
DLL(或其它替代方法来实现四分之一周期延迟)来延迟
D
Q
S
DQS
DQS,从而使
D
Q
S
DQS
DQS的边沿对齐于数据有效窗口的中心。
即使
D
Q
DQ
DQ和
D
Q
S
DQS
DQS在存储器中彼此对齐,但
D
Q
DQ
DQ和
D
Q
S
DQS
DQS选通信号也可能无法再在
D
U
A
DUA
DUA内部的存储控制器上对齐,这可能是由于
I
O
IO
IO缓冲器之间的延迟差以及
P
C
B
PCB
PCB互连走线等因素所导致的。
图9-12中为基本的数据读取原理图。上升沿触发的触发器在
D
Q
S
_
D
L
L
DQS\_DLL
DQS_DLL的上升沿捕获数据
D
Q
DQ
DQ,而下降沿触发的触发器在
D
Q
S
_
D
L
L
DQS\_DLL
DQS_DLL的下降沿捕获数据
D
Q
DQ
DQ。虽然图中的
D
Q
DQ
DQ路径上没有
D
L
L
DLL
DLL,但某些设计可能在数据路径上也会放置一个
D
L
L
DLL
DLL。这样可以用来延迟信号(以解决由于PVT或互连走线长度或其它差异引起的变化),以便可以在数据有效窗口的中间准确地采样数据。
为了对存储控制器上的读接口进行约束,我们在
D
Q
S
DQS
DQS上定义了一个时钟,并相对于该时钟在数据上指定了输入延迟。
create_clock -period 5 -name DQS [get_ports DQS]
假定存储器读接口以
200
M
H
z
200MHz
200MHz(当在两个时钟沿上都传输数据时相当于
400
M
b
p
s
400Mbps
400Mbps)的频率进行工作,这对应于每
2.5
n
s
2.5ns
2.5ns采样一次
D
Q
DQ
DQ数据信号。由于数据是在两个边沿上捕获的,因此需要为每个边沿分别指定输入约束。
# For rising clock edge:
set_input_delay 0.4 -max -clock DQS [get_ports DQ]
set_input_delay -0.4 -min -clock DQS [get_ports DQ]
# This is with respect to clock rising edge (default).
# Similarly for falling edge:
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]
# The launch and capture are on the same edge:
set_multicycle_path 0 -setup -to UFF0/D
set_multicycle_path 0 -setup -to UFF5/D
输入延迟命令指定了
D
U
A
DUA
DUA引脚上
D
Q
DQ
DQ和
D
Q
S
DQS
DQS沿之间的延迟差,即使这两个信号通常是从存储器中同时输出的,但由于不同存储器的规格,在时序上仍会存在偏差。因此,
D
U
A
DUA
DUA内的控制器设计应考虑到两个信号之间可能存在偏斜(skew)。以下是两个触发器建立时间检查的路径报告。假设捕获触发器的建立时间要求为
0.05
n
s
0.05ns
0.05ns、保持时间要求为
0.03
n
s
0.03ns
0.03ns,且
D
L
L
DLL
DLL延迟设置为
1.25
n
s
1.25ns
1.25ns,即四分之一周期。
以下是保持时间检查的路径报告:
9.3.2 写周期(Write Cycle)
在写周期中,
D
Q
S
DQS
DQS沿会与从
D
U
A
DUA
DUA内存储控制器输出的
D
Q
DQ
DQ信号相差四分之一周期,因此存储器可以直接使用
D
Q
S
DQS
DQS选通脉冲去捕获数据。
图9-13显示了存储器引脚上所需的波形,在存储器引脚处,
D
Q
S
DQS
DQS信号必须与
D
Q
DQ
DQ数据窗口的中心对齐。请注意,仍然是由于
I
O
IO
IO缓冲器延迟不匹配或者
P
C
B
PCB
PCB互连走线的变化,仅在存储控制器(
D
U
A
DUA
DUA内部)中对齐
D
Q
DQ
DQ和
D
Q
S
DQS
DQS还不足以使这些信号在
S
D
R
A
M
SDRAM
SDRAM存储器引脚处真正的对齐。因此,
D
U
A
DUA
DUA通常在写周期中使用额外的
D
L
L
DLL
DLL去进行控制,以实现
D
Q
S
DQS
DQS和
D
Q
DQ
DQ信号之间所需的四分之一周期偏移(offset)。
如何约束此模式的输出取决于控制器中时钟的生成方式,接下来我们考虑两种不同情况。
情况1:内部二倍频时钟(Case 1: Internal 2x Clock)
如果内部时钟是
D
D
R
DDR
DDR时钟频率的两倍,则输出逻辑可以类似于图9-14中所示。
D
L
L
DLL
DLL提供了一种必要时使
D
Q
S
DQS
DQS时钟偏斜的机制,从而满足存储器引脚上的建立时间和保持时间要求。在某些情况下,可以不使用
D
L
L
DLL
DLL,而是使用负沿触发的触发器来获得
90
90
90度的偏移。
对于图9-14中所示情况,可以进行如下输出延迟约束:
# 166MHz (333Mbps) DDR; 2x clock is at 333MHz:
create_clock -period 3 [get_ports CLK2X]
# Define a 1x generated clock at the output of flip-flop:
create_generated_clock -name pre_DQS -source CLK2X \
-divide_by 2 [get_pins UFF1/Q]
# Create the delayed version as DQS assuming 1.5ns DLL delay:
create_generated_clock -name DQS -source UFF1/Q \
-edges {1 2 3} -edge_shift {1.5 1.5 1.5} [get_ports DQS]
D
Q
DQ
DQ输出引脚上的时序必须相对于衍生时钟
D
Q
S
DQS
DQS进行约束。
假设
D
D
R
S
D
R
A
M
DDR,, SDRAM
DDRSDRAM的
D
Q
DQ
DQ和
D
Q
S
DQS
DQS引脚之间建立时间要求分别为
D
Q
DQ
DQ上升沿的
0.25
n
s
0.25ns
0.25ns和下降沿的
0.4
n
s
0.4ns
0.4ns。类似地,假设
D
Q
DQ
DQ引脚上升沿和下降沿的保持时间要求分别为
0.15
n
s
0.15ns
0.15ns和
0.2
n
s
0.2ns
0.2ns。
D
Q
S
DQS
DQS输出上的
D
L
L
DLL
DLL延迟已设置为四分之一周期,即
1.5
n
s
1.5ns
1.5ns,所有波形如下图9-15所示:
set_output_delay -clock DQS -max 0.25 -rise [get_ports DQ]
# Default above is rising clock.
set_output_delay -clock DQS -max 0.4 -fall [get_ports DQ]
# If setup requirements are different for falling edge of DQS,
# that can be specified by using the -clock\_fall option.
set_output_delay -clock DQS -min -0.15 -rise DQ
set_output_delay -clock DQS -min -0.2 -fall DQ
以下是通过输出
D
Q
DQ
DQ路径的建立时间检查报告。建立时间检查从
0
n
s
0ns
0ns处发起
D
Q
DQ
DQ的
C
L
K
2
X
CLK2X
CLK2X上升沿到
1.5
n
s
1.5ns
1.5ns处的
D
Q
S
DQS
DQS上升沿进行。
请注意,上述报告中的四分之一周期延迟出现在了时钟
D
Q
S
DQS
DQS上升沿的第一行中,而不是在
D
L
L
DLL
DLL实例
U
D
L
L
0
UDLL0
UDLL0的那行中。这是因为
D
L
L
DLL
DLL延迟已被建模为了衍生时钟
D
Q
S
DQS
DQS定义的一部分,而不是
D
L
L
DLL
DLL时序弧中的一部分。
以下是通过输出
D
Q
DQ
DQ路径的保持时间检查报告。保持时间检查从
3
n
s
3ns
3ns处发起
D
Q
DQ
DQ的时钟
C
L
K
2
X
CLK2X
CLK2X上升沿到
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
0.15ns
0.15ns和
0.2
n
s
0.2ns
0.2ns。
D
Q
S
DQS
DQS输出上的
D
L
L
DLL
DLL延迟已设置为四分之一周期,即
1.5
n
s
1.5ns
1.5ns,所有波形如下图9-15所示:
set_output_delay -clock DQS -max 0.25 -rise [get_ports DQ]
# Default above is rising clock.
set_output_delay -clock DQS -max 0.4 -fall [get_ports DQ]
# If setup requirements are different for falling edge of DQS,
# that can be specified by using the -clock\_fall option.
set_output_delay -clock DQS -min -0.15 -rise DQ
set_output_delay -clock DQS -min -0.2 -fall DQ
以下是通过输出
D
Q
DQ
DQ路径的建立时间检查报告。建立时间检查从
0
n
s
0ns
0ns处发起
D
Q
DQ
DQ的
C
L
K
2
X
CLK2X
CLK2X上升沿到
1.5
n
s
1.5ns
1.5ns处的
D
Q
S
DQS
DQS上升沿进行。
请注意,上述报告中的四分之一周期延迟出现在了时钟
D
Q
S
DQS
DQS上升沿的第一行中,而不是在
D
L
L
DLL
DLL实例
U
D
L
L
0
UDLL0
UDLL0的那行中。这是因为
D
L
L
DLL
DLL延迟已被建模为了衍生时钟
D
Q
S
DQS
DQS定义的一部分,而不是
D
L
L
DLL
DLL时序弧中的一部分。
以下是通过输出
D
Q
DQ
DQ路径的保持时间检查报告。保持时间检查从
3
n
s
3ns
3ns处发起
D
Q
DQ
DQ的时钟
C
L
K
2
X
CLK2X
CLK2X上升沿到
[外链图片转存中…(img-L6HQEqyh-1715255216690)]
[外链图片转存中…(img-pMLl4vdO-1715255216690)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!