喜大普奔,公司要评估用SOC作产品,我就天然而然的被安排了学习和评估的工做,因而,天天的工做就是开始研究soc了。其实,只要能静下心来学习,一切都仍是可以弄出来的。linux
之前像个无头苍蝇同样处处乱撞,搞了两三个月没把fpga和arm给联通起来,尽然只是由于教程用的Quartus II13.1软件和我本身电脑上装的Quartus II14.1软件在生成dts时调用的一个文件不同致使的。固然,这个只是外在缘由,真正内在的缘由仍是由于内在对linux的恐惧,由于是零linux基础,因此所有linux下命令都是第一次接触,因而各类错误各类不通,最后就放弃了。可是,内心老是不肯就这么放弃了,总想学会这门新技术。因而前两天又花钱买了周立功的ARM9开发板,而后跟着他提供的教程慢慢学习。终因而可以简单的进行一些linux下的命令操做了,昨天再次上手DE1—SOC,终于成功的生成了preloader和DTS,并经过HPS控制了FPGA端的LED。学习
相信不少参加这次活动或者自学SOC的筒子也都有过我以上这段经历,这里,我愿意把我遇到的问题和解决方法提出来,但愿那些还卡在这些问题的地方的筒子可以快速走出困境。spa
我这次学习是跟着友晶提供的培训教材一步一步来进行的,该培训教材中,使用的是Quartus II13.1的软件,而我在使用的时候,直接安装的Quartus II 14.1。而也正是这样一个选择,让我被坑了好几天,最终放弃沉寂了很久,直到昨天,在网友"微末凡尘"的指导下,才执行成功。xml
首先,在教材的第49页,在hps clock选项卡上,须要进行一下更改,具体我也是看了骏龙科技的一篇文章《在SoCEDS环境下编译和更新preloader和uboot程序的方法》才知道的,原文以下:blog
相对于13.0主要变化是有了HPS Clocks窗口分为了Input Clocks 和Output Clocks!对好比下图: 教程
Quartus 13.0 HPS Clocks窗口 接口
Quartus 14.0 HPS Clocks窗口 ci
14.0软件中Cyclone V 器件MPU 默认时钟为925Mhz,而13.1版为800M。这里编译不改变MPU的Clock,因此去掉use default MPU clock frequency选项!不用改其余的选项,Clock即为800MHz。从新generate 关闭就行了。使用Quarut编译编译完成后会有hps_isw_handoff中的文件会更新,这些文件时链接HPS硬件配置与preloaderr软 件接口文件。
开发
这里文中说的14.0,可是14.0和14.1在这一点上没有区别,所以,直接按照文中的内容操做便可。 文档
第53页最后一行,说要求将pio_0重命名为led_pio,这里必定要注意并保持一致,不然生成dts时会报错。同理,button_pio也是同样,名字最好不要错。我的感受,初学,尽可能不要标新立异,尤为是对环境不熟的,不然都不知道死在哪里。
第83页最后一句话,我直接按照文档中的命令内容敲进去,会报错,提示我少了-hv参数,以下图所示:
这里我也不懂是怎么回事,既然说少了个参数,就加个参数呗,因而我将命令内容改成:
mkpimage –hv 0 –o preloader_with_header.img u-boot-spl.bin
而后就能成功了。
第85页,生成DTS的时候,这个地方是变化最大的一个地方,我就是由于这个地方,才被卡了好久。这页的最后一段,说生成dts须要的四个文件为
那么,若是咱们直接使用这三个文件,用原来的Makefile文件来生成dts和dtb,都会报错,dts可以生成,可是有错误,dtb直接没法生成。缘由就在于,在Quartus II14.1的软件中,第二个使用的再也不是hps_clock_info.xml文件,而是hps_common_board_info.xml。这个文件咱们能够在SOCEDS软件安装目录下的examples\hardware\cv_soc_devkit_ghrd 文件夹下找到,个人电脑中的绝对位置为
D:\altera\14.1\embedded\examples\hardware\cv_soc_devkit_ghrd。
咱们将其中的两个xml文件hps_common_board_info.xml、soc_system_board_info.xml和一个Makefile复制出来,粘贴到咱们本身的工程目录下,并将原来的三个文件删除便可。再次make dts,就可以成功了,固然这个过程比较长,须要2到5分钟。而后,待dts生成完成后,再次make dtb,就很快,也能成功了。
注意,若是按照第86页最后一段来本身敲命令进行生成dts,则须要将命令中对应的
hps_clock_info.xml替换为hps_common_board_info.xml。为了简便推荐你们直接使用"make dts"命令来操做。后面生成dtb的也是同样,直接使用"make dtb"命令就好了,详见教材88页最后一段。
自此,后面的就没有其余问题了,对着该教材一步一步的进行,最终都能运行出正确的结果。只是,在作de1_soc_sw_lab3中的实验时,本来提供的main.c文件里面使用的fpga端的led的名字叫pio_led,而咱们的Qsys系统中命名为led_pio,所以直接使用该c文件生成可执行文件时会报错,须要将其中的第40行的"PIO_LED_BASE"改成"LED_PIO_BASE"。第59行的"PIO_LED_DATA_WIDTH"改成"LED_PIO_DATA_WIDTH"。而后就能生成成功了。
执行实验3生成的可执行文件,可以看到开发板上FPGA端的10个红色LED灯流水60次,而后中止。
好了,就写到这里,文字不够详细,如有疏漏或错误,欢迎各位指出。具体效果,就不上图啦。