喜大普奔,公司要評估用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次,而後中止。
好了,就寫到這裏,文字不夠詳細,如有疏漏或錯誤,歡迎各位指出。具體效果,就不上圖啦。