DE2_115(DAY3)以niosii去控制板子上的sdram
承接DAY2做的事情(https://ithelp.ithome.com.tw/articles/10283860),這次我想先將預設的值存入onchip memory中再以led的方式去display出來,那可能會有人好奇既然要展示數字為什麼不用板子上的七段顯示器去展示呢?
其實原因蠻簡單的,就是板子上的七段顯示器沒有現成的ip,所以要使用的話會牽扯到如何在platform designer中加入一個new custom component,這邊因為會扯到Avalon Interface,所以其實蠻複雜的,我還在研究中,下一次在整理這部分的內容,好,那就不屁話直接進入這次實驗
實驗構想:
step1:用qsys拉好niosii和板子上pl的連結
step2:在eclipse中將想diplay的值先存到onchip memory中
step3:再依序display出來
step4:燒上板子以後開關switch就會發現Led隨著預存在onchip memory中的值去做明暗
實作:
第一步:
qsys的拉法跟day2不太一樣,不一樣的點主要有三個地方,分別是以下三個地方不同
https://ithelp.ithome.com.tw/upload/images/20220206/20145199kD61SGqoTE.png
(1)clock:我不是用預設的板子上預設的,其原因在於為了要確保sdram controller和sdram兩者的clock需要一樣,從下圖可以看出兩者所使用的clock source非同一clock,sdram的clock要相對sdram controller延遲3ns,其計算可以參考(https://ftp.intel.com/Public/Pub/fpgaup/pub/Teaching_Materials/current/Tutorials/VHDL/DE2-115/Using_the_SDRAM.pdf)我就不贅述了,那可以使用pll ip去生成或是用此ip:University Program >Clock > System and SDRAM Clocks for DE-Series Boards都可以(我是用後者)
https://ithelp.ithome.com.tw/upload/images/20220206/20145199nDQx3DF6vd.png
(2)System Id Pherphial:此ip我在day1有加,day2沒加,但其實都跑得過,那到底加不加差在哪裡?差的就是這個ip會去幫你去驗證that an executable program was compiled targeting the actual hardware image configured in the target FPGA,簡單來說就是你在執行的軟體檔案是否是根據你的硬體檔案生成的,如果不是就會噴錯,那也可以在eclipse 跑 nios hardware時可以勾選ignore system id選項,這樣跑也會過,但是加了這個ip就是可以確認說軟體和硬體上跑的.sof檔案是同一套的。(這邊講的有點亂,反正就是加了比較好,不加也可以動,但是建議加)
(3)niosii proceser:這邊的話主要的差異在於我將reset vector memory和execution vector memory從onchip memory改為sdram了
https://ithelp.ithome.com.tw/upload/images/20220206/20145199TuNgNSyYIY.png
第二步:
1.在qurtus中要呼叫出剛拉好的qsys檔案和.v檔,並新增一個.v檔叫做sdram_sw_led.v,其內容如下圖,只是把要用的port宣告進來,還有Instantiate the Nios II system module generated by the Platform Designer tool
https://ithelp.ithome.com.tw/upload/images/20220206/20145199o6vxeh1JLN.png
2.這樣即可以去做analysis&synthesis
第三步:
1.要做pin assignment,我一樣就是直接在qsf那邊輸入我要用的腳位
2.做完了以後就可以compile design,如果過了的話就可以在上方工具欄中開啟tools=>
nios software buils tools for eclipse了
第四步:
1.開啟之後會是空的,在右上角選擇file=>new=>niosii application and bsp from template選擇在quartus中生成的sopc(system-on-a-programmable-chip)info file,
然後將hello.c改成以下的code,我將onchip memory當作儲存數字的地方,我從存從0-99,然後再依序讀出來,可以看到led燈會依序以2進位的方式從0亮到99
https://ithelp.ithome.com.tw/upload/images/20220206/20145199KELPKqgwtX.png
參考資料:
1.https://www.intel.cn/content/dam/altera-www/global/zh_CN/pdfs/literature/hb/nios2/n2cpu_nii51005.pdf
2.https://ftp.intel.com/Public/Pub/fpgaup/pub/Teaching_Materials/current/Tutorials/Verilog/DE2-115/Using_the_SDRAM.pdf