在进行高速布线时,一般都需要进行线长匹配,这时我们就需要设置好 constraint 规则,并将这些规则分配到各类 net group 上。下面以 ddr为例,具体说明这些约束设置的具体步骤。
1. 布线要求
DDR 时钟: 线宽 10mil,内部间距 5mil,外部间距30mil,要求差分布线,必需精确匹配差分对走线误差,允许在+20mil 以内
DDR 地址、片选及其他控制线:线宽 5mil,内部间距 15mil,外部间距 20mil,应走成菊花链状拓扑,可比 ddrclk 线长 1000-2500mil,绝对不能短
DDR 数据线,ddrdqs,ddrdm线:线宽 5mil,内部间距 15mil,外部间距 20mil,最好在同一层布线。数据线与时钟线的线长差控制在 50mil 内。
2. 根据上述要求,我们在 allegro 中设置不同的约束
针对线宽(physical),我们只需要设置 3 个约束:DDR_CLK, DDR_ADDR, DDR_DATA

设置好了上述约束之后,我们就可以将这些约束添加到 net上了。点击 physical rule set中的 attach……,再点击右边控制面板中的 more,

弹出对话框

如上图所示,找到 ckn0和 ckp0,点击 apply,则弹出

选中左边列表中的NET_PHYSICAL_TYPE, 在右边空格内输入DDR_CLK, 点击apply,弹出

即这两个 net已经添加上了 NET_PHYSICAL_TYPE 属性,且值为 DDR_CLK.
类似的,可以将 DDR 数据线,数据选通线和数据屏蔽线的 NET_PHYSICAL_TYPE 设为 DDR_DATA, DDR 地址线,片选线,和其他控制线的 NET_PHYSICAL_TYPE 设为DDR_ADDR.
上述步骤完成后,我们就要将已经设好的约束分配到这些 net group 上。
如下图点击 assignment table……

弹出对话框

如下图所示,我们对不同的信号组选择各自的 physical 约束

有人可能会问,为什么你这还有 area0,area1 啊?这是因为你的这些约束有的地方不可能达到的,比如在 bga 封装的 cpu 内,你引线出来,线间距不可能达到 30,20 甚至 10个 mil。在这些地方,如果你也按照这个约束那么你的 pcb 中的 drc 就不可能消的掉。这时一个解决办法就是把这些地方划为一个 room,然后给他加上 room 属性(即为 room的名字 area0,1 等等)。针对这些 room内,设定合适的约束(同上)。
针对线间距,由于每个都分为组内间距和组外间距,所以共有 6 个约束:
DDR_CLK_INNER,DDR_CLK_OUTER,…………………………
我们只要对这六个约束设置 line to line 和 line to shape 就可以,分别按上述要求设置就可以了。

剩下的步骤和 physical 中设置是一样的。不过这时 assignment table 变成了下面这样。
下面就是设置线的等长。这个需要我们到 Ecset 中设置。这些高速线一般都需要端接匹配(数据线由于是双向的,两端都有匹配电阻),所以你的整个 etch 被分成了好几个 net,这时候这些 net 的长度计算就比较麻烦。一种情况就是你设置 XNET,然后对 Xnet 计算长度,我认为这是最省事也是最好的一种办法,还有就是你不管什么 Xnet,分别将各段的长度加起来,算等长。
注: 这个时候有个很矛盾的事情,就是你的时钟线如果想定义为差分线来走,即让allegro 自己等间距的一次拉差分线,你就不能将之定义为 Xnet,我自己用的时候是这样的,我在将时钟线对应的 xnet 删除后,时钟线就可以成对的拉,而之前尽管设置好了差分属性,系统也是不认的。不知道大家有没有这个经验。
下面我就讲讲如何设置这些约束,并将这些约束加到对应的 xnet 上。
点击
或 setup》electrical constraint spreadsheet,弹出

点击 electrical constraint set》routing》total etch length,右边如上图所示出现 brd 名字,右键点击 brd名字,弹出如下右键菜单

如上图点击 create ECset,则弹出

输入 DDR_ADDR, 点击 ok,则 brd 名字前出现+号,打开之,可以见到设置好的DDR_ADDR.

现在针对 DDR_ADDR,就可以设定具体的参数了。比如,你可以将最小长度设定为1600mils, 最大长度设为 2500mils。
这个参数的取得其实取决于你的时钟走线拓扑,因为按照走线要求,数据线,地址线等等都是以时钟线为基准的,所以,你必须先把时钟线布好,至少以后不能做大的改动,除非你能保证时钟线走线长度不变。这里我们假设你的时钟线长为 1550mil+10mils,则显然你的地址线不能短于 1560mils,我们取为 1600mils。
同时我们也可以得到数据线的走线范围为 1525+25mils。
类似我们设置好时钟和数据线的约束。

至此,我们设置好了线长约束规则。下面的问题就是如何应用这些规则到 net 上去。
设定好了 Xnet 以后,我们就可以在约束管理器中给这些 Xnet 添加约束。
这时,打开 net》routing》total etch length,将右边brd 名前+打开,下面则是所有的 net名,拖动鼠标选中需要设置约束的那组信号,点击右键,弹出邮件菜单,选中菜单中的ECset Reference ,见下图。

弹出对话框

选中下拉列表中的 DDR_ADDR,则对刚才选中的哪些 xnet 添加上了 DDR_ADDR 约束。

类似的可以添加 DDR_DATA,DDR_CLK约束。
设置 Xnet 主要就是给相关的电阻加上 model 就可以了。