




收稿日期:2023-09-01
DOI:10.19850/j.cnki.2096-4706.2024.05.019
摘" 要:隨著FPGA的廣泛應用,FPGA的運行代碼的安全性也越來越重要。文章從HDL編碼的角度,研究了影響FPGA軟件功能安全性的幾個重要因素,分析了信號跨時鐘域處理、狀態機設計、信號毛刺等因素在編碼階段對軟件安全性的影響,并提出了對應的防范措施;形成了基于FPGA軟件功能安全性的HDL編碼和設計規范,為規避在編碼階段引入軟件功能安全性問題提供了一定的依據和參考。
關鍵詞:FPGA;HDL;安全性;編碼規范
中圖分類號:TN79" " 文獻標識碼:A" 文章編號:2096-4706(2024)05-0085-04
Analysis and Research on HDL Coding Specification Based on FPGA Software Security
CAO Ming, JIANG Zongwei, LI Jinglei
(The 5th Electronics Research Institute of Ministry of Industry and Information Technology, Guangzhou" 510610, China)
Abstract: With the wide application of FPGA, the security of FPGA running code is becoming more and more important. From the perspective of HDL coding, this paper studies several important factors that affect the functional security of FPGA software, analyzes the influence of signal across clock domain processing, state machine design, signal glances and other factors on software security in the coding stage, and puts forward the corresponding preventive measures. The HDL coding and design specification based on FPGA software functional security is formed, which provides a certain basis and reference for avoiding the problem of software functional security introduced in the coding stage.
Keywords: FPGA; HDL; security; coding specification
0" 引" 言
目前,FPGA器件已廣泛應用在雷達、導彈、武器、航空、航天等國防領域,其安全性關乎著整個型號裝備的質量好壞。除了FPGA器件本身的安全性外,運行的軟件代碼的安全性直接影響著FPGA軟件的功能。因此,研究FPGA軟件代碼設計的安全性編碼規范,規避在編碼階段引入的安全性問題,是十分有意義和必要的。
作者借助單位多年來開展軟件測評積累的FPGA軟件缺陷庫分析了影響FPGA軟件安全性的問題缺陷,歸納總結出信號跨時鐘域、狀態機設計、信號毛刺等方面的主要問題缺陷。本文將從這幾個方面入手,分析影響FPGA應用軟件功能的主要安全因素,然后從HDL編碼方面提出防范措施,并形成基于FPGA軟件安全性的HDL編碼和設計規范,從而提高FPGA軟件的安全性。
1" 信號跨時鐘域
1.1" 影響安全性因素
亞穩態是指觸發器無法在某個規定時間段內達到一個可確認的狀態[1]。當一個觸發器進入亞穩態引時,既無法預測該單元的輸出電平,也無法預測何時輸出才能穩定在某個正確的電平上。在這個穩定期間,觸發器輸出一些中間級電平,或者可能處于振蕩狀態,并且這種無用的輸出電平可以沿信號通道上的各個觸發器級聯式傳播下去。FPGA器件中包含了大量的觸發器資源,主要用于數據的采集,只有當輸入數據滿足器件本身的建立/保持時間時,數據才能夠正確被采集,否則會出現亞穩態,導致采集的數據錯誤。FPGA軟件一般存在多個時鐘域,由于各個時鐘間的時序不同,經常會出現信號跨多個時鐘域傳輸時建立/保持時間不滿足的問題,從而導致信號在多個時鐘域間傳輸錯誤,出現亞穩態,影響FPGA軟件的安全性。
信號跨時鐘域是指信號在不同時鐘域間傳輸的情況,主要包括外部輸入的異步信號以及內部跨時鐘域傳輸的信號,主要分為單比特數據和多比特數據。
1.1.1" 單比特數據跨時鐘域傳輸
單比特數據跨時鐘域傳輸情況如圖1所示。當數據從A時鐘域傳輸至B時鐘域時,信號的建立/保持時間不滿足要求時,在B時鐘域數據采集時,會出現亞穩態,采集的數據值不定,可能為0或1,從而影響數據傳輸的正確性。尤其當傳輸的數據為跳變信號或者在B時鐘域進行信號的沿操作時,會造成功能邏輯錯誤。
圖1" 單比特數據跨時鐘域傳輸情況
1.1.2" 多比特數據跨時鐘域傳輸
多比特數據跨時鐘域傳輸情況如圖2所示。多比特數據由于每比特信號在布局布線時的傳輸線路不同,造成到達B時鐘域觸發器的時延不同。因此,當多比特數據在B時鐘域進行信號匯聚時,可能會導致采集的多比特數據信號值錯誤,從而造成功能邏輯錯誤。
圖2" 多比特數據跨時鐘域傳輸情況
1.2" 防范措施
為保證數據在多個時鐘域間傳輸的正確性,在HDL編碼時通過信號的同步處理[2]來提高FPGA軟件的安全性。
1.2.1" 單比特數據跨時鐘域同步
單比特數據跨時鐘域傳輸時可采用圖3中的電平同步器設計[3],在目的時鐘域通過打兩拍同步的操作實現信號的正確采集。HDL編碼時需要注意,單比特數據一般包括緩變的電平信號以及有脈寬限制的脈沖信號,對于脈沖信號的跨時鐘域傳輸,需要考慮從快時鐘域到慢時鐘域,信號脈寬小于慢時鐘周期時,會導致信號丟失的情況,此時需要在快時鐘域對信號進行展寬,再送入目的時鐘域進行打兩拍同步處理。
1.2.2" 多比特數據跨時鐘域同步
多比特數據跨時鐘域傳輸時,由于每個信號經過布局布線后傳輸時延不同,因此不能夠簡單通過打兩拍實現數據同步。對于多比特數據跨時鐘域傳輸時,一般通過以下方式實現同步:
1)使用異步FIFO [4]。如圖4所示,對于多比特數據,一般通過FIFO將兩個時鐘域的數據進行隔離,通過源時鐘域將數據寫入FIFO,通過目的時鐘域將數據從FIFO讀出。HDL編碼時,需考慮FIFO讀寫時鐘的速率以及FIFO存儲深度,以保證數據不會丟失。
圖3" 單比特數據同步處理
圖4" 多比特數據通過異步FIFO進行數據同步
2)使用格雷碼。由于格雷碼相鄰兩個狀態之間只有單比特信號發生跳變,其余比特信號不變,因此降低了多比特信號跨時鐘域傳輸的風險。HDL編碼時,如果數據變化狀態為2的N次冪,且狀態變化連續時可以考慮使用格雷碼。
3)使用握手信號[5]。源時鐘域發送數據時,同時發送握手信號至目的時鐘域,目的時鐘域接收到握手信號后,開始接收數據,并在數據接收完成后發送回饋信號裝至源時鐘域,源時鐘域接收到回饋信號后,停止發送數據。使用握手信號,可以保證數據正確傳輸,但需要的時序開銷也較大,HDL編碼時需綜合考慮。
4)將多比特信號轉換為單比特。譬如在源時鐘域有a_en和b_en信號需要傳輸至目的時鐘域,HDL編碼時,可以將兩個信號通過ab_en=a_enamp;b_en合并為單比特信號ab_en后,在目的時鐘域按照單比特信號進行同步處理。該方式適用于多個比特信號之間邏輯關系依賴性較強,且可以通過運算符合并為單比特信號的情況。
多周期路徑同步。多周期路徑同步是一種通用的安全傳遞多比特跨時鐘域信號技術。多周期路徑同步是指在傳輸非同步數據到目的時鐘域時同步傳輸一個同步的控制信號,數據和控制信號被同時發送到目的時鐘域,同時控制信號在目的時鐘域使用兩級寄存器同步到目的時鐘域,使用此同步后的控制信號來加載數據,這樣數據就可以在目的寄存器被安全加載。多周期路徑同步常用于總線數據在不同時鐘域間的傳輸,HDL編碼時,需要保證源時鐘域內控制信號有效期間,數據不會發生變化,從而在目的時鐘域采集數據時,數據不會在目的時鐘域采樣沿發生變化,從而有效地避免了數據路徑亞穩態的發生。
2" 狀態機設計
2.1" 影響安全性因素
狀態機通常是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學計算模型。如圖5所示,FPGA軟件中經常會通過設計狀態機來實現工作狀態的切換。如果狀態機發送誤跳轉或進入非法狀態,將會導致FPGA軟件功能失效,進而影響FPGA軟件的安全性[6]。其影響軟件安全性的因素主要有:
1)狀態機未設置初始狀態。上電后,狀態機未設置初始狀態,導致上電后FPGA軟件工作狀態不定,影響FPGA軟件安全性。
2)狀態機存在冗余狀態或死鎖環。如圖6所示,上述兩個狀態機設計中,存在冗余狀態S4以及死鎖環S4lt;-gt;S5,當狀態機誤跳轉到冗余狀態或死鎖環中,將無法跳轉回正常狀態,導致FPGA軟件功能失效。
3)采用組合邏輯實現狀態機跳轉。采用組合邏輯來實現狀態機跳轉,尤其當綜合出現鎖存器時,容易受到毛刺信號影響,導致狀態機發生誤跳轉,影響FPGA軟件安全性。
4)狀態機未設置為安全模式。目前,各FPGA廠商支持綜合時將狀態機設置為安全模式,從而保證當狀態機跳轉到未定義的非法狀態時,能夠重新跳回到已知的狀態。當未設置為安全模式時,在復雜電磁環境以及SEU環境下,狀態機會出現非法狀態,此時FPGA軟件無法從非法狀態跳回到已知狀態,導致FPGA軟件功能失效,影響FPGA軟件安全性。
圖5" 狀態機跳轉示意圖
(a)冗余狀態S4" " " " " (b)死鎖環S4lt;-gt;S5
圖6" 狀態機存在冗余狀態和死鎖環
2.2" 防范措施
針對以上影響安全性因素,為提高FPGA軟件安全性,狀態機設計時一般要遵循以下編碼規范[7]。
1)狀態機在上電后應進行初始化,確保上電后狀態機處于合法的初始狀態。HDL編碼時,通常將狀態機加入復位邏輯中,保證狀態機上電復位后處于明確的預期狀態。
2)狀態機狀態定義時,應確保不存在無效的冗余狀態,狀態跳轉時不存在死鎖的情況。HDL編碼時,不定義和聲明非必要的冗余狀態,避免出現死鎖環邏輯。
3)狀態機跳轉時,避免出現毛刺引起的誤跳轉。HDL編碼時,宜采用時序邏輯來實現狀態機跳轉,從而降低毛刺的風險[8]。
4)狀態機設計時,應補全case語句的default或others分支,并且通過開發工具設置或約束狀態機為安全模式,從而保證出現非法狀態時,能夠跳回到有效狀態,提高狀態機的安全性。
3" 信號毛刺
3.1" 影響安全性因素
信號毛刺主要是由于競爭冒險產生的。信號經由不同的路徑傳輸到達電路中某一匯合點的時間有先有后,稱之為競爭。由于競爭現象引起電路輸出發生瞬間錯誤的現象,稱之為冒險。如圖7所示,發生冒險時,往往會出現一些錯誤的尖峰信號,這些尖峰信號就是毛刺。
圖7" 信號毛刺
當出現毛刺時,如果FPGA電路對毛刺敏感,則會導致FPGA軟件功能出現錯誤,從而影響FPGA的安全性。影響FPGA軟件安全性的毛刺信號主要包括以下幾方面:
1)通過IO端口引入的外部毛刺信號。此類毛刺信號由FPGA外部器件產生,本身無法消除,只能通過電路設計減少毛刺信號的影響。
2)內部產生的毛刺信號。此類毛刺信號由FPGA器件內部產生,由于信號在FPGA的內部走線和通過邏輯單元時造成的延遲不同,在多路信號變化的瞬間,組合邏輯的輸出會出現毛刺信號。
3.2" 防范措施
為了降低毛刺帶來的風險,HDL編碼時要遵守相應的編碼規范,以減少毛刺信號對FPGA軟件安全性的影響[9,10]。
1)外部輸入的信號進行同步處理。利用D觸發器輸入端對毛刺不敏感的特點,HDL編碼時,對外部輸入的信號進行同步處理,從而減少毛刺信號的影響。
2)盡量采用時序電路來實現邏輯功能。由于組合邏輯容易出現競爭冒險,導致毛刺出現,而時序電路在時鐘沿有效時進行邏輯操作,對毛刺不敏感。因此,HDL編碼時,在FPGA資源允許的情況下,盡量采用時序電路來代替組合邏輯,從而降低毛刺帶來的風險。
3)應避免出現毛刺敏感電路。HDL編碼時,使用組合邏輯時應避免出現鎖存器、組合邏輯環等敏感電路,譬如if語句應補全else分支,case語句應補全default分支;組合邏輯編碼時,應避免輸出信號反饋至輸入,導致出現組合邏輯環。
4)通過濾波電路對毛刺信號進行濾除。HDL編碼時,對關鍵信號設計濾波電路,將小于濾波寬度的毛刺信號濾除掉,保證信號采集的正確性。
4" 結" 論
影響FPGA軟件安全性的因素較多,本文從信號跨時鐘域、狀態機設計、信號毛刺等方面分析了其對安全性的影響,并從HDL編碼方面提出了防范措施,形成了HDL編碼規范,從而能夠在設計階段對HDL編碼提供參考,有效規避可能出現的FPGA軟件安全性問題,達到提升FPGA軟件質量的目的。
參考文獻:
[1] 祝宇,董冠濤,張碩.FPGA軟件亞穩態處理技術研究 [J].中國檢驗檢測,2020,28(3):14-17.
[2] 宋文強,胡毅.FPGA跨時鐘域信號同步設計方法研究 [J].單片機與嵌入式系統應用,2018,18(9):24-27+81.
[3] 賈永興,楊宏,劉文慧,等.基于國產FPGA的網絡平臺跨時鐘域設計方法 [J].通信技術,2021,54(10):2447-2450.
[4] 游斌相,廖育富,任午龍,等.FPGA在數據重排中的跨時鐘處理 [J].火控雷達技術,2021,50(3):59-63.
[5] 黃琳,王新,胡成輝.基于FPGA的異步跨時鐘域設計 [J].山西電子技術,2020(1):76-78.
[6] 丁宗杰,門永平,白正堯,等.FPGA狀態機綜合可靠性探究 [J].空間電子技術,2021,18(1):23-27.
[7] 楊亮,李祁.基于三模冗余架構的航天器FPGA可靠性設計 [J].計算機測量與控制,2019,27(12):244-248.
[8] 于瀟,劉文紅,趙靜,等.基于航天系統的FPGA可靠性安全性分析方法研究 [J].中國檢驗檢測,2021,29(2):14-15+36.
[9] 何偉,張玲.消除CPLD/FPGA器件設計中的毛刺 [J].重慶大學學報:自然科學版,2002(12):69-73.
[10] 中央軍委裝備發展部.軍用可編程邏輯器件軟件Verilog語言編程安全子集:GJB 10157-2021 [S].北京:國家軍用標準出版發行部,2021.
作者簡介:曹明(1989.08—),女,漢族,河南開封人,工程師,研究方向:FPGA測試。