SOPC范例程序入门.docx

上传人:b****6 文档编号:9102967 上传时间:2023-02-03 格式:DOCX 页数:27 大小:1.06MB
下载 相关 举报
SOPC范例程序入门.docx_第1页
第1页 / 共27页
SOPC范例程序入门.docx_第2页
第2页 / 共27页
SOPC范例程序入门.docx_第3页
第3页 / 共27页
SOPC范例程序入门.docx_第4页
第4页 / 共27页
SOPC范例程序入门.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

SOPC范例程序入门.docx

《SOPC范例程序入门.docx》由会员分享,可在线阅读,更多相关《SOPC范例程序入门.docx(27页珍藏版)》请在冰豆网上搜索。

SOPC范例程序入门.docx

SOPC范例程序入门

SOPC范例程序

一、跑马灯

打开QuartusII,出现如下界面

新建一个工程,选择File->NewProjectWizard,出现以下界面

选择Next>,出现以下对话框

给新工程命名并选择工程目录,本例使用runningled作为工程名。

点击两次Next>,出现如下对话框

在Family中选择CycloneII,Availabledevices中选择EP2C35F672C6,为我们使用的FPGA芯片型号。

然后点击Finish,至此就建立好了新工程。

再点击QuartusII软件右上方工具栏的

,打开SOPCBuilder程序。

在弹出的对话框中指定SOPC系统的名称,注意不要与工程名相同。

指定Verilog为描述系统的语言。

本例将建立一个包含CPU核、4Kb片上RAM、一个定时器和8个IO口的最小片上系统以演示跑马灯程序。

首先在系统中添加片上RAM。

在程序左侧列表中选择MemoryandMemoryControllers->On-Chip->On-ChipMemory(RAMorROM),双击添加至系统中。

在弹出的对话框中指定片上RAM的属性。

保持默认设置即可。

再添加CPU。

双击AlteraSOPCBuilder->NiosIIProcessor,在弹出的对话框中间选择第一个NiosII/e,表示economy,最小的NIOSII核心。

下面的ResetVector和ExceptionVector都选择onchip_men,即刚才添加的片上RAM的名称。

其它的都保留默认设置即可。

点击Finish添加CPU核。

添加定时器。

在列表中选择Peripherals->MicrocontrollerPeripherals->IntervalTimer,弹出如下对话框。

定时器在本系统中主要作用是产生一个固定间隔的中断信号,让CPU改变LED灯的状态。

因此在Period中选择500ms,表示灯的状态每500ms改变一次。

Preset选择Simpleperiodicinterrupt即可。

最后添加IO口控制器。

双击Peripherals->MicrocontrollerPeripherals->PIO(ParallelI/O),保持默认设置即可,表示有8个输出用IO口,分别控制开发板上的8个绿色LED灯(LEDG[7..0])。

至此系统组件添加完毕。

为了方便,我们将PIO的名称改为LEDG。

在pio上点击右键->rename,将名称改为LEDG。

系统的每个组件都需要一个地址才能正常工作。

某些组件,如定时器(IntervalTimer)还需要分配一个IRQ号。

如果发现各组件的地址或者IRQ号出现冲突,可以选择菜单栏上System->Auto-AssignBaseAddresses以及System->Auto-AssignIRQs自动设定地址和IRQ。

(注:

系统IRQ可以是从0到31的整数,数值越小优先级越高。

至此系统已经构造完毕,点击下方Generate生成系统。

程序将提示需要先保存,选是即可。

出现以下画面说明SOPC系统已经生成完毕。

硬件电路设计

SOPC系统生成完毕后,回到QuartusII软件,选择File->New…,在弹出的对话框中选择BlockDiagram/SchematicFile,点击OK。

双击空白处,打开新对话框,在左侧的列表中选择Project->smallest,双击或点下方的OK。

此元件为刚才使用SOPCBuilder生成的片上系统。

共有3组IO口,分别是clk时钟输入、reset_n重启信号输入和绿色LED灯信号输出IO口。

再次在空白部分双击,在Name框内输入input,添加输入端口。

一共需要两个。

然后使用同样步骤添加一个ouput输出端口。

结果应如下图所示。

双击输入或输出元件可以更改它们的名称。

将两个输入端分别改名为CLOCK_50及KEY[0],代表开发板上的50MHz晶振和KEY0按钮。

将输出端改名为LEDG[7..0],代表开发板上的LEDG7到LEDG0共8个绿色LED灯。

需要注意的是SOPCBuilder生成的系统的重启信号为低电平有效,开发板上的按键按下后代表低电平,弹起代表高电平。

然后将这几个元件连接起来,硬件电路部分设计完毕。

电路应如下图所示。

最后,点击QuartusII软件菜单栏上的Assignments->ImportAssignments…导入DE2开发板默认的管脚定义文件

保存顶层图为runningled.bdf,编译即可。

编译完成后将程序烧写至FPGA开发板。

由于目前还没有编写软件,因此开发板上不会有什么现象。

软件设计

接下来是软件设计。

打开NIOSIIIDE软件。

第一次打开的时候会提示选择工作空间。

也可在程序打开后选择菜单栏File->SwitchWorkspace…

选择<工程所在目录>\software作为NIOSII的工作空间。

确认以后软件会重新启动。

在欢迎界面中选择Workbench,进入主界面

选择File->New->NiosIIC/C++Application

在SelectProjectTemplate内选择第一项BlankProject,Name使用默认blank_project_0,SOPCBuilderSystemPTFFile使用默认设置,即刚才生成的SOPC系统。

点Next>,在下一个界面中选择第一项,Createanewsystemlibrary,点击Finish完成。

此时,NIOSIIIDE左侧工程列表将多出3个工程

并且程序会在后台开始自动索引。

选择菜单栏Window->Preferences…弹出以下对话框

选择Run/Debug->Launching,取消GeneralOptions内Build(ifrequired)beforelaunching前面的勾。

选择工程blank_project_0,右键单击,选择Properties,在C/C++MakeProject选项卡内选中Build(IncrementalBuild),在ProjectReferences选项卡内取消所有的勾,确认。

类似地,右键单击工程blank_project_0_syslib->Properties,选中C/C++MakeProject选项卡中的Build(IncrementalBuild)。

选中SystemLibrary选项卡,在下图所示界面中,取消掉CleanExit(FlushBuffer)和SupportC++前的勾,因为我们的程序不会退出,也不包含C++的函数和库。

选中Programneverexits,Reducedevicedrivers和SmallClibrary以减小程序体积。

其他保持默认设置即可。

右键点击工程blank_project_0_syslib,选择BuildProject,编译系统库。

之后右键点击工程blank_project_0,选择New->SourceFile,

在弹出的对话框中指定文件名为main.c,并将以下代码复制进去,并保存。

//ForFPGAproject:

runningled

//SOPCSystem:

smallest

#include"system.h"

#include

#include"alt_types.h"

#include

//InternalTimerOverflowinterrupt

staticvoidtimer_overflow(void*context,alt_u32id)

{

IOWR(TIMER_BASE,0,0);

if(*(alt_u8*)context&0x80)

{

*(alt_u8*)context=0x01;

}

else

{

*(alt_u8*)context=*(alt_u8*)context<<1;

}

IOWR(LEDG_BASE,0,*(alt_u8*)context);

return;

}

intmain()

{

alt_u8led=0x01;

//RegisterInterruptServiceRoutine(ISR)

alt_irq_register(TIMER_IRQ,(void*)&led,timer_overflow);

while

(1);

}

右键点击工程blank_project_0,选择BuildProject。

编译完成后,软件部分也就完成了。

最后,选择菜单栏Run->Run…,出现以下对话框

选择NiosIIHardware,点击左上角

,出现以下界面。

点击Run,NIOSIIIDE将程序下载到开发板上,之后就能看到8个LED灯轮流点亮了。

.

二、LCD液晶显示器

同第一个例子一样,首先需要打开QuartusII软件并新建一个工程。

我们将工程取名为hello_lcd。

选择好路径,其他同上例一样。

注意两个不同工程路径不要完全相同。

然后打开SOPCBuilder,选择Verilog作为编译语言,系统名称设为lcd_sys。

这个系统同样需要一个CPU核,以及显示用的LCD液晶模块。

由于需要用到很多内置库,因此程序体积会比较大,需要一个容量较大的RAM,我们选择结构较为简单的512KSRAM。

首先添加存储器,但在列表中并没有DE2开发板使用的SRAM芯片组件,需要我们手工添加。

首先需要SRAM_16Bit_512K.v以及SRAM_16Bit_512K_hw.tcl两个文件,将它们复制到工程所在的目录。

双击CreateNewComponent…

选择File->Open…,选择SRAM_16Bit_512K_hw.tcl,打开。

之后点击Finish即可。

系统将会提示需要保存这个组件。

保存以后,在左侧列表中多出了TerasicTechnologiesInc一项,双击此项下面的SRAM_16Bit_512K,将SRAM加入系统中。

然后添加CPU,双击NiosIIProcessor。

在对话框中,可以选择三种CPU规模中的任意一种。

我们仍然选择NiosII/e。

ResetVector以及ExceptionVector都设为刚刚添加的sram。

其他保留默认设置,点击Finish添加CPU。

再添加LCD模块。

选择Peripherals->Display->CharacterLCD,将LCD加入系统中。

之后将各组件地址设置好以后就可以生成系统了。

硬件电路设计

回到QuartusII,新建一个BlockDiagram/SchematicFile,双击空白部分加入刚才生成的系统lcd_sys。

本系统需要两个输入端口以及多个输出端口。

双击空白部分,输入input,添加输入端口。

输入output,添加输出端口。

注意LCD和SRAM的数据线需要使用双向IO口(bidir)。

添加完以后,按照下图所示修改端口名称并连线。

还需要一个输出IO口LCD_ON置高,打开LCD显示屏。

最后,点击QuartusII软件菜单栏上的Assignments->ImportAssignments…导入DE2开发板默认的管脚定义文件

保存顶层图为hello_lcd.bdf,编译即可。

编译完成后将程序烧写至FPGA开发板。

由于目前还没有编写软件,因此开发板上不会有什么现象。

软件设计

打开NIOSIIIDE,选择File->SwitchWorkspace…,选择<工程所在目录>\software作为NIOSII的工作空间。

确认以后软件会重新启动。

在欢迎界面中选择Workbench,进入主界面。

同上例,选择File->New->NiosIIC/C++Application,在SelectProjectTemplate内选择HelloWorld,其他保持默认设置。

第二页中选择第一项Createanewsystemlibrary。

同上例,选择Window->Preferences…->Run/Debug->Launching,取消Build(ifrequired)beforelaunching。

打开两个工程hello_lcd_0及hello_lcd_0_syslib的属性对话框,在C/C++MakeProject选项卡内选中Build(IncrementalBuild),并取消ProjectReferences选项卡内的所有选项。

在hello_lcd_0_syslib的属性对话框,SystemLibrary选项卡内,选中Cleanexit(flushbuffers),取消其他选项。

stderr,stdout和stdin都选为lcd,如下图所示

然后依次编译hello_world_0_syslib和hello_world_0。

完成以后选择菜单栏Run->Run…,选择NiosIIHardware,点击

出现以下界面,点击Run,程序将被下载到开发板上运行。

注意开发板上液晶显示器每行只能显示16个字符,因此程序中输出的”HellofromNiosII!

”只能显示出前16个字符”HellofromNios“。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1