FPGA开发--Nios II最小系统搭建
文章摘要:
网上对于FPGA嵌入CPU的讨论颇多,硬核、固核、软核各有千秋,这里就不做具体分析优劣,也不太建议做过多的争执,只有先彻底的了解其相关技术,才能做出比较中肯的评价;
做为技术层面来说,不能太主观或者过于轻信某一种技术的好于坏,关键是看攻城狮用的场合不合适,多掌握一门手艺,毕竟不是坏事,软核的唯一好处就是,你如果觉得不想用,就可以不用,把节省下的逻辑单元用来干其他的事,想用的话,也很容易配置进去当然前提是你要知道怎么来做才行;
任何一种技术,如果掌握了其技能,你可以有选择不用的权利,但是如果没有掌握,在选择上就会比较局限,所以,个人认为,做为一个技术匠人,应该以包容的心态去学习每一种技术,也只有这样,在创作的时候,才更容易得心应手;
硬件平台:EP4CE6F17C8
开发环境:Quartus II 13.1
创建一个Quartus II的项目工程
工程名为:nios_test
通过Qsys向导来新建NIOS2;
通过Tools-->Qsys菜单启动Qsys软件;
配置系统时钟
打开Qsys软件时,系统会建立一个默认工程,并自动创建了一个clock组件(由此可见时钟的重要性);
双击时钟即可参数进行配置,时钟设计为50MHz,与外部晶振的频率一致,其他采用默认值;
右键-->Rename修改名称为clock
注意事项:
配置的时钟参数必须要和实际的一致,为了简单起见,暂不采用PLL时钟,而采用50MHz外部晶振;
添加cpu核
Library -->
Embedded Processors -->
Nios II Processor
Nios II Core: Nios II/s
其他项目先采用默认值(后边还需要修改)
点击Finish完成创建;
右键-->Rename修改名称为 cpu.
信号连接:
将时钟信号(clk)连接至clock模块的clk输出信号;
将复位信号(reset_n)连接至clock模块的clk_reset输出信号;
添加片内RAM
Library -->
Memories and Memory Controllers -->
On-Chip -->
On-Chip Menory(RAM or ROM)
Type选择 RAM(Writable)
Data width: 32.(数据宽度32位)
Total memory size: 20480 bytes(容量20K).
其他参数暂时选择默认;
信号连接:
将时钟信号(clk1)连接至clock模块的clk输出信号;
将复位信号(reset1)连接至clock模块的clk_reset输出信号;
将s1信号,连接分别连接至cpu的数据总线(data_master)和指令总线(instruction_master);
注意事项:
1.虽然根据数据手册显示EP4CE6一共有270Kb(33KB)RAM,但是在布线时会提示部分RAM无法布局,所以这里先用20KB;
2.由于程序在RAM中运行,所以指令总线也需要连接;
添加JTAG-UART
Library -->
Interface Protocols -->
Serial -->
JTAG UART
Buffer depth(bytes): 16
不选 Construct using registers instead of memory blocks
信号连接:
将时钟信号(clk)连接至clock模块的clk输出信号;
将复位信号(reset)连接至clock模块的clk_reset输出信号;
将avalon_jtag_slave信号连接至cpu的数据总线(data_master);
添加LED外设
Library -->
Peripherals -->
Microcontroller Peripherals -->
PIO (Parallel I/O)
Width(1-32bits): 数据宽度,选择4,因为硬件只连接了4个LED端口;
Direction: 方向,选择Output(输出);
Output Port Reset Value: 复位值,选择全0;
其他值默认;
信号连接:
将时钟信号(clk)连接至clock模块的clk输出信号;
将复位信号(reset)连接至clock模块的clk_reset输出信号;
将s1信号连接至cpu的数据总线(data_master);
引脚导出:
双击external_connection的Export项目,导出引脚;
重新设置复位与异常向量
双击cpu项,打开配置界面,指定复位和异常向量们于ram区;
保存Qsys工程:
保存在项目工程目录下的core目录下,名称为nios_mini.qsys;
分配地址:
System --> Assign Base Addresses
生成
Generate
--> Generate...
会产生一些警告,暂时不用理;
获取例化代码
Generate --> HDL Example
生成顶层模块
- 关闭Qsys回到Quartus II
2.将core/nios_mini.qsys文件添加至工程
3.建立顶层文件,名称为nios_test.v,内容如下:
module nios_test(
input clk,
input rst_n,
output leds
);
// 例化nios_mini
nios_mini u0 (
.clock (clk),
.out_port_from_the_pio_leds (leds),
.reset_n (rst_n)
);
endmodule
分析综合,分配引脚,全编译,下载