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