|
|
撰文|吴进远6 J% {& G& p3 W4 A0 k
" V' x! E6 ~1 e" J搞任何科学技术工作,除了资源赛道,别忘了还有个聪明才智赛道。. l9 @3 X( l( V: ]' J! m7 H1 ?
我们的科学研究与技术开发传统中,有很多东西值得我们学习、借鉴、继承、发展,其中一个,我管它叫做:穷孩子精神。穷孩子精神这个词本来是褒义,只是现在有的人可能听着不舒服。不舒服就不舒服吧,与其创造一个新词,不如把这个旧词恢复成它原来的褒义。具体到科学研究和技术开发中,穷孩子精神就是勤于思考,不浪费资源,把有限的资源用到极致。( V( d& y# q* Y, ^2 v
穷孩子精神并不是一个陌生的概念,在80和90年代出国的留学人员中,多数人开始时经济上都不富裕,几乎都自己修过汽车。逛山姆店也主要是为了买些量贩大包装食材,压根没听说过托举什么的。更早一些,我们上小学时候,语文书里都有这样的课文:艰苦奋斗、厉行节约、精打细算、省吃俭用。
: @- y$ ~9 P, K) k) v, o- U, P近两年在人工智能领域,以DeepSeek为代表,通过改进算法效率,用很小的算力成本,获得了很好的成果。人们谈及这种改进算法效率的做法,即使有些赞扬的人,也认为这是算力不足情况下的无奈之举。但是我觉得,不应该把这当成无奈。这种充分利用资源的做法是一个早就该做但实际上一直没有人做的事,是个迟早要做的事。这实际上可以看成是穷孩子精神这种科技研发传统获得的一项成功。
! [8 n3 e; J" p3 Q# ~" r3 Z具体在科学实验中,我们经常会用到一些土办法来解决实际问题。土办法不是粗陋凑合事的意思,而是开拓思路,用奇思妙想来创造条件。8 R6 m9 Z, }) u+ M: Z) A. f
4 @" r! c6 l" \论科研方法中的穷孩子精神
$ F+ L. _, b" D$ |+ k) w2 R# \; [' U! P. _% i
0 k" d6 `( o" n. G作者2019年在《知识分子》公众号上写过两篇文章:《如何用低技术实现高性能》和《小聪明怎么解决大问题》。* L& t4 ^7 G0 T, O, V3 q
5 f# T. q* |# C, x+ \
即使不看内容,光看标题,大概很多朋友都会评价它们是穷人思维方式。的确,我在那两篇文章中谈到的很多科研方法与技巧,都可以归纳为穷孩子精神。& x3 v& h4 _- \; F( ~7 V* k
最新这篇文章的目的,是向在科研各个领域的读者,通过一些例子,介绍由穷孩子精神形成的各种具体科研方法。期待大家能得到一些启发,从而在自己领域的日常工作中,取得更多的成果。
" e2 ^6 W0 q% @" g7 s' b- z! t5 W. W% O3 s
01 摩尔定律的负面影响
. P0 p; v# y# E0 P8 y) |0 w) h. Q) V- C* q, J
% ]$ d; e0 _5 E
摩尔定律已经存在几十年了,但这几年挺出圈,大多数论者都是溢美评价,对此,就不重复了。任何事物都有正负两面,摩尔定律的负面影响却很少有人谈及。8 B8 K" Y) E: D& x3 `* y1 x" @0 f
这里谈及摩尔定律的负面影响,并不是说摩尔做错了什么。他对半导体产业当时的情况做了观察总结,在这个基础上对产业的未来发展趋势做了预测,这都是很有用的事。问题出在一些簇拥者的造神运动。摩尔的看法可以叫做摩尔预测,可是如果像牛顿定律那样使用定律这个词,就相当不伦不类了。' k: @) k* S0 n- y
在半导体器件应用包括计算机领域,近几十年除了少量正常的思考创新派,还有数量巨大的堆砌资源派。数据处理量大了就简单增加CPU,GPU或者FPGA的数量。由于摩尔定律存在了几十年,因此后者常常可以躺赢前者。这就造就两代到三代完全不懂思考创新的人,包括财经金融业里的各类高管们。( ~' M5 E R; r4 j4 V
实际上,在资源利用算法效率等方面有遗存了几十年的改进空间,把这些油水稍微挤一下,就会出来很大成果。比如DeepSeek的人靠巧劲,力小也能砖飞,捅破天了。
' ]% J2 T* b- N8 R4 }# V' f3 R随便举个例子吧,计算机里硅片面积以及电能等资源消耗最重要的部分之一是乘法运算。乘法运算资源占用量与数字的位数的平方成正比,在十进制和二进制中都是如此。比如计算两位数乘法,像26x79,要背4次九九表,三位数乘法123x456要9次,四位数1234x5678要16次,等等。所以涉及到大量计算时,能够用位数比较少的数字代替位数比较多的数字,就能节约很多资源。在同样的GPU里可以快很多。
7 V9 {7 l* Z0 \' l* K( D8 _但位数少了,数字的精度就差了。经过很多次计算,每次计算的误差就可能积累起来,最后带来判断错误。要想使用较少的位数的数字,就必须想清楚问题的根本,确保经过很多级计算之后,误差不会积累得太大。
- G5 Y0 J6 T/ C- ]; v1 _; ~/ h我们现在应该庆幸在摩尔定律成气候之前,通过1805年的高斯,到1965年的Cooley和Tukey的工作,快速傅里叶变换(FFT)出现了,对比原始定义的离散傅里叶变换(DFT),FFT比DFT计算效率高得多。尤其是采样点个数增加时,FFT的计算量增加比DFT要小得多。具体说DFT是按照O(n^2)速度增加,而FFT是按O(n*log(n))速度增加。这样一来,当采样点增加为原来的4倍(比如从1024点增加到4096点),DFT计算量增加16倍,而FFT的计算量只增加大约4*1.2=4.8倍左右。
4 v+ C& P, Q4 S! g我们可以做个思想实验,想象高斯、Cooley、Tukey在1990-2000年间到一个互联网大厂工作。在那里,他们会很难说服周围的资源堆砌派们使用FFT,因为太confusing。至于DFT计算量大,资源堆砌派们会说,只要等若干个月,新的CPU或者GPU出来,就不成问题了。但是他们会不会愤而辞职另寻高就还真的不好说,因为周围所有的公司里,都是资源堆砌派们躺赢。
, ~$ g' ?: r. j/ E& G* zFFT中最有价值的思想,是把n变成了log(n),而这个思路对减少计算量或者减少硬件资源消耗有着远超过FFT的实用意义,我们有时甚至会不自觉地用到这个方法。这个话题比较长,需要另外的场合讨论。但在过去几十年间,很多本应出现的巧妙方法,被实际的开发者错过了。, X# y; M2 {+ E5 u& p. R a
# J$ h( O6 K) L0 h" m: g7 k- Z
02 炸火箭
! U& |/ Z& f/ |! [' J
0 G: V$ {; I2 b1 [( T/ i) D! ~- @% R; m0 R6 m2 T9 R/ C
穷孩子精神反向走到极端,是马斯克等人的炸火箭。炸火箭这事本身并不是绝对没有道理,一般而言,实验获得的信息通常会多于非实验方法,比如推导、论证、仿真等方法获得的信息量远不如实验。做出火箭来炸固然需要花钱,但推导、论证、仿真也要花钱。实际上,员工上班想事情或开会讨论都是有人力成本的。相比之下,火箭的钱不见得会贵很多。因此在某种意义上可以说:穷则勤于思考,达则炸火箭。- I; m# p+ k. c, @3 L( ^3 {" t
3 I$ n# H$ S/ g% H% z6 E; ?
SpaceX的火箭。图源:SapceX$ q5 l5 k; l( c } b
, C+ ]" r& `' |3 ~ U0 E( I
我自己在FPGA上做数字设计或写计算机软件时,基本不仿真,编译出来直接上载到硬件中试运行,运行中看到问题再改,改完再试运行。通常我们管这种做法叫互联网时代的快速迭代,和炸火箭做法差不多。这样做的原因是仿真的时间成本高于试运行,很多时候为了仿真几个毫秒的运行过程,在电脑上要计算半个小时,所以这种情形下宁可放到实际的硬件里直接测试。. Z7 O3 G' b9 F: L, m+ A8 P
不过,与炸火箭不同,试运行并不需要多花钱。此外,如同我们经常说的,很多知识是用钱买不到的,因而很多数据也是炸火箭得不到的,至少火箭爆炸后就没有正常运行的数据了。很多东西,还是要靠人的头脑去想的。即使光算经济帐,炸个火箭即使按最低估计只算1000万美元,也能支持上百人月的思考成本了。5 J0 G1 k! U, h. o* _" ^& q
当然,炸火箭的新闻和广告价值很高,估计这是马斯克等人乐此不疲的原因。但有些新闻价值是负面的,设想将来要有多少次火箭不炸,才能使人们产生信心,敢坐这样的火箭?即使不载人,发射高价值载荷,有没有保险公司愿意承保,保费要多高,这些都是问题。
( m" ]% Z! G- ~' ~- ]; M所以,所谓互联网时代产品快速迭代这种方法的适用范围是有限度的。穷孩子精神在互联网时代并不过时。. N7 r5 y) M/ s# C& L
6 l& q" o2 ~' H7 n8 H( q8 |
03 一个例子:Wave Union TDC的故事$ \6 s/ E1 o3 S) I/ B
1 ]" l: G. g) Z4 f4 [
0 w) A1 X n6 @到这里,有的读者可能会说,你让青年人要这样要那样,你自己做得怎么样呢?好,我就聊聊我自己做过的一项工作吧,一件依靠穷孩子精神做成的事。
' x& @' E& B( r$ C' F我在《如何用低技术实现高性能》这篇文章中谈到过用现场可编程门阵列(Field- programmable- Gate- Array,FPGA)做时数转换器(Time to Digital Converter,TDC)的事。- h* L& `: _0 u! ^' j
做TDC本来是属于富人俱乐部的事,因为开始时TDC都是用特定应用集成电路(Application-Specific Integrated Circuit,ASIC)来做的。做ASIC是由用户设计整个芯片中的所有电路,然后送到生产厂家经过制版光刻等所有芯片制造步骤,最终制做出用户需要的集成电路。小批量流片一次常常需要上万美元,甚至几十万美元。
7 R# b4 z* ?$ C; b$ W# e而使用FPGA往往属于穷人行列,通常几百美元就能买到验证板,如果只买FPGA芯片就更便宜了。
3 g4 _& F# o/ k# \( F那么,用FPGA做TDC可以吗?应该说理想丰满现实骨感。: A p' z3 u5 h
TDC可不是一个简单随便的数字电路,这里面涉及许多电路本身性能的细节。常用的TDC里面是一条很多节的延迟线,后面跟了一串寄存器,如下图所示。
6 [' T# b: d: _$ G* [8 S
W2 j$ J2 q. ]' H! p" V
: O$ B% `9 k1 }7 a0 D Q
% S% T2 q7 [; A7 \# S+ K
) ?; E" p- \# l9 c6 P待测量的信号接在延迟线输入端,一个周期性的时钟信号让寄存器不断地记录下延迟线中的0或1的状态。如果有信号到达,寄存器中就会在时钟信号上升沿那一时刻,记录下延迟线中0到1变化的位置。知道这个位置,如果知道信号在延迟线中传输的速度,就可以算出,信号是在时钟上升沿之前多久到达的。
. e' C6 t8 t) @, U8 f. t就像下面这个玩具火车,我们想知道火车是什么时刻进入浅蓝色箭头标注的位置的。为此,我们每隔10秒拍一张照片。尽管我们不一定能碰巧拍到火车刚好到达的照片,但我们可以拍到火车处于直线轨道上某一位置,比如从起点数第29根枕木。如果我们知道火车开动的速度,比如每0.1秒走过一个枕木,则我们可以算出火车是在快门打开2.9秒之前到达的。
( C: e$ I, ^/ L- g4 K! N, o7 ?( j1 [6 R. W8 S: M, h( A5 c
9 O+ b! T M+ L: J
# u4 h! p: ]" U# C# ?
那么,怎样知道信号在延迟线中的速度呢?在ASIC中设计时,可以通过一个反馈环来控制这个速度。具体做法是设计一种可以调控的延迟单元,通过改变外加电压,改变对延迟单元的供电量,让它“饥饿”一些,从而减慢信号通过延迟单元的速度。比如我们设计一根32节的延迟链,信号通过整个延迟链的时间与一个3.2纳秒的周期信号比较。如果由于外界温度变化,延迟链偏快了,就让它“饥饿”一些,速度慢些,反之如果延迟链偏慢了,就让它“吃饱”一些,速度快些。这样,就能确保信号通过每一节延迟链的时间始终维持在100皮秒。! Q$ F" B5 J) p5 U" [
就像我们调控给玩具火车供电的电压,快了降低电压,慢了增加电压。这样,面多加水,水多加面,就可以让它按照我们需要的速度运动。* y: n8 D6 T9 R: Z% }# Z! I6 ]* @
2 N" h. e) P, D0 Q8 u a7 Y) F( w
& Z1 w! @; T# x0 P: z
. j" d# g _* D0 O! T# _5 S
不过,这种调控延迟线信号速度的事,在FPGA里无法做到。在FPGA里,厂家设计的进位链,通常是用来搭建加法器的,每个延迟单元的延迟时间无法控制。而且,如果温度变化,或者供电电压变化,则这个延迟时间还会变化。& A; G+ N. q8 \
所以,用FPGA做TDC是困难重重的。
2 R. m2 S v' }, {; I) p最富有戏剧性的,是在2008年的一次学术研讨会上,大家各自报告了自己的工作之后,请一位本领域权威人士做总结。我的工作得到的评价是:“FPGA TDC is problematic”。我后来专门到字典上查了一下problematic这个词,大概意思是麻烦多到令人绝望,很可能这条路一开始就走错了。一个科研工作者能够有这样的抓马提克经历,应该说是一生的宝贵财富。, h# l c0 ]7 ?! F" [& a( Y
其实,在诸多困难之中,延迟链速度不可控制还真不算是个大问题。只要像下图这样,把延迟链加长一点,在两个相邻的时钟上升沿拍摄两张照片,就可以算出延迟链的速度。& j3 \- V, V7 i/ `
) P# l9 y; {" [
% q" }4 Y: Y6 Z5 b& K: C( n% k# I# _- G4 e. d2 C/ q$ }
比较大的问题,是延迟链中各个延迟单元不一致,有的延迟时间长一些,有的短一些。不过这也不是太大的困难,我们在TDC运行时,可以通过测试,把每个延迟单元的延迟时间测出来,然后通过查表,就可以换算出实际的时间值。
) @# F Y7 b% V, V" K, j9 ]最大的问题,是有一些单元的延迟时间超长,这是会真正影响TDC性能的。在FPGA中,若干逻辑单元被组织成一个逻辑单元块。信号在跨越不同单元块的时候,由于需要更多的驱动电路,因此延迟时间更长。有时,时钟信号到达不同单元块的时刻也有偏差。体现在TDC中,就是下图中哪些非常宽的时间bin。
" @2 t- d9 o! b( ~, Z. n' x/ z" H7 L# g4 g+ r
) I; G% Z, U% E1 H1 V. D
- {! R* i; _7 ]: p
大家可以想象我们玩具火车轨道枕木的间距不均匀,有的距离远,有的距离近。而有些枕木之间的距离则远得离谱。& E' O! t* l6 u. z! q7 e
在TDC里的超宽时间bin,会带来很大的测量误差。这种超宽bin虽然数量不多,但对测量误差的贡献却比那些正常宽度的bin大很多。
c, d% B4 A5 d+ n! e这个问题是FPGA天生的,厂家就是这样设计的,用户没有办法把它拿掉。而用FPGA来做TDC是一个非常小众的应用,你给厂家提意见,他们也不会针对我们这个需求来做优化。这就需要我们发挥穷孩子精神,动脑筋想办法,把这个麻烦绕过去。
' z7 T$ S& n, _: H9 J超宽时间bin带来的问题是在有的时间段,时间测量精度很差,但在其他时间段,测量的精度并不差。这就提示我们可以用两个测量起始时间互相错开的TDC并联起来,做互补性的重复测量。假设在某一时段,第一个TDC处于超宽bin中,测量精度差,但第二个TDC却处于正常的范围,可以提供精度正常的测量。反过来,在第二个TDC处于精度差的情况下,第一个精度正常。这样在任何时候,至少有一个TDC测量精度正常。
& A$ F( N9 @8 w7 d) f3 V; R- H# C但如果真的搭建两个TDC,则占用的硅片资源必须加倍,经历过穷日子的人打心眼里就不愿意加倍这份资源,于是就想出了Wave Union TDC这样一个方法。
" {+ z6 k: V) |1 O% S% H$ }. x所谓Wave Union TDC是指当输入信号到达后,让一个Wave Union在延迟链中开始传播,如下图所示。注意普通的TDC在输入信号到达后,只有一个0与1之间的跃变在延迟链中传播,而Wave Union TDC却有多个跃变。
. ?# j% }* i. w+ a; ?1 l- s0 z8 d# s
" @. e% G" ^& x4 M0 J# [9 Q+ S6 l# ^5 T1 f8 [: x7 a
6 y& }" H# A3 S
这样一来,一套TDC结构可以同时进行多个测量,资源基本没有增加,测量精度却提高了。 y3 R5 j4 a" L. K
自从Wave Union TDC这个工作发表之后,十几年来,大约几百位作者,根据自己工作的需要,对Wave Union TDC做了许多的改进。甚至有许多作者以这个小领域的工作作为博士论文的主要内容。下图是在Google Scholar上做的一个粗略的搜索。
0 o+ D' J- G- f5 g
9 b+ p3 ?* Y& S, f0 v3 r
* p: x0 ]% k% o# i) ]9 J; U; j# S0 f+ f9 Y3 Z! d' `' Z9 U
顺便提一句,这个发明并没有权威人士正式地用我的名字命名。但现在很多作者把Wave Union TDC简写为WU-TDC,所以近似于用我的名字命名了。我们一直说近代科学领域很少有中国人名字命名的发明创造,现在我能贡献一个,还是挺好的。希望以后的科研工作者也更多地贡献。: Q) F, m0 o* [* u# {: p L0 y2 O
5 U3 p( v: Q7 i! z' Y8 }
科学实验中的土办法1 |4 H8 I% L! z: s/ d2 u2 V3 ]
. Z1 f* K; M5 v5 A9 L1 [
1 n) n( `2 L8 Z9 h; K6 R+ h
前面我们谈到了科研中的穷孩子精神。具体在科学实验中,我们经常会用到一些土办法来解决实际问题。穷孩子精神,土办法不是粗陋凑合事的意思,而是开拓思路,用奇思妙想来创造条件,让通常认为条件不成熟,不可行的事情变得可行。
" [9 W" s3 y2 F9 p; `( T. |( u, G我们通过几个例子来说明这个观点。& W, a6 N, u) a
+ i) f$ @3 W- S. W* B
04 一个科研故事
; _1 T/ M& p% Q6 ~$ X! P# ]! D% D. z p! J
6 r/ }6 g) U6 \- V' `4 S) @这里讲一个20世纪60年代末期我国人工水晶生长方面的科研故事,来说明这个观点。
; H; F0 \6 j5 A; n水晶又名石英,是二氧化硅的单晶体,它比大家熟悉的做芯片的单晶硅更接近于沙子。水晶是一种压电材料,通上电形状会发生变化,形状变化又会产生电场。水晶除了做首饰,在现代更重要的用途是做电子设备中的石英晶体振荡器,用来产生稳定的时间或频率基准信号。+ y8 o% G7 ^7 U, K( W- v. P/ l
比如在很多石英表中,通常有一个频率为32768赫兹的晶体振荡器,电路激励这个振荡器产生一个电平快速变化的信号,其频率是稳定的,几乎不会受到温度变化或者电池新旧的影响。手表中用一个计数器去数信号变化的个数,每变化32768个周期就是1秒。因而,石英表中的这个晶体振荡器就是时间基准。而频率基准则更是现代通讯技术的基础。用过早期收音机的读者也许还记得那时收音机可能会“串台”,原因之一就是收音机的调谐电路的谐振频率不稳定。这样的通讯质量显然无法满足现代社会的要求,设想一下您和闺蜜说着悄悄话,一不小心窜到婆婆耳机里,会是何等车祸场面。当然啦,如果没有稳定的频率基准,压根就不会有现代的手机。现在电脑或手机等所有数字电子设备之中,都需要有至少一个晶体振荡器来为电路运行“带节奏”,频率一般在几十兆赫兹左右。比如下图中X3和X4两个器件就是50MHz的晶体振荡器。, S$ \7 J! T: P. C5 X$ b
2 {9 `4 U' N7 m: d% Z; B7 N
* s0 {: `6 C5 A6 O* j, L& ~
! P- x }; a7 Z1 a, {2 v* a+ j因此,如果人工水晶的生长问题一直拖到现在没有解决,那可是妥妥的工业技术皇冠明珠,尚未掌握的卡脖子先进技术。
! T! S2 c B8 a# P3 F# I人工水晶是用水热法生长的。人们用高温的氢氧化钠水溶液溶解二氧化硅,然后慢慢降温使之生长到籽晶上,形成大块的单晶体。为了避免由于温度太高水溶液沸腾,必须用厚壁钢管做成高压釜,让整个生长过程在高压中进行。 T9 ~4 B8 C( C: ~- |& [' M
水晶生长的过程从钢筒外面看不见,因而生长出来的水晶需要知道它的质量好不好,以此帮助科研人员优化生长工艺中的溶液浓度、生长温度、降温速度等条件。
$ j3 |* x6 b) w( ?6 o* \: ^. o要想知道晶体的质量好不好,最直接的方法显然是把晶体做成振荡器件,然后测量器件的质量。不过这个过程耗费时间太长。
s: i% v' Z; t人们想到的另一个方法是让红外线透过晶体,因为晶体对红外线的吸收特性与晶体在电子学上的质量,存在一定的对应关系。
: c4 t9 J% |3 k6 v- Y4 E: c# \红外透射这一测试方法,相比之下速度要快得多,但仍然比较麻烦。晶体样品要切割打磨成薄片,然后要把薄片两面抛光,这要化很多时间和人力。6 A( G# } L2 |, H: c
于是人们又进一步想办法。晶体样品切割打磨成薄片后,两个表面像毛玻璃一样,如果能找到合适的液体,比如某种油类,涂在两个毛糙的表面上,就可以让样品变成透明的,从而省去抛光工序。不过涂了油的样品测试时,油可能流失,于是需要找两块很薄的红外透明片把涂了油的晶体样品夹起来。我们平时见到在可见光谱中透明的物质,比如玻璃,在红外光谱范围中可能是不透明的。但如果仔细寻找,还是能找到在红外范围透明的物质的,比如氯化钠(即食盐)的晶体。这样用两块氯化钠薄片,夹住涂了油的水晶样品,就最终解决了水晶质量快速测试的问题。, n9 { e3 y. P2 |* S9 i
& g7 q1 z4 b' ?4 U+ \. }
& R0 x# O/ l4 t$ E
6 n* o! i) ]" ?1 H8 H( x; J在科研工作中,像这样把方案越搞越“土”,而不是越搞越精密,的确有些匪夷所思。在很多人眼中,要想得到高水平的研究结果,必须去买最贵的仪器设备。这种越搞越“土”的做法,会被很多人批评为“违反科学研究规律”。
6 X& ^" o0 M. d. \. ~2 F6 k; R人们在一个时期的意识潮流毫无疑问会影响科研工作者的思维方法与科研方法。在这样的思维与科研方法中,科研人员可能会做很多我们现在不容易想到或不容易理解的尝试,这其中有些成功也有些失败。无论这些尝试是成功还是失败,都是我们现在可以借鉴的宝贵财富。这也正是我们现在读科学史的意义所在。# V+ u' W J) S3 i6 W
不迷信权威,同时又能借鉴书本知识以及国际专业期刊上的文章,则会达到鼓励人们开脑洞的结果。就像前面这个故事中,科研人员发明的用氯化钠薄片与涂油水晶样品做成肉夹馍一样。/ z+ W, Y& O' {8 }' a
土办法的背后,实质上是对科学的深刻理解。
1 O3 n+ f* ?# a科学测量的本质,是让一系列自然现象以及人工控制条件下产生的客观现象组成一个现象链,然后通过现象链末端对我们感官的刺激,使我们认识到物质的性质。这就要求我们首先要对研究对象的物理本质做深入的思考。前面故事中的科研人员,深刻地思考了水晶质量问题的物理本质,水晶晶体结构以及缺陷对其内部机械波与电磁波传播中能量耗散产生的影响。这种物理性质会影响到两个不同的现象链:电子学器件特性和红外吸收特性。在不同的现象链中,会存在不同的干扰因素,因此需要排除这种干扰给测量带来的噪声。排除干扰的方式可以是昂贵的仪器设备,耗时的精密抛光加工等等。也可以是显得很土的肉夹馍结构。6 I5 o ~" Y$ _6 w& [ S3 ]
+ i0 t/ w4 F5 B8 j- N! B05 洗衣服与真空技术
1 l5 J6 n8 m2 y9 ~
( I2 | K4 @: `$ W+ {$ i8 y5 _. D$ d( Q- e* J' {5 }: U
我们小时候洗衣机很不普及,衣服是用手洗的。洗衣服要把衣服上的肥皂漂洗干净,同时要尽量节约水,而且不能太用力拧,以免损伤衣物。这听起来互相矛盾,要稀释肥皂残余物质必须用水,要让衣服上残余肥皂少则必须拧干,简直是不可能三角形。
8 }: y$ |1 r2 y% s我父亲告诉我,不要用蛮力,要想办法。原本一大盆水漂洗一次,现在改成分成三小盆漂洗三次,每次也不必太用力拧。这样的效果比一大盆水漂洗一次,然后用很大力气去拧要好。8 t6 r" ]6 ]% H: `* Y5 j; d d
我们可以用一个例子来说明这两种方案。设想漂洗前衣服上有9g残余物质,现在用9kg水去漂洗。
; b$ J; d" `8 b$ K+ q9 H* a5 Z+ d$ x: _0 X9 c
方案一:* V; ^2 U, ^8 B9 |1 U; g& \
直接用9kg水去漂洗,则水中残余物质浓度为1g/kg。假设我们用很大力气,把衣服上的水拧去只剩0.05kg,则衣服上残余物质量为0.05g。
+ L$ N8 ]' v q% p7 U/ e/ a, l+ U方案二:, [8 u6 L6 L p6 H7 M
第一次先用3kg水去漂洗,则水中残余物质浓度为3g/kg。假设我们轻轻地把衣服上的水拧去剩0.1kg,则漂洗第一次之后衣服上残余物质量为0.3g。这个数比方案一高6倍,但这只是漂洗完第一次后的结果。
' ?9 G3 O; i, S N9 u6 u
% y& ~0 ^3 f9 X7 ^5 c1 R第二次再用3kg水去漂洗,则水中残余物质浓度为0.1g/kg。把衣服上的水拧去剩0.1kg,则漂洗第一次之后衣服上残余物质量为0.01g。仅仅漂洗第二次之后,效果就比方案一要好了。1 s% y- u6 j0 m$ L0 y0 M. n( I% G* }
第三次仍然用3kg水去漂洗,则水中残余物质浓度为0.003g/kg。把衣服上的水拧去剩0.1kg,则漂洗第一次之后衣服上残余物质量为0.0003g。这比起方案一好太多了。大家可以进一步算一下,如果用方案一想到达这样的漂洗效果,则要用将近3吨水。
$ N& i7 @- r7 e7 C! A! `现在的洗衣机代替了人力,但其中的漂洗程序同样是至少漂洗两次。. ^/ n8 ]- W; B7 i# k& n) k- }6 M
等到我自己使用真空设备做实验时,就发现真空系统的操作与洗衣服有不少异曲同工的巧妙。
$ b% ?! K7 [- d$ a很多实验对绝对的真空度要求并不非常高,但对背景气体的成分有要求,比如要求背景气体中主要是氩气,可以有一定比例的氧气,但不能有氮气。
* E6 O" \1 X* v" l做实验的时候,设备扣起来之后,抽真空抽了七八个小时,氮气的分压还是太高,这时应该怎么办呢?最简单的做法是下班后让设备再继续抽一夜,但第二天看可能还是不达标。要是抽了一个星期还不行,是不是就做不了实验了?要么就是打报告买更好的设备?
& G$ p0 P) A4 y0 @( Y在放弃之前,至少我们可以试试象漂洗衣服的那样,漂洗一下设备中的气体。设备扣起来之后,先抽真空抽一两个小时,然后放入氩气达到大气压强,再抽真空抽一两个小时。这个过程重复多次之后,设备里的氮气分子就会很少了,正如衣服漂洗几次之后,肥皂的残余物质量就会减少到很低一样。' [4 U; h! o0 y$ v" W. D
在真空腔中,物体表面会吸附气体分子,因此抽真空时,要烘烤加热,把吸附到气体分子赶出来抽走。但是真空腔内有的地方可能烘烤不到,吸附在上面的氮气分子会源源不断地跑出来。因此用蛮力长时间抽真空不一定能达到目标。当我们把氩气通入腔体内之后,氩气分子会密集撞击腔内所有表面,把氮气分子打出来,同时氩气分子也会被吸附到这些表面。经过一段时间之后,吸附气体的主要成分变成了氩气。再抽真空时,这些吸附气体仍然会跑出来降低真空度,但其主要成分已经是无害的氩气了。$ n8 F2 B2 }1 ?6 a8 w6 c, O. R
% W. ]7 N1 ]5 V7 v7 @: x
06 吃饱饭与电子学+ G5 s7 D# Y7 Z2 K& h6 y
( m4 e* i, W/ V# T! A* ]/ w6 a5 J9 H
我有一位长辈,时常会有一些惊人之语。比如有一次他说,人生病很多都可以归结为两大类,一种是吃得太少,一种是吃得太多。这个看法应用到电子学当中,可以把很多电子电路出现的问题归结为两大类,一种是供电不足,一种是供电电压太高。: K! e2 o) Y' i# [2 w
这话听着很不靠谱对吧?简直是外行民科。但仔细想想,却也颇有道理。我自己最近就遇到这么一个事。3 C9 {4 ]% X. b6 F% M) F
我做的工作中用到一块电路板,上面有现场可编程门阵列(FPGA)。在电脑上把想实现的功能设计成固件,然后把固件上载到FPGA中,电路就能按照设计跑起来了。 R! U9 i) j! c' j& x& L0 P! G
& M) v& H# [6 |2 s) Z* L. h/ G
5 A9 t, [2 V8 f' i3 s6 {( E. y) v
8 }* I+ c. j- x" y8 }这个电路板功率消耗不高,因此只需要一个USB线与电脑连接,USB线用来上载固件,同时也向电路板供电。& Y/ x$ \ A/ Y$ A: y `
我在这个板上遇到了一个问题,设计好的固件,上载到FPGA中可以正常工作,但如果想把相同的固件存储到FPGA中的闪存里,每次都会出错,无法实现。
: K) t9 G5 H `0 j出错的原因可能有非常多种,比如生成固件文件的方法,根据使用模式不同,各个设置也要不同。于是我对照用户指南一步一步地检查,看看有没有什么深奥的细节我没有注意。此外,我还下载安装了FPGA设计软件的多个旧版本,看看是不是由于版本更新引发了原来没有的bug。' t3 i( i9 @1 f
上网查了一下,问了不同的AI,知道很多人都遇到过相似但又不完全相同的问题,也提出了很多检查项目和解决方案。凡是网上或者AI说的解决方案,只要可以试的,我都试了。这样折腾了好几天,但问题始终没有解决。
1 R" p, a6 Y( \; _% o无意间回想起长辈多年前说的吃饱饭理论,于是让我想到会不会是往FPGA的闪存中存储时,供电不足。
( _& g' p x8 W& G! u0 i闪存里的数据,读出时速度比较快,功率消耗也不高,但在写入时,速度要慢得多,功率消耗也要大得多。我们平常说把数据写入只读存储器,用的动词是“烧”:把数据烧进去。历史上的只读存储器,真的有基于烧熔丝原理的。虽然历史上沿用下来的烧字,现在对闪存已经不确切,但闪存记录数据的方法仍然是高功率消耗的,它要在器件内产生很强的电场,把电子注入到绝缘的浮栅极上。
" u, A) P# ~, k我们的电路板是用USB供电的,通常情况下,无论是上载固件还是正常运行的情况下,电路板耗电不高,所以USB的供电应该足够。但在往闪存里烧固件的时候,USB的供电就不见得够了。& R! c: S5 ]* k- `8 Q
具体到我的USB接口,如下图所示,是通过一个USB-C与USB-A转接器与电脑连接的,这就更让人怀疑了。" }& r3 m* X4 s
3 f8 d2 \4 {4 C; s2 k0 U
8 \- Y8 N+ _- X' V; b; e- p# g! c
2 k' f; o; { g" l' i' ]% p* l既然怀疑到这点,那么首先可以做的一件事是,把对应的USB线,从转接器上拔下来,换到电脑上仅有的一个自带USB-A插口上。2 N& h! ~) F4 ?/ Y6 L
7 O: V" k" m, B+ q! ?3 U) |
7 Q$ d; K+ G5 v1 A
- r0 Q6 f6 O, b; v* z! \. z然后打开设计软件,开始往闪存里烧固件,紧张地看着进度条。以前进度到2%到4%,甚至0%就会出错,这次从2%,10%直到100%,进度条都是绿的,固件成功地烧进了闪存。8 Z; d( F( }# d
所以,我们这个电路板前面生的病,是没有吃饱饭的病。
! o1 M0 L, U( H/ ~# [这个例子是刚刚发生的事,不是古早年间的事。所以,穷孩子精神,直到现在对我们的科研工作也是有帮助的。
/ w. A/ q# X& l; L: t1 H. w$ J( l3 z4 Y! O2 M
结语
" C4 u$ C) }0 n V# J% M' K C( \8 R- [/ i/ a- w( V C) o. n0 [6 x
) v+ A- y8 j4 L: H4 h" n3 r8 d% \文章结束,应该和年轻的科技工作者们分享点什么呢?想来想去是这句话:搞任何科学技术工作,除了有资源赛道,别忘了还有个聪明才智赛道。 |
|