SOPC期末实验报告Word文档格式.docx
- 文档编号:20696201
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:18
- 大小:814.85KB
SOPC期末实验报告Word文档格式.docx
《SOPC期末实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《SOPC期末实验报告Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
输入IO、输出IO、三态IO;
PIO是通过Avalon总线与NiosII相连的。
四、实验步骤
第一步:
硬件部分设计
(1)在D:
\sopc\works\下建立一个hello_led文件夹
(2)打开QuartusII,点击下拉菜单中的NewprojectWizard…会弹出如图3.1.1对话框
(3)输入工程存放目录,或点击工程路径右面的按钮设置工程存放目录,在第二栏中输入工程名称,这里输入为led;
点击finish,此时我们建立好了LED工程文件;
(4)点击Assignments菜单中的Device,选择芯片EP2C35F672C6如下图3.1.2所示;
图3.1.2选定器件
(5)点击Tools下拉菜单下的SOPCBuilder工具,出现如图3.1.3对话框:
图3.1.3设定名称
(6)在系统名称(SystemName)中填写为NiosII32,选择语言为VHDL后点击OK,在DeviceFamily中选择使用芯片的系列,这里选CycloneII,更改系统频率为50MHz,在Board中暂时先不选,使用UnspecifiedBoard,如图3.1.4所示;
图3.1.4设定芯片及系统时钟
(7)在左面元件池中选择元件,我们这里需要使用NiosII32BITCPU、调试串口、ledPIO、RAM,首先选择如图3.1.5所示的NiosProcessor,双击后会弹出如图3.1.6所示对话框;
在JTAGDebugModule栏中选择level1,点击Finish按钮后返回SOPCBuilder窗口,将CPU_0重新命名为CPU如图3.1.7所示;
图3.1.5选择NiosII
图3.1.6NiosII设置
图3.1.7重命名CPU
注意:
对模块命名要遵循以下规则:
✓名字最前面应该使用英文;
✓能使用的字符只有英文字母、数字和下划线“_”;
✓不能连续使用“_”符号,在名字的最后也不能使用“_”。
(8)添加JTAGUARTInterface,通过该接口,我们可以在PC主机和SOPCBuilder系统之间进行串行字符流更新,主要用来调试、下载数据等,也可以作为标准输入、输出来使用;
A.选择Communication->
JTAGUART加入,会出现设置向导如图3.1.8所示:
图3.1.8JTAGUART设置
B.保持默认选项,点击Finish,返回SOPCBuilder窗口。
C.将jtag_uart_0重命名为jtag_uart.
(9)在上述模块的基础上再增加一个输入PIO。
在元件池中选择Other->
PIO,双击加入,弹出如图3.2.1所示对话框,选择Inputportsonly;
然后点击InputOptions栏,弹出图3.2.2所示对话框,在EdgeCaptureRegister下选取SynchronouslyCapture,选择EitherEdge;
在Interrupt下选取GenerateIRQ,选择Edge;
点击Finish,将其命名为key_pio;
图3.2.1PIO基本设置
图3.2.2PIO输入设置
(10)加入led_pio,此元件为IO口,可以根据需要配置设置选项;
A.选择Other->
PIO,双击加入,出现如图3.1.10所示设置向导:
图3.1.10添加led_pio
B.选择Outputportsonly,点击Finish,重新命名为led_pio;
(11)在上述模块的基础上再添加两个模块:
SDRAM模块和定时器模块。
添加SDRAM模块:
A.在SOPCBuilder窗口中,选择Memory->
SDRAMController,弹出对话框如图3.3.1,在DataWidth中选择16;
ChipSelect选1;
Banks选4,Row选12,Column选8;
图3.3.1设置SDRAM控制器参数
B.单击Next,在出现的对话框中设置SDRAM时序参数如图3.3.2所示。
点击Finish,将其命名为“sdram”。
图3.3.2设置SDRAM控制器时序参数
添加定时器模块:
(12)指定基地址和分配中断号,SOPCBuilder会给用户的NiosII系统模块分配默认的基地址,用户也可以更改这些默认地址。
选择执行System下拉菜单中的Auto-AssignBaseAddress;
选择执行System下拉菜单中的Auto-AssignIRQs;
(13)进行系统设置,选择More“CPU”Settings,按照图3.1.11所示对系统进行设置;
图3.1.11设置系统运行空间
生成系统模块,
A.选择SystemGeneration栏,如图3.1.12所示
图3.1.12生成CPU
B.在SystemGeneration中选中HDL选项,若安装了Modelsim软件并需要仿真设计,可以选择Simulation选项。
C.点击Generation,SOPCBuilder会根据用户不同的设定生成系统,在系统生成完成后点击Exit,退出SOPCBuilder。
(14)将刚才生成的NiosII32模块以图标形式添加到BDF文件中,SOPCBuilder在进行SystemGeneraion的过程中会生成系统模块的图标(Symbol),可以将该图标像一般QuartusII图标一样添加到当前工程的BDF文件中。
A.单击File->
New,弹出图3.1.13所示对话框;
图3.1.13加入原理图文件
B.选择BlockDiagram/SchematicFile,如上图所示,点击OK;
C.在图中单击右键,选择Insert->
Symbol,如图3.1.14所示:
图3.1.14加入symbol
D.在如图3.1.15所示的弹出对话框中选择Project->
niosII32,双击加入,点击保存,系统会自动命名为LED,不要再对此修改;
图3.1.15加入NiosII32元件
(15)加入锁相环
锁相环能提供精确的系统时钟频率,在图中单击右键,选择Insert->
Symbol,弹出对话框如图3.1.16所示,先在megafunction->
IO文件夹下选择altpll,此时如图3.1.17所示,MegaWizardPlug-InManager变为可操作。
图3.1.16加入锁相环
图3.1.17进入锁相环设置向导
A.双击MegaWizardPlug-InManager按钮进入锁相环的设置向导。
如图3.1.18所示:
图3.1.18新建锁相环
B.选中Createanewcustuommegafunctionvariation,点击Next按钮后弹出如图3.1.19所示对话框,,在左边列表中选择ALTPLL,在右边输出文件类型选项选择VHDL,在输出文件名输入框中输入altpll0后,点击Next:
图3.1.19建立PLL模块
C.弹出如图3.1.20PLL设置窗口,将输入时钟设为50Mhz,点击Next;
图3.1.20ALTPLL设置输入时钟
D.弹出如图3.1.21PLL设置窗口,去掉areset输入和locked输出选项,点击Next;
图3.1.21设置PLL输入输出选项
E.弹出inclk1设置窗口,点击Next;
F.弹出c0输出设置窗口如图3.1.21,将输出时钟频率设为50Mhz,点击Next;
图3.1.21设置c0输出频率
G.弹出c1输出设置窗口,设置如c0;
H.弹出c2输出设置窗口,点击Next;
I.在后面两个显示的窗口中继续点击Next和Finish;
J.系统回到Symbol设置对话框如图3.1.22,可以看到右边显示出ALTPLL0模块,点击OK后回到原理图编辑窗口,将altpll0模块放到合适的位置;
图3.1.22生成altpll0模块
(16)在原理图中点击右键,选择Insert->
Symbol,在primitives->
pin文件夹下选择input或output,在图中相应位置加入输入输出pin,如图3.1.23连接各模块,将输入输出脚分别命名为CLOCK_50、TD_RESET和LEDG[7..0],其中LEDG[7..0]为8位总线连接。
(注意:
引脚名称不可修改,因为后面引脚分配时需要导入已有的分配文件,所以此处的引脚名称必须和分配文件中的引脚名称相同才可以)
(17)点击按钮
编译工程,检查是否有语法错误。
(18)编译通过后,选择菜单Assignments->
Pins,打开引脚配置窗口。
这时所有引脚都还未分配,选择菜单Assignments->
ImportAssignments,打开引脚配置文件导入窗口,选择文件“DE2_pin_assignments.csv”即可,如图3.1.24所示。
图3.1.24引脚配置文件的导入
(19)重新编译并配置FPGA,将编译生成的SOF文件下载到目标板上,选择Tools->
Programmer目标文件下载,选择JTAG下载模式,用USB电缆通过J9下载。
第二步:
软件部分设计
(1)打开NiosIIIDE,选择File->
New->
Project,弹出如图3.1.25对话框:
图3.1.25添加NiosIIIDE新工程
(2)选择C/C++Applicaion,如上图所示;
点击Next,弹出图3.1.26所示对话框:
图3.1.26选择工程模板
(3)在SelectProjectTemplate中选择HelloLED;
在SOPCBuilderSystem中选择我们刚才建立好的工程,CPU栏会自动选择,如上图所示,点击Finish,系统会自动生成一个循环点亮LED的软件工程,在hello_led.c中我们可以看到相应代码;
(4)右键单击工程,选择BuildProject。
(5)选择RUN-〉RUN…,并弹出如图3.1.28所示对话框,点击NiosIIHardware,系统会自动侦测JTAG连接电缆,在Main列表中的Project中显示我们建立的工程Hello_led_0:
图3.1.28在硬件上运行软件
(6)输入修改程序(见下面实验现象内)点击RUN后,现象就出现了。
五、实验图像
1、硬件设计图:
2、软件程序:
#include<
stdio.h>
#include"
system.h"
altera_avalon_pio_regs.h"
alt_types.h"
sys/alt_irq.h"
volatileintedge_capture=0;
voidkey_interrupts(void*context,alt_u32id)
{
volatileint*edge_capture_ptr=(volatileint*)context;
*edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE);
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE,0);
}
voidinitpio(void)
void*edge_capture_ptr=(void*)&
edge_capture;
IOWR_ALTERA_AVALON_PIO_DIRECTION(LED_PIO_BASE,0xff);
IOWR_ALTERA_AVALON_PIO_DIRECTION(KEY_PIO_BASE,0x00);
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE,0xff);
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE,0x00);
alt_irq_register(KEY_PIO_IRQ,edge_capture_ptr,key_interrupts);
intmain(void)
alt_u8data1,data2,data3,data4;
data1=0x01;
data2=0x02;
data3=0x04;
data4=0x00;
initpio();
while
(1)
{
switch(edge_capture)
case0x00:
break;
case0x01:
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,data1);
edge_capture=0;
printf("
key1\n"
);
break;
case0x02:
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,data2);
key2\n"
case0x04:
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,data3);
key3\n"
case0x08:
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,data4);
key4\n"
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE,0x00);
}
return0;
3、按键现象图:
六、实验小结
通过这次实验,我对SOPC中尤其按键中断有了更多的认识,自己在完成搭建模拟硬件,编写程序的过程中已经有了比以往更多的思路,更熟练的操作,还有就是更沉着冷静。
尽管考试的时候发生了2次死机然后计算机重启后原来做的内容都没有了,但最终还是换了电脑接着做,顺利完成本次实验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SOPC 期末 实验 报告