1如果碰到ARM運行程序的問題,最好把下面的debug開關打開,這樣可以打印出很多有效信息,但也會使得仿真變慢。
2ARM運行的原始程序可以是匯編程序、C語言程序,最后編寫Makefile文件,通過ARM專用的交叉編譯器編譯,生成最后可運行的匯編和二進制代碼。(1)原始文件類似如下:start.s/main.c/a.c/b.c/boot.hex(2)生成的反匯編文件如下:這個文件在后面的debug過程中非常有用,可以逐一比較,定位出錯誤點。
(3)最終運行的二進制代碼:左邊一般為地址,右邊為數(shù)據(jù)。這份二進制代碼就是ARM最終運行的代碼,一般在數(shù)字IC驗證中,會通過load的方式,下載到SPI,flash或者DDR等存儲模塊中,供ARM core運行使用。當然,為了節(jié)省時間,IC驗證過程中,經常會使用backdoor的方式直接寫到對應存儲模塊中。
3步驟1中的開關打開之后,仿真就會產生如下的log文件,能精準定位到現(xiàn)在ARM執(zhí)行哪條指令,然后對照步驟2中的反匯編代碼就可以定位出錯誤點,然后再進一步debug。4當然最有效的debug方式,還是需要借助波形來進行。下面是幾組很有效的debug信號:(1)ARM?的AXI bus總線,data bus用于數(shù)據(jù)讀寫,instrbus用于讀取指令,periphbus主要是對其他IP?模塊的讀寫控制操作。(2)PC指針和ARM寄存器:PC指針是所有CPU debug的必看信號,能清晰的知道ARM運行指令的順序,有一點需要注意的時,PC指針一般會預先多讀取2筆指令。通用寄存器r*也是debug重點看的信號,可以對照手冊和匯編代碼來看。
(3)因為ARM運行的代碼都存儲在存儲模塊中,所以經常出現(xiàn)讀取的時候出錯的情況,比如如果是放在DDR中,那么DDR的端口總線就是重點查看的信號,這里也是經常會出錯的。
最后,需要注意的是,ARM的bus總線或者通用寄存器中,一旦讀到X值進去,即使這個X值不會被使用,最終整個程序也會出錯的。以上簡單羅列了一下在系統(tǒng)級驗證中ARM程序運行的debug方法,內容簡單,適合初學者使用。有更多的好的debug方法,也歡迎大家一起交流啊。感謝閱讀,別走!點贊、關注、轉發(fā)后再走吧