Qsys范例程序Word文件下载.docx
- 文档编号:22523221
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:25
- 大小:1.06MB
Qsys范例程序Word文件下载.docx
《Qsys范例程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《Qsys范例程序Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
在程序左侧列表中选择MemoryandMemoryControllers->
On-Chip->
On-ChipMemory(RAMorROM),双击添加至系统中。
在弹出的对话框中指定片上RAM的属性。
设置内存大小为8192Byte。
再添加CPU。
双击EmbeddedProcessors->
NiosIIProcessor,在弹出的对话框中间选择第一个NiosII/e,表示economy,最小的NIOSII核心。
其它的都保留默认设置即可。
点击Finish添加CPU核。
添加定时器。
在列表中选择Peripherals->
MicrocontrollerPeripherals->
IntervalTimer,弹出如下对话框。
定时器在本系统中主要作用是产生一个固定间隔的中断信号,让CPU改变LED灯的状态。
因此在Period中选择500ms,表示灯的状态每500ms改变一次。
在右侧Library中双击Simpleperiodicinterrupt。
其余保持默认即可。
最后添加IO口控制器。
双击Peripherals->
PIO(ParallelI/O),保持默认设置即可,表示有8个输出用IO口,分别控制开发板上的8个绿色LED灯(LEDG[7..0])。
至此系统组件添加完毕。
为了方便,我们将PIO的名称改为LEDG。
在pio上点击右键->
rename,将名称改为LEDG。
现在我们需要进行Qsys系统的连线操作,连线的方式是在Connection栏中将对应的连接点的空心点点击变为实心点即表示连线成功。
首先我们可以尝试连接时钟信号,所有外设的时钟输入都应该连接到clk_0的clockoutput上。
连接成功后应该如下图所示:
下面连接数据总线,除了onchip_memory同时连接到nois处理器的数据与指令Master端口,其他数据接口均连接到数据Master端口,连接完成后如图所示:
现在需要连接reset,reset可以自动进行连接,我们选择System菜单中的CreateGlobalResetNetwork即可。
同时需要自动分配内存地址空间,点击系统菜单中的AssignBaseAdresses。
我们还需要将定时器的中断输出连接到CPU上,点击定时器中断后的空心点,进行连接。
完成后系统应该如下图所示:
最后我们需要分配NIOS处理器的复位和异常(中断)向量地址,双击NIOS处理器,打开配置页面,在resetvector和exceptionvector中都选择onchip_memory。
最后我们需要将PIO的输出信号导出,在LEDG的external_connection行中可以看到double-clicktoexport,双击后系统如图所示,可以看到下方消息中的所有错误都已经消失。
至此系统已经构造完毕,切换到Generation标签,点击下方Generate生成系统。
程序将提示需要先保存,选是即可。
输入系统名smallest,注意这里的系统名不能与工程名一样。
生产完成后关闭Qsys回到Quartus界面。
硬件电路设计
SOPC系统生成完毕后,回到QuartusII软件,选择File->
New…,在弹出的对话框中选择BlockDiagram/SchematicFile,点击OK。
双击空白处,打开新对话框,在左侧的列表中选择Project->
smallest,双击或点下方的OK。
此元件为刚才使用Qsys生成的片上系统。
共有3组IO口,分别是clk时钟输入、reset_n重启信号输入和绿色LED灯信号输出IO口。
在smallest元件上点击右键,选择GeneratePinsforSymbolPorts。
将生成的引脚稍稍向左拉。
结果应如下图所示。
双击输入或输出元件可以更改它们的名称。
将两个输入端分别改名为CLOCK_50及KEY[0],代表开发板上的50MHz晶振和KEY0按钮。
将输出端改名为LEDG[7..0],代表开发板上的LEDG7到LEDG0共8个绿色LED灯。
需要注意的是SOPCBuilder生成的系统的重启信号为低电平有效,开发板上的按键按下后代表低电平,弹起代表高电平。
然后将这几个元件连接起来,硬件电路部分设计完毕。
最后,点击QuartusII软件菜单栏上的Assignments->
ImportAssignments…导入DE2开发板默认的管脚定义文件
如果一切正常,应该看到如下图所示的界面:
保存顶层图为RunningLED.bdf,此时还需要将Qsys生成的片上系统添加到工程中,在ProjectNavigator,中右键点击Files添加。
在下面的对话框中选择smallest.qip,注意文件类型需要改为qip,否则无法进行选择。
点击add后添加完成,退出该对话框后,可以直接进行编译。
编译完成后将程序烧写至FPGA开发板。
由于目前还没有编写软件,因此开发板上不会有什么现象。
软件设计
接下来是软件设计。
打开NIOSIISoftwareBuildTools软件。
第一次打开的时候会提示选择工作空间。
也可在程序打开后选择菜单栏File->
SwitchWorkspace…
选择<
工程所在目录>
\software作为NIOSII的工作空间。
确认以后软件会重新启动。
在欢迎界面中选择Workbench,进入主界面
选择File->
New->
NiosIIApplicationandBSPfromTemplate
在SelectProjectTemplate内选择第一项BlankProject,Name使用RunningLED,SOPCInformationFileName中注意选择刚刚生产的目录下的sopcinfo文件。
点Next>
,在下一个界面中选择第一项,Createanewsystemlibrary,点击Finish完成。
此时,NIOSIIIDE左侧工程列表将多出2个工程
为了降低内存的占用,在RunningLED_bsp工程上点击右键,Properties,点击NiosIIBSPProperties,在下图所示界面中,取消掉SupportC++前的勾,因为我们的程序不包含C++的函数和库。
选中Reducedevicedrivers和SmallClibrary以减小程序体积。
其他保持默认设置即可。
右键点击工程RunningLED_bsp,选择BuildProject,编译系统库。
之后右键点击工程RunningLED,选择New->
File,在弹出的对话框中指定文件名为main.c,并将以下代码复制进去,并保存。
//ForFPGAproject:
runningled
//SOPCSystem:
smallest
#include"
system.h"
#include<
sys/alt_irq.h>
alt_types.h"
sys/alt_alarm.h"
io.h>
unistd.h"
#defineTICK_NUM1
alt_alarmtimer_addr;
alt_u32timer_overflow(void*context)
{
if(*(alt_u8*)context&
0x80)
{
*(alt_u8*)context=0x01;
}
else
*(alt_u8*)context=*(alt_u8*)context<
<
1;
IOWR(LEDG_BASE,0,*(alt_u8*)context);
returnTICK_NUM;
}
intmain()
alt_u8led=0x01;
//RegisterInterruptServiceRoutine(ISR)
alt_alarm_start(&
timer_addr,TICK_NUM,timer_overflow,&
led);
while
(1);
右键点击工程RunningLED,选择BuildProject。
编译完成后,软件部分也就完成了。
最后,选择菜单栏Run->
Run…,出现以下对话框。
双击NiosIIHardware。
NIOSIIIDE将程序下载到开发板上,之后就能看到8个LED灯轮流点亮了。
.
二、LCD液晶显示器
同第一个例子一样,首先需要打开QuartusII软件并新建一个工程。
我们将工程取名为HelloLCD。
选择好路径,其他同上例一样。
注意两个不同工程路径不要完全相同。
然后打开Qsys。
这个系统同样需要一个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。
再添加LCD模块。
选择Peripherals->
Display->
AlteraAvalonLCD16207,将LCD加入系统中。
现在类似的连接所有的CLK,将CPU的数据总线连接到SRAM和液晶,指令总线连接到SRAM,并自动生成reset并分配地址,Qsys系统就设计完成了。
注意,在SRAM的AvalonSalveExport和LCD的External需要双击Export导出到系统外部,CPU的Reset和Exception向量也需要手工指定。
回到QuartusII,新建一个BlockDiagram/SchematicFile,双击空白部分加入刚才生成的系统lcd_sys。
本系统需要两个输入端口以及多个输出端口。
与实验一类似的生成端口,并按照下面的命名进行设置。
还需要一个输出IO口LCD_ON置高,打开LCD显示屏。
双击空白部分,添加输出端口输入output,并连接到VCC。
保存顶层图为HelloLCD.bdf,编译即可。
打开NIOSIISoftwareBuildTools,选择File->
SwitchWorkspace…,选择<
在欢迎界面中选择Workbench,进入主界面。
同上例,选择File->
NiosIIApplicationandBSPfromTemplate,在SelectProjectTemplate内选择HelloWorld,其他保持默认设置。
第二页中选择第一项Createanewsystemlibrary。
然后依次编译hello_world_0_syslib和hello_world_0。
并运行,注意开发板上液晶显示器每行只能显示16个字符,因此程序中输出的”HellofromNiosII!
”只能显示出前16个字符HellofromNios。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Qsys 范例 程序