在FPGA上调试BOOTLOADER的经验总结
来源:互联网 发布:淘宝网水刀拼花椭圆形 编辑:程序博客网 时间:2024/05/02 02:45
FPGA DEBUG FAQ
在FPGA上单步跟踪调试程序的时候,遇到比较多的问题,现总结成FAQ如下:
1.[Q]:执行CPU TLBclear的时候有异常,PC为什么跳转到0xbfc00380异常?
[A]:PC跳转到0xbfc00380,说明TLB填充异常,如果程序代码检查没有问题,则需检查FPGA的环境,比如修改CPU / DDR的clock,经过测试,AXI总线clock修改为50M的时候,此问题解决。
2. [Q]:单步跟踪到跳转指令b copydone的时候,为什么跳出到0xbfc00200异常?
[A]:正常情况下这个跳转指令是不会有问题的,跳出到0xbfc00200表明FPGA运行有异常,这种奇怪的问题,可以首先怀疑CPU的clock,修改AXI clock为55M后,仍然有概率性跳出的问题,则继续分析BIT文件,重新综合一版BIT文件后,此问题解决。
3. [Q]:AXI clock是否可以任意修改?
[A]:AXI clock不是越小越好,也不是越大越好,一定要调到一个合适的经验值。验证如下:
60M,则执行TLB clear时挂掉;
50M,能单步跟踪很远,但是在执行b copydone的时候,会跳出到0xbfc00200异常;
40M,读DDR失败;
45M,DDR下载失败;
80M,DDR下载失败;
70M,DDR下载失败;
55M,可以单步跟踪,一直执行到C语言的main主函数,OK;
4. [Q]:为什么执行81000804: cache 0,0(a1)这个非跳转语句的时候,直接跳到81000698: mfc0 a0,config呢?
[A]:在跑copydone这段代码的时候,执行81000804: cache 0,0(a1)这个非跳转语句的时候,直接跳到81000698: mfc0 a0,config,这个很奇怪,而且是反复循环的这样跳转,经观察,并不是什么异常,后来发现tcon的cache与HS3000的cache有差别,除了cache size不一样之外,cache channel也不一样,HS3000的cache channel有4路,而tcon的cache channel只有1路,修改cache 4路为1路之后,就ok了。
5. [Q]:为什么F8执行go的时候很快就停止了,PC指向了0xbfc00XXX?
[A]:start.S运行结束后,跳到了C的main函数执行,需要在main函数中加入while(1)死循环进行测试,否则程序很快就跑完了。
6. [Q]:为什么无法写spi flash?
[A]: 重新综合一个BIT文件后就可以了。
7. [Q]:为什么写spi flash后,重新上电,程序执行不对,串口没有打印?
[A]:首先huaya_uart.h文件中设UART_CLOCK为27500000。然后,DDR 没有初始化,即DDR的reg文件没有编译进bin程序中去,将reg文件中的数据用汇编在start.S中写入相关寄存器,重新编译后,将gzrom.bin下载到spi flash,重新上电后,串口即有打印了。
8. 为什么FPGA加入CPU复位键后,调试器中下载到DDR中的程序没有运行?
[A]:上电后,CPU默认从0xbfc00000开始执行,则在调试器中下载程序到DDR的程序是不被执行的。要想从DDR开始执行,则应该去抢到优先执行权,比如先按住CPU复位键,执行inn, 此时调试器在不断的发送inn请求,然后release CPU复位键,则能进入DDR运行模式了。
- 在FPGA上调试BOOTLOADER的经验总结
- Linux在Xilinx FPGA上的移植
- Linux在Xilinx FPGA上的移植
- FPGA经验总结
- 一位工程师的FPGA项目开发经验总结
- FPGA开发之前人的工程经验总结
- 一位工程师的FPGA项目开发经验总结
- 一位工程师的FPGA项目开发经验总结
- 在FPGA上加载UCOS
- 关于在FPGA上实现AES算法的笔记
- 关于在FPGA上实现AES算法的笔记
- 关于在FPGA上实现AES算法的笔记
- 关于在FPGA上实现AES算法的笔记
- 关于在FPGA上实现AES算法的笔记
- 关于在FPGA上实现AES算法的笔记
- 关于在FPGA上实现AES算法的笔记
- 关于在FPGA上实现AES算法的笔记
- 关于在FPGA上实现AES算法的笔记
- BUAA-SCSE Training day9 Reviewing and Learning
- hdu3294之manacher算法
- 获取外网IP(一)(解包需要优化)
- Memcached与Redis的区别
- 逆转链表 Reverse Linked List
- 在FPGA上调试BOOTLOADER的经验总结
- http://www.shengshiyouxi.com
- Python中的getattr()函数详解
- 【*加快Win7系统运行速度的12个小技巧*】
- android中Sensor 工作流程
- ssh生成随机数字验证码操作步骤
- java中的静态代码块、构造代码块和构造函数
- PAGEENCODING与CONTEXTTYPE的一点总结
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能