Dec
18
今天又忙活了一天,遇到了很多很多问题。把问题整理如下,有些问题是因为我撮,有些可能确实大家都容易遇到。
1.环境安装好了,编译,第一个问题是SOPC builder出现SOPC could not be located (altera_nios2)的问题,这个问题是在某些情况下,安装过程中,环境变量注册不成功,自己添加以下即可,详细内容见上一帖。http://blog.ftliang.com/po...
2.在Quartus中编译,正常,准备写入是发现生成的sof文件是个time_limited,这个问题是ip core的版权保护问题导致的,也就是你的Quartus没有使用nios核的权限了。这个time_limited会导致这里写入fpga的程序无法运行,或至少于ide生成工程时对应的cpu不同,导致ide生成的工程会对板子上的程序校验失败,verify failed,想解决,就要找到合适的license,购买可以,对于实验课程貌似有点成本过高,但是我有不能非法的告诉各位可以通过修改纯文本的license,来添加合并权限信息。
3.这样,生成了正常的sof,写入板子,发现板子在下载完程序后自动重置了fpga里面的软核,这个问题着实郁闷了我一下午,最后找到原因,是因为自己定义的cpu,使用的管脚不多,而其他没使用的引脚使用了默认的设置,作为输出连接到地,这导致很大的电流把fpga重置了,猜测,后来在Assignments->Device->Device and Pin Options..->Unused Pins->Reserve all unused pins:设置为As input tri-stated,就可以避免这个问题。不过默认为什么要接地呢?就这个设置,还被同学鄙视了一下,说山寨程序员和资深程序员的区别,唉。
4.开始写ide下的程序了,生成例子程序,第一件事,调整使用small c lib,否则放不下。
5.编译还是出错,说越界类似的问题unable to reach, 这个比较恶心,问题是生成cpu时,添加默认的on-chip-mem过小,4k,根本不够,调整到40k,一切ok。
6.syslab是针对一个cpu生成的,并且整个lab都包含在工程的头文件里面了,这里面的system.h就是各种宏定义的位置,宏定义大多是把绝对地址定义为字符表示而已,如果编译程序出现某个量没有定义,不如直接使用绝对地址就好了。
7.还要提一下这个地址,实际上在sopc生成cpu时,遇到问题,一类是链接不全,一类就是地址是否重叠。
就写这些吧,这样可以保证一个基本在on-chip-men运行的cpu程序可以正常工作了。作为实验课,我可能不在讨论使用sdram的问题了。
cpu设置成功,程序编译环境工作正常,程序的设计对为没有任何难度了。
1.环境安装好了,编译,第一个问题是SOPC builder出现SOPC could not be located (altera_nios2)的问题,这个问题是在某些情况下,安装过程中,环境变量注册不成功,自己添加以下即可,详细内容见上一帖。http://blog.ftliang.com/po...
2.在Quartus中编译,正常,准备写入是发现生成的sof文件是个time_limited,这个问题是ip core的版权保护问题导致的,也就是你的Quartus没有使用nios核的权限了。这个time_limited会导致这里写入fpga的程序无法运行,或至少于ide生成工程时对应的cpu不同,导致ide生成的工程会对板子上的程序校验失败,verify failed,想解决,就要找到合适的license,购买可以,对于实验课程貌似有点成本过高,但是我有不能非法的告诉各位可以通过修改纯文本的license,来添加合并权限信息。
3.这样,生成了正常的sof,写入板子,发现板子在下载完程序后自动重置了fpga里面的软核,这个问题着实郁闷了我一下午,最后找到原因,是因为自己定义的cpu,使用的管脚不多,而其他没使用的引脚使用了默认的设置,作为输出连接到地,这导致很大的电流把fpga重置了,猜测,后来在Assignments->Device->Device and Pin Options..->Unused Pins->Reserve all unused pins:设置为As input tri-stated,就可以避免这个问题。不过默认为什么要接地呢?就这个设置,还被同学鄙视了一下,说山寨程序员和资深程序员的区别,唉。
4.开始写ide下的程序了,生成例子程序,第一件事,调整使用small c lib,否则放不下。
5.编译还是出错,说越界类似的问题unable to reach, 这个比较恶心,问题是生成cpu时,添加默认的on-chip-mem过小,4k,根本不够,调整到40k,一切ok。
6.syslab是针对一个cpu生成的,并且整个lab都包含在工程的头文件里面了,这里面的system.h就是各种宏定义的位置,宏定义大多是把绝对地址定义为字符表示而已,如果编译程序出现某个量没有定义,不如直接使用绝对地址就好了。
7.还要提一下这个地址,实际上在sopc生成cpu时,遇到问题,一类是链接不全,一类就是地址是否重叠。
就写这些吧,这样可以保证一个基本在on-chip-men运行的cpu程序可以正常工作了。作为实验课,我可能不在讨论使用sdram的问题了。
cpu设置成功,程序编译环境工作正常,程序的设计对为没有任何难度了。
关于SOPC could not be located (altera_nios2)的问题。
为了游戏而奋斗?开玩笑!



使用外部ram的时候,往往在下载时会出现一个校验失败,其实是外部设备没有找到而已,原因应该是在生成Nios的cpu时,有ram的相关引脚在模块中添加,但是最重要的ram的clk却不在cpu模块上,所以要自己在外部逻辑上定义ram的clk,并给出其输出正确的clk,这样就基本可以搞定。
反正当年我是没遇到这个问题,所以引脚我都注意了,卡卡。
不胜感激!