DE2_115(DAY3)以niosii去控制板子上的sdram

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


<<:  3. 用vscode的live server打造方便的开发环境

>>:  第31天~从开启旧专案方法(番外篇)

Kotlin 语言和你 SAY HELLO!!

第十一天 各位点进来的朋友,你们好阿 因为我还是新手不能够直接回覆,所以在这边回覆前两篇的留言。 第...

[Day26]约束规则、更改结构

在Oracle资料库中有两种方式可以定义约束规则(作用相同): 栏位层次约束(行内规范):将规定写在...

13.移转 Aras PLM大小事-报表 Where Used BOM

本篇就介绍三种报表方式,并以目前我现行的操作方式来详细解说 1.用原厂提供的父阶料号页签查询 缺点 ...

子查询最佳化

举一些子查询的例子方便大家容易理解 mysql> select m,n from (selec...

Firebase推播(下) - 图片推播

缘由: 推播时带图片是很常见的,只是没想到当时我搞了好几天,查到的资料零零落落,有些教程会让人在走偏...