tag 标签: 模板

相关博文
  • 热度 3
    2021-4-15 16:29
    3327 次阅读|
    1 个评论
    AD(Altium Designer)软件中原理图自制模板的妙用
    AD ( Altium Designer )软件中原理图自制模板的妙用 摘要:在实际生产中,如果用 CAD 出产品的原理图出现问题或效率低下时,试试本文的方法,可以提高效率,直接将 AD ( Altium Designer )软件中的原理图图框设计为自己需要的图框,可以直接打印或存档。 当今世界的特点,尤其是当代中国,是一个快和一个大,速度快,慢了就会被淘汰,信息量大,各种信息爆炸。想要快,就要提高效率。在产品出图过程中,原理图如何快速、简洁地出,也有一些小技巧。 以 AD09 为例,孔丙火(微信公众号:孔丙火)认为,如果是自己玩玩,画好原理图,然后做板子调试就 OK 了,原理图用什么图框,要不要图框都无所谓。但作为一个产品,无论是工业的还是民用的,都要出图纸,否则无法移交生产,也无法存档。每家公司的图纸都有自己的要求,一般是用 AutoCAD 出图,也可以用其他设计软件出图,孔丙火(微信公众号:孔丙火)经历过的出电路板原理图的做法是:将原理图导成 CAD 格式,然后在 CAD 中加上公司要求的图框,但这其中往往存在一些问题,如下。 ( 1 )我们使用中文,喜欢在原理图中加入一些中文内容,方便理解,但中文在转成 CAD 后,容易出现乱码,需要手动修改,很麻烦,这应该是 AD 软件的问题; ( 2 )导线连接点如果设置的太小,导成 CAD 后可能就没有了,需要重新设置; ( 3 )当原理图修改,需要重新出图的时候,麻烦又要重新来一遍。 总之,四个字:效率低下。因此,将 AD 软件中的原理图的图框设计成公司要求的格式,可以直接打印存档,可以很好地解决上述问题,那要怎么 DIY 自己的原理图图框呢,且听孔丙火(微信公众号:孔丙火)慢慢道来。 在 AD09 (其他版本软件类似)中新建原理图,如图 1 ,每次新建的原理图都会有一个默认图框,至于图框是什么,这不是我们要说的关键,关键是图 2 的步骤。查阅了网上相关的自行设计原理图模块的文章,好多都缺少图 2 的步骤,孔丙火(微信公众号:孔丙火)认为,这会严重影响新手的理解,如果没有这一步,就直接画自己的图框,那会跟原有的模板叠在一起。 图1 图2 然后,会出现图 3 所示的框,然后需要进行图 4 的操作,接着勾掉图 5 中的两个复选框,最终只留下边框线,如图 6 。 图3 图4 图5 图6 然后,就可以按照图 7 中提示,任意设计自己的图框了。图 8 做了个示意。保存格式见图 9 所示,保存地址要放在 AD 软件的模板文件夹下。 图7 图8 图9 至此,原理图图框(或者叫模板)设计完成。 那如果调用呢,有两种方法: ( 1 )如果经常用,可以将设计的模板设为默认,这样新建一个原理图,将自动调用该模板,方法请自行百度; ( 2 )可以为单个原理图文件单独更新模板,孔丙火(微信公众号:孔丙火)认为,这种方法更灵活,方法如图 10-13 所示。 图10 图11 图12 图13 文章在公众号( 孔丙火 )同步推出,欢迎查看更多系列文章。 单片机、 ARM 、现场总线、 PLC 、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,以实际项目为单元阐述知识点,一起分享,共同交流。
  • 热度 4
    2017-7-3 08:47
    9002 次阅读|
    0 个评论
    眼图是高速数字信号常用的测量手段,当被测信号以参考时钟为基准叠加眼图形成以后,我们已经可以根据眼图的张开程度大概了解信号质量的情况。 但是,仅仅人为观察眼图的形状对于精确测量是不够的,很多时候还需要更进一步地对眼图的参数进行精确测量。 眼图的测量参数不同于波形的测量参数,更多情况下是一种统计意义的测量,最常用的测量参数有眼高(Eye Height)、眼宽(Eye Width)、眼的抖动(交叉点处的Jitter)等。 眼高(Eye Height)的测量 眼高反映的是眼图在垂直方向张开的程度。其测量方法是先在眼图的中心位置对眼图的电平分布进行统计,根据直方图分布出现概率最大的位置得到高电平(One Level)和低电平(Zero Level)的位置;然后再根据高低电平上的噪声分布情况各向内推3个西格玛(噪声的RMS值),从而得到眼高的测量结果。 眼宽(Eye Width)的测量 眼宽反映的是眼图在水平方向张开的程度。其测量方法是先在眼图的交叉点位置对眼图的水平分布进行统计,根据直方图分布出现概率最大的位置得到交叉点1(Cross1)和交叉点2(Cross2)的水平位置;然后再根据交叉点附近的抖动分布情况各向内推3个西格玛(抖动的RMS值),从而得到眼宽的测量结果。 眼图的抖动(Eye Jitter)测量 眼图的抖动反映的是信号的时间不确定性,抖动过大会减小信号的眼宽。眼图的抖动是指眼图交叉点附近的信号的水平抖动,可以用RMS或者Peak-Peak值来衡量。 除此以外,还可以对眼图的上升时间、交叉点、幅度等进行测量,这些测量方法和前面所说过的波形参数测量差不多,只不过是针对眼图而不是单一波形进行的测量。下图是用示波器对一个10.3125Gbps信号眼图的各个参数同时进行测量的例子。 眼图的模板测试(Mask Test) 前面介绍过的眼图是一种快速对信号进行统计分析的测量方法,对于信号质量的定性分析和Debug比较有用,但是在有些情况下,仅仅测量出信号的眼高、眼宽等参数还不够,我们还需要快速判决该被测信号是否满足相应的总线的规范要求,这时候就会用到模板(Mask)测试。 所谓模板,就是把对于信号高电平的范围要求、低电平的范围要求、抖动的范围等的指标事先定义好,然后把这些要求做成一个模板文件。典型的模板定义由3部分区域组成,最上面的区域定义了对信号的最大幅度要求,最下面的区域定义了对信号的最小幅度要求,中间的区域定义了对信号的眼图张开度的要求。下图是一个3.125G的XAUI信号的模板的例子,显示了模板中不同区域的物理含义。 在进行眼图测试时直接把眼图套在这个模板上,如果长时间累积测量信号没有没有压在模板上,就说明信号满足了最基本的信号质量要求。 下图是一个对10.3125Gbps的信号进行模板测试的例子,信号质量很好,所有点都没有压在模板上(图中的3块阴影区域)。 如果被测信号压在了测试模板上,就说明被测信号质量有明显的问题,下面几张图分别反映出的是几种典型的模板测试失败的情况。 信号过冲造成模板测试失败 信号抖动造成模板测试失败 信号幅度不够造成模板测试失败 从上面的例子可以看出,通过模板测试,可以快速判决信号质量的问题,因此模板测试在很多高速总线的兼容性测试里都是必测的项目。 但是需要注意的一点是, 虽然眼图和模板的测试可以反映出高速数字信号质量的大部分问题,但并不是万能的。 即使信号通过了模板测试,也有可能其它参数不满足要求。 比如信号里各个抖动分量成分占的比例、预加重的幅度、共模噪声、SSC的调制速率和调制深度等,所以大部分高速的数字总线除了进行眼图和模板测试外还都会要求一些其它项目的测试。
  • 热度 31
    2016-5-23 20:30
    2332 次阅读|
    0 个评论
    在这里主要总结一下关于我对Testbench的应用和Quartus软件中自带的模板使用 1.Testbench         关于testbench,其实就是一种验证的手段。首先, 任何设计都是会有输入输出的 。但是在软件环境中没有激励输入,也不会对你设计的输出正确性进行评估。那么此时就体现出 Testbench 的重要了 -- 模拟实际环境的输入激励和输出校验的一种。在 Testbench中 你可以对你的设计从软件层面上进行分析和校验。           testbench更像一个激励的产生器。 举个简单的例子 一个简单的功能模块可能有几个input和output。 字数限制,直接上图.... 然后保存,添加仿真脚本,即可在ModelSim查看仿真信号了....... 总之,简单的来说testbench就是给模块中的输入信号做出激励赋值,用来验证仿真结果是否同设计需求   2.Quartus软件中自带的模板 位置如图:         关于Quartus软件中自带的模板我想很多伙伴应该和我一样刚学的时候都没仔细了解过.... 实际对于初学者,Quartus软件中自带的模板是官方提供的各种使用语法使用规范。所谓一千个读者就有一千个哈姆雷特...无论是查资料还是看别人的代码,感觉每个人的代码有每个人的"个性".......尤其是见到各种奇葩的书写,难理解不说...很浪费时间.....有同感的举个爪^^...........我只想说代码规范点无论在哪都很重要! 不废话了,下面以 single_port_ram 举个例子介绍一下模板的使用 有没有一种原汁原味的感觉....代码风格是不是看着简洁清晰....个人感觉如此昂! 我们在Verilog 中找到自己需要的模板  点击右下角 insert  就OK了  这样拿来直接用的模板  我们只要改写其中的一些数据就行,很简单吧.....有兴趣的自己看看别的,大致了解一下都有哪些模板,关键时刻直接插入就行了 下面再来介绍一下保存自己的模板,用的时候同样插入就行 好了....就介绍到这里.......各位如果有更多技能,请分享一下,谢谢!   备注:个人的工程习惯工程模板: 仅供参考 个人能力有限,出错请见谅,很期待能一起学习讨论
  • 热度 21
    2016-5-16 21:26
    1269 次阅读|
    1 个评论
    Object-oriented programming和generic programming处理的是类似的问题, 那就是——未知的数据类型。 前者处理的是运行时的未知,后者处理的是编译时的未知。 vector、迭代器、算法等,都属于generic program,而templates是generic编程的基础。 如果我们想设计一个generic类型,比如vector,或者编写一个generic函数,比如find, 此时templates就是我们的blueprint。 16.1 Defining a Template ---------------------------------------------------------------- 函数模板是一个公式,我们可以使用它产生特定类型的函数版本, 比如: template typename T int compare(const T v1, const T v2) {     if (v1 v2)         return -1;     if (v1 v2)         return 1;     return 0; } 而它们在运行的时候所产生的version,被称为模板的实例化(instantiation)。 下面的表达式不合法: template typename W, U W calc(const W t1, const U u1); 需要修改为: template typename W, class U W calc(const W t1, const U u1); 另外,template还可以用来表示某一类型的value值: template unsigned N, unsigned M int compare(const char (p1) , const char (p2) ) {     return strcmp(p1, p2); } 这样的template参数,我们称之为nontype,它可以是int、指针、lvalue的引用、函数类型, 但是它必须是一个constant表达式,必须具备static lifetime。 因为template的类型必须要在编译时被确定,而不是运行时。  * 函数参数in the template,必须是references to const。  * 函数体内的test,仅仅使用了“”。 使用references to const,我们就可以保证函数可以运行在不能被copy的对象上, 虽然到目前为止,除了unique_ptr和IO类型外,大部分数据类型都可以被copy。 另外,运用在大对象时,它能跑得快点。 除了函数模板,还有类模板。 某些时候,typename和class在模板里面的含义是一样的,但是为了方便起见,统一使用前者吧! 如果类模板的构造函数里面,有模板变量,那么我们必须使用尖括号来指定类型: template typename T = int class Numbers { public:     Numbers(T v = 0): val(v) {} private:     T val; }; int main(int argc, char *argv[]) {     Numberslong double lots;     Numbers aver; } (a) template typename T, U, typename V void f1(T, U, V);     错误,模板的参数列表必须每个单独有typename。 (b) template typename T T f2(int T);     错误,T不可复用为变量名。 (c) inline template typename T T foo(T, unsigned int*);     错误,inline关键字必须在template之后。 (d) template typename T f4(T, T);     错误,缺少返回值。 (e) typedef char Ctype;     template typename Ctype Ctype f5(Ctype a);     正确,模板参数会覆盖外面的其他name。 由于模板在使用时会被实例化,因此两个单独的源文件使用相同参数的相同模板时,它们会被分别实例化。 当项目非常大时,实例化的资源就很多了,为了避免这个问题,我们可以使用explicit instantiation: extern template declaration; template declaration; 16.2 Template Argument Deduction ---------------------------------------------------------------- 模板函数一般不做类型转换,而是直接产生另外一个实例。 除了以下两种情况:  * const conversions.  * Array- or function-to-pointer conversions. 因为自动类型转换的情况非常少,因此我们尽量不要让编译器产生困惑。 16.3 Overloading and Templates ---------------------------------------------------------------- 16.4 Variadic Templates ---------------------------------------------------------------- 模板有可变参数,函数也有。 16.5 Templates Specializations ---------------------------------------------------------------- 其实从前一小节开始,阅读已经有些困难了! 高阶内容留到对C++有足够经验的时候再学习。本学习笔记结束,算是C++正式入门啦~ 今后开始了解OpenCV,Good Luck!  
  • 热度 23
    2015-10-9 15:39
    5079 次阅读|
    0 个评论
    看到有些Proteus例程,里面有不错的界面,包含了logo、说明等,非常漂亮,而且这些图标是无法修改和删除的。比如MSP430和Adruino例程。     如果你也想做一个类似的设计图,需要做呢? 首先,新建一个空原理图。然后在Template菜单下选择 Goto Master Sheet 。   然后import Image,导入需要的图片或者Logo。下面就是导入了ATMEL社区的Logo。   然后选择Template菜单下的Save Design as Template,比如保存为atmel模板。下次创建原理图时,不要直接创建,而是选择通过模板创建。   创建后的文件就会带有ATMEL社区的图标,而且也无法修改、移动和删除。 模板需要复制到Proteus的Template文件夹下使用。
相关资源