1、 课程设计报告 设计课题: SOPC 按键控制 LED 灯亮灭 按键控制 LED 灯泡亮灭 一、设计任务与要求 1.实现按键控制小灯泡的亮灭 ; 2.学习并掌握 Quartus II 9.0 软件 3.学会 SOPC 和 FPGA 电路设计方法 二、方案设计与论证 在 Quartus II 9.0 软件里利用 Nios II 完成对软核 CPU 的设计,设计完 成 后再搭建 外围电路 ,后在 Nios II IDE 里完成代码的编写,最后将设计的电路和编写的代码下片后观察实验现象并调试直至成功。 方案一 : 1. 新建一个 New Quartus II Project,并命名为 led_lab
2、 2. 选择 Cyclone III 系列的 EP3C25F324C8 芯片 3. CPU 内核的设计: 3.1 新建一个 SOPC Builder System,并命名为 lab_led 3.2 将所要设计的 CPU 模块添加进来,并选择 Nios II/e 核心 3.3 再添加 jtag 和 on-chip memory,并将内存设置为 20KB 3.4 添加两个 PIO(并行输入输出),将其中一个设置为 Output ports only,并命名为 led_pio,用作输出模块,另一个设置为 Input ports only,并命名为 key_pio, 用作输入模块 3.5 保存好设计
3、编译后无误 4.外围电路的设计 4.1 新建一个 Block Diagram/Schematic File 文件,并命名为 led_lab 4.2 将上一步设计好的 CPU 模块添加进来 4.3 自动生成好管脚后进行编译 4.4 对输入输出管脚进行分配 ,完成后再次进行编译 5.Nios II 代码控制 CPU 5.1 点击 Nios II IDE,新建一个 lab_led.c 文件 5.2 编写能够实现按键控制 LED 灯的代码,后编译、调试 6.打开 SOPC 实验箱,将设计好的电路和编写好的代码下片, 观察实验现象并调试 四、总原理图及 子模块结构图 1.CPU 内核 的设计 2.外围电
4、路的 搭建 3.电路管脚的分配 4.实验代码的编写及调试 五、 综合与调试 最终 实验代码: #include “sys/alt_stdio.h“ #include “system.h“ #include “altera_avalon_pio_regs.h“ #include “alt_types.h“ #include alt_u8 K; int main(void) alt_putstr(“n Lab2_2 - LED key polling!n“); while(1) K= IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE); IOWR_ALTERA_AV
5、ALON_PIO_DATA(LED_PIO_BASE,K); usleep(10000); return 0; 六、 结果性能分析 当按下 KEY1 后第一个 LED 点亮,松开后第一个 LED 熄灭 当按下 KEY2 后第二个 LED 点亮,松开后第二个 LED 熄灭 当按下 KEY3 后第三个 LED 点亮,松开后第三个 LED 熄灭 当按下 KEY4 后第四个 LED 点亮,松开后第四个 LED 熄灭 七、设计作品图片 八、结论与心得 因为有了前两次实验的经验和教训,所以这次实验并没有遇到多少障碍。最主要的困难应该就是实验代码的编写。 上一次的 实验是 要求 完成 LED 的 循环亮灭,
6、所以在此基础之上,我们对实验代码进行了稍加修改,主要 就 是加入了一个Input ports 输入端口 ,以便完成 控制按键的输入,其余的部分则和第二个实验代码相差无几。 一开始调试的时候,按下第一个按键结果第三个灯亮了, 按下第二个按键结果第一个灯亮了,并没有达到实验所要求的目的,所以我们开始排查问题。后来发现是在分配管脚的时候,管脚号分配有误,才导致了这个问题的出现。在查找 实验箱上每个按键对应的管脚号并重新分配后,出现了正确的实验现象,因此实验成功了。 SOPC 课程设计 成绩评定表 专业 : 电子信息工程 班级: 1401 班 学号: 2014221119300052 姓名: 朱博文 专业 : 电子信息工程 班级: 1401 班 学号: 2014221119300013 姓名: 陈宣至 专业 : 电子信息工程 班级: 1401 班 学号: 2014221119300072 姓名: 袁畅 课题名称 SOPC 按键控制 LED 灯亮灭 设计任务与要求 当分别按下 1-4 号按键时, LED1-LED4 能 相应 的点亮 ,当松开按键时, LED 能相应的熄灭。 指导教师评语 成绩: 指导教师: 时间: 年 月 日