1、1 课程设计要求1.1 基本要求课程设计要求所有题目采用Quartus II 工具提供的图形输入或者VerilogHDL语言输入方式作为电路设计工具,在NiosII上采用C语言实现编程,自定向下正向设计方法,先设计硬件系统,再进行软件编程,能够生成正确的FPGA下载代码和NiosII执行的软件代码。硬件功能仿真和时序仿真采用第三方工具(建议为:modelsim),综合与布局布线工具为:Quartus II,SOPC Builder建立软件运行环境,具体要求为:1)根据课设题目,进行总体设计方案(10分); 2)硬件电路顶层设计、模块划分、引脚定义(10分); 3)电路设计及NiosII设计,提
2、交电路设计源代码或电路图(10分); 4)综合与布局布线,提交综合与布局布线报告(10分);5)FPGA下载代码和引脚分布(10分); 6)软件总体设计及画出流程图(10分); 7)程序设计,提交程序代码(10分); 8)程序编译下载及仿真调试(10分)。1.2 课程设计选题要求本次课程设计题目共12个,要求每个同学独立完成其中的一个,每个题目不超过3人。题目要求独立完成,设计和报告如有雷同,将一个成绩平均分配雷同的同学。1.3 时间、地点时间为每天14:00至20:00,地点在二号实验楼集成电路设计实验室。1.4 课程设计纪律要求全勤且提交课程设计报告及心得体会者记20分,课程设计时间段内任
3、意时间点名未到、迟到、玩游戏扣除:3分/次, 6次及6次以上者课程设计成绩直接记:不及格。2 实验使用平台实验平台使用Altera的DE2开发板,开发工具使用Altera的Quartus II和Nios II IDE。3课程设计过程及设计方案一、设计方案1、 通过UART实现串口通信;(1) 建立UART IP核;(2) 在软核中用结构体实现收发数据。2、 用LCD显示结果。通过在IP写LCD驱动,然后在软核中通过读串口发的字符将这个字符显示出来。3、设计流程图:LCD显示串口通信助手发送处理串口通信助手接收处理是否接收到指定的字符读字符到接收缓冲区断点保护接收断点入口发送断点入口断点保护发送
4、缓冲区是否为空关闭接收定时器置接收完标志Y发送中断关闭发送下一个字符、字符串重新设置启动定时器发送缓冲区字符减一断点恢复断点恢复返回断点返回断点3、二、 硬件开发1、首先,我们要在NIOS II 软核中建立UART模块。打开Quartus软件,双击进入SOPC BUILDER,然后点击下图所示所示红圈处, 点击后,如下图所示,红圈1处为波特率,我们设置为115200;红圈2处是是否允许通过软件改发波特率,我们选中,便是允许,这样我们就可以通过软件来随时更改波特率,如果软件不设置,默认值就是上面设置的115200;红框3中是设置一些与串口有关的参数,校验方式,数据位,停止位,后面的那个基本不用,
5、设置好以后点击NEXT,Finish,完成构建。 构建好以后,将其更名为uart。2. 向新建立的 SOPC 系统上添加On-Chip Memory在 SOPC Builder 程序界面左侧System Contents 标签页的树型组件列表中选择Memory and Memory Controllers - On-Chip - On-Chip Memory (RAM or ROM),双击添加至系统中(设置存储器的容量大小为30K)3、添加 Nios II Processor。双击Altera SOPC Builder - Nios II Processor,在弹出的对话框中间选择第一个Nio
6、s II/e,表示economy,最小的NIOS II 核心。下面的Reset Vector 和Exception Vector都选择onchip_men,即刚才添加的片上RAM 的名称。其它的都保留默认设置即可。点击Finish 添加CPU 核。4、 添加 IO 控制器。双击Peripherals - Microcontroller Peripherals - PIO (Parallel I/O),保持默认设置即可,表示有8 个输出用IO 口,分别控制开发板上的LCD的数据存储(LCD_DATA7.0)(然后依次添加 LCD_EN、LCD_RS、LCD_RW、LCD_ON、LCD_BLON各
7、一位作为IO口)5、 然后进行自行分配地址,自行分配中断号。一切就绪,点击General,进行编译。 编译好以后退出,进入Quartus界面,然后运行TCL脚本,编译,等待 编译好以后,给其分配引脚,如下图所示:6、综合与布局布线,提交综合与布局布线报告如下:7、选择JTAG的方式将程序下载到FPGA中。 三、 软件开发1、打开NIOS II 9.0 IDE后,按快捷键Ctrl+b编译程序,等待编译编译好以后,我们再来看system.h文件。可以看到UART部分的代码了,如下:2、下面,我们开始编写软件程序,首先是修改inc.h。大概截图如下所示:这个结构体体中包括5个共用体,这5个共用体对应
8、UART的5个寄存器,我们来看看这5个寄存器,下图所示:这个图中的(1)有一个说明,就是说第7,8位根据设置的数据位有所改发,我们设置数据位8位,所以7,8位不前6为性质相同。 这个结构体的内容是按上图的寄存器顺序来定义的,(因为endofpacket没用到,所以在结构体中没有定义)这样在操作过程中就可以实现相应的偏移量(offset)。在这个结构体中,我们嵌套了5个共有体,在共用体中,我们又使用了结构体和位域。其实,这样做的目的就是想对寄存器的每一位进行单独的控制,同时也可以实现这个寄存器的整体控制。3、接着建立编写uart.h文件:4、建立编写main.c如下:5、将软件下载到FPGA实验
9、板上6、实验结果:在串口软件上实现字符串a/Az/Z的发收,非字符返回error,同时在lcd上显示。3.1 内容要求报告应该包含目录、正文、总结(心得体会)。其中正文应该涵盖1.1节基本要求。183.2 报告排版要求报告一级标题采用黑体四号,段前段后一行,行间距20磅。二级标题采用黑体小四号,段前段后一行,行间距20磅。正文采用宋体小四号,段前1行端后0行,行间距20磅。3 课程设计总结首先感谢老师给我们机会更好地学习SoPc。通过本次SoPC课程设计我学到很多知识,对之前SoPc中的有些问题也解决了。与此同时,我也对QuartusII和Nios II 9.0 IDE软件也有了深刻的理解以及应用,也更好地理解了SoPc的工作原理,更深切的了解到软硬件相结合的好处与功能实现,希望在以后的SoPc学习中更进一步!2