如何用低技术实现高性能
pixabay.com
撰文 | 吴进远
责编 | 夏志坚
● ● ●
随着人类工业技术的迅猛发展,人们可以造出许多高性能的工业装备、仪器设备、智能产品等等。不过有不少人,包括不少科研工作者有一种想法,认为只有具备了高技术的条件,才能做出高性能的东西。这种想法有一定的道理,但如果绝对化就不对了。
对于科研工作者,仪器设备、器件制作上的条件永远都不可能达到完全满意。但如果我们勤于思考,巧妙使用现有仪器设备与设计制造工艺,就完全可以做成高水准的实验,制成高性能的器件。
在这篇文章中,作者准备通过一个现代的和一个历史的科研工作中的例子,讨论如何通过低技术实现高性能的问题。
为了帮助读者理解我们后面谈到的专业问题,这里我们考虑一个假想的例子。假设我们有一个金属尺子,可惜不太准,而且长度随着温度变化,冬天每个刻度的间距为0.9毫米,夏天为1.1毫米,这样一个尺子可以用吗?
根据我们多数人的直觉,这样的尺子是万万不可以用的。如果用了,比如用它卖布头,那么买布头的老太太一定会到工商局举报。
而除了这个尺子,我们没有别的尺子可用,该怎么办呢?
通过查文献,我们知道主流意见是把尺子放在一个恒温室里用。在恒温室里,我们用一个边长100毫米的石英砖块作为长度标准——石英的温度系数比较小,因此可以用来做长度标准——然后用一个测量装置不断地比较尺子100个刻度与石英砖块的长度。测量装置与温度控制器连接,短了升温,长了降温,构成一个负反馈回路。这样,尺子就可以准确地保持在每个刻度间距总是1毫米的状态。
可是,假如恒温室是尚未掌握的一项关键技术,该怎么办呢?
开开脑洞,确切说,只要不堵塞脑洞,换个思路,其实很容易找到一个凯发游戏的解决方案。我们知道,温度短时间的变化通常不很剧烈,我们只要用这个尺子,在短时间内多次测量作为长度基准的石英砖块,就可以反过来算出尺子上的刻度间距了。
比如在寒露的中午,我们要测量100毫米的石英砖块边长,测量了10000次,由于天冷手抖,4100次测得边长为我们这个尺子的104刻度,5900次测得105刻度。这样一平均,100毫米相当于104.6刻度左右,由此可以算出每个刻度间距0.96毫米。
而在冬至的晚上,测量100毫米的石英砖块边长,在10000次里,1200次测得的108刻度,8800次测得109刻度。这样平均100毫米相当于108.9刻度左右,因此可以算出每个刻度0.92毫米。
简单地说,要想得到准确的测量结果,一种方法叫矫正法,就是对尺子加温,把它烤到标准的长度。另一种方法叫标定法,就是容忍尺子的不准确,通过多次测量已知标准,标定刻度,以此校正未知的测量结果。从数学角度讲,二者没有本质的差别,但很多人在直觉上倾向于第一种方法。而如果我们能够仔细思考,修正直觉,完全可以达到用低技术实现高性能的目的。
作者在科研中遇到的一个问题是,如何在现场可编程门阵列(fpga)器件中实现时数转换器(tdc)。
首先谈谈时数转换器有什么用处。时数转换器的功能是把时间转换成数字量的器件。设想我们进入一个溶洞探险,想知道洞顶有多高,于是向洞顶发一个短脉冲的激光。激光打到洞顶反射回来,可以用光电器件接收转变成电脉冲。已知光的速度为每秒30万公里,如果能测出激光反射回来所需的时间,就可以算出激光往返走过的距离。要测量这个时间,就需要tdc器件,如果时间测量精度达到1纳秒,距离测量精度就可以达到15厘米,而如果时间测量精度达到100皮秒,距离测量精度便可以达到1.5厘米。也就是说,时间测得越准,距离就会测得越准。我们还可以进一步朝四面八方不同方向发射激光测距,将这些数据用计算机采集下来,从而绘制出溶洞内部的三维构造。要实现这一切,需要我们有足够精确的tdc。
时数转换器有很多种,其中一种构造如下图所示。
这种时数转换器是由一串时间延迟单元构成的延迟链,以及相同数目的寄存器构成的寄存器阵列,共两个部分组成。
当外来信号(in)到达,输入端信号从0变成1,于是延迟链上每一个节点也一个接一个地变成1。信号每传递过一个节点,都需要一个很短的时间,通常是几十皮秒到几纳秒左右。
寄存器阵列的时钟输入端与一个时钟信号(clk)连接,在时钟信号脉冲的上升沿,寄存器阵列将延迟链每一个节点的状况锁存起来,就像照下一张照片一样。这样就得到了一串0或1,信号已经通过的地方为1,尚未到达的地方为0。如果我们知道信号经过延迟线每一节需要多长时间,那么根据0与1分界点的位置,就可以算出信号是在时钟上升沿多久之前到达的。
可是,问题来了,怎样才能知道信号通过一节延迟单元需要多少时间呢?历史上出现了两个技术路线。
最早的方法有点像我们前面说的烤尺子,是一种矫正法,出现在使用专用集成电路(application-specific integrated circuit,asic)实现的tdc中。这种方法是设计一种可以调控的延迟单元,通过改变外加电压,改变对延迟单元的供电量,让它“饥饿”一些,从而减慢信号通过延迟单元的速度。比如我们设计一根32节的延迟链,信号通过整个延迟链的时间与一个3.2纳秒的周期信号比较。如果延迟链偏快了,就让它“饥饿”一些,速度慢些,反之如果延迟链偏慢了,就让它“吃饱”一些,速度快些。这样,就能确保信号通过每一节延迟链的时间始终维持在100皮秒。
这个方法的尽管电路比较复杂,但获得的结果比较简单好用。
随着电子学技术的发展,现场可编程门阵列(field programmable gate array,fpga)出现了。用户可以按照自己的需要,利用fpga设计实现几乎任何数字电路。相比于asic,fpga有许多优点,比如小批量应用时价格低,修改设计方便快捷等。于是人们很自然地想到,能不能用fpga来设计制作tdc呢?如果可以,会在科学实验装置、核医学成像等许多领域得到广泛应用,有利于提高性能降低价格,总之很值得一试。
不过,如果按照人们早期所采用的技术路线,是无法在fpga中实现tdc的。固然,在fpga中有链式结构可以当作延迟链,但是延迟链的延迟速度却是无法调整矫正的。对于想利用fpga来制作tdc的用户而言,调节延迟链的速度可以算是一个尚未掌握的核心技术。当然fpga的制作技术并不低,但无法调节速度这一点却是不如aisc的。曾经有一个时期,很多人因此认为用fpga制作tdc是不可行的。诚然,在fpga中使用原有的矫正方法(改变外加电压)确实是不行的。这就要求我们寻找其他技术路线,例如标定方法。具体的做法是在已知的间隔的两个时刻测量两次,看看信号在延迟线当中跑了多远,由此可以算出延迟单元的速度。这个方法与我们前面谈到标定尺子的方法类似,限于篇幅这里就不详细介绍了。
在tdc中,只要能测量并算出延迟线速度这个数据,那么它是否可调就不再是问题了。近十余年间,经过世界各地很多科研人员,包括很多国内科研院校的师生,也包括作者本人的努力,用fpga制作的tdc已经获得了长足的进步,并且得到了广泛的应用。从某种意义上说,巧妙地使用fpga中的“低技术”方法,完全可以达到asic中采用高技术方法所能够达到的高性能。
我曾经听一位老一代物理学家讲过一个科研故事。1948年5月9日,苏州上海附近发生日全食,我国两位物理学家用光电器件测量光强的方法观测了日全食。即使按照当年的标准看,对比天文台里精密的观测仪器,他们这套装备简直是土得掉渣。
他们的光电元件接在电流表上,计时装置是机械怀表,记录装置是钢笔。日全食发生时,天空逐渐变暗,直至全黑,然后再逐渐变亮。在这个过程中,他们一人从电流表上读光电器件产生的电流,另一人读怀表并记到本子上。当天天阴,专业天文台不幸没有得到观测机会,而他们的光强观测却成为为数不多的成果之一。
为了验证这个多年前的观测方法,也为了致敬老一辈科学家,在2017年8月21日日全食的时候,作者模仿制作了一套光强测量装置,如下图所示。
两个数字电压表分别与两个光电器件连接,计时装置是一只退役手机。数据获取与记录方法是用另一只退役手机拍摄视频。
回到家后回放视频,将电压表在不同时刻测到的电压记录敲进电脑,然后画成图,就得到如下的光强曲线。
从图中可以看出中间天黑了100多秒。我们用两条竖线标注天文预报的食既与生光时刻。结果显示,实际的天黑时刻与天文计算预报的时刻一致。实验证实,用土仪器也完全可以获得高质量的结果。
当一项高技术缺失时,研发这项高技术的科研人员自然应该努力把它做出来,不过这是需要时间的。因而对于准备应用高技术以期获得高性能的科研人员,就不应消极等待,而应主动动脑筋,想办法,寻找替代方案,哪怕是短时间内的替代方案。
对于具体的科研问题,我们常常会面临仪器设备不够高级,加工制作工艺不够精密等等困难。其实,这正是发挥科研人员聪明才智,想出巧办法的地方。事实上,一个没有困难的科研项目是一个乏味的项目。一个科研人员,能够遇到有困难的项目,应该说是科研生涯中一个金不换的机会。解决科研中的困难有点像《小马过河》,遇事不要被“关键技术”这样的大词吓住,能试试的就试试,把实践放在第一。很多时候,试一试就会知道,水固然不是很浅,但也不是很深。
对于主流意见认为只有使用某种高技术才能实现的高性能,我们不妨思考一下使用这种高技术与实现高性能是否存在过硬的逻辑关系?使用高技术是不是必须的?能不能用更低价格,更加可靠的低技术方法来实现我们需要的高性能。只要认真思考,您很可能就会用巧办法解决大问题。
实际上,科技的发展本来就是这样一个阶梯一个阶梯地前进的。我们都知道,没有高精度的机床,很难加工出高精度的零件。但是不要忘了,最早的高精度机床是用低精度的机床加工制造出来的。而更早的低精度机床里面的零件,很可能是用锉刀在台钳上锉出来的。因此,人类的工业技术并不是天生就很高,而是不断地巧妙利用低技术,造出高性能的东西,进而一步一步地从低技术走向高技术的。
由此不难看出,充分利用现有的低技术,实现尽可能高的性能,这并不是一个只有中国科研人员才会遇到的问题,而是全世界科研人员共有的问题。在这个方面做得好,则科技发展的步幅就会比较大。
后记:在构思这篇文章时,作者时常回忆起2016年里约奥运会时,中国女排夺冠的情形。女排以小组第四的成绩悬悬乎乎地出了线,上来就要对阵如日中天的巴西队,而中国女排此前曾累积对巴西女排连续18场不胜。即使过了巴西这一关,后面两场遇到的,又是在几天前小组赛中刚刚击败我们的荷兰与塞尔维亚。这三场比赛,几乎是场场被当作告别赛打的,而结局,三场都胜了。
我猜想,女排团队在赛前比谁都清楚与世界强队存在的差距,但她们一定不会是仅仅停留在认识差距这一步。比赛时,球迷组织啦啦队,喊:“中国队加油,中国队必胜”,固然光靠这个不一定能赢球。但是你能想象换个啦啦队,喊:“认清差距,理性客观,反对自大,虚心学习”,会有什么样的比赛结果?所以说,仅仅认识到差距,不管多么振聋发聩,不管贴上多少敢讲真话的标签,并不能自动解决所有问题。我相信女排团队在赛前一定想过很多,讨论过很多。更重要的,恐怕是想清楚了很多,然后付诸实施了很多。
我这篇文章也许可以算是个啦啦队之作,而各位读者自己想明白自己可以在什么地方发挥主观能动作用,在自己的小领域中做出高质量的工作,才是最有价值的。
制版编辑 | 潺潺