转载:介绍AD另外一种奇葩的多通道复用的方法
原文链接:http://www.eda365.com/forum.php?_dsign=74fe4957&mod=viewthread&page=1&tid=110710
在设计多组相同模块的板子的时候,我们经常会用到AD的多通道复用功能,
那么很多人都会在设计的时候,就把这个模块的原理图做成一个整体,这个时候进行简单设置之后,就可以运用复用功能实现我们要的效果;
不过在这里介绍另外一种方法,这种方法比较繁琐,奇葩,我觉得应该没人会想到吧(不过我真希望有人站出来跟我说我也是用这种方法);
既然繁琐,那为什么,我还会想出这招呢,这要说回一个话题,PCB工程师这个职位并不是在所有的公司,都有地位的,硬件工程师也许会认为你只是摆摆器件,连连线,顶多佩服你有耐心而已,为什么说这么多坏话呢,其实也不是坏话,确实有的,正因为如此,所以有些时候你即使知道怎么在原理图做好模块,方便PCB的复用,但是人家硬件工程师也没这个闲工夫去学你的方法画原理图;
所以很多时候,你要进行复用,你还得乖乖先将每一个模块当中,起着相同作用
的器件分配给相同的ID(也就是Channel Offset),然后在复用设置的时候选择依据Channel Offset进行匹配,才能进行复用,这个时候最最蛋疼的事情出现了,就是如何准确为这些器件分配Channel Offset;
说到这里,我真的想吐槽AD为啥不学学Allegro,能自动识别每个模块中拥有相同作用的器件,手工分配ChannelOffset有时候真的不现实,一个模块里面有10个器件,还可以接受,如果几百个上千个器件呢?
于是通过一些试验,我自己摸索出这种方法,来实现半自动分配ChannelOffset的方法,方法比较繁琐,不过至少对于我以前的那份工作,还是能很明显提示效率的,因为我接触的模块,动不动都就是几百个器件在里面的。
*********************************************************************************
首先我简单介绍一下AD的复用的操作:
1. 按照模块,把器件都一堆堆放好;
2. 给每一个模块当中,给器件分配ID(Channel Offset),相同模块中的器件ID是唯一的,但是不同模块中都含有相同ID的器件,也就是说,ID相同,表明在模块中起着相同作用;
3. 为每个模块套上一个room,并做一个class,这样AD才能知道哪几个模块是相同的
4. 摆好其中一个模块,走线走好;
5. 启用复用命令,并设置好按照ID进行匹配,然后执行即可。
*********************************************************************************
好那么我现在开始一步一步介绍这种方法:
在原理图编辑界面,打开SCH list:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNDl8MDdkZWEyZGR8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
让其显示器件信息,显示设置如图:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTB8M2JlOGVhOGV8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
右键选项栏,调出设置窗口:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTF8NzMzMTdkNWZ8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
, Q. o' V% N2 A
我们来设置一下,让SCH list只显示我们需要的元器件详情,并且适当排序下:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTJ8NGQ1ZGM2Nzd8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
9 E0 n* i9 j4 M6 w( _* L
好了,现在我们就把SCH list调出来了,并且依照我们的需要列出了几项元器件信息:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTN8OTM2Y2ZhMGF8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
: W4 s$ v, b$ `7 V+ B/ u
接下来我们切换到PCB界面,用类似的方法,调出并设置PCB list窗口:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTR8N2FkMWQxMDF8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
在PCB编辑界面,打开PCB list:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTV8M2YxYTYxNmN8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
让其显示器件信息,显示设置如图:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTZ8MzJlMDZkZjh8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
' O0 A5 Q2 j y+ D! Q$ T% @6 I
右键选项栏,调出设置窗口:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTd8MTkwY2U4ZmZ8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
我们来设置一下,让PCB list只显示我们需要的元器件详情,并且适当排序下:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTh8MzAyYjcwNmZ8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
) ]; p6 h# _5 Q# M$ w. H3 }9 n$ T/ {
好了,现在我们就把PCB list调出来了,并且依照我们的需要列出了几项元器件信息:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNTl8MDBkMzZiMzF8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
" N8 W" a/ Q$ S1 v+ ~. y
好了,到了这一步,我们需要做的很简单,就是在SCH list和PCB list都按照位号把器件重新排序:
( [9 p# T% b, G) c
怎么排序?例如在PCB list中,我点击这个Name这选项,这个时候会出现箭头所指的小三角,表示现在PCB list是按照Name的顺序升序排列,SCH list排序方式也是类似;
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjB8YTFhMDgxMzN8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
8 \+ ?/ {6 q+ @: r
然后把SCH list中器件的位置信息(也就是X与Y列),全选之后复制下来,并且粘贴到PCB list中X与Y列中(注意,PCB 编辑界面的单位应该选择mil),这个操作很容易理解,就是然后PCB器件的摆放与原理图器件的摆放相一致,虽然看起来好像是堆在一起,这没关系;
(因为别人在绘制原理图的时候,一般是先画好一个模块,然后复制出n个出来,这意味着其实原理图各个模块器件的摆放位置是一样的,而且原理图中器件是没有重叠的,也就是说器件的位置信息是唯一的,所以我们就能用利用器件位置唯一这个信息,给每个器件分配一个唯一的Channel Offset,我就是利用这种特点想出了这个方法,经过刚才的复制粘贴操作,PCB中每个模块的器件摆放情况应该是一样的了)
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjF8ZDg0ZWZkZWJ8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
5 X# V" |/ Y0 Q+ D, e# g+ D( `) ]
接下来我们需要重新设置一下PCB list窗口,让其只是显示选中的器件而不是PCB所有器件,方法很简单,可以看到,列表下面会提示你选中了多少个器件,我们可以每个模块都框选一遍,看看是不是各个模块都有同数量的器件;
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjJ8OWRmOWE3ODJ8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
$ E( O0 l& O$ H0 ] h3 D
接下来就是为各个模块,起到相同作用的器件,分配相同的Channel Offset,之前已经说过,Channel Offset是软件完成复用的关键,问题来了,我们按照什么规则来分配呢,就是按照器件的位置信息来分配。
接下来我们要对所有的模块都做一遍这样的操作了:
! _; l0 Z3 M2 F* E+ r! y! u
1.把原点移动到当前模块的一个特定位置,比如这次我们选模块中这个大电感的pin脚:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjN8MWNkZGEzNmZ8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
$ w% _, m. h- [
2.创建一份EXCEL;
6 F& p: ~ J9 j0 I% b3 H8 c' b
3.确认已经选中模块中的所有器件:
4.在PCB list中按照位号排序,然后将前四列都复制到EXCEL中:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjR8MWVhMGQ0M2F8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
5. 在EXCEL的任意空列中,将目前的排序编一个号,如箭头显示,因为等下我们要打乱这个表的顺序,处理之后再还原排序:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjV8NmVhNTc1NTB8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
0 E, \# C1 P ]2 Q% S" ~1 ]/ e
6.我们按照先B列,后C列的方式进行排序(其实先C后B都可以的),然后在D列中,重新填写Channel Offset数值,比如有37个器件,那我们就从1填写到37:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjZ8Y2Y0Yzk4NTl8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
0 b8 z! o0 `* m6 o; V) i ^
7.完成之后,我们重新还原排序,并且复制Channel Offset数值所在的列,粘贴到PCB list中的Channel Offset列中,请注意,粘贴前需要确认PCB list是不是依然按照位号排序:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjd8ODZkNGFjOTl8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
好,接下来我们安装这7步,把其他模块这么操作:
# a1 A0 p3 ?) e; H. z8 c. p
完成之后,我们可以检验一下,比如我们选中每个模块的相同的器件,
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjh8MDJmMTY0ODF8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
确认其ChannelOffset是不是一致的:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNjl8MjIxM2RiODZ8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
- F: e& w. R- L$ y8 F" G$ p, _8 i
完成之后就接近成功了,
7 }* u# R4 q' z& e6 l
首先给每个模块添加一个room:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNzB8YWU5YjA1YmN8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
; v5 x; K* ?/ Z% ^: j7 D% W" q
然后双击每个room,把Name改为跟InComponentClass一样的名字:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNzF8N2I4MjIwM2J8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
完成之后,我们在Classer Explorer中,新建一个DesignChannel Class,并将这几个room设置为同属于相同的Design Channel Class:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNzJ8ZDgxZDJjZTB8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
接下来我们选择任意模块,布局布线好;
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNzN8MjlmZjBhNjZ8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
好戏上演:我们开始执行复用的命令,冰冻三尺非一日之寒啊,启用命令后点击摆好模块的room,然后再点击另外任意一个room:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNzR8MDk2ODc4ODV8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
弹出了一个设置窗口,如下设置,看到左边下面的选项没有,因为我们在原理图没有把模块电路做成一个模块,所以我们只能选择按照Channel Offset进行匹配:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNzV8M2IxMDZkMzd8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
点击确定,我们看看效果:
<ignore_js_op>![](http://www.eda365.com/forum.php?mod=attachment&aid=OTkxNzZ8MTJkZmExZmZ8MTUzNjI0NTAzMXwwfDExMDcxMA%3D%3D&noupdate=yes)
搞定了啊啊。。。
****************************************************************
我们再把方法回顾一下:
首先是将PCB里面的器件,按照原理图的器件位置进行摆放;
其次利用每个模块中器件相对位置是一样这个规律,分配Channel Offset;
第三,进行必要的复用前设置,然后执行复用;
第四,顶帖啊!哈
****************************************************************
其实就这么简单,只要你理解了每一步操作的意图之后,你会把这种繁琐的操作牢牢记住,我已经快三年没用到了,想起为大家写这份东西的时候,还是能够准确的进行操作并且一次成功;
当遇见每个模块里面有几百上千个器件,你们就会知道这方法能在Channel Offset分配这一关键步骤剩下非常多的时间,而且又准确;
谨以此帖,献给广大EDA365 的小伙伴特别是仍然奋斗在PCB设计前线的人们。