关于perl:为什么Python使用者远远大于perl

不认为 两者 的语法差别是造成如此场面的次要起因.perl的语法尽管比拟特立独行, 但也不是很难. 总结如下起因: library(或者叫package)的应用如果是本语言原生的library, 那没有问题. 如果是须要调用内部函数/过程的package的话, 那么就会有微小的差别. python是预编译而后从pypi上下载 python(pip)将package下载到本地 而后解压后将package内容装置到不同的指定目录perl是代码下载到本机后本机编译 须要在本机上安装c编译器, linker, pkconfig, 以及依赖的动静库... 构建之后, 再将构建生成物装置到不同的指定目录比方: PyQT/PySide装置后,会有一些动态链接库(*.so/*.dll/*.pyd)呈现在site-packages/pyqt5/的目录里. 能够证实python的package是all in one型. 从为数不多的Perl理论应用来看,本机编译比拟艰难,要装置许许多多的开发工具和辅助工具,常常遇到某某软件缺失问题,有时还会遇到莫名的编译失败 装置失败,不如python间接将编译好的动态链接库下载到指定地位,也不须要额定装置c/haskell/Ada或者什么语言的编译/构建环境,大大降低了入门的难度与所需常识储备(目前看来这是许多新畛域抉择python 而不是perl的重要起因。毕竟熟练掌握c程序的构建须要很多很多的常识储备, 一旦呈现装置问题 小白就抓瞎)。 所以心愿Perl社区认真改良这个问题(像python一样提供编译好的package), 进步应用体验. 不过,perl社区都是大牛, 可能不会呈现这种根底问题, 天然也意识不到 面对对象能力python perl都有一点面对对象能力。Perl的OO语法比拟怪异(而且有不同期间的不同实现). python的OO语法比拟正统(靠近c++ java c#这类OO支流), 学习起来比拟容易. 支流惯性因为长期将精力专一于Raku(以前的perl 6), perl社区错过了web2.0, 大数据, 人工智能 这些新热点. 造成在这些畛域衰亡之后, 抉择的次要语言是python, 新退出的学习者天然追随支流. 在生物信息 数据挖掘这些畛域, 因为畛域惯性, perl还是支流语言.

March 24, 2023 · 1 min · jiezi

关于perl:vim中perl与python处理文本的性能比较

终于想起账号-_-!! vim中perl与python解决文本的性能比拟又是一天不务正业, 本想把手上的小我的项目推进一步的,后果却迷失在了 如何给vim 加上XXX HACK NOTE等标签高亮显示上为了hack todo-vim 插件(大小字查找问题), 又花了大量工夫在vimscript+内置perl 交互上 在[2.]这步, 查到一篇也是很有帮忙的一篇 用vim解决巨量数据的文章. 其中有python也有perl也有vimscript,通过他的实际, python比perl(在vIM里)解决文本快得多.作为python / perl 双修修士, 有点不服气, 认为不可能有3倍差距.因而,也花了工夫重做了一遍benchmark 详情1. 生成测试用文件perl -e 'open my $f,">","test.txt"; for($i=0;$i<100000;$++) { print $f "\"value\"\n{\n \"wave\"\n \"wave\"\n \"wave\"\n \"wave\"\n}\n\n";}'文件 879992行, 6269943字节 2. 编写vim代码内容如下 function! test#pythonmod1() " 无正则 形式 let start_time = localtime() echo("开始解决...")python3 << EOFimport vim, revimBuffer = vim.current.buffernum = 0c = 0l = 0while l < len(vimBuffer): if vimBuffer[l] == '"value"': num = 0 elif vimBuffer[l] == ' "wave"': vimBuffer[l] = ' "wave' + str(num) + '"' c += 1 num += 1 l += 1vim.command("let c=" + str(c))EOF"redraw!echo("实现!\n共替换 " . c ." 行\n耗时:" . (localtime()-start_time) . " 秒")endfunctionfunction! test#pythonmod() " 正则版本 let start_time = localtime() echo("开始解决...")python3 << EOFimport vim, revimBuffer = vim.current.buffernum = 0c = 0l = 0p_value = re.compile(".*value.*")p_wave = re.compile(".*wave.*")while l < len(vimBuffer): if p_value.match(vimBuffer[l]): num = 0 elif p_wave.match(vimBuffer[l]): vimBuffer[l] = ' "wave' + str(num) + '"' c += 1 num += 1 l += 1vim.command("let c=" + str(c))EOF"redraw!echo("实现!\n共替换 " . c ." 行\n耗时:" . (localtime()-start_time) . " 秒")endfunctionfunction! test#perlmod1() " 无正则版本 let start_time = localtime() echo("开始解决...")perl << EOF $lnum = 1; $num = 0; $c = 0; while ($lnum <= $curbuf->Count()) { if ($curbuf->Get($lnum) eq ' "value"') { $num = 0; } elsif ($curbuf->Get($lnum) =~ ' "wave"') { $curbuf->Set($lnum, ' "wave' . $num . '"'); $c += 1; $num += 1; } $lnum += 1 } VIM::DoCommand("let c=" . $c);EOF"redraw!echo("实现!\n共替换 " . c ." 行\n耗时:" . (localtime()-start_time) . " 秒")endfunctionfunction! test#perlmod() " 正则版本 let start_time = localtime() echo("开始解决...")perl << EOF $lnum = 1; $num = 0; $c = 0; while ($lnum <= $curbuf->Count()) { if ($curbuf->Get($lnum) =~ /value/) { $num = 0; } elsif ($curbuf->Get($lnum) =~ /wave/) { $curbuf->Set($lnum, ' "wave' . $num . '"'); $c += 1; $num += 1; } $lnum += 1 } VIM::DoCommand("let c=" . $c);EOF"redraw!echo("实现!\n共替换 " . c ." 行\n耗时:" . (localtime()-start_time) . " 秒")endfunction因为无奈应用python2版本, vim只能运行python3python版本 ...

March 16, 2023 · 2 min · jiezi

BeginnersBook-Perl-教程

来源:ApacheCN BeginnersBook 翻译项目译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南本项目需要校对,欢迎大家提交 Pull Request。 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科)目录在 Windows,Mac,Linux 和 Unix 上安装 Perl第一个 Perl 计划Perl 语法Perl 中的数据类型Perl 变量my关键字 - Perl 中的本地和全局变量Perl 中的标量Perl 中的use strict和use warningsPerl - 列表和数组Perl 中的哈希Perl 运算符 - 完整指南Perl 中的条件语句 Perl 中的if语句Perl 中的if-else语句perl 中的if-elsif-else语句Perl 中的unless语句Perl 中的unless-else语句Perl 中的unless-elsif语句Perl 中的Switch CasePerl 中的given-when-default语句Perl 中的循环和循环控制语句 Perl 中的for循环Perl while循环Perl - do-while循环Perl - foreach循环Perl 中的until循环Perl 中的子程序Perl - 字符串Perl 字符串转义序列另见C 语言教程C 语言示例C++ 教程数据库教程Java 教程Java 集合教程Java 示例Java IO 教程Java 字符串教程JSP 教程JSTL 教程Kotlin 教程MongoDB 教程Perl 教程Servlet 教程

October 17, 2019 · 1 min · jiezi

自然语言处理之中文分词技术与算法

1 正向最大匹配法 1.1 正向最大匹配(Maximum Match Method, MM法)的基本思想:假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前字串中的前i个字作为匹配字段,查找字典。若字典中存在这样的一个i字词,则匹配成功,匹配字段被作为一个词切分出来。如果词典中找不到这样的一个i字词,则匹配失败,将匹配字段中的最后一个字去掉,对剩下的字串重新进行匹配处理。如此进行下去,直到匹配成功,即切分出一个词或剩余字串的长度为零为止。这样就完成了一轮匹配,然后取下一个i字字串进行匹配处理,直到文档被扫描完为止。 其算法描述如下:1)从左向右取待切分汉语句的m个字符作为匹配字段,m为机器词典中最长词条的字符数。2)查找机器词典并进行匹配。若匹配成功,则将这个匹配字段作为一个词切分出来。若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程,直到切分出所有词为止。 1.2 代码实现: !/usr/bin/python3-- coding:utf-8 --@Time : 2019/10/13 11:48@Author : Huang Shiquan@Email : 1357626165@qq.com@File : MM.py@Project : Unit3_SplitWords@algorithm : 正向最大匹配法class MM(object): def __init__(self): self.window_size = 3def cut(self,text): result = [] index = 0 text_length = len(text) dic = ['研究','研究生','生命','命','的','起源'] piece = '' while text_length > index: for size in range(self.window_size+index, index, -1): piece = text[index:size] if piece in dic: index = size - 1 break index = index + 1 result.append(piece) return resultif name == '__main__': ...

October 14, 2019 · 2 min · jiezi

MongoDB-将弃用Perl驱动-Perl还能行吗

由于使用者过少,MongoDB 宣布弃用 Perl 驱动。MongoDB 高级产品经理 Scott L'Hommedieu 表示,在过去几年中,团队调查了用户群体,并与使用 Perl 驱动的公司进行交流,得到的反馈是,用户对于通过 Perl 驱动支持 MongoDB 新功能的要求极少。另一边,MongoDB 社区自 2018 年以来,没有用户询问过 Perl 驱动相关的问题。 Perl 还能行吗,你怎么看? 新闻来源:开源中国

August 28, 2019 · 1 min · jiezi

画流程图的软件专门做结构流程图的软件

亿图流程图制作软件是一款用于绘制各种流程图,同时兼具跨平台,云储存,分享功能的专业流程图制作软件。操作简单,功能强大,非常容易实现可视化、分析和交流复杂信息。软件内置海量精美的流程图模板与图库,帮助你轻松绘制项目管理流程图,程序流程图,工作流程图,过程流程图等。如何用来绘制一个流程图呢 第一步 选择从模板创建或者创建一个新页面方法一:创建一个新的页面点击文件-新建-流程图。双击模板下的流程图选择需要绘制的种类,进入编辑状态。 方法二:使用模板创建程图点击文件-新建-流程图。当找到需要的模板时,双击模板或者点击右上角预览窗口下的创建导按钮,即可成功创建一个含有预设内容的流程图。 第二步 添加图形方法一:用图形的浮动按钮添加从左侧模板库中拖出一个流程形状。点击四周的浮动按钮。 方法二: 从库里拖放添加从界面左边的符号库里拖动一个图形。把拖动的图形移动到要吸附的标题旁,松开鼠标会自动链接。 第三步 排版和连接线样式排版十分灵活,可以智能的调整大小和对齐,还可以根据已经存在图形的位置标出对齐线,其自动性为我们带来便捷。 第四步 添加文本和其他内容添加文本双击流程图图形。输入文本。点击绘图页面的任意空白区域或者按 ESC 键完成输入文字。 另外流程图制作软件不仅可以添加文件,还可以添加超链接,附件、图释和其他内容以提供上下文信息。 第五步 美化功能流程图软件不仅在实用性上下足功夫,同时也相当注重美观设计,更改主题形状可以起到美化导图的作用。点击页面布局中的主题,我们可以根据自己的喜好选择,点击即可应用。 也可以点击页面布局的颜色按钮,打开更改主题格式下拉框,可以设置主题边框的颜色和填充的颜色。 还可以点击界面下方的填充条,或者按F4在界面的右侧将会显示更多的样式。 第六步 一键导出到Word,PPT作为专业实用性软件,和其他的软件有很好的兼容性,从导出格式上就可以看出来,支持12种导出格式,完全满足的日常办公的常用需求。制作好流程图。点击文件>导出。即可打开导出格式列表。 流程图制作软件不仅可以制作流程图,还可以通过其在线服务将制作的流程图共享给其他人。可以免费注册账号,通过账户登录即可使用在线服务。

May 27, 2019 · 1 min · jiezi

业务流程图制作wps流程图怎么制作

大多数人在工作中都需要做各种流程设计,日程排期表,头脑风暴,竞争分析,还有很多专业领域的图形图表来有效梳理自己的思路,提高工作效率。流程图的专业程度也直接影响着整个团队的工作效率。好的流程设计可以将复杂的数据进行清晰的展示,让团队分析或观看起来更加清楚明了。一般在企业、公司、科研、生产线、教学、医疗上等都会派上非常大的作用,一个生产流程,一幅工作流程、一个公司的运营模式都只需要用一张流程图就可以简单的概括出来,所以制作流程图是办公人员必备的武器之一。 绘制专业的流程图的必要性 当你对那些简洁美观的流程图感到羡慕不已,是否好奇它们是怎样做出来的,是否想知道需要什么样的专业技能。今天,这一切将变得非常简单,你只需要点击几下鼠标就能制作出属于自己的可视化流程图。而且一切操作都异常简洁。 流程图的基本符号 首先,设计流程图的难点在于对业务逻辑的清晰把握。熟悉整个流程的方方面面。这要求设计者自己对任何活动、事件的流程设计,都要事先对该活动、事件本身进行深入分析,研究内在的属性和规律,在此基础上把握流程设计的环节和时序,做出流程的科学设计。研究内在属性与规律,这是流程设计应该考虑的基本因素。 也是设计一个好的流程图的前提条件。 然后再根据事物内在属性和规律进行具体分析,将流程的全过程,按每个阶段的作用、功能的不同,分解为若干小环节,每一个环节都可以用一个进程来表示。在流程图中进程使用方框符号来表达。 既然是流程,每个环节就会有先后顺序,按照每个环节应该经历的时间顺序,将各环节依次排开,并用箭头线连接起来。 箭头线在流程图中表示各环节、步骤在顺序中的进展。 对某环节,按需要可在方框中或方框外,作简要注释,也可不作注释。 经常判断是非常重要的,用来表示过程中的一项判定或一个分岔点,判定或分岔的说明写在菱形内,常以问题的形式出现。对该问题的回答决定了判定符号之外引出的路线,每条路线标上相应的回答。 选择好的流程图制作工具 亿图发布第一款支持快捷操作的流程图制作工具从而极大的降低了专业流程设计的门槛,让大多数人可以在很短的时间里绘制出专业的流程图。 现在我来介绍一下亿图软件在流程图制作上的优势。常言道:工欲善其事,必先利其器。面对每天纷繁复杂的工作,好的工具是必不可少的。流程图虽然简单,但是在各行各业中也演变出很多细分领域。每个领域都使用自己特有的符号来表达。如果没有特别的需求,常用的流程图,可以直接选择基本流程图模板即可。如果流程处理设计多个部门,职能,则可以选择跨职能流程图。如果设计数据交互,可以绘制数据流程图。需要用来描述各个部门的职能和业务流程的可以选择工作流程图,顾名思义,工作流程图就是指企业内部发生的某项业务从起始到完成,由多个部门、多个岗位、经多个环节协调共同完成的完整过程。 在软件中,双击打开模板后,就可以使用预设的标准流程图符号。这些符号都是符合行业标准,并被行业熟知认可的。所以大家设计时,尽量不要随意弄一个没有含义的符号。 符号拖曳到画布中,是可以任何放置在任何位置的,很多人说,用Word就可以画流程图,那不是专业人士应该信的。Word更多是文字处理,而不是图文混排。 流程图制作技巧 这里我介绍一些用软件绘制流程图中经常遇到的技巧。 自由布局在拖曳形状的时候会出现辅助线,这些线条是供设计者用来参考被拖曳形状和周边形状的间距和对齐的。一旦出现等间距或者对齐线,就可以松开鼠标,间距合理不仅让流程图看起来更加专业,也让形状之间的线条不至于扭曲。 在设计过程中后期,每个符号都线条连接住,如果需要变更符号类型,往往需要先删除符号,再拖曳新符号,调整适当大小,再重新连接周边符号,最后编辑文字。这么复杂?其实不用,只需要选中符号,然后使用快捷按钮替换即可。 那如何让流程图从外观上瞬间专业呢?答案是使用强大的主题变换功能,通过变更主题,修改主题颜色,可以让设计者在流程设计中无需关心配色和整体色调。之需要最后更改主题方案和主题颜色即可。 说到最后,提一下亿图图示是支持在一个文档中创建多个页面的,每个形状都可以插入超链接、注释,定义符号数据,也支持图层操作。打印是所见即所得,可以缩放打印,也可以分页打印。可以导出成矢量级别的PDF格式,可编辑的Word文档,PPT原生文档。支持高DPI图片格式输出。新版本还支持云分享和跨平台。 只有流程图软件做的专业,才会让每个人都能轻松制作专业的流程图。

May 22, 2019 · 1 min · jiezi

Package Thermal Analysis

概述半导体器件散热的三个主要途径是:封装顶部到空气,或者封装顶部到散热片再到空气封装底部到电路板封装引脚到电路板在JEDEC中以热阻Theta来表示,其中ThetaJA参数综合了Die的大小, 封装方式,填充材料,封装材料,引脚设计,外部散热片和外部电路板的属性多个因素;ThetaJC和ThetaJB这2个参数是表征芯片和封装本身的,不会随着芯片封装外部环境的改变而改变。关于芯片外部温度的趣事半导体元器件"烫手"未必不正常,55C摄氏温度就会让人感觉发烫,很多大功率的芯片,表面温度可以达到85C摄氏度以上。对于Thermal测量的几个参数的困惑JEDEC对芯片封装的热性能参数的定义热阻参数ThetaJA,结到空气环境的热阻,= (Tj-Ta)/PThetaJC,结到封装外壳的热阻,= (Tj-Tc)/P, 一般而言是到封装顶部的热阻,所以一般的,ThetaJC = ThetaJTThetaJB,结到PCB的热阻, = (Tj-Tb)/P热特性参数PsiJT,结到封装顶部的热参数,=(Tj-Tt)/PPsiJB, 结到封装底部的热参数,=(Tj-Tb)/P其中:Tj - 芯片结温Ta - 芯片环境温度Tb - 芯片底部的表面温度Tc/Tt - 芯片顶部的表面温度按照JESD测量方法得出的ThetaJA热阻参数是对封装的品质度量,并非是application specific的热阻参数,只能是芯片封装的热性能品质参数的比较,不能应用于实际测量和分析中的结温预测。PsiJT和PsiJB和ThetaXX参数不同,并非是器件的热阻值,只是数学构造物。ThetaJAThetaJA是最常使用的热阻参数,也是最容易引起误解的参数。IDT公司的定义ThetaJA = (Tj - Ta)/P图1 ThetaJA_define_IDT.jpgThetaJA = (ThetaJB + ThetaBA) || (ThetaJC + ThetaCA);其中ThetaXY = (Tx - Ty)/PAltera公司的定义Without a heat sink, ThetaJA = ThetaJC + ThetaCA = (Tj - Ta)/PWith a heat sink , ThetaJA = ThetaJC + ThetaCS + ThetaSA = (Tj - Ta)/P实际上,Altera公司对加散热器的ThetaJA的定义不够严谨,散热器的引入相当于增加了一个散热通道,即增加了从管壳(Case)到散热器(heat Sink)的散热通道,所以加入散热器后, ThetaJA(heat sink) = ThetaJC + ( ThetaCA || ( ThetaCS + ThetaSA) ) 见图?? 由于ThetaCA >> (ThetaCS + ThetaSA), 所以上式才可以近似化简为: ThetaJA = ThetaJC + ThetaCS + ThetaSA, 其中ThetaCS通常是导热硅脂或者硅胶, 热阻非常小TI公司的定义根据TI文档spra953c的描述, JESD定义ThetaJA的初衷是为了一种封装的相对热阻性能可以被互相比较,比如TI公司的某个芯片的热阻性能和其它公司的热阻性能做对比,前提是两家公司都是用JESD51-x中规定的标准方法来做测试,但是大部分芯片的热阻系数不会严格按照JESD51中规定的标准方法进行测量。TI的文档中总结了EIA/JESD51-1, -2, -5, -6, -7, and -9中测量ThetaJA的标准方法:一个器件,通常是一个封装好的集成电路,其中包含做热性能测试的硅片,可以准确测量其功耗和最大芯片结温。该集成电路被安装也在一个测试电路板上.校准测试芯片的温度传感单元被测芯片和测试板放在静止的空气(ThetaJA)或者流动的空气(ThetaJMA)环境中被测芯片上电消耗已知或者可测量的功率被测芯片的功耗和温度达到稳定状态,测量芯片的结温被测芯片的结温和测量点的温度值二者的差值除以功耗,就可以得到ThetaJA(C/W)得到ThetaJA之后,硬件系统设计人员通常会依据下面的公式推导芯片的结温:Tj = Ta + (Power * ThetaJA)然而,ThetaJA这个参数不仅仅是和封装相关的参数,还和系统级的设计诸如PCB板和散热片有着强相关,改变PCB的设计,板材,层数和覆铜,都会极大改变ThetaJA的值。 | Factors Affecting ThetaJA | Strength of Influence (rule of thumb) | | PCB design | strong (100%) | | Chip or pad size | Strong (50%) | | Internal package geometrical configuration | strong (35%) | | Altitude | Strong (18%) | | External ambient temperature | Weak (7%) | | Power dissipation | Weak (3%) |Altera公司也提供了一个比较数据,用EP2S15器件作实验,EP2S15是Altera公司一款672管脚封装(FineLine BGA)芯片,当采用JEDEC 2s2p的测试板时,在静止的空气环境中测量Power, Tj, Ta推导出来的ThetaJA = 12.2C/W; 而采用10层PCB板(Dimension=2002001.6mm, Layer thickness and copper coverage = 25um and 50%)时,在静止的空气环境中测量Power, Tj, Ta推导出来的ThetaJA = 8.6C/W,二者相差几乎40%。因此,ThetaJA并非表征芯片封装热特性的参数,而是表征封装,PCB和其它环境因素综合的散热特性的参数。推荐这个参数用于比较不同厂家在等同测试条件下的散热特性,比如A公司的芯片的ThetaJA= 40C/W,而B公司同类芯片的ThetaJA = 45C/W, 那么B公司的芯片要比A公司的芯片发热多10%。但是,假如可以针对整个系统做热仿真并且考虑全部的因素(包括芯片Die的大小, 封装类型/大小, 散热片大小/特性, 实际使用的PCB板, 海拔等等), 采用系统级的热模型和仿真测量工具,得到的ThetaJA参数,那么整个ThetaJA的可用性还是很高的,仍然可以用下面这个公式比较精确的推导出芯片的结温:Tj = Ta + (Power * ThetaJA)为了区别对待,我们把通过系统级热仿真和测量得到的ThetaJA叫做ThetaJAE (E = Effective)所以,上式变成Tj = Ta + (Power * ThetaJAE)ThetaJC:Junction to CaseJESD引入ThetaJC的初衷是为了评估有散热片的条件下封装的散热特性,为此EIA/JESD51-1中定义ThetaJC为"从半导体器件工作处到芯片封装的外表面的热阻,芯片封装的外表面指最接近散热片的安装处",对于FC-BGA封装类型的芯片,“Case"就是芯片封装的top。ThetaJC的测量是通过将封装直接放置于一个"无限吸热"的装置上进行的,该装置通常是一个液冷却的铜片,能够在无热阻的情况下吸收任意多的热量。这种测量方式假定从芯片的Junction到封装表面的热传递全部由传导的方式进行。需要特别注意的是,ThetaJC是表征芯片管芯到管壳的热阻,是无法通过外部加装散热器来减少这个值的,所以,一旦ThetaJC非常大,即意味着这种封装无法通过加装散热器来解决。如图??所示。TO-92封装的ThetaJC高达83.3C/W,即使为此管壳的温度恒定不变,1W的功耗也能是它的温度升高83.3C。散热片的热阻 ThetaSA如图所示散热片的热阻,纵坐标是ThetaSA,横坐标表示强迫风冷的风速,可以看出,在周围空气静止的情况下,散热器的热阻ThetaSA= 10.3C/W。在环境风速达到800LPM时候,散热器的热阻ThetaSA= 1.5C/W。SOP封装图??普通SOP封装散热性能很差,SOP封装本身有很高的热阻,对外的热量传递主要有三个途径:Die的热量通过封装材料(mold compound)传导到器件表面,再靠空气对流散热,本身器件是低导热的封装材料,影响散热效率Die的热量通过PAD到器件底部和PCB接触的地方,通过PCB散热Die通过引线框架(lead frame)传递到PCB,lead frame和Die之间是极细的键合线(Golden wire), 因此Die和lead frame之间存在很大的热阻下图是一种改进型的SOP封装, PAD从封装底部外露,并焊接在PCB表面,或者在PAD底部焊接一个金属块,焊接与PCB表面,消除了封装材料和空气之间的大热阻FCBGA封装典型的FC-BGA封装为了达到比较高的散热效率,去掉了导热效率很差的Mould Compound,顶部采用铝制的Lid,Lid和Die之间填充导热效率非常高的Thermal Grease,Lid可以起到heat spreader的作用; 同时C4 bump和substrate之间也有underfill Expoxy,从substrate到BGA BALL会增加一些thermal vias。各种不同封装材料的导热系数, 可以看出Mold Compound的导热系数要比金属材料差3个数量级。| Material Type | Conductivity (W/m.K) | | ————- | ——————– | | Copper | 390 | | Gold | 296 | | Aluminum | 200 | | Silicon | 118 | | Solder | 50 | | Mold Compound | 0.68 | | Substrate Dielectric | 0.2 | | Still Air | 0.025 |所以在一些文档上宣称的,FC-BGA的大部分热量是从底部通过BGA BALL和PCB走的,这是针对Mold Compound的封装而言。对于采用铝制的Lid,同时Lid和Die之间填充Thermal Grease,大部分的热量实际是从顶部走的。实际的FC-BGA封装散热系数仿真分析结果如下图所示的一个实际的FC-BGA封装的芯片,评估功耗是29.24Watts, 芯片周围的环境温度是55C, 风速{0, 100, 200, 300, 400, 600, 700} ,仿真的环境采用Jedec规定芯片封装的各个部分的导热系数如下: | Component | Conductivity (W / mK) | | Die | 147 | | C4 Bump | 60 | | HS/TIM | 401/1.92 | | Solder Mask | 0.42 | | Substrate PP | 0.49 | | Substreate Core | 0.65 | | Solder Ball | 57 |Note1: HS = Heat Spreader, it is the LidNote2: TIM is the Thermal Interface Material b/w Die and HS, it is 1.92, but coz it is very slim, so the final thermal resistance is small.可以看出从Junction => Die => TIM => HS (Heat Spreader)一路上的导热系数都是很大的,即热阻都很小, 所以Junction的大部分热量都是散发到顶部的,这时候加装散热片就非常有效。计算得出Package本身的热阻值:ThetaJC = 0.32, 和 ThetaJB = 0.81这两个值是个恒定值,不随散热片,环境温度,风速,PCB等这些package之外的因素而变化。当Ta = 55C, 采用8层板和6层板在不同风速下ThetaJA的值如下:|| PCB Layers || Power (Watts) || Thermal Resistance || 0 || 100 || 200 || 300 || 400 || 600 || 700 ||||<|4>8 ||<|2>29.24 || ThetaJA || 2.19 || 1.70 || 1.32 || 1.11 || 0.98 || 0.83 || 0.78 |||| ThetaSA || 1.84 || 1.35 || 0.96 || 0.74 || 0.60 || 0.45 || 0.40 ||||<|2>33.21 || ThetaJA || 2.14 || 1.68 || 1.30 || 1.10 || 0.97 || 0.83 || 0.78 |||| ThetaSA || 1.80 || 1.33 || 0.94 || 0.73 || 0.59 || 0.44 || 0.39 ||||<|4>6 ||<|2>29.24 || ThetaJA || 2.32 || 1.80 || 1.38 || 1.16 || 1.01 || 0.86 || 0.80 |||| ThetaSA || 1.96 || 1.43 || 1.00 || 0.77 || 0.63 || 0.47 || 0.41 ||||<|2>33.21 || ThetaJA || 2.27 || 1.78 || 1.37 || 1.14 || 1.00 || 0.85 || 0.80 |||| ThetaSA || 1.90 || 1.41 || 0.99 || 0.76 || 0.62 || 0.46 || 0.41 ||通常情况下,对于自己有热设计能力的客户,只提供ThetaJC和ThetaJB就足够了,客户自己会选择合适的heat sink和PCB做热仿真;对于无自己热设计能力的客户,需要额外提供给尽量接近实际情况的ThetaJA值,以方便客户评估。参考文档Thermal Considerations in Package Design and Selection, APPLICATION NOTE, AN-842, Revision A, 05/12/2014, IDT CorporatoinThermal Management for FPGAs, Application Note, AN-358-4.0, Altera Corp. March 2012Semiconductor and IC Package Thermal Metrics, Applicatoin Report, SPRA953C-December 2003-Revised April 2016, Darvin Edwards, Hiep Nguyen, Texas Instruments IncorporatedFlip Chip Ball Grid Array Package Reference Guide, Literature Number: SPRU811A, May 2005, Texas Instruments IncorporatedMaxim Integrate: https://www.maximintegrated.c…IC的热特性-热阻, Application Report, ZHCA592, January 2014, 刘先锋, 秦小虎, 肖昕JEDEC: JEDEC specifications are available at: JEDEC. Note that the JEDEC standards cover different thermal applications.JEDEC Specification TitlesJESD51: Methodology for the Thermal Measurement of Component Packages (Single Semiconductor Device)JESD51-1: Integrated Circuit Thermal Measurement Method—Electrical Test Method (Single Semiconductor Device)JESD51-2: Integrated Circuit Thermal Test Method Environmental Conditions—Natural Convection (Still Air)JESD51-3: Low Effective Thermal Conductivity Test Board for Leaded Surface Mount PackagesJESD51-4: Thermal Test Chip Guideline (Wire Bond Type Chip)JESD51-5: Extension of Thermal Test Board Standards for Packages with Direct Thermal Attachment MechanismsJESD51-6: Integrated Circuit Thermal Test Method Environmental Conditions—Forced Convection (Moving Air)JESD51-7: High Effective Thermal Conductivity Test Board for Leaded Surface Mount PackagesJESD51-8: Integrated Circuit Thermal Test Method Environmental Conditions—Junction-to-BoardJESD51-9: Test Boards for Area Array Surface Mount Package Thermal MeasurementsJESD51-10: Test Boards for Through-Hole Perimeter Leaded Package Thermal Measurements.JEDEC51-12: Guidelines for Reporting and Using Electronic Package Thermal Information. ...

March 15, 2019 · 4 min · jiezi

-Base62x 新增 -Perl 版本技术实现 Base62x.pm

在此前的一篇Blog(-R/G2SW )中,“-gMIS 吉密斯优化更新+分组项区段AddGroupBySeg/+复制AddByCopy等”, 我们提到“注册动作registerAct: 改进增加 Base62x.class.js”, 初尝跨编程语言、运行时环境进行数据交换的便利,这次也因着部署一个新的 -GWA2 的项目,需要在 -PHP 和 -Perl 中进行多字节非ASCII字符数据的传递,于是就推荐了 -Base62x , 这样 Base62x in Perl 的工作就排上日程,在两个周末的实验下,完成了 Base62x in Perl 的初个版本. 如下是一些使用细节,同时也可以在 -GitHub-Wadelau 上寻找获得, 或者直接访问 -Base62x .1. 面向对象编程OOP的 Base62x.pmuse Base62x;my $base62x = Base62x->new();my $str = “Hello World!\n”;my $encoded = $base62x->encode($str);$str = $base62x->decode($encoded);在 Perl 程序的开始,引入 Base62x.pm , 然后生成相应的对象实例,通过调用 该实例的 encode/decode 方法实现相应的编码与解码。同 Base62x 的其他版本相通,实现了跨编程语言、运行时环境的数据安全交换。同 Base62x的其他版本一样,Perl版本也实现了针对数字进制转换和ASCII快捷处理的相关方法。如,my $i = 100; # treas $i as base 10 and transform it into Base62xmy $numInBase62x = $base62x->encode($i, 10); # try to decode a Base62x num into base 10$i = $base62x->decode($numInBase62x, 10);OOP的调用方式,适合进行循环内反复调用的使用场景,由于在实例化时,进行了环境变量的初始化而节省了后续重复动作。.2. 函数式编程的Base62x.pm除了 OOP式的写法,Base62x.pm 还提供了函数式编程的调用方式,列如下。use Base62x qw (base62x_encode base62x_decode);my $str = “Hello World!\n”;my $encoded = base62x_encode($str);$str = base62x_decode($encoded);函数式编程适合单一次启动并运行的使用场景。详细实现可以参考 Base62x.pm 的代码。.截止目前,Base62x 已经可以提供的编程语言版本包括 C, Java, PHP, JavaScript, Perl. 其中JavaScript 还有两个实现, Base62x.class.js 和 npm base62x.Base62x: An alternative approach to Base64 for only-alphanumeric characters in output.Base62x is an non-symbolic Base64 encoding scheme. It can be used safely in computer file systems, programming languages for data exchange, internet communication systems, and is an ideal substitute and successor of many variants of Base64 encoding scheme.Base62x 是一种无符号的Base64编码方案。在计算机文件系统、编程语言数据交换、互联网络通信系统中可以安全地使用,同时是各种变种Base64编码方案的理想替代品、继任者。-R/J2SL ...

January 21, 2019 · 1 min · jiezi