国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于內存監(jiān)視的處理器驗證方法

      文檔序號:6482213閱讀:151來源:國知局
      專利名稱:基于內存監(jiān)視的處理器驗證方法
      技術領域
      本發(fā)明涉及對處理器前端寄存器傳輸級RTL (Register Transfer Level)代碼進行功能驗證的方法,尤其指在模擬驗證后期全系統(tǒng)驗 證階段進行驗證查錯的方法。
      背景技術
      驗證測試是處理器設計中最費時費力卻又必不可少的一個重 要階段。驗證測試階段所花費的時間一般占整個處理器從設計到實現(xiàn)總時間 的70%以上。受上巿時間的約東,迫切需要高效而又快速的驗證方法的出現(xiàn)。
      驗證包括兩個過程:功能驗證和時序驗證。功能驗證有模擬驗證、形式化 驗證和FPGA原型驗證等幾種方法。模擬驗證通過對RTL代碼設計加載激 勵以檢驗其正確性。形式化驗證為一種釆用形式化推理驗證參考設計和修改 設計是否等價的方法。FPGA原型驗證是釆用專門的仿真軟件快速建立芯片 設計的硬件原型并加載到邏輯陣列中,模擬芯片的工作過程,與預期的執(zhí)行 結果進行比對,從而發(fā)現(xiàn)錯誤、修正原來的設計。這三種方法各有優(yōu)勢,互 為補充,其中模擬驗證是最基本的驗證方法,在驗證過程中使用最為廣泛。 軟件模擬器是處理器的系統(tǒng)級模型,來自于處理器開發(fā)公司、開放的源碼或 由設計人員自己開發(fā)。軟件模擬器模擬速度快,在處理器的模擬驗證階段起 著非常重要的作用。
      在處理器的全系統(tǒng)功能驗證階段,驗證人員主要面臨以下幾個問題 l.RTL代碼模擬數(shù)據量大,執(zhí)行過程復雜。大型驗證程序一般要運行l(wèi)億個 周期以上,波形文件在20GB以上,在如此大的執(zhí)行結果中尋找出錯點比較 困難;2.驗證人員對大型的驗證程序算法本身不熟悉或者不完全精通,不能依靠算法本身的流程和執(zhí)行軌跡來查找錯誤;3.軟件模擬器不一定是由自身 開發(fā)的,多數(shù)商用軟件模擬器也不開源,驗證人員只能通過軟件模擬器得到 驗證程序最終的執(zhí)行結果,不能通過修改或優(yōu)化軟件模擬器方便地提取所需 要的執(zhí)行信息。
      以上幾個問題導致驗證工作無法快速而有效地展開。傳統(tǒng)的驗證方法分 別將某一個驗證程序在軟件模擬器和RTL模擬器上模擬運行。然后比較兩 者的執(zhí)行結果,如果執(zhí)行結果不相同,則主要依靠驗證人員的經驗和對驗證
      程序算法的熟悉進行人工分析,查找RTL代碼中存在的錯誤后并修改錯誤, 再重新進行模擬。這種方法必須等到RTL代碼模擬完畢之后才能進行結果 比較,但RTL代碼的模擬過程是一個非常漫長的階段,很有可能在RTL代 碼開始模擬很短一段時間就出錯了,這時剩下的模擬是沒有意義的。并且驗 證人員需要在大量的執(zhí)行節(jié)拍中找出出錯點,這既需要驗證人員對驗證程序 的了解和精通,也需要靠一定的運氣,因此這種方法不但費時費力,而且査 錯效率不高。從現(xiàn)有公開的技術來看,處理器開發(fā)的過程一般是釆用高級語 言(0^++/87^111 C等)根據系統(tǒng)規(guī)范設計軟件模擬器,然后進行RTL代碼開 發(fā),驗證平臺是在此過程中統(tǒng)一開發(fā)的。目前還沒有哪種驗證方法能夠在使 用不開源的軟件模擬器進行處理器開發(fā)的情況下,高效地進行驗證并準確定 位RTL代碼中的錯誤。

      發(fā)明內容
      本發(fā)明要解決的技術問題是在擁有一個軟件模擬器但沒有 其源代碼的條件下,提供一種高效的RTL代碼的驗證方法。在功能模擬驗 證階段,由計算機來記錄和查找驗證激勵在軟件模擬器和RTL代碼模擬器 模擬情況的差異,找到RTL代碼模擬結果的第一個出錯點,以加速驗證的執(zhí)行。
      本發(fā)明的技術方案是先將驗證程序在軟件模擬器上進行模擬,在模擬 的同時監(jiān)視軟件模擬器中寄存器映射的內存的變化,并對該段內存進行釆
      樣,生成軟件模擬器執(zhí)行信息。接著在RTL代碼進行模擬的同時,釆集RTL 執(zhí)行信息并進行初級檢索, 一旦初級檢索發(fā)現(xiàn)不匹配, 一方面立即暫停RTL 代碼的模擬,另一方面通過生成精確同步點和高級檢索,找到RTL級代碼 模擬出錯的節(jié)拍,修改RTL代碼中的錯誤后進行重新模擬。具體步驟如下
      第一步,將驗證程序在軟件模擬器上進行模擬,在模擬的同時釆用內存 監(jiān)視的方法監(jiān)視軟件模擬器中寄存器組(記為Ao,A1,A2,...Ai...,An-1, n為寄 存器個數(shù))映射的內存的變化,并對該段內存進行釆樣,生成軟件模擬器執(zhí) 行信息。主要分為寄存器定位和信息釆集兩個步驟。
      步驟l,定位Ao,A,,A2,…Ai…,An-沖每個寄存器在內存中的位置。假設每
      個寄存器均有g個字節(jié),并且運行軟件模擬器的計算機是按照字節(jié)編址的。 定位Ao,A! ,A2,... A;... ,An-在內存中位置的方法如下
      1. 編寫一個匯編程序對Ao進行寫操作,寫入Xp使用內存查看工具(如 CheatEngine、 Tsearch等)觀察內存,找到Xi所在的位置。 一般情況 下,將會有N (N>1)個內存地址的內容為X^將這些地址記錄下 來,記為集合(addr—A}, i=2;
      2. 對Ao寫入Xi(X^X一…^Xi-^Xi),觀察內存將內容等于Xi的地址 賦給(add—B},將(addr—A)和(addr—B)進行與搡作,結果賦給 {addr—A}, i=i+l;
      3. 重復第2步直到(addr—A)中的元素個數(shù)為l, {addr—A》中唯一的一個地址即為Ao在內存中的位置,記為y。 軟件設計者在編程過程中會把具有相似屬性的變量定義為數(shù)組或者結
      構體,而數(shù)組或結構體中的元素在內存中是連續(xù)存放的,Ao,Ai,A2,…Ai…,A^ 就符合這種情況?;诖?,若Ao的地址為y,則Ai的地址為y+g, Aj的地 址為y+i*g, An—!的地址為y+(n-l)* g, i為正整數(shù)。
      步驟2,釆集八()入^2,...^...^1.1的信息。方法是調用內存讀取函數(shù)(如 C語言中的函數(shù)ReadProcessMemory()),在頻率f下(f和初級檢索、高級 檢索的速率相關, 一般取f:25次/秒)對以地址y開始的一段內存空間(從y 到y(tǒng)+ (n-lfg)的值進行釆樣。即每隔時間T ( T=l/f)讀取y到y(tǒng)+ (n-l)*g這 段內存空間的值并保存到軟件模擬器執(zhí)行信息文件中,供初級檢索使用,因 此軟件模擬器執(zhí)行信息文件存儲的是各個釆樣點的Ao,A1,A2,...Ai...,An-1的 值。
      第二步,釆集RTL代碼執(zhí)行信息。將RTL代碼中的寄存器記為 REG—RTL,在RTL代碼中處理器的每個功能部件以REG—RTL的寫使能作 為觸發(fā)條件,監(jiān)視功能部件寫REG—RTL的過程,每一個寫REG—RTL操作 包括以下信息當前模擬時間、進行寫操作的部件名稱、要寫入的REG一RTL 的編號、寫入該REG一RTL的數(shù)值,將上述寫REG一RTL相關的信息保存到 RTL代碼執(zhí)行信息文件中,同一個模擬時間點的寫REG—RTL操作的集合記 為一組寫REG—RTL操作。在RTL代碼中處理器的取指部件以程序計數(shù)器 PC (program counter)值發(fā)生變化作為觸發(fā)條件,記錄PC值的相關信息, 它包括當前的PC值和當前模擬時間,將PC值的相關信息也保存到RTL代 碼執(zhí)行信息文件中。這樣在RTL代碼模擬的同時,RTL代碼的執(zhí)行信息(包括寫REG—RTL相關信息和PC值變化的相關信息)按照模擬時間的順序保 存在RTL代碼執(zhí)行信息文件中。
      第三步,對RTL代碼執(zhí)行信息文件進行初級檢索,初步定位RTL代碼 執(zhí)行信息文件在M個寫REG—RTL操作中發(fā)生錯誤。M為軟件模擬器執(zhí)行 信息中相鄰兩個釆樣點之間對應的寫寄存器操作的最大數(shù)目。初級檢索的過 程是
      3.1將RTL代碼執(zhí)行信息當前寄存器組Current_REG—RTL清零,將RTL 代碼執(zhí)行信息指針RTL—Pointer指向RTL代碼執(zhí)行信息文件中的第一組寫 REG_RTL操作,將軟件模擬器執(zhí)行信息指針An^Pointer指向軟件模擬器執(zhí) 行信息文件中的第 一個釆樣點,將計數(shù)器Counter清零。
      3.2讀取當前Arc—Pointer指向的軟件模擬器執(zhí)行信息文件中采樣點的 Ao,A,,A2,…Ai…,A^的值,并將A。A,A2,…Ai…,A^的值賦給軟件模擬器執(zhí) 行信息當前寄存器組Current—REG—Arc,讀取當前RTL一Pointer指向RTL代 碼執(zhí)行信息中的 一 組寫REG—RTL搡作,并根據該組搡作更新 Current_REG—RTL,將Counter增加當前的 一組寫REG—RTL搡作中被寫的 寄存器的個數(shù)。接著比較Current—REG_RTL和Current_REG—Arc的值,如 果兩者相等,則執(zhí)行3.3,否則執(zhí)行3.4;
      3.3將當前RTL—Pointer指向的一組寫REG—RTL操作的第一個記為 REG—RTL—Begin,并將Counter清零,接著查看當前Arc—Pointer是否指向 軟件模擬器執(zhí)行信息的末尾。如果是指向軟件模擬器執(zhí)行信息的末尾則初級 檢索完畢,且沒有發(fā)生不匹配,說明該驗證程序通過了 RTL模擬,驗證完 畢,可以開始驗證下一個驗證程序;如果不是指向軟件模擬器執(zhí)行信息的末尾則將指針RTL—Pointer和Arc—Pointer均增1,轉3.2;
      3.4比較Counter是否小于M,如果是則將指針RTL—Pointer增1,轉 3.3,否則將當前RTL—Pointer指向的一組寫REG—RTL操作的最后一個記為 REG—RTL一End,并且觸發(fā)RTL模擬的暫停,初級檢索完畢。向驗證人員報 告RTL模擬器信息文件中寫REG_RTL操作REG—RTL_Begin之前是執(zhí)行正 確的,在寫REG—RTL操作REG—RTL—End之前,錯誤出現(xiàn),且在 REG_RTL—Begin和REG—RTL一End之間寫REG—RTL操作的數(shù)目不超過M 次。
      M的大小和釆樣頻率f成反比,和軟件模擬器模擬的速率成正比,經過 試驗統(tǒng)計,在采樣頻率為25次/秒時, 一個執(zhí)行3000萬次寫寄存器操作的驗 證程序,在軟件模擬器執(zhí)行信息釆集階段將被采樣3萬次左右。平均下來, 相鄰兩個釆樣點之間將會有1000次左右的寫寄存器操作,實際上由于其它 一些因素造成相鄰兩個采樣點之間的寫寄存器操作數(shù)目并不平均,但經過統(tǒng) 計該數(shù)目不會超過l萬次,因此可將M設為1萬。
      第四步,生成精確同步點。同步點是指軟件模擬器執(zhí)行到某一個時刻, 該時刻之前的Ao,AhA2,…Ai…,An-i的變化和RTL模擬器的某一次寫 REG—RTL搡作之前的執(zhí)行軌跡都是完全匹配和對應的。精確同步點是軟件 模擬器執(zhí)行到某一個時刻,該時刻之前的Ao,Ai,A2,…Ai…,A^的變化和RTL 模擬器的REG—RTL—Begin之前的執(zhí)行軌跡都是完全匹配和對應的。生成精 確同步點的方法如下編寫程序在RTL執(zhí)行信息文件中找到 REG—RTL_Begin前面最近的一處PC值,統(tǒng)計該PC值在RTL執(zhí)行信息文件 中REG_RTL—Begin之前出現(xiàn)的次數(shù)s,初始化s,=s.將驗證激勵重新加載至軟件模擬器,并在軟件模擬器中的該PC值處設斷點,向軟件模擬器發(fā)送運 行命令,等待軟件模擬器運行暫停后,將s,減l,繼續(xù)向軟件模擬器發(fā)送運 行命令,如此循環(huán),直至S'變?yōu)榱?。這時,軟件模擬器就執(zhí)行到了和
      REG—RTL一Begin相對應的時刻即精確同步點。
      第五步,對RTL代碼執(zhí)行信息文件進行高級檢索,精確定位某一次寫 REG一RTL操作出現(xiàn)錯誤。方法是從精確同步點出發(fā),編寫程序向軟件模 擬器發(fā)送單步運行命令,等待內存數(shù)據穩(wěn)定后,讀取AoA,A2,…Ai…,A^的 值,然后讀取RTL代碼執(zhí)行信息文件中以REG—RTL—Begin開始的一組寫 REG—RTL搡作,比較當前AQ,A1,A2,...Ai...,An_1的內容和當前REG一RTL的 內容是否相同,若相同,則繼續(xù)向軟件模擬器發(fā)送單步運行命令,直到軟件 模擬器運行到某一拍,其Ao,AhA2,…Ai…,A^的內容和REG—RTL的內容不 一致為止,這個節(jié)拍對應的寫REG—RTL操作即是高級檢索得出的RTL代碼 模擬出現(xiàn)錯誤時的那一次寫REG—RTL操作。
      在高級檢索階段完成以后,驗證人員可以根據高級檢索得出的某一次具 體的寫REG—RTL操作,快速地定位RTL代碼中出現(xiàn)錯誤。這時錯誤的類型 一般就是某個運算部件在同樣的源操作數(shù)下,計算結果與軟件模擬器不同, 或某個load操作從存儲器中讀出的數(shù)據與最近寫入的數(shù)據不同。驗證或設計 人員可以通過對微體系結構和RTL代碼的了解,快速地定位和修改存在故 障的部件。
      采用本發(fā)明可以達到以下技術效果
      1.本發(fā)明定位精度高,本發(fā)明通過初級檢索和高級檢索的相互配合,能 夠在較短的時間內精確定位到RTL模擬的某 一 次的寫寄存器搡作出現(xiàn)錯誤;
      2. 釆用本發(fā)明進行驗證時,驗證人員不需要理解驗證程序的原理、算法 和執(zhí)行步驟,甚至可以完全不了解該驗證程序,因此本發(fā)明具有驗證
      程序無關性;
      3. 適用范圍廣,適合具有一個不開源的軟件模擬器,同時進行處理器設 計時的驗證工作,軟件模擬器只需要提供設置斷點、單步運行等基本 的功能即可;
      4. 驗證查錯的效率高,本發(fā)明將驗證查錯的絕大部分工作轉化為計算機 來處理,減少了驗證人員的工作量,很好地提高了查錯效率。


      圖l是傳統(tǒng)的功能驗證方法的流程圖; 圖2是本發(fā)明的總體流程圖3是本發(fā)明第一步定位軟件模擬器中寄存器Ao在內存中位置的流程
      圖4是本發(fā)明第一步軟件模擬器執(zhí)行信息釆集過程示意圖; 圖5是本發(fā)明第三步初級檢索的流程圖; 圖6是本發(fā)明第三步初級檢索的執(zhí)行過程和執(zhí)行結果示意具體實施例方式
      圖l是背景技術所述傳統(tǒng)的功能驗證方法的流程圖 一個驗證程序首先 在軟件模擬器上進行模擬,再在RTL代碼模擬環(huán)境中進行模擬,然后將該 驗證程序在軟件模擬器和RTL代碼模擬環(huán)境中模擬的結果進行比對。若兩 者的執(zhí)行結果相同,則認為RTL代碼通過了該驗證程序。若兩者的執(zhí)行結果不同,則認為RTL代碼存在錯誤,需要驗證人員從錯誤的執(zhí)行結果當中 人工定位錯誤,找到錯誤后修改錯誤,再重新進行模擬。
      圖2是本發(fā)明總體流程圖
      第一步,將驗證程序在軟件模擬器上進行模擬,在模擬的同時監(jiān)視軟件 模擬器中寄存器映射的內存的變化,并對該段內存進行釆樣,生成軟件模擬 器執(zhí)行信息。
      第二步,在RTL代碼進行模擬的同時,釆集RTL執(zhí)行信息并進行第三 步的初級檢索。 一旦初級檢索發(fā)現(xiàn)不匹配, 一方面立即暫停RTL代碼的模 擬,另一方面通過第四步的生成精確同步點和第五步的高級檢索,找到RTL 級代碼模擬出錯的節(jié)拍,修改RTL代碼中的錯誤后進行重新模擬。
      圖3是本發(fā)明第一步定位軟件模擬器中寄存器Ao在內存中位置的流程

      3.1對軟件模擬器中的寄存器Ao寫入X"利用內存查看工具讀取內存, 并將內容等于&的內存地址記錄至集合(addr一A),將i初始化為2;
      3.2對寄存器A。寫入Xi(X^X^…^Xi-^Xi),利用內存査看工具讀取 內存,并將內容等于Xi的內存地址記錄至集合(add匸B》,將(addr—A〉和 (addr^B》進行與操作,結果賦給(addr一A),若此時《addr—A}中的元素為1則 轉3.3,否則i = i+l并轉至3.2;
      3.3 {addr_A}中唯一的一個地址即為軟件模擬器的寄存器Ao在內存中的 映射地址,記為y。
      圖4是本發(fā)明第一步的軟件模擬器執(zhí)行信息釆集過程示意圖。軟件模擬 器在運行時,其寄存器會在內存中存在映射。首先定位寄存器Ao在內存中的映射地址y,軟件模擬器中的所有寄存器Ao,A^A2,...Ai…,A^在內存中的 映射地址在y到y(tǒng)+(n-l^g之間,然后通過調用內存讀取函數(shù),每隔一段時 間T讀取寄存器在內存中映射地址的數(shù)值,并保存到軟件模擬器執(zhí)行信息文 件,該文件存儲的是各個釆樣點的AoA^A^.A^.A^的值。
      圖5是本發(fā)明第三步初級檢索的流程圖。初級檢索過程如下
      5.1將RTL代碼執(zhí)行信息當前寄存器組Current_REG—RTL清零,將RTL 代碼執(zhí)行信息指針RTL—Pointer指向RTL代碼執(zhí)行信息文件中的第一組寫 REG—RTL操作,將軟件模擬器執(zhí)行信息指針Arc—Pointer指向軟件模擬器執(zhí) 行信息文件中的第一個釆樣點,將計數(shù)器Counter清零。
      5.2讀取當前Arc—Pointer指向的軟件模擬器執(zhí)行信息文件中釆樣點的 Ao,Ai,A2,…Ai…,An-i的值,并將Ao,A!,A2,…A,…,A^的值賦給軟件模擬器執(zhí) 行信息當前寄存器組Current一REG一Arc,讀取當前RTL—Pointer指向RTL代 碼執(zhí)行信息中的 一 組寫REG—RTL操作,并根據該組操作更新 Current_REG—RTL,將Counter增加當前的 一 組寫REG—RTL操作中被寫的 寄存器的個數(shù)。接著比較Current—REG一RTL和Current—REG一Arc的值,如 果兩者相等,則執(zhí)行5.3,否則執(zhí)行5.4;
      5.3將當前RTL_Pointer指向的一組寫REG—RTL操作的第一個記為 REG—RTL—Begin,并將Counter清零,接著查看當前Arc—Pointer是否指向 軟件模擬器執(zhí)行信息的末尾。如果是指向軟件模擬器執(zhí)行信息的末尾則初級 檢索完畢,且沒有發(fā)生不匹配,說明該驗證程序通過了 RTL模擬,驗證完 畢,可以開始驗證下一個驗證程序;如果不是指向軟件模擬器執(zhí)行信息的末 尾則將指針RTL—Pointer和Arc—Pointer均增1,轉5.2;5.4比較Counter是否小于M,如果是則將指針RTL—Pointer增1,轉 5.3,否則將當前RTL—Pointer指向的一組寫REG—RTL操作的最后一個記為 REG—RTL一End,并且觸發(fā)RTL模擬的暫停,初級檢索完畢。向驗證人員報 告RTL模擬器信息文件中寫REG一RTL操作REG—RTL—Begin之前是執(zhí)行正 確的,在寫REG一RTL操作REG一RTL—End之前,錯誤出現(xiàn)。
      圖6是本發(fā)明第三步初級檢索的執(zhí)行過程和執(zhí)行結果示意圖。初級檢索 粗略地確定軟件模擬器執(zhí)行信息和RTL代碼執(zhí)行信息中不一致的地方。RTL 代碼執(zhí)行信息文件存儲的是所有的寫REG_RTL操作和PC值信息,軟件模 擬器執(zhí)行信息文件存儲的是一系列的采樣點處八0厶1,八2,..人...,八11_1的值。圖 中r表示某個采樣點和RTL代碼執(zhí)行信息匹配, 表示某個釆樣點和RTL 代碼執(zhí)行信息不匹配。該圖表示的是經過初級檢索之后從釆樣點0至釆樣點 h均能與RTL代碼執(zhí)行信息向匹配,但釆樣點h+1不能與RTL代碼執(zhí)行信 息相匹配。與釆樣點h相對應的一組寫REG—RTL操作的最后一個被標記為 REG—RTL—Begin,從REG—RTL—Begin到REG—RTL—End有M個寫REG—RTL 操作。初級檢索能夠確定這M個寫REG一RTL操作中存在問題。
      權利要求
      1.一種基于內存監(jiān)視的處理器驗證方法,其特征在于包括以下步驟第一步,將驗證程序在軟件模擬器上進行模擬,在模擬的同時采用內存監(jiān)視的方法監(jiān)視軟件模擬器中寄存器組A0,A1,A2,...Ai...,An-1映射的內存的變化,并對該段內存進行采樣,生成軟件模擬器執(zhí)行信息,n為寄存器個數(shù);第二步,采集RTL代碼執(zhí)行信息將RTL代碼中的寄存器記為REG_RTL,將寫REG_RTL相關的信息包括當前模擬時間、進行寫操作的部件名稱、要寫入的REG_RTL的編號、寫入該REG_RTL的數(shù)值保存到RTL代碼執(zhí)行信息文件中,同一個模擬時間點的寫REG_RTL操作的集合記為一組寫REG_RTL操作;并將程序計數(shù)器PC值的相關信息包括當前的PC值和當前模擬時間,也保存到RTL代碼執(zhí)行信息文件中;第三步,對RTL代碼執(zhí)行信息文件進行初級檢索,初步定位RTL代碼執(zhí)行信息文件在M個寫REG_RTL操作中發(fā)生錯誤,M為軟件模擬器執(zhí)行信息中相鄰兩個采樣點之間對應的寫寄存器操作的最大數(shù)目;初級檢索的過程是3.1將RTL代碼執(zhí)行信息當前寄存器組Current_REG_RTL清零,將RTL代碼執(zhí)行信息指針RTL_Pointer指向RTL代碼執(zhí)行信息文件中的第一組寫REG_RTL操作,將軟件模擬器執(zhí)行信息指針Arc_Pointer指向軟件模擬器執(zhí)行信息文件中的第一個采樣點,將計數(shù)器Counter清零;3.2讀取當前Arc_Pointer指向的軟件模擬器執(zhí)行信息文件中采樣點的A0,A1,A2,...Ai...,An-1的值,并將A0,A1,A2,...Ai...,An-1的值賦給軟件模擬器執(zhí)行信息當前寄存器組Current_REG_Arc,讀取當前RTL_Pointer指向RTL代碼執(zhí)行信息中的一組寫REG_RTL操作,并根據該組操作更新Current_REG_RTL,將Counter增加當前的一組寫REG_RTL操作中被寫的寄存器的個數(shù);接著比較Current_REG_RTL和Current_REG_Arc的值,如果兩者相等,則執(zhí)行3.3,否則執(zhí)行3.4;3.3將當前RTL_Pointer指向的一組寫REG_RTL操作的第一個記為REG_RTL_Begin,并將Counter清零,接著查看當前Arc_Pointer是否指向軟件模擬器執(zhí)行信息的末尾,如果是指向軟件模擬器執(zhí)行信息的末尾則初級檢索完畢,且沒有發(fā)生不匹配,說明該驗證程序通過了RTL模擬,驗證完畢;如果不是指向軟件模擬器執(zhí)行信息的末尾則將指針RTL_Pointer和Arc_Pointer均增1,轉3.2;3.4比較Counter是否小于M,如果是則將指針RTL_Pointer增1,轉3.3,否則將當前RTL_Pointer指向的一組寫REG_RTL操作的最后一個記為REG_RTL_End,并且觸發(fā)RTL模擬的暫停,初級檢索完畢;向驗證人員報告RTL模擬器信息文件中寫REG_RTL操作REG_RTL_Begin之前是執(zhí)行正確的,在寫REG_RTL操作REG_RTL_End之前,錯誤出現(xiàn),且在REG_RTL_Begin和REG_RTL_End之間寫REG_RTL操作的數(shù)目不超過M次;第四步,生成精確同步點,同步點是指軟件模擬器執(zhí)行到某一個時刻,該時刻之前的A0,A1,A2,...Ai...,An-1的變化和RTL模擬器的某一次寫REG_RTL操作之前的執(zhí)行軌跡都是完全匹配和對應的;精確同步點是軟件模擬器執(zhí)行到某一個時刻,該時刻之前的A0,A1,A2,...Ai...,An-1的變化和RTL模擬器的REG_RTL_Begin之前的執(zhí)行軌跡都是完全匹配和對應的;生成精確同步點的方法如下編寫程序在RTL執(zhí)行信息文件中找到REG_RTL_Begin前面最近的一處PC值,統(tǒng)計該PC值在RTL執(zhí)行信息文件中REG_RTL_Begin之前出現(xiàn)的次數(shù)s,初始化s’=s.將驗證激勵重新加載至軟件模擬器,并在軟件模擬器中的該PC值處設斷點,向軟件模擬器發(fā)送運行命令,等待軟件模擬器運行暫停后,將s’減1,繼續(xù)向軟件模擬器發(fā)送運行命令,如此循環(huán),直至s’變?yōu)榱恪_@時,軟件模擬器就執(zhí)行到了和REG_RTL_Begin相對應的時刻即精確同步點;第五步,對RTL代碼執(zhí)行信息文件進行高級檢索,方法是從精確同步點出發(fā),編寫程序向軟件模擬器發(fā)送單步運行命令,等待內存數(shù)據穩(wěn)定后,讀取A0,A1,A2,...Ai,...,An-1的值,然后讀取RTL代碼執(zhí)行信息文件中以REG_RTL_Begin開始的一組寫REG_RTL操作,比較當前A0,A1,A2,...Ai...,An-1的內容和當前REG_RTL的內容是否相同,若相同,則繼續(xù)向軟件模擬器發(fā)送單步運行命令,直到軟件模擬器運行到某一拍,其A0,A1,A2,...Ai...,An-1的內容和REG_RTL的內容不一致為止,這個節(jié)拍對應的寫REG_RTL操作即是高級檢索得出的RTL代碼模擬出現(xiàn)錯誤時的那一次寫REG_RTL操作。
      2.如權利要求1所述的基于內存監(jiān)視的處理器驗證方法,其特征在于 所述生成軟件模擬器執(zhí)行信息分為寄存器定位和信息釆集兩個步驟步驟l,定位Ao,A!,A2,…Ai…,An-!在內存中位置,方法如下1) .編寫一個匯編程序對Ao進行寫操作,寫入X,,使用內存查看工具 觀察內存,找到&所在的位置,將內容為Xt的N個內存地址記錄下 來,其中N^1,記為集合(addr—A},令1=2;2) 對Ao寫入Xi, X^X2A.. ^X"-Xj,觀察內存將內容等于Xi的地 址賦給(add一B),將(addr—A)和(addr—B)進行與操作,結果賦給{addr—A}, i=i+l;3).重復第2)步直到(add匸A》中的元素個數(shù)為l, (addi^A》中唯一的一個地址即為Ao在內存中的位置,記為y; Ao的地址為y, Ai的地址為y+g, Ai的地址為y+Pg, A^的地址為y+(n-l" g, g為每個寄存器的字節(jié)數(shù),i為正整數(shù);步驟2,采集A0,Al,A2,…Ai…,An-l的信息,方法是調用內存讀取函數(shù),在 頻率f下對從y到y(tǒng)+(n-l)*g的內存空間的值進行釆樣,即每隔時間T讀取 y到y(tǒng)+ (n-l)*g這段內存空間的值并保存到軟件模擬器執(zhí)行信息文件中, T=l/f。
      3. 如權利要求2所述的基于內存監(jiān)視的處理器驗證方法,其特征在于所 述^25次/秒。
      4. 如權利要求1所述的基于內存監(jiān)視的處理器驗證方法,其特征在于 所述M設為1萬。
      全文摘要
      本發(fā)明公開了一種基于內存監(jiān)視的處理器驗證方法,要解決的技術問題是在擁有一個軟件模擬器但沒有其源代碼的條件下,提供一種高效的RTL代碼的驗證方法。技術方案是先將驗證程序在軟件模擬器上進行模擬,在模擬的同時對軟件模擬器中寄存器映射的內存進行采樣,生成軟件模擬器執(zhí)行信息;接著在RTL代碼進行模擬的同時采集RTL執(zhí)行信息并進行初級檢索,若初級檢索發(fā)現(xiàn)不匹配,立即暫停RTL代碼的模擬并通過生成精確同步點和高級檢索,找到RTL級代碼模擬出錯的節(jié)拍。本發(fā)明定位精度高,具有驗證程序無關性,適用范圍廣,驗證查錯的效率高。
      文檔編號G06F17/50GK101615209SQ20091004392
      公開日2009年12月30日 申請日期2009年7月17日 優(yōu)先權日2009年7月17日
      發(fā)明者勝 劉, 勇 李, 李振濤, 楊煥榮, 陳書明, 陳吉華 申請人:中國人民解放軍國防科學技術大學
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1