
SOPC的实训报告
题 目: 基于SOPC的用PIO口点亮数码管
院 (系): 电气与信息工程学院
班 级: 电技08-4班
姓 名: 庞庆博
学 号: 16号
指导教师: 王秀琴、夏洪洋
一、实验目的:
这个实验由NiosII软核处理器系统驱动1个共阳极数码管,顺序、循环地显示从0到F的字符。通过实验可以学习应用系统的基本设计方法,同时这里完成的1位数码管驱动函数也构建了应用系统中多位数码管显示的基本电路。
二、实验内容:
(1)底层硬件电路的实现:
首先创建一个QuartusII开发环境的工程,并在这个工程下新建一个原理图输入文件。这里把存储工程相关文件的文件夹名、工程名称及原理图编辑文件名称都命名为SEG7。
由于数码管显示电路属于低速电路,因此这里选用NiosII/e(经济型)内核,系统时钟选择50MHz。存储器选用两款SDRAM和Flash外接存储器,还有并行输入/输出(PIO)内核配置对话框的内核完成PIO内核的配置,将添加到NiosII软核处理器系统,并重新命名为“seg7_pio”。
(2)软件的实现方法:
在原理图编辑窗口中通过双击NiosII软核处理器符号再次打开SOPC Builder。在“System Generation”选项卡的“NiosII Tools”栏目中单击“NiosII IDE”按钮打开NiosII IDE开发平台,这是开发平台的“New Project”选项卡的选择目标处理器“Select Target Hardware”栏目内容会自动完成添加。
由NiosIIC/C++菜单“File->New->Nios II C/C++ Application”创建一个应用项目。由菜单“Select Project Template”可以选择参考板。
软件程序如下:
#include "system.h"
#include "altera_avalon_pio_regs.h"
void delay(void);
void seg7(unsigned char x);
int alt_main(void)
{
unsigned char data_seg7;
while(1)
{
for(data_seg7=0;data_seg7<0x10;data_seg7++)
{
seg7(data_seg7);
delay();
}
}
return 0;
}
void seg7(unsigned char x)
{
unsigned char code_table[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};
unsigned char code_seg7;
code_seg7=code_table[x];
IOWR_ALTERA_AVALON_PIO_DATA(PIO_BASE,code_seg7);
}
void delay(void)
{
unsigned int i;
i=0;
while(i<1000000)
{
i++;
}
}
三、目标芯片的配置与调试:
随着目标器件完成配置,与之连接的数码管将从0到F顺序、循环显示。如果数码管的显示变化过快或过慢,可以通过调整延时函数delay内循环条件中的常量来调整。
四、小结:
通过8天的SOPC的学习,让我们学会了搭建底层模块和使用SOPC Builder软件的方法,我懂得了数码管显示的原理和基于SOPC开发的基本流程,为我今后的学习和工作奠定了基础,我会继续努力的学好本专业,为今后的发展积累实践经验和理论知识。
