歐陽有恒,嚴大衛
(1.南京信息工程大學,江蘇 南京 210044;2.無錫先進技術研究院,江蘇 無錫 214125)
隨著處理器設計規模的日益增大,結構的復雜程度越來越高,處理器的驗證也越來越困難,傳統的定向測試雖然依舊無法替代但已經滿足不了現在高效的驗證需求。偽隨機驗證能在短時間內產生大量偽隨機測試向量,有助于快速捕獲人工定向測試預期之外的驗證盲點,在現代微處理器驗證領域有著非常重要的作用[1]。因此,如何合理有效地生成偽隨機指令測試向量,提高覆蓋率是偽隨機指令生成器的研究熱點。目前,人工智能和大數據算法飛速發展,機器學習算法(Machine Learning,ML)也大量用于測試向量生成中。將ML引入測試向量生成的早期工作可以追溯到1997年[2],其由遺傳算法來實現。遺傳算法(Genetic Algorithm,GA)被用作微處理器中高速緩存訪問仲裁機制CAAM的測試生成器,基于遺傳算法的生成器產生輸入指令集刺激來觸發CAAM狀態,這些狀態之前沒有從早期運行指令的結果中學習到。結果表明,與傳統的偽隨機生成器相比,使用遺傳算法時的狀態數增加了約13%。后羅春[3]、宋倩[4]、吳海濤[5]等人在此基礎上,針對遺傳算法的性能進行改進,不斷實現機器學習在測試向量生成領域的優化。機器學習通過在驗證過程中采用有監督和無監督模型作為測試向量生成器,提供了關于特定模型解決發現問題的有用見解。文獻[6]提出使用3層神經網絡作為激勵源,用于一個簡單CPU DUT的功能驗證,以達到斷言覆蓋率指標;文獻[7]提出使用支持向量機(Support Vector Machines,SVM)作為激勵生成器來去除傳統的偽隨機生成器產生的冗余刺激,以64位RISC處理器作為待測設計(Design Under Test,DUT),結果顯示,使用SVM方法的總時間,包括模型學習花費的時間,明顯少于使用傳統偽隨機化方法花費的時間并在一定程度上提高了覆蓋率;文獻[8]對SVM、深度神經網絡(Deep Neural Networks,DNN)和偽隨機森林模型(Random Forest,RF)作為四核緩存DUT的激勵生成器進行了測試,工作結果表明,SVM,DNN和RF的模擬時間分別加快了68.5%,77%和78%。
此后,隨著循環神經網絡(Recurrent Neural Network,RNN)的廣泛應用,逐漸將RNN用于指導指令生成。文獻[9]提出使用RNN來引導生成器,反饋循環從功能和代碼覆蓋度量中獲取輸入,修改為處理器生成指令集的約束,以實現覆蓋目標。結果表明,與傳統的指令生成方法相比,覆蓋率能達到總覆蓋目標的85%,但是在長期記憶和反向傳播中存在梯度爆炸等問題。隨后,瑞士人工智能研究所的Jurgen Schmidhuber提出長短期記憶結構(Long Short-Term Memory,LSTM),在此基礎上,2014年Cho等[10]提出一個廣泛使用的門控循環單元(Gate Recurrent Unit,GRU)。GRU神經網絡引入門機制,結構簡單且可解決長期記憶和反向傳播中的梯度爆炸問題,但擬合精度卻比不上LSTM。目前在指令生成領域,GRU與LSTM相結合的GRU_LSTM算法更受歡迎,不僅訓練周期短,而且實現了高擬合精度的目標。文獻[11-13]提出將GRU與LSTM構成組合模型GRU_LSTM,這種模型比單一模型能更好地預測參數。同時,由于近年來深度學習掀起一股新的人工智能的浪潮,相繼在圍棋、視頻學習領域取得顯著成績,強化學習[14-15]也被應用于指導指令生成,其采用一種獎勵機制的學習模式,以便模型能持續地學習信息并更新參數。William Hughes等[16]提出使用監督和強化學習以高度自動化的方式提供了比偽隨機結果更好的結果,從而確??梢栽诩铀俚臅r間尺度和更少的資源下實現完全設計覆蓋的設計驗證目標。在文獻[11-13]的指導下,該文利用偽隨機指令生成器,基于UVM驗證[17]方法學構建驗證平臺,并在此基礎上將GRU_LSTM算法與強化學習結合,使用基于霍夫曼編碼的偽隨機指令包,在訓練GRU_LSTM模型過程中得到推薦的偽隨機指令類型,通過獎勵函數對模型參數(影響偽隨機指令類別分布)再次優化,自動優化測試用例的約束,得到更優測試用例,以得到更高的代碼覆蓋率。
該文的主要任務是使用GRU和LSTM算法,應用循環遞歸網絡序列記憶特性,挖掘測試指令包序列對覆蓋率的影響,將指令包指紋編碼序列作為樣本,代碼覆蓋率作為指導,開展模型訓練;并在訓練完成的GRU_LSTM網絡輸入偽隨機指令包的編碼序列,得到該序列的最優覆蓋率,作為現實獎勵,反饋給強化學習,用于指示下一步結合強化學習的新模型訓練。本節對GRU_LSTM算法的理論基礎和強化學習的理論基礎進行描述,并在此基礎上搭建RLGRU_LSTM模型。
門控循環單元的主要功能是在指令生成過程中捕捉指令序列的時序特性(即指令執行的邏輯順序),提升數據重構的準確性。作為RNN的一種變形單元,GRU解決了長期記憶和反向傳播中的梯度消失和爆炸問題,在達到相同模型性能的前提下其計算量小,且效率更高[18-19],但其在擬合精度上卻遜色于LSTM。因此,該文考慮使用一種第一層為GRU、第二層為LSTM的雙層神經網絡模型,既有LSTM的高精度、高穩定性,又有GRU的訓練周期短特點。對待輸入指令序列進行樣本處理,根據霍夫曼編碼[20]得到測試偽隨機指令包的編碼序列,輸出是基于驗證平臺得到的覆蓋率,作為損失函數的參數,反饋給模型。
GRU_LSTM模型第一層由多個GRU門控單元組成,融合更新門和重置門,具體結構如圖1所示。

圖1 門控循環單元結構
其中,Zt表示當前時刻的輸入,Yt表示當前時刻的輸出,Yt-1表示上一時刻的輸出。
vt為更新門,更新門決定了在每一層網絡中有多少信息可以傳遞給未來,計算公式如式1所示[21]:
vt=σ(Wv*[Yt-1,Zt]+bv)
(1)
其中,σ表示激活函數sigmod,Wv表示重置門的權重矩陣,bv表示偏差向量。rt為重置門,重置門與更新門作用相反,它決定了當前網絡層中有多少信息不能傳遞到未來,計算公式如式2所示[21]:
rt=σ(Wr*[Yt-1,Zt]+br)
(2)
其中,Wr表示更新門的權重矩陣,br表示偏差向量。根據更新門和重置門結果,GRU算法計算出候選隱藏狀態ht,計算公式如式3所示[21]:
ht=tanh(Wh*[rt*Yt-1,Zt]+bh)
(3)
其中,tanh表示激活函數tanh,Wh表示權重矩陣,bh表示偏差向量。最后,GRU算法的輸出Yt計算公式如式4所示[21]:
Yt=(1-vt)*Yt-1+vt*ht
(4)
在GRU網絡層輸出后,結果接入LSTM網絡層,GRU算法的輸出Yt就是LSTM的輸入。LSTM的單元結構如圖2所示。其中,Nt為當前時刻的輸入,Ut為當前時刻的輸出,Ct為當前時刻的狀態,Nt-1,Ut-1,Ct-1為上一時刻參數。LSTM有遺忘門、輸入門、輸出門。每個LSTM單元結構的前向傳播公式組如式5~式9所示[21]:

圖2 LSTM單元結構
ft=σ(Wf*[Ut-1,Nt]+bf)
(5)
pt=tanh(Wc*[Ut-1,Nt]+bc)
(6)
Ct=ftCt-1+it*pt
(7)
ot=σ(Wo*[Ut-1,Nt]+bo)
(8)
Ut=ottanh(Ct)
(9)
其中,Wf表示遺忘門的權重矩陣,Wi,Wc表示輸入門的權重矩陣,Wo表示輸出門的權重矩陣;bf,bi,bc,bo為偏差向量;ft表示最后一層神經元被遺忘的概率;it和pt表示當前需要保留的負載信息的比例;ot為輸出門。
在模型訓練過程中,利用MSE梯度隨誤差減小的特性以及為使損失函數具有可導性,使用Huber損失函數[22]來計算模型期望覆蓋率Y與真實覆蓋率f(x)之間的差值,以獲得更精確的最小值,使模型訓練更準確。計算公式如式10所示:
(10)
其中,δ作為選擇參數,由真實實驗確認。
強化學習與監督學習和無監督學習構成了機器學習領域。強化學習的過程通??梢杂神R爾可夫決策過程(Markov Decision Process,MDP)[23]進行描述,原理如圖3所示。

圖3 強化學習原理
智能體(agent)在環境中,通過不斷的“試錯”來學習,通過與環境的交互獲得環境感知的狀態(S),在價值策略(Π)的指導下進行決策并指導環境進行一系列的動作(A),而環境會將由這一系列動作觸發的獎勵反饋給智能體,智能體根據獲得的獎勵更新動作,向著最大化累計獎勵的方向進行迭代,從而不斷提高自身的決策能力。因此,強化學習的目標相當于學習一個最優策略來最大化獎勵函數。如何設置合適的狀態、策略和獎勵函數至關重要。
1.3.1 基于RLGRU_LSTM算法的驗證平臺架構
通過研究大量國內外文獻發現,目前在偽隨機指令生成器的生成策略大體分為兩種:動態的生成策略和靜態的生成策略[24]。這兩種生成策略各有優缺點。通過分析兩者的優缺點,該文在研究偽隨機指令生成技術時采用靜態生成策略,通過隨機組合的方式,覆蓋一些設計驗證工程師無法預料的缺陷。整個驗證平臺主要由偽隨機指令生成器、待測設計DUT和指令集模擬器(Instruction Set Processor,ISP)構成,每個模塊由腳本控制啟動。在偽隨機指令生成模塊,針對強化學習在樣本訓練階段,訓練樣本的收斂速度滿足不了現有技術的需求,樣本學習效率低下。該文在現有GRU_LSTM算法[11-13]和強化學習[15-16]基礎上,將GRU_LSTM和強化學習算法進行結合,構建新算法RLGRU_LSTM,提高代碼覆蓋率,驗證平臺架構如圖4所示。
其中偽隨機指令生成器根據指令集格式、指令類型添加約束,生成大量偽隨機測試向量,傳遞給ISP和DUT。該文構建了能生成合法指令的偽隨機約束模板。在構建指令模板過程中,根據每條指令所屬基本類型的基本特點,將各個字段約束在合理范圍內,并拼接成合法指令。其中約束包含如操作碼、功能碼范圍、存儲器可偏移地址大小、寄存器編址、立即數和符號數大小、指令中各個域的排列組合以及核心模式等。指令集模擬器用于判斷DUT運行命令后的結果正確與否。ISP和DUT在接收偽隨機指令生成器輸出的指令或者定向測試指令后,使用正則表達式等方法,通過腳本對兩者輸出結果進行對比并輸出正確或錯誤的判斷。
由圖4可知,在模型訓練開始之前,根據強化學習的目標策略和歷史覆蓋率結合進行模型訓練。在RLGRU_LSTM模型中,GRU_LSTM作為RL智能體,將按照其遵循的策略發送下一步的操作,以驗證平臺作為整體環境,根據環境反饋的獎勵,按照策略進行狀態調整,GRU_LSTM模型中神經網絡如何學習修改功能碼和操作碼類別權重系數是策略的具體表現,智能體的獎勵與當前訓練模型覆蓋率和上一時刻覆蓋率相關。以指令包指紋編碼序列作為樣本,覆蓋率指導損失函數,進行模型訓練,向訓練完成的GRU_LSTM網絡輸入偽隨機指令包的指紋序列,得到該序列的最優覆蓋率模型并作為目標模型和學習模型,在此基礎上與強化學習相結合,將當前狀態指令包輸入目標模型,下一狀態指令包輸入學習模型,將學習模型得到的覆蓋率與目標模型學習得到的覆蓋率差值作為獎勵,根據策略調節學習模型的權重參數,當調節次數到達某一固定值如10次后,將學習模型的權重參數賦值給目標模型,完成對RLGRU_LSTM模型的訓練。
1.3.2 動作與獎勵
RLGRU_LSTM在模型訓練過程中,可以看作是快速在一堆指令中尋找出可以達到最大覆蓋率的指令集合,通過獎勵函數,學習GRU_LSTM算法模型對opcode和func等類別的權重分配。因此在強化學習過程中對獎勵函數的設計十分重要,獎勵函數的好壞決定了智能體是否有效的學習環境,能否高效地完成模型訓練。在指令生成模型中,芯片驗證代碼覆蓋率能否快速達到最高值,取決于生成指令是否能夠在每次模型訓練過程中有目標地按照獎勵函數生成。因此,若想高效找到一組指令集達到最高覆蓋率,需要在當前訓練覆蓋率f大于上一時刻覆蓋率best(f)時給予正獎勵;當前覆蓋率小于上一時刻覆蓋率時給予負獎勵。t時刻,最佳覆蓋率獎勵如式11所示:
(11)
基于GRU_LSTM及強化學習算法的偽隨機指令生成器的流程和算法流程如圖5所示。
(1)加載驗證環境,使用腳本調用所需編譯、仿真軟件,配置仿真、編譯相關參數,初始DUT所需條件、寄存器、只讀存儲器rom等,創建初始約束條件;
(2)對指令以及權重進行霍夫曼編碼;
(3)確定GRU_LSTM網絡的神經元個數,Huber的選擇參數δ,梯度優化函數,對GRU_LSTM模型進行訓練,得到最優GRU_LSTM模型;
(4)根據圖4,將當前狀態值和下一時刻狀態輸入到目標GRU_LSTM模型和學習模型,并返回獎勵值,計算Huber損失函數,根據Adam優化器自動更新下一次狀態,以及迭代次數T,得到權重,完成RLGRU_LSTM的訓練。
驗證平臺在Python3.6環境下運行,DUT為基于RISC-V指令集架構開發的一款面向低功耗嵌入式領域的處理器核心,在微結構上實現單譯碼、單發射、順序執行、靜態預測的五級流水線。采用cadence的xcelium的仿真工具,對verilog文件進行編譯和仿真。
采用IMC(Integrate Metrics Cener)收集、合并覆蓋率并輸出覆蓋率日志。整個驗證平臺通過Python腳本整合,分析終端操作命令,調用對應工具、軟件、腳本、算法和實驗對象代碼等,根據各軟件運行日志,輸出仿真、覆蓋率、對比等結果。實驗中構建的GRU_LSTM的兩層神經網絡均采用128個神經元,Huber損失函數的超參數σ根據實際實驗結果設置為0.98,使用Adam優化器優化權重wi,完成對所提RLGRU_LSTM算法的訓練。該文以偽隨機指令的覆蓋率與應用新算法訓練模型得到的覆蓋率,以及其他文獻所提方法得到的覆蓋率做對比,驗證算法的有效性。
以代碼覆蓋率作為RLGRU_LSTM模型的損失函數參數,指導生成偽隨機指令的一個最直接目的就是提高代碼覆蓋率,減少驗證收斂時間,快速覆蓋驗證盲點。圖6給出了基于原偽隨機指令生成器的驗證平臺和基于RLGRU_LSTM的偽隨機指令生成器的驗證平臺分別在迭代100,200,300次收集到的代碼覆蓋率。圖7給出隨著次數的增加,基于原偽隨機指令生成器的驗證平臺和基于RLGRU_LSTM的偽隨機指令生成器的驗證平臺代碼覆蓋率的收斂情況。表1給出所構建模型與其他文獻所提模型在指令生成應用上,與不采用任何提高覆蓋率方式的原覆蓋結果的提高對比。

表1 RLGRU_LSTM與其他模型覆蓋率提高對比 %

圖6 原有驗證平臺和基于RLGRU_LSTM的驗證平臺代碼覆蓋率對比
實驗結果清楚表明,對比其他文獻所提方法,文中模型能明顯提高覆蓋率,并且隨著次數的增加,基于原偽隨機指令生成器的驗證平臺的代碼覆蓋率已趨于不變,覆蓋率值約62%,而基于RLGRU_LSTM的偽隨機指令生成器的驗證平臺的代碼覆蓋率依舊在緩慢增加至約82%,且基于RLGRU_LSTM的偽隨機指令生成器的驗證平臺會比基于原偽隨機指令生成器的驗證平臺較早地到達目標覆蓋率值。但是由于有些覆蓋條件是在約束之外、部分分支條件無法進入等原因,覆蓋率最后無法達到100%。
為解決實際情況中如何提高偽隨機指令生成器代碼覆蓋率的問題,結合RLGRU_LSTM,以及霍夫曼編碼指令包方式,針對該文搭建的驗證平臺,在約束指令條目情況下,將代碼覆蓋率提高至82%左右,高于原偽隨機指令生成器約19%,且對比文獻[2,7,9,11-13],RLGRU_LSTM模型在指令生成過程中代碼覆蓋率增幅明顯優于文獻所提模型。同時相比原偽隨機指令生成器,覆蓋率提前約20 s達到某一目標值。但在實際應用過程中仍存在一個問題,覆蓋率包含功能覆蓋率和代碼覆蓋率,該文只考慮了代碼覆蓋,然而100%的代碼覆蓋率并不一定意味著該設計已經得到了完全的驗證。代碼的覆蓋范圍并沒有完全定義驗證的完整性和質量,功能覆蓋率需要狀態機在不同狀態間相互切換完成某一流程或嚴苛到特定節拍的觸發條件,如何將功能點覆蓋率考慮進來是有待考慮的一點。