程序運行時間的測量方法及仿真器的製作方法
2023-08-08 07:16:56 2
專利名稱:程序運行時間的測量方法及仿真器的製作方法
技術領域:
本發明涉及一種程序運行時間的測量方法及仿真器,屬於晶片設計技術領域。
背景技術:
秒表(StopWatch)仿真器是一種用於測量仿真晶片的程序運行時間的軟體。程序是由仿真晶片支持的不同指令所組成,而程序運行時間則是由這些指令的機器周期及當前的時鐘頻率所決定的。在現有的指令中,部分程序跳轉指令及寄存器間尋址指令的運行時間為兩個機器周期,其餘指令的運行時間均為一個機器周期,一個機器周期為η個主時鐘周期,η為整數,由仿真晶片的特性決定。假設η = 4,當仿真器運行完一段程序時,該程序的運行時間的計算公式如下:程序運行時間=程序執行的所有機器周期數* 一個機器周期的時間其中,一個機器周期的時間=1/(時鐘頻率/4),當時鐘頻率=4MHz時,則一個機器周期的時間為I μ S。現有實現方式一:仿真器由硬體計數器記錄仿真晶片在運行時輸出時鐘信號的時鐘數;當程序停止運行時,仿真器的主控晶片在讀寄存器的時候同時讀出所述時鐘數,再上傳至界面軟體,由界面軟體根據所述時鐘數和已知的時鐘頻率計算出所述程序的運行時間。這種方式的缺陷在於:硬體計數器的計時長度是固定的,當實際的時鐘數超出硬體的計時長度時,便會發生計數溢出,使硬體計數器被強制清零,從而造成計算結果不準確。現有實現方式二:在程序開始運行後,在被測量程序片斷的開始地址的位置和結束地址的位置分別設置斷點;當程序運行到上述斷點時,記錄開始時間戳和結束時間戳;將上述結束時間戳與開始時間戳之差作為程序運行時間的測量結果。這種方式的缺陷在於:程序的執行是由硬體完成的,而時間戳的記錄是由軟體執行的,由於軟硬體之間的交互還存在額外的通信時間,並且仿真器固件的處理過程也需要額外的處理時間,使得上述時間戳差值中包含這兩種時間,因此造成測量結果不準確。
發明內容
本發明提供一種程序運行時間的測量方法及仿真器,用以提高程序運行時間的測
量準確度。本發明一方面提供一種程序運行時間的測量方法,其中包括:步驟110,將軟體計數器清零,並將程序計數器的值設定為被測程序的待執行的指令碼的地址;步驟120,根據所述程序計數器的值確定相應的指令碼的機器周期;步驟130,彙編單步執行所述指令碼,結束後,通過所述軟體計數器累計所述機器周期,當彙編單步執行的所述指令碼為中斷指令碼,或者當所述收到用戶輸入的暫停命令時,執行步驟150,否則執行步驟140 ;步驟140,將所述程序計數器的值更新為所述被測程序的下一個待執行的指令碼的地址,並返回執行步驟120;步驟150,停止所述累計得到累計值,並根據所述累計值和預設的時鐘頻率計算得到所述被測程序的程序運行時間。本發明另一方面提供一種測量晶片的仿真器,其中包括:軟體部分和硬體部分,其中,所述硬體部分包括:程序計數器和微控制單元;所述軟體部分包括:執行控制模塊,用於將軟體計數器清零,並將程序計數器的值設定為被測程序的待執行的指令碼的地址,並指示所述微控制單元彙編單步執行所述指令碼;在所述彙編單步執行結束後,將所述程序計數器的值更新為所述被測程序的下一個待執行的指令碼的地址;周期確定模塊,用於根據所述程序計數器的值確定相應的指令碼的機器周期;軟體計數器,用於在每個所述彙編單步執行結束後,累計由周期確定模塊確定的所述機器周期,當彙編單步執行的所述指令碼為中斷指令碼,或者當收到用戶輸入的暫停命令時,停止所述累計得到累計值;時間運算模塊,用於根據軟體計數器得到的所述累計值和預設的時鐘頻率計算得到所述被測程序的程序運行時間。本發明採用軟體計數器對機器周期進行計數累計,從而克服了計數溢出的問題;並且測量結果中不包含額外的通信時間和處理時間,因此測量的準確度更高。
圖1為本發明所述程序運行時間的測量方法實施例的流程圖;圖2為本發明所述測量晶片的仿真器實施例的結構示意圖。
具體實施例方式圖1為本發明所述程序運行時間的測量方法實施例的流程圖,該方法可以結合仿真器的硬體實現,也可以通過軟體模擬實現,如圖所示,該方法包括如下步驟:步驟100,當收到用戶輸入的運行命令時,識別運行模式,當識別出所述運行模式為測量模式時,繼續執行下述步驟110。其中,當採用仿真器實現本實施例時,所述仿真器可以為秒表仿真器,該仿真器的運行模式可以包括測量模式和仿真模式;所述測量模式是用於對被測程序的執行時間進行測量的模式;所述仿真模式是用於對程序在仿真晶片中的運行狀況進行模擬仿真的模式。仿真器在測量模式下接收到運行命令時,繼續執行下述步驟進行測量;仿真器在仿真模式下接收到運行命令時,可以採用現有技術的方式進行處理,與本發明無關,不再贅述。此處需要說明的是,如果採用現有技術中的其他方式可以確定仿真器已經處於測量模式,則可以直接執行下述步驟110而省略本步驟。步驟110,將軟體計數器清零,並將程序計數器的值設定為被測程序的待執行的指令碼的地址。其中,所述軟體計數器是所述仿真器通過佔用緩存空間而構建的計數器,與現有仿真器中的硬體計數器相比,由於緩存空間的容量相對較大,因此足夠保存機器周期的累計值而不會發生計數溢出。其中,所述程序計數器(Program Counter,簡稱:PC)是用於存放待執行的指令碼的地址的存儲空間,仿真器中的微控制單元根據該地址可以找到相應的指令碼,以便用於執行。步驟120,根據所述程序計數器的值確定相應的指令碼的機器周期。具體地,可以先根據所述PC的值確定相應的指令碼,例如根據PC中存放的地址找到相應的指令碼;然後根據預設的編譯前的指令碼與編譯後的二進位碼的映射關係確定所述指令碼的機器周期,其中,該映射關係是在定義指令碼時預先保存在編譯器中的信息,用於對指令碼進行編譯。步驟130,彙編單步執行所述指令碼,結束後,通過所述軟體計數器累計所述機器周期,當彙編單步執行的所述指令碼為中斷指令碼,或者當所述仿真器收到用戶輸入的暫停命令時,執行步驟150,否則執行步驟140。其中,所述彙編單步執行可以由所述仿真器實現,也可以由軟體模擬實現。與連續執行操作不同的是,彙編單步執行操作每執行一次指令碼,則返回一次執行結果,使軟體計數器有機會對機器周期進行累計。這樣做的目的是,指令碼的執行是由仿真器中的硬體處理單元實現的,而機器周期的累計是由軟體計數器實現的,如果讓硬體處理單元連續執行被測程序中的多個指令碼,則軟體計數器無法得知在該連續執行過程中共執行了多少個指令碼,也就無法進行累計,因此,本步驟中需要採用彙編單步執行的操作方式。本步驟中設定的計數的結束條件:一個條件是當彙編單步執行的所述指令碼為中斷指令碼時停止計數累計,在此之前執行的指令碼的運行時間對於用戶而言已經具有一定的參考價值,如果用戶還關心該中斷指令碼之後的程序運行時間,可以重複執行本實施例所述方法;另一個條件是當仿真器收到用戶輸入的暫停命令時也停止計數累計,表明在此之前執行的指令碼的運行時間是用戶所關心的,因此不用再繼續累計。步驟140,將所述程序計數器的值更新為所述被測程序的下一個待執行的指令碼的地址,並返回執行步驟120;步驟150,停止所述累計得到累計值,並根據所述累計值和預設的時鐘頻率計算得到所述被測程序的程序運行時間。具體地,可以先根據所述時鐘頻率計算得到單個機器周期的運行時間;然後將所述單個機器周期的運行時間與所述機器周期的累計值相乘後得到所述被測程序的程序運行時間。步驟160,將計算得到的所述被測程序的程序運行時間進行顯示。本步驟是可選步驟,用於告知用戶最終的測量結果,採用其他方式進行通知也是可以的。本實施例所述方法採用軟體計數器對機器周期進行計數累計,從而克服了計數溢出的問題;並且測量結果中不包含額外的通信時間和處理時間,因此測量的準確度更高。圖2為本發明所述測量晶片的仿真器實施例的結構示意圖,用以實現上述方法,如圖所示,該仿真器包括:軟體部分10和硬體部分20,其中的硬體部分20包括程序計數器21和微控制單元22。此處需要說明的是,雖然本實施例將仿真器劃分為軟體部分10和硬體部分20,但本領域技術人員應當理解,軟體部分10中的各模塊也必然要通過硬體實現,例如在作為緩存的只讀存儲器(Read-Only Memory,簡稱:ROM)中實現,只不過這些模塊的具體實現方式並不屬於本發明要討論的內容,因此不做詳細描述。以下說明該仿真器的工作原理:軟體部分10中的模式設定模塊11根據用戶的選擇設定所述仿真器的運行模式,具體地,該仿真器的運行模式可以包括測量模式和仿真模式;當收到用戶輸入的運行命令時,由模式識別模塊12識別所述運行模式;當識別模塊識別12出所述運行模式為測量模式時,由執行控制模塊13將軟體計數器15清零,並將程序計數器21的值設定為被測程序的待執行的指令碼的地址,並指示所述微控制單元22彙編單步執行所述指令碼,所述微控制單元22根據程序計數器21中記錄的地址找到相應的指令碼進行執行。此處需要說明的是,如果採用現有技術中的其他方式可以設定仿真器的模式並確認仿真器已經處於測量模式,則可以省略上述模式設定模塊11和識別模塊識別12。在執行指令碼之前,由周期確定模塊14根據所述程序計數器21的值確定相應的指令碼的機器周期,具體地,可以先根據程序計數器21的值確定相應的指令碼,然後根據預設的編譯前的指令碼與編譯後的二進位碼的映射關係確定所述指令碼的機器周期。在所述微控制單元22的彙編單步執行結束後,由軟體計數器15累計由周期確定模塊14確定的所述機器周期,並由執行控制模塊13將所述程序計數器21的值更新為所述被測程序的下一個待執行的指令碼的地址,然後重複進行上述過程,直到當彙編單步執行的所述指令碼為中斷指令碼,或者當收到用戶輸入的暫停命令時,停止所述軟體計數器15的累計,並得到累計值。此後,由時間運算模塊16根據軟體計數器15得到的所述累計值和預設的時鐘頻率計算得到所述被測程序的程序運行時間。具體地,可以先根據所述時鐘頻率計算得到單個機器周期的運行時間;然後將所述單個機器周期的運行時間與所述機器周期的累計值相乘後得到所述被測程序的程序運行時間。另外,所述軟體部分10還可以進一步包括結果顯示模塊17,用於將所述時間運算模塊16計算得到的所述被測程序的程序運行時間進行顯示,使用戶及時得知測量結果。本實施例所述仿真器採用軟體計數器對機器周期進行計數累計,從而克服了計數溢出的問題;並且測量結果中不包含額外的通信時間和處理時間,因此測量的準確度更高。本領域普通技術人員可以理解:實現上述方法實施例的全部或部分步驟可以通過程序指令相關的硬體來完成,前述的程序可以存儲於一計算機可讀取存儲介質中,該程序在執行時,執行包括上述方法實施例的步驟;而前述的存儲介質包括:R0M、RAM、磁碟或者光碟等各種可以存儲程序代碼的介質。最後應說明的是:以上實施例僅用以說明本發明的技術方案,而非對其限制;儘管參照前述實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特徵進行等同替換;而這些修改或者替換,並不使相應技術方案的本質脫離本發明各實施例技術方案的精神和範圍。
權利要求
1.一種程序運行時間的測量方法,其特徵在於,包括: 步驟110,將軟體計數器清零,並將程序計數器的值設定為被測程序的待執行的指令碼的地址; 步驟120,根據所述程序計數器的值確定相應的指令碼的機器周期; 步驟130,彙編單步執行所述指令碼,結束後,通過所述軟體計數器累計所述機器周期,當彙編單步執行的所述指令碼為中斷指令碼,或者當所述收到用戶輸入的暫停命令時,執行步驟150,否則執行步驟140 ; 步驟140,將所述程序計數器的值更新為所述被測程序的下一個待執行的指令碼的地址,並返回執行步驟120; 步驟150,停止所述累計得到累計值,並根據所述累計值和預設的時鐘頻率計算得到所述被測程序的程序運行時間。
2.根據權利要求1所述的方法,其特徵在於,所述步驟120包括: 根據所述程序計數器的值確定相應的指令碼; 根據預設的編譯前的指令碼與編譯後的二進位碼的映射關係確定所述指令碼的機器周期。
3.根據權利要求1所述的方法,其特徵在於,所述步驟150包括: 根據所述時鐘頻率計算得到單個機器周期的運行時間; 將所述單個機器周期的運行 時間與所述機器周期的累計值相乘後得到所述被測程序的程序運行時間。
4.根據權利要求1所述的方法,其特徵在於,所述步驟150之後還包括:步驟160,將計算得到的所述被測程序的程序運行時間進行顯示。
5.根據權利要求1所述的方法,其特徵在於,所述步驟110之前還包括:步驟100,當收到用戶輸入的運行命令時,識別運行模式,當識別出所述運行模式為測量模式時,執行所述步驟110,其中,所述測量模式是用於對所述被測程序的執行時間進行測量的模式。
6.一種測量晶片的仿真器,其特徵在於,包括:軟體部分和硬體部分,其中, 所述硬體部分包括:程序計數器和微控制單元; 所述軟體部分包括: 執行控制模塊,用於將軟體計數器清零,並將程序計數器的值設定為被測程序的待執行的指令碼的地址,並指示所述微控制單元彙編單步執行所述指令碼;在所述彙編單步執行結束後,將所述程序計數器的值更新為所述被測程序的下一個待執行的指令碼的地址;周期確定模塊,用於根據所述程序計數器的值確定相應的指令碼的機器周期; 軟體計數器,用於在每個所述彙編單步執行結束後,累計由周期確定模塊確定的所述機器周期,當彙編單步執行的所述指令碼為中斷指令碼,或者當收到用戶輸入的暫停命令時,停止所述累計得到累計值; 時間運算模塊,用於根據軟體計數器得到的所述累計值和預設的時鐘頻率計算得到所述被測程序的程序運行時間。
7.根據權利要求6所述的仿真器,其特徵在於,所述軟體部分還包括:結果顯示模塊,用於將所述時間運算模塊計算得到的所述被測程序的程序運行時間進行顯示。
8.根據權利要求6所述的仿真器,其特徵在於,所述軟體部分還包括:模式設定模塊,用於根據用戶的選擇設定所述仿真器的運行模式; 模式識別模塊,用於當收到用戶輸入的運行命令時,識別所述運行模式; 所述執行控制模塊還用於當識別模塊識別出所述運行模式為測量模式時,將軟體計數器清零,並將程序計數器的值設定為被測程序的待執行的指令碼的地址,並指示所述微控制單元彙編單步執行所述指令碼;其中,所述測量模式是用於對所述被測程序的執行時間進行測 量的模式。
全文摘要
本發明提供一種程序運行時間的測量方法及仿真器,其中仿真器包括軟體部分和硬體部分。所述硬體部分包括程序計數器和微控制單元;所述軟體部分包括模式設定模塊、模式識別模塊、執行控制模塊、周期確定模塊、軟體計數器和時間運算模塊。本發明採用軟體計數器對機器周期進行計數累計,從而克服了計數溢出的問題;並且測量結果中不包含額外的通信時間和處理時間,因此測量的準確度更高。
文檔編號G06F11/26GK103198002SQ201210004989
公開日2013年7月10日 申請日期2012年1月9日 優先權日2012年1月9日
發明者王珊珊 申請人:上海海爾集成電路有限公司