科研不只是堆資源,還可以有“窮孩子精神”和“土辦法”

來源: 更新:

撰文|吳進遠


搞任何科學技術工作,除了資源賽道,別忘了還有個聰明才智賽道。





我們的科學研究與技術開發傳統中,有很多東西值得我們學習、借鑑、繼承、發展,其中一個,我管它叫做:窮孩子精神。窮孩子精神這個詞本來是褒義,只是現在有的人可能聽着不舒服。不舒服就不舒服吧,與其創造一個新詞,不如把這個舊詞恢復成它原來的褒義。具體到科學研究和技術開發中,窮孩子精神就是勤于思考,不浪費資源,把有限的資源用到極致。


窮孩子精神並不是一個陌生的概念,在80和90年代出國的留學人員中,多數人開始時經濟上都不富裕,幾乎都自己修過汽車。逛山姆店也主要是爲了買些量販大包裝食材,壓根沒聽說過託舉什麼的。更早一些,我們上小學時候,語文書裏都有這樣的課文:艱苦奮鬥、厲行節約、精打細算、省喫儉用。


近兩年在人工智能領域,以DeepSeek爲代表,通過改進算法效率,用很小的算力成本,獲得了很好的成果。人們談及這種改進算法效率的做法,即使有些讚揚的人,也認爲這是算力不足情況下的無奈之舉。但是我覺得,不應該把這當成無奈。這種充分利用資源的做法是一個早就該做但實際上一直沒有人做的事,是個遲早要做的事。這實際上可以看成是窮孩子精神這種科技研發傳統獲得的一項成功。


具體在科學實驗中,我們經常會用到一些土辦法來解決實際問題。土辦法不是粗陋湊合事的意思,而是開拓思路,用奇思妙想來創造條件。



論科研方法中的窮孩子精神


作者2019年在《知識分子》公衆號上寫過兩篇文章:《如何用低技術實現高性能》和《小聰明怎麼解決大問題》。


即使不看內容,光看標題,大概很多朋友都會評價它們是窮人思維方式。的確,我在那兩篇文章中談到的很多科研方法與技巧,都可以歸納爲窮孩子精神。


最新這篇文章的目的,是向在科研各個領域的讀者,通過一些例子,介紹由窮孩子精神形成的各種具體科研方法。期待大家能得到一些啓發,從而在自己領域的日常工作中,取得更多的成果。


01 摩爾定律的負面影響


摩爾定律已經存在幾十年了,但這幾年挺出圈,大多數論者都是溢美評價,對此,就不重複了。任何事物都有正負兩面,摩爾定律的負面影響卻很少有人談及。


這裏談及摩爾定律的負面影響,並不是說摩爾做錯了什麼。他對半導體產業當時的情況做了觀察總結,在這個基礎上對產業的未來發展趨勢做了預測,這都是很有用的事。問題出在一些簇擁者的造神運動。摩爾的看法可以叫做摩爾預測,可是如果像牛頓定律那樣使用定律這個詞,就相當不倫不類了。


在半導體器件應用包括計算機領域,近幾十年除了少量正常的思考創新派,還有數量巨大的堆砌資源派。數據處理量大了就簡單增加CPU,GPU或者FPGA的數量。由於摩爾定律存在了幾十年,因此後者常常可以躺贏前者。這就造就兩代到三代完全不懂思考創新的人,包括財經金融業裏的各類高管們。


實際上,在資源利用算法效率等方面有遺存了幾十年的改進空間,把這些油水稍微擠一下,就會出來很大成果。比如DeepSeek的人靠巧勁,力小也能磚飛,捅破天了。


隨便舉個例子吧,計算機裏硅片面積以及電能等資源消耗最重要的部分之一是乘法運算。乘法運算資源佔用量與數字的位數的平方成正比,在十進制和二進制中都是如此。比如計算兩位數乘法,像26x79,要背4次九九表,三位數乘法123x456要9次,四位數1234x5678要16次,等等。所以涉及到大量計算時,能夠用位數比較少的數字代替位數比較多的數字,就能節約很多資源。在同樣的GPU裏可以快很多。


但位數少了,數字的精度就差了。經過很多次計算,每次計算的誤差就可能積累起來,最後帶來判斷錯誤。要想使用較少的位數的數字,就必須想清楚問題的根本,確保經過很多級計算之後,誤差不會積累得太大。


我們現在應該慶幸在摩爾定律成氣候之前,通過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倍左右。


我們可以做個思想實驗,想象高斯、Cooley、Tukey在1990-2000年間到一個互聯網大廠工作。在那裏,他們會很難說服周圍的資源堆砌派們使用FFT,因爲太confusing。至於DFT計算量大,資源堆砌派們會說,只要等若干個月,新的CPU或者GPU出來,就不成問題了。但是他們會不會憤而辭職另尋高就還真的不好說,因爲周圍所有的公司裏,都是資源堆砌派們躺贏。


FFT中最有價值的思想,是把n變成了log(n),而這個思路對減少計算量或者減少硬件資源消耗有着遠超過FFT的實用意義,我們有時甚至會不自覺地用到這個方法。這個話題比較長,需要另外的場合討論。但在過去幾十年間,很多本應出現的巧妙方法,被實際的開發者錯過了。


02 炸火箭


窮孩子精神反向走到極端,是馬斯克等人的炸火箭。炸火箭這事本身並不是絕對沒有道理,一般而言,實驗獲得的信息通常會多於非實驗方法,比如推導、論證、仿真等方法獲得的信息量遠不如實驗。做出火箭來炸固然需要花錢,但推導、論證、仿真也要花錢。實際上,員工上班想事情或開會討論都是有人力成本的。相比之下,火箭的錢不見得會貴很多。因此在某種意義上可以說:窮則勤于思考,達則炸火箭。


SpaceX的火箭。圖源:SapceX


我自己在FPGA上做數字設計或寫計算機軟件時,基本不仿真,編譯出來直接上載到硬件中試運行,運行中看到問題再改,改完再試運行。通常我們管這種做法叫互聯網時代的快速迭代,和炸火箭做法差不多。這樣做的原因是仿真的時間成本高於試運行,很多時候爲了仿真幾個毫秒的運行過程,在電腦上要計算半個小時,所以這種情形下寧可放到實際的硬件裏直接測試。


不過,與炸火箭不同,試運行並不需要多花錢。此外,如同我們經常說的,很多知識是用錢買不到的,因而很多數據也是炸火箭得不到的,至少火箭爆炸後就沒有正常運行的數據了。很多東西,還是要靠人的頭腦去想的。即使光算經濟帳,炸個火箭即使按最低估計只算1000萬美元,也能支持上百人月的思考成本了。


當然,炸火箭的新聞和廣告價值很高,估計這是馬斯克等人樂此不疲的原因。但有些新聞價值是負面的,設想將來要有多少次火箭不炸,才能使人們產生信心,敢坐這樣的火箭?即使不載人,發射高價值載荷,有沒有保險公司願意承保,保費要多高,這些都是問題。


所以,所謂互聯網時代產品快速迭代這種方法的適用範圍是有限度的。窮孩子精神在互聯網時代並不過時。


03 一個例子: Wave Union TDC的故事


到這裏,有的讀者可能會說,你讓青年人要這樣要那樣,你自己做得怎麼樣呢?好,我就聊聊我自己做過的一項工作吧,一件依靠窮孩子精神做成的事。


我在《如何用低技術實現高性能》這篇文章中談到過用現場可編程門陣列(Field- programmable- Gate- Array,FPGA)做時數轉換器(Time to Digital Converter,TDC)的事。


做TDC本來是屬於富人俱樂部的事,因爲開始時TDC都是用特定應用集成電路(Application-Specific Integrated Circuit,ASIC)來做的。做ASIC是由用戶設計整個芯片中的所有電路,然後送到生產廠家經過製版光刻等所有芯片製造步驟,最終制做出用戶需要的集成電路。小批量流片一次常常需要上萬美元,甚至幾十萬美元。


而使用FPGA往往屬於窮人行列,通常幾百美元就能買到驗證板,如果只買FPGA芯片就更便宜了。


那麼,用FPGA做TDC可以嗎?應該說理想豐滿現實骨感。


TDC可不是一個簡單隨便的數字電路,這裏面涉及許多電路本身性能的細節。常用的TDC裏面是一條很多節的延遲線,後面跟了一串寄存器,如下圖所示。



待測量的信號接在延遲線輸入端,一個週期性的時鐘信號讓寄存器不斷地記錄下延遲線中的0或1的狀態。如果有信號到達,寄存器中就會在時鐘信號上升沿那一時刻,記錄下延遲線中0到1變化的位置。知道這個位置,如果知道信號在延遲線中傳輸的速度,就可以算出,信號是在時鐘上升沿之前多久到達的。


就像下面這個玩具火車,我們想知道火車是什麼時刻進入淺藍色箭頭標註的位置的。爲此,我們每隔10秒拍一張照片。儘管我們不一定能碰巧拍到火車剛好到達的照片,但我們可以拍到火車處於直線軌道上某一位置,比如從起點數第29根枕木。如果我們知道火車開動的速度,比如每0.1秒走過一個枕木,則我們可以算出火車是在快門打開2.9秒之前到達的。



那麼,怎樣知道信號在延遲線中的速度呢?在ASIC中設計時,可以通過一個反饋環來控制這個速度。具體做法是設計一種可以調控的延遲單元,通過改變外加電壓,改變對延遲單元的供電量,讓它“飢餓”一些,從而減慢信號通過延遲單元的速度。比如我們設計一根32節的延遲鏈,信號通過整個延遲鏈的時間與一個3.2納秒的週期信號比較。如果由於外界溫度變化,延遲鏈偏快了,就讓它“飢餓”一些,速度慢些,反之如果延遲鏈偏慢了,就讓它“喫飽”一些,速度快些。這樣,就能確保信號通過每一節延遲鏈的時間始終維持在100皮秒。


就像我們調控給玩具火車供電的電壓,快了降低電壓,慢了增加電壓。這樣,面多加水,水多加面,就可以讓它按照我們需要的速度運動。



不過,這種調控延遲線信號速度的事,在FPGA裏無法做到。在FPGA裏,廠家設計的進位鏈,通常是用來搭建加法器的,每個延遲單元的延遲時間無法控制。而且,如果溫度變化,或者供電電壓變化,則這個延遲時間還會變化。


所以,用FPGA做TDC是困難重重的。


最富有戲劇性的,是在2008年的一次學術研討會上,大家各自報告了自己的工作之後,請一位本領域權威人士做總結。我的工作得到的評價是:“FPGA TDC is problematic”。我後來專門到字典上查了一下problematic這個詞,大概意思是麻煩多到令人絕望,很可能這條路一開始就走錯了。一個科研工作者能夠有這樣的抓馬提克經歷,應該說是一生的寶貴財富。


其實,在諸多困難之中,延遲鏈速度不可控制還真不算是個大問題。只要像下圖這樣,把延遲鏈加長一點,在兩個相鄰的時鐘上升沿拍攝兩張照片,就可以算出延遲鏈的速度。



比較大的問題,是延遲鏈中各個延遲單元不一致,有的延遲時間長一些,有的短一些。不過這也不是太大的困難,我們在TDC運行時,可以通過測試,把每個延遲單元的延遲時間測出來,然後通過查表,就可以換算出實際的時間值。


最大的問題,是有一些單元的延遲時間超長,這是會真正影響TDC性能的。在FPGA中,若干邏輯單元被組織成一個邏輯單元塊。信號在跨越不同單元塊的時候,由於需要更多的驅動電路,因此延遲時間更長。有時,時鐘信號到達不同單元塊的時刻也有偏差。體現在TDC中,就是下圖中哪些非常寬的時間bin。



大家可以想象我們玩具火車軌道枕木的間距不均勻,有的距離遠,有的距離近。而有些枕木之間的距離則遠得離譜。


在TDC裏的超寬時間bin,會帶來很大的測量誤差。這種超寬bin雖然數量不多,但對測量誤差的貢獻卻比那些正常寬度的bin大很多。


這個問題是FPGA天生的,廠家就是這樣設計的,用戶沒有辦法把它拿掉。而用FPGA來做TDC是一個非常小衆的應用,你給廠家提意見,他們也不會針對我們這個需求來做優化。這就需要我們發揮窮孩子精神,動腦筋想辦法,把這個麻煩繞過去。


超寬時間bin帶來的問題是在有的時間段,時間測量精度很差,但在其他時間段,測量的精度並不差。這就提示我們可以用兩個測量起始時間互相錯開的TDC並聯起來,做互補性的重複測量。假設在某一時段,第一個TDC處於超寬bin中,測量精度差,但第二個TDC卻處於正常的範圍,可以提供精度正常的測量。反過來,在第二個TDC處於精度差的情況下,第一個精度正常。這樣在任何時候,至少有一個TDC測量精度正常。


但如果真的搭建兩個TDC,則佔用的硅片資源必須加倍,經歷過窮日子的人打心眼裏就不願意加倍這份資源,於是就想出了Wave Union TDC這樣一個方法。


所謂Wave Union TDC是指當輸入信號到達後,讓一個Wave Union在延遲鏈中開始傳播,如下圖所示。注意普通的TDC在輸入信號到達後,只有一個0與1之間的躍變在延遲鏈中傳播,而Wave Union TDC卻有多個躍變。



這樣一來,一套TDC結構可以同時進行多個測量,資源基本沒有增加,測量精度卻提高了。


自從Wave Union TDC這個工作發表之後,十幾年來,大約幾百位作者,根據自己工作的需要,對Wave Union TDC做了許多的改進。甚至有許多作者以這個小領域的工作作爲博士論文的主要內容。下圖是在Google Scholar上做的一個粗略的搜索。



順便提一句,這個發明並沒有權威人士正式地用我的名字命名。但現在很多作者把Wave Union TDC簡寫爲WU-TDC,所以近似於用我的名字命名了。我們一直說近代科學領域很少有中國人名字命名的發明創造,現在我能貢獻一個,還是挺好的。希望以後的科研工作者也更多地貢獻。



科學實驗中的土辦法



前面我們談到了科研中的窮孩子精神。具體在科學實驗中,我們經常會用到一些土辦法來解決實際問題。窮孩子精神,土辦法不是粗陋湊合事的意思,而是開拓思路,用奇思妙想來創造條件,讓通常認爲條件不成熟,不可行的事情變得可行。


我們通過幾個例子來說明這個觀點。


04 一個科研故事


這裏講一個20世紀60年代末期我國人工水晶生長方面的科研故事,來說明這個觀點。


水晶又名石英,是二氧化硅的單晶體,它比大家熟悉的做芯片的單晶硅更接近於沙子。水晶是一種壓電材料,通上電形狀會發生變化,形狀變化又會產生電場。水晶除了做首飾,在現代更重要的用途是做電子設備中的石英晶體振盪器,用來產生穩定的時間或頻率基準信號。


比如在很多石英錶中,通常有一個頻率爲32768赫茲的晶體振盪器,電路激勵這個振盪器產生一個電平快速變化的信號,其頻率是穩定的,幾乎不會受到溫度變化或者電池新舊的影響。手錶中用一個計數器去數信號變化的個數,每變化32768個週期就是1秒。因而,石英錶中的這個晶體振盪器就是時間基準。而頻率基準則更是現代通訊技術的基礎。用過早期收音機的讀者也許還記得那時收音機可能會“串臺”,原因之一就是收音機的調諧電路的諧振頻率不穩定。這樣的通訊質量顯然無法滿足現代社會的要求,設想一下您和閨蜜說着悄悄話,一不小心竄到婆婆耳機裏,會是何等車禍場面。當然啦,如果沒有穩定的頻率基準,壓根就不會有現代的手機。現在電腦或手機等所有數字電子設備之中,都需要有至少一個晶體振盪器來爲電路運行“帶節奏”,頻率一般在幾十兆赫茲左右。比如下圖中X3和X4兩個器件就是50MHz的晶體振盪器。



因此,如果人工水晶的生長問題一直拖到現在沒有解決,那可是妥妥的工業技術皇冠明珠,尚未掌握的卡脖子先進技術。


人工水晶是用水熱法生長的。人們用高溫的氫氧化鈉水溶液溶解二氧化硅,然後慢慢降溫使之生長到籽晶上,形成大塊的單晶體。爲了避免由於溫度太高水溶液沸騰,必須用厚壁鋼管做成高壓釜,讓整個生長過程在高壓中進行。


水晶生長的過程從鋼筒外面看不見,因而生長出來的水晶需要知道它的質量好不好,以此幫助科研人員優化生長工藝中的溶液濃度、生長溫度、降溫速度等條件。


要想知道晶體的質量好不好,最直接的方法顯然是把晶體做成振盪器件,然後測量器件的質量。不過這個過程耗費時間太長。


人們想到的另一個方法是讓紅外線透過晶體,因爲晶體對紅外線的吸收特性與晶體在電子學上的質量,存在一定的對應關係。


紅外透射這一測試方法,相比之下速度要快得多,但仍然比較麻煩。晶體樣品要切割打磨成薄片,然後要把薄片兩面拋光,這要化很多時間和人力。


於是人們又進一步想辦法。晶體樣品切割打磨成薄片後,兩個表面像毛玻璃一樣,如果能找到合適的液體,比如某種油類,塗在兩個毛糙的表面上,就可以讓樣品變成透明的,從而省去拋光工序。不過塗了油的樣品測試時,油可能流失,於是需要找兩塊很薄的紅外透明片把塗了油的晶體樣品夾起來。我們平時見到在可見光譜中透明的物質,比如玻璃,在紅外光譜範圍中可能是不透明的。但如果仔細尋找,還是能找到在紅外範圍透明的物質的,比如氯化鈉(即食鹽)的晶體。這樣用兩塊氯化鈉薄片,夾住塗了油的水晶樣品,就最終解決了水晶質量快速測試的問題。



在科研工作中,像這樣把方案越搞越“土”,而不是越搞越精密,的確有些匪夷所思。在很多人眼中,要想得到高水平的研究結果,必須去買最貴的儀器設備。這種越搞越“土”的做法,會被很多人批評爲“違反科學研究規律”。


人們在一個時期的意識潮流毫無疑問會影響科研工作者的思維方法與科研方法。在這樣的思維與科研方法中,科研人員可能會做很多我們現在不容易想到或不容易理解的嘗試,這其中有些成功也有些失敗。無論這些嘗試是成功還是失敗,都是我們現在可以借鑑的寶貴財富。這也正是我們現在讀科學史的意義所在。


不迷信權威,同時又能借鑑書本知識以及國際專業期刊上的文章,則會達到鼓勵人們開腦洞的結果。就像前面這個故事中,科研人員發明的用氯化鈉薄片與塗油水晶樣品做成肉夾饃一樣。


土辦法的背後,實質上是對科學的深刻理解。


科學測量的本質,是讓一系列自然現象以及人工控制條件下產生的客觀現象組成一個現象鏈,然後通過現象鏈末端對我們感官的刺激,使我們認識到物質的性質。這就要求我們首先要對研究對象的物理本質做深入的思考。前面故事中的科研人員,深刻地思考了水晶質量問題的物理本質,水晶晶體結構以及缺陷對其內部機械波與電磁波傳播中能量耗散產生的影響。這種物理性質會影響到兩個不同的現象鏈:電子學器件特性和紅外吸收特性。在不同的現象鏈中,會存在不同的干擾因素,因此需要排除這種干擾給測量帶來的噪聲。排除干擾的方式可以是昂貴的儀器設備,耗時的精密拋光加工等等。也可以是顯得很土的肉夾饃結構。


05 洗衣服與真空技術


我們小時候洗衣機很不普及,衣服是用手洗的。洗衣服要把衣服上的肥皂漂洗乾淨,同時要儘量節約水,而且不能太用力擰,以免損傷衣物。這聽起來互相矛盾,要稀釋肥皂殘餘物質必須用水,要讓衣服上殘餘肥皂少則必須擰乾,簡直是不可能三角形。


我父親告訴我,不要用蠻力,要想辦法。原本一大盆水漂洗一次,現在改成分成三小盆漂洗三次,每次也不必太用力擰。這樣的效果比一大盆水漂洗一次,然後用很大力氣去擰要好。


我們可以用一個例子來說明這兩種方案。設想漂洗前衣服上有9g殘餘物質,現在用9kg水去漂洗。


方案一:

直接用9kg水去漂洗,則水中殘餘物質濃度爲1g/kg。假設我們用很大力氣,把衣服上的水擰去只剩0.05kg,則衣服上殘餘物質量爲0.05g。

方案二:

第一次先用3kg水去漂洗,則水中殘餘物質濃度爲3g/kg。假設我們輕輕地把衣服上的水擰去剩0.1kg,則漂洗第一次之後衣服上殘餘物質量爲0.3g。這個數比方案一高6倍,但這只是漂洗完第一次後的結果。


第二次再用3kg水去漂洗,則水中殘餘物質濃度爲0.1g/kg。把衣服上的水擰去剩0.1kg,則漂洗第一次之後衣服上殘餘物質量爲0.01g。僅僅漂洗第二次之後,效果就比方案一要好了。


第三次仍然用3kg水去漂洗,則水中殘餘物質濃度爲0.003g/kg。把衣服上的水擰去剩0.1kg,則漂洗第一次之後衣服上殘餘物質量爲0.0003g。這比起方案一好太多了。大家可以進一步算一下,如果用方案一想到達這樣的漂洗效果,則要用將近3噸水。


現在的洗衣機代替了人力,但其中的漂洗程序同樣是至少漂洗兩次。


等到我自己使用真空設備做實驗時,就發現真空系統的操作與洗衣服有不少異曲同工的巧妙。


很多實驗對絕對的真空度要求並不非常高,但對背景氣體的成分有要求,比如要求背景氣體中主要是氬氣,可以有一定比例的氧氣,但不能有氮氣。


做實驗的時候,設備扣起來之後,抽真空抽了七八個小時,氮氣的分壓還是太高,這時應該怎麼辦呢?最簡單的做法是下班後讓設備再繼續抽一夜,但第二天看可能還是不達標。要是抽了一個星期還不行,是不是就做不了實驗了?要麼就是打報告買更好的設備?


在放棄之前,至少我們可以試試象漂洗衣服的那樣,漂洗一下設備中的氣體。設備扣起來之後,先抽真空抽一兩個小時,然後放入氬氣達到大氣壓強,再抽真空抽一兩個小時。這個過程重複多次之後,設備裏的氮氣分子就會很少了,正如衣服漂洗幾次之後,肥皂的殘餘物質量就會減少到很低一樣。


在真空腔中,物體表面會吸附氣體分子,因此抽真空時,要烘烤加熱,把吸附到氣體分子趕出來抽走。但是真空腔內有的地方可能烘烤不到,吸附在上面的氮氣分子會源源不斷地跑出來。因此用蠻力長時間抽真空不一定能達到目標。當我們把氬氣通入腔體內之後,氬氣分子會密集撞擊腔內所有表面,把氮氣分子打出來,同時氬氣分子也會被吸附到這些表面。經過一段時間之後,吸附氣體的主要成分變成了氬氣。再抽真空時,這些吸附氣體仍然會跑出來降低真空度,但其主要成分已經是無害的氬氣了。


06 喫飽飯與電子學

我有一位長輩,時常會有一些驚人之語。比如有一次他說,人生病很多都可以歸結爲兩大類,一種是喫得太少,一種是喫得太多。這個看法應用到電子學當中,可以把很多電子電路出現的問題歸結爲兩大類,一種是供電不足,一種是供電電壓太高。


這話聽着很不靠譜對吧?簡直是外行民科。但仔細想想,卻也頗有道理。我自己最近就遇到這麼一個事。


我做的工作中用到一塊電路板,上面有現場可編程門陣列(FPGA)。在電腦上把想實現的功能設計成固件,然後把固件上載到FPGA中,電路就能按照設計跑起來了。


這個電路板功率消耗不高,因此只需要一個USB線與電腦連接,USB線用來上載固件,同時也向電路板供電。


我在這個板上遇到了一個問題,設計好的固件,上載到FPGA中可以正常工作,但如果想把相同的固件存儲到FPGA中的閃存裏,每次都會出錯,無法實現。


出錯的原因可能有非常多種,比如生成固件文件的方法,根據使用模式不同,各個設置也要不同。於是我對照用戶指南一步一步地檢查,看看有沒有什麼深奧的細節我沒有注意。此外,我還下載安裝了FPGA設計軟件的多箇舊版本,看看是不是由於版本更新引發了原來沒有的bug。


上網查了一下,問了不同的AI,知道很多人都遇到過相似但又不完全相同的問題,也提出了很多檢查項目和解決方案。凡是網上或者AI說的解決方案,只要可以試的,我都試了。這樣折騰了好幾天,但問題始終沒有解決。


無意間回想起長輩多年前說的喫飽飯理論,於是讓我想到會不會是往FPGA的閃存中存儲時,供電不足。


閃存裏的數據,讀出時速度比較快,功率消耗也不高,但在寫入時,速度要慢得多,功率消耗也要大得多。我們平常說把數據寫入只讀存儲器,用的動詞是“燒”:把數據燒進去。歷史上的只讀存儲器,真的有基於燒熔絲原理的。雖然歷史上沿用下來的燒字,現在對閃存已經不確切,但閃存記錄數據的方法仍然是高功率消耗的,它要在器件內產生很強的電場,把電子注入到絕緣的浮柵極上。


我們的電路板是用USB供電的,通常情況下,無論是上載固件還是正常運行的情況下,電路板耗電不高,所以USB的供電應該足夠。但在往閃存裏燒固件的時候,USB的供電就不見得夠了。


具體到我的USB接口,如下圖所示,是通過一個USB-C與USB-A轉接器與電腦連接的,這就更讓人懷疑了。



既然懷疑到這點,那麼首先可以做的一件事是,把對應的USB線,從轉接器上拔下來,換到電腦上僅有的一個自帶USB-A插口上。


然後打開設計軟件,開始往閃存裏燒固件,緊張地看着進度條。以前進度到2%到4%,甚至0%就會出錯,這次從2%,10%直到100%,進度條都是綠的,固件成功地燒進了閃存。


所以,我們這個電路板前面生的病,是沒有喫飽飯的病。


這個例子是剛剛發生的事,不是古早年間的事。所以,窮孩子精神,直到現在對我們的科研工作也是有幫助的。


結語


文章結束,應該和年輕的科技工作者們分享點什麼呢?想來想去是這句話:搞任何科學技術工作,除了有資源賽道,別忘了還有個聰明才智賽道。

相關推薦
請使用下列任何一種瀏覽器瀏覽以達至最佳的用戶體驗:Google Chrome、Mozilla Firefox、Microsoft Edge 或 Safari。為避免使用網頁時發生問題,請確保你的網頁瀏覽器已更新至最新版本。
Scroll to Top