大家好,我们团队的名字是Hey Siri,参赛编号是CICC1584,我们团队昨天下午忽然发现无法用NucleiStudio烧写程序到板子上了,今天一直在尝试解决,发现论坛里有不少人都曾出现过这个问题,我们最终找到胡灿老师在这篇帖子的回复中贴出的一个解决方案,链接:https://www.rvmcu.com/community-topic-id-609.html,
尝试后以后成功解决问题,征得胡老师同意后,我们团队整理了解决问题的过程以及方案,希望可以帮助遇到同样问题的大家。
最开始无法烧录的报错信息是:
之前也遇见过这种情况,单看报错信息是由于没有soc的核引起的,重新烧录一遍官方自带的mcs文件,问题还是没有得到解决。经过讨论问题可能存在于板子、调试器、IDE软件以及soc软核这四个方面,同时也整理一下平时遇见同样问题的解决办法。
1. Fpga软核
软核一般不去修改芯来的开源rtl代码的话,应该不会出现问题,我们团队接了协处理器的接口,为了以防万一,还是重新烧录了官方给的单核的mcs文件,但是软件IDE还是无法烧录程序,问题不在核上。
2. IDE软件
平时用软件烧录程序时,在刚刚烧录完一次代码后,偶尔会出现无法烧录的情况,这时候可以尝试按IDE上的红色按钮暂停工程,或者重启板子、插拔调试器也都能解决。而我们在团队三台电脑的IDE上都尝试烧写程序,但是出现相同报错,说明也不是软件的问题。
3. 调试器
如果调试器接口没有插对,比如插到了FPGA的jtag接口上,会出现这种JTAG all one的报错,有出现这种报错朋友可以看看这篇贴子:
https://rvmcu.com/column-topic-id-464.html
我们接口经过检查都是没问题。刚好学校里有别的同学手头上也有板子跟调试器,借用之后,首先用他们的调试器下载,发现依旧报错,调试器的问题也被排除。接着用我们的调试器连接同学的板子,则烧写成功,可以明确问题出在板子上面。
4. 板子
接着用我们的调试器连接同学的板子,则烧写成功,可以明确问题出在板子上面。
尝试将程序下到ILM中,同样无法成功,我们猜测是板子mcu的flash出了问题,可能每次上电程序自动从flash中运行,里面有些东西使得板子无法下载新的程序,需要擦除flash中的数据,但具体怎么操作方式我们也不知道。
胡老师的解决方案如下所示:
1. 修改fpga/mcu200t/src/system.v
assign dut_io_pads_bootrom_n_i_val = 1'b0;
重新生成mcu200t的mcs文件,下载至FPGA
2. 在lim中运行蜂鸟的helloworld程序,若成功则执行步骤3
3. 下载helloword程序至flash中运行
关于bootrom,百度说是嵌入式处理器芯片内的一小块掩膜ROM或写保护内存。它包含处理器在上电或复位时执行的第一个代码,我们猜测对这个引脚进行修改的话,应该可以使板子上电后不首先执行flash。
在vivado里修改引脚值后重新生成mcs文件。
之后按照胡老师的方法,在RV-Tools里打开SDK configuration Tools,在DownLoad这里把FLASH修改为ILM,重新烧写程序,这次就成功了。把程序切换回FLASH之后也可以正常烧写,恢复正常,问题成功解决!
这篇贴子总结了一些IDE烧写程序失败的解决方案,能力有限,难免出现疏漏,不足之处希望大家海涵,也欢迎大家有问题也在论坛里跟我们交流,大家共同学习进步,祝各参赛队比赛顺利!