FPGA学习日志
坚持每天写总结 2021.2.8
NiosII软核学习
前言
自己亲手用verilog写过SDRAM接口模块,各种时序和时间参数查得我头皮发麻,写完接口模块甚至还要写上层的控制模块,虽然艰苦,但这让我深刻意识到了IP核的重要性。
再者想在集创杯上参加FPGA深度学习的题目,虽说Digilent也是同样的类型,但是Digilent需要买他们的板子才能参加,我果断放弃了(都怪我之前冲动买了Altera的FPGA)
听说quartusII里有可以自己定制cpu的ip核(Nios II),如果能够用我的板子定制cpu来实现功能的话,岂不美哉!让我来试试这NiosII的好处(希望别再让我后悔了)
一、NiosII是什么?
NiosII是Atlera(现在是Intel了)发布的IP,可以用来定制自己想要的cpu,配置好后,把顶层文件综合好,直接烧进板子,然后FPGA里就有了一个CPU,后续的代码工作就是C/C++编写的软件程序了
二、配置
1.Nios2
Quartus Prime Lite Edition(20.1)->Tools->Platform Designer->搜索Nios->选择Nios II Processor->进入配置界面
2.其他常用ip核配置
-
时钟ip自带,但需要设置频率,注意这里的clk指的是CPU的运行频率,而不是板载晶振的频率,前者是由后者经过pll生成的
-
片上rom/ram:正常的单片机系统需要ram(writable)、rom(read_only),但对于FPGA来说ram可以兼具,所以建议用片上ram
-
片外sdram控制器:具体参数查用户手册
-
jtag uart:利用jtag接口完成uart通信的功能
-
system id:作为系统的唯一识别号
-
pll:虽然pll模块不能在Platform Designer进行连线,但有一点需要特别注意,定制的cpu与片外sdram用的都是同一个时钟频率,但是注意端口要分开,且cpu的clk相移设置为0,sdram的clk相移设置为-75左右以抵消布线所产生的相位差,以保证cpu与sdram的时钟信号严格同步
3.CPU与外设之间的连接
在Platform Designer里面的连接好像就默认使用了avalon总线控制
-
clk:时钟信号,所有都要连
-
rst可以一键连接:system->create globel reset network
-
nios2 data_master:相当于数据总线,基本上要跟所有外设的数据接口连接起来
-
nios2 instruction_master:指令总线,连接到ram,因为需要从ram里面取指令
-
nios2 debug_reset_req:需要跟所有外设连接(可以用rst的一键连接)
-
jtag uart IRQ(在右边):中断信号,可以设置优先级,与nios2连接
-
sdram_control wire:用来控制外部sdram的线,需要与外部管脚进行配置,双击export一栏,改名为sdram即可,后续的连接需要例化后,在顶层文件进行
4.解决报错
-
重新设置Nios2
复位地址reset vecter:指向ram,表示程序从ram里启动(掉电重烧);指向flash,表示程序从flash启动(掉电无妨)
异常地址exception Vector:指向ram,实际上是程序运行地址 -
给整个系统分配基地址
所有外设都有其地址,在添加时都是默认为0x0000_0000
system->assign base addresses,自动分配地址 -
分配外部管脚
5.生成系统
在所有报错都消除后,就说明没什么问题了
system->generate
6.保存文件
建议新建文件夹为“qsys”,文件名为system_qsys
三、硬件编译
1.元件例化
在Platform Designer界面->generate->instantiation Template这里可以直接复制例化模板
2.PLL的设置
上面的ip配置有提及
3.把qsys的.qip文件加入工程中
在工程File窗口->右键File->add file in project->qsys->system_qsys->synthesis->选中system.qsys.qip文件
否则会编译失败
四、软件开发
tools->Nios2 software build tool
五、遇到的问题
-
在第一次建立qsys时,出现了这样的报错
错误原因:未知,求大神们告知
解决办法:从头开始新建qsys -
打不开eclipse
错误原因:未知
解决方法:我用的软件是quartus prime 20.1,重新安装quartus prime 18.0就能用了
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。