文档介绍:Cadence 高速 PCB 的时序分析
时序分析,也许是 SI 分析中难度最大的一部分。我怀着满腔的期许给 Cadence 的资深
工程师发了一封 e-mail,希望能够得到一份时序分析的案例,但是希望化作了泡影。资深工
程师告诉我,他们还没有能够编写一个具体的案例。于是,我不得不将我的期许转化为自己
研究并编写一个具体的案例,与广大 PCB 工程师共享,令大彼天下 PCB 寒士俱欢颜。既然
有了共产主义的期许,自然就有了奋斗的信念。
如果你觉得好,请你顶一下;如果你觉得烂,请你顶起来骂一下。
我的导师,一位诲人不倦的人类伟大灵魂工程师,当我将 CPLD 连在了 CPU 的数据、
地址、读写和片选信号上,并企图在 CPLD 中自定义几个寄存器使得这几个寄存器相对于
CPU 就好似异步访问的存储空间时(如图 1),他迷惘了。他认为我应该将 CPU 的时钟输出
到 CPLD,不然就无法做到异步访问 CPLD 的时序。
图 1 CPLD 做异步访问存储器
原来这个世界从第一天起就将时序电路定义错了,它们定义为
y=f(x1,x2,…,xn,t1,t2,…,tn)
即函数值 y 不仅与输入有关,还与时钟触发条件有关,正是因为时钟,才叫时序电路。
我要将这世界颠倒的黑都纠白了。为什么只有时钟能作触发条件,做触发条件的不一定只是
时钟。图 2 是 TMS320C6713 这一 DSP 的异步存储器读定时。很显然,在 CPLD 中触发其
将寄存器中数据放入总线的触发条件是读信号(图中画红线处触发)。这个读信号就成为二
者之间的握手信号,在 DSP 写 CPLD 的时候握手信号则是写信号了。用 CPLD 实现这个异
步存储器的 VHDL 程序如下:
re 定义为读信号输入,wr 定义为写信号输入,D_REG 定义为数据寄存器,data 是双向的数据总线
process(re)
BEGIN
if(cs='0' and re=’0’) then
data<=D_ REG;
end if;
…
END PROCESS;
process(wr)
BEGIN
if(cs='0' and wr=’0’) then
D_REG <= data;
end if;
…
END PROCESS;
图 2 TMS320C6713 的异步存储器读定时
当然在上例中如果将 DSP 的时钟输入接入 CPLD,则可以更好的完成这个电路时序之
间的匹配。如果不接入,也同样能通过编程改变 DSP 的 setup 和 strobe 所占用的时钟周期数
量来实现。
请记住:时钟本质上只是一个触发条件!跟其它的触发条件没有什么两样!
在 CPU 访问 SDRAM 时,握手信号即是时钟。于是乎,用 Cadence 来做定时分析就分
为两类:
1) 时钟握手信号――同步
2) 其它握手信号――异步
--------------------------------------------------------------------------------------------