实验一Hello实验.docx
- 文档编号:11368943
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:42
- 大小:1.95MB
实验一Hello实验.docx
《实验一Hello实验.docx》由会员分享,可在线阅读,更多相关《实验一Hello实验.docx(42页珍藏版)》请在冰点文库上搜索。
实验一Hello实验
实验一Hello实验
一实验目的
1.熟悉用QuartusII开发SOPC的基本流程。
2.熟悉用SOPCBuilder进行CPU开发的基本流程。
3.熟悉用NiosSDKShell进行C语言编译、下载的基本过程。
二实验器材
1.EDA/SOPC实验箱一台。
三实验原理
本实验的基本原理是在FPGA内部嵌入一个最小的系统,该系统包括Nios32-BitCPU核、BootMonitorROM、数据和程序RAM以及一个用于下载调试代码的串口。
首先在QuartusII中打开SOPCBuilder,分别加入上述基本模块,再Genterate产生QuartusII图形输入中可以识别的bsf文件,然后通过使用QuartusII对其进行编译,管脚绑定等基本步骤后,通过JTAG接口下载到FPGA中,这样就完成了基本CPU的设计。
当上述的CPU下载到FPGA中后,FPGA就可以看作是一个具有相同功能的专用CPU,首先在PC上编写一个小的C程序,然后使用NiosSDKShell进行编译,编译无误后,通过模块中的UART下载编译后的代码,然后再通过调试的UART端口启动FPGA内部下载的代码即可。
四实验内容
为了熟悉SOPC的基本开发流程,本实验要完成的任务就是设计一个最简单的CPU模块,然后在PC上编写一个最简单的C代码,通过NiosSDKShell编译下载到FPGA中,最后会在NiosSDKShell窗口中显示运行结果。
五实验步骤
完成本实验的实验步骤为:
1.打开QuartusII应用软件,在自己的目录下建立一个新的工程文件exp1。
2.选择File>New,在DeviceDesignFile标签中选择BlockDiagram/SchematicFile。
然后在选择File>SaveAs,在Filename中键入exp1,点击保存即可,见图2-1。
3.在QuartusII软件中点击Tools>SOPCBuilder。
SOPCBuilder启动时显示CreateNewSystem对话框,见图2-2。
在对话框中的SystemName中键入Nios32,并在HDLLanguage中选择VHDL,然后点击OK。
4.完成步骤3以后,AlteraSOPCBuilder-Nios32窗口出现,并显示SystemContents标签。
接下来要做的事情就是为系统增加NiosCPU和外设了。
图2-3显示了Nios32的SystemContents标签,以及加入的所有模块。
图2-1创建新的bdf文件
图2-2CreateNewSystem对话框
图2-3带有模块的SOPCBuilder
5.加入32位NiosCPU。
在AvalonModules下面选择NiosProcessor,点击Add,将会弹出标题为AlteraNios3-nios_0的配置向导,见图2-4。
图2-4NiosCPUArchitecture标签
-ProcessorArchitecture:
Nios-32
-PresetConfigurations:
StandardDebug/AverageLEusage
6.点击Finish按钮,然后用鼠标右键点击ModuleName下的nios_0,并选择Rename,将nios_0重命名为CPU,键入新名称后回车保存设置(见图2-5)。
需要注意到是:
加入NiosCPU后会在SOPCBuilder消息窗口出现错误信息,这些信息会在后面向系统加入其他模块后消失,因此在这个阶段,错误是可以忽略的。
7.加入片内ROM。
在Memory下选择On-ChipMemory并点击Add,会出现On-ChipMemory-onchip_memory_0配置向导,在其Attribute标签中指定如下选项(见图2-6):
-MemoryType:
ROM(Read-only)
-BlockType:
Automatic
-DataWidth:
32
-TotalMemorySize:
2Kbytes
并在Contents标签中选择GermsMonitor选项(见图2-6)。
点击Finish按钮。
8.类似步骤6,将onchip_memory_0重命名为Boot_ROM。
9.加入片内RAM。
重复步骤7,在Attribute标签中指定如下选项:
图2-5带有CPU的SOPCBuilder
图2-6BootMonitorROM设置向导
-MemoryType:
RAM
-BlockType:
Automatic
-DataWidth:
32
-TotalMemorySize:
4Kbytes,
点击Finish即可。
10.将加入的onchip_memory_0重命名为RAM。
11.加入UART外设。
选择Communication下的UART(RS-232serialport),并点击Add,会弹出AvalonUART-uart_0设置向导,按照默认的配置(见图2-7),点击Finish即可。
图2-7UART通信设置向导
12.将加入的uart_0重命名为UART0。
13.向系统添加完IP模块后,分别点击System─>Auto-AssignBaseAddresses和Auto-AssignIRQs两个菜单。
再点击NiosMore“CPU”Settings标签(双引号中的名称将就是NiosCPU模块的名字),在NiosSystemSettings下进行如图2-8的配置。
Module栏设置需与此处一致。
图2-8NiosMore“CPU”Settings标签设置
14.为了让Nios设计成为QuartusII工程的一部分,并编译下载到Nios开发板的FPGA上,还需要对SystemContents进行适当的设置,首先是DeviceFamily,由于实验箱选用的是Cyclone系列的,因此必须选择Cyclone;其次是CPU的工作频率,该频率直接影响到系统调试是串口的波特率等,由于实验箱时钟模块提供48MHz、24MHz……等频率,因此需要将其设置成时钟模块具有的频率,本实验选择24MHz。
15.点击SystemGeneration,取消Modelsim仿真选项前的对勾,再按照默认的配置,然后再点击AlteraSOPCBuilder-Nios32窗口下方的Gernerate。
在设计生成过程中,SOPCBuilder会执行很多操作,这取决于用户选择。
本例中采用默认的配置,所以SOPCBuilder会直行如下操作:
-为系统生成SDK、C以及汇编语言头文件。
-为系统编译定制的软件库。
-编译片内ROM所使用的GERMSMonitor程序。
-生成VHDL源文件。
-创建模拟工程文件。
在生成过程中,相关消息会出现在SystemGerneration标签的消息框中。
16.生成完成时(见图2-9),会显示SYSTEMGENERATIONCOMPLETED消息,点击exit退出SOPCBuilder。
图2-9完成SystemGeneration
17.把符号(Symbol)加入到BDF文件中。
回到QuartusII软件,在bdf窗口双击鼠标左键,会出现Symbol对话框,在Name中键入nios32(步骤3中键入的名字),点击OK(见图2-10),在bdf文件的空白处加入该符号。
选择File>Save,存储bdf文件(见图2-11)。
图2-10Symbol对话框
图2-11加入Nios32符号的bdf文件
18.在bdf文件中加入三个input和一个output端口,分别连接到clk、reset_n、rxd_to_the_UART0和txd_to_the_UART0上,并对所有端口重新命名为Clk、Reset、RXD和TXD,如图2-12所示,即完成了bdf文件的设计。
图2-12完成设计的bdf文件
19.对刚刚设计完的bdf文件进行编译,编译通过后,对照附录进行管脚绑定,然后再编译一次。
20.编译无误后,通过JTAG电缆将刚刚编译通过的sof文件下载到FPGA当中,并选择实验箱时钟模块的时钟为24MHz,这时系统板上的FPGA就变成了一个具有刚刚设计模块的32位的NiosCPU。
21.在工程目录>CPU_sdk>src文件夹中新建一个exp1.c文件,内容如下:
#include"excalibur.h"
intmain(void)
{
inti;
for(i=0;i<10;i++)
{
printf("Hello!
!
%d\n",i);
nr_delay(1000);
}
}
该程序运行时会通过调试UART端口向NiosSDKShell发送10次Hello。
22.选择开始>程序>Altera>Nios3.01>NiosSDKShell,启动NiosSDKShell,如图2-13所示。
图2-13NiosSDKShell启动窗口
23.首先转换到相应目录,在NiosSDKShell命令提示符下键入命令nbexp1.c,系统会编译刚刚编写的exp1.c文件,并生成exp1.srec文件。
24.用串口电缆把计算机的串口1和实验箱的串口1相连接,然后在NiosSDKShell中键入命令nrexp1.srec,系统通过串口1发送可执行代码到系统板,并开始执行。
25.查看实验结果。
上述的exp1.c文件正确运行后会通过UART发送“Hello!
!
N”消息到NiosSDKShell,其中的N是从0~9。
运行结果如图2-14所示。
图2-14实验运行结果
26.程序运行结束后,Nios处理器直行GERMS监控程序,如果要退出该监控程序,只需要按Ctrl+C即可返回到NiosSDKShell命令提示符。
实验二拨档开关、按键及LED实验
一实验目的
1.熟悉用QuartusII开发SOPC的基本流程。
2.进一步熟悉用SOPCBuilder进行CPU开发的基本流程。
3.进一步熟悉用NiosSDKShell进行C语言编译、下载的基本过程。
4.掌握PIO外设的使用方法。
二实验器材
1.EDA/SOPC实验箱一台。
三实验原理
完成本实验的目的主要是为了更进一步的熟悉SOPC的开发流程以及PIOIP核的使用方法。
PIO是一般的人机交互不可缺少的模块,它可以是一个输入端口、一个输出端口,也可以是多个输入端口、多个输出端口,PIO模块不仅可以在纯输入、纯输出模式,也可以工作在双向三态模式。
另外当PIO模块工作为输入模式时,可以开启中断,有上升沿触发、下降沿触发以及双边沿触发等触发机制。
PIO模块可以为开发板上的拨挡开关、按键以及LED等提供信息的输入和输出通道。
在本实验中,CPU将工作在查询方式和中断方式,查询方式是针对按键,CPU将不断地读按键的状态,然后实时的送到对应的LED去显示;中断方式是针对拨挡开关,CPU将在拨挡开关的中断服务程序中获取当前拨挡开关状态,然后送到对应的LED显示。
四实验内容
本实验要完成的任务就是产生一个带有输入和输出端口的CPU模块,CPU在运行时将不断的查询输入的状态,然后将获取的状态实时地送到输出端口。
实验中输入端口的状态的改变可以通过8个拨挡开关以及8个按键来实现,输出的观察可以用LED来实现。
为了便于实验观察,实验中用LED1_1~LED1_8来对应拨挡开关K1~K8的状态,用LED2_1~LED2_8来对应按键S1~S8的状态。
五实验步骤
完成本实验的基本实验步骤为:
1.启动QuartusII软件,并建立一个新的工程文件exp2。
2.建立一个新的bdf文件,并将其另存为exp2.bdf。
3.打开SOPCBuilder,重复实验一的步骤3~步骤12。
4.为按键加入PIO模块。
选择Other下的PIO(ParallelI/O),点击Add,会出现AvalonPIO-pio_0设置向导。
由于本实验中CPU对按键的状态是实时查询,因此按键不需要产生任何中断,所以仅指定如下选项即可(图2-15):
-Width:
8bits(因为有8个按键)
-Direction:
Inputportsonly
图2-15按键PIO设置向导
5.点击Finish,并将pio_0重命名为PIO_Button。
6.为拨挡开关加入PIO模块。
再次选择Other下的PIO(ParallelI/O),并点击Add。
由于拨挡开关采用中断方式获取其状态,因此希望拨挡开关采用双边沿触发CPU,因此除了在BasicSettings标签中与按键PIO相同外,还必须在InputOptions标签中对其进行配置。
首先是中断边沿:
将EdgeCapatureRegister中的SychronouslyCapature选中,同时选择EitherEdge。
其次选择Interrupt中的GenerateIRQ,并选择Edge触发(见图2-16)。
配置结束后,点击Finish,并将其重命名为PIO_Switch。
7.为LED1_1~LED1_8加入PIO。
选择Other下的PIO(ParallelI/O),并点击Add。
由于是驱动LED显示,因此只需要对BasicSettings做如下配置即可(见图2-17)。
-Width:
8bits
-Direction:
Outputportsonly
当Direction为Outputportsonly时,InputsOptions标签无效。
配置结束后,点击Finish,并将其重命名为PIO_LED1。
8.为LED2_1~LED2_8加入PIO。
重复步骤7,并将其名称重命名为PIO_LED2。
9.为了能够在实验箱上正确运行,首先必须在DeviceFamily中选择Cyclone,另外系统时钟频率SystemClockFrequence键入24,表示系统时钟频率为24MHz。
完成配置的SOPCBuilder如图2-18所示。
图2-16拨挡开关PIO设置向导
图2-17LEDPIO设置向导
10.点击SOPCBuilder中的NiosMore“CPU”Settings标签,按照实验一的做法对其进行配置。
对于SystemGeneration标签,按默认的配置即可,然后点击Generate按钮,设计生成工程完成时,点击exit按钮,退出SOPCBuilder。
11.把符号(Symbol)加入到BDF文件中。
回到QuartusII软件,在bdf窗口双击鼠标左键,会出现Symbol对话框,在Name中键入nios32(步骤3中键入的名字),点击OK,在bdf文件的空白处加入该符号。
选择File>Save,存储bdf文件。
图2-18完成所有IP配置的SOPCBuilder
12.在bdf文件中加入5个input和3个output端口,分别连接到clk、reset_n、rxd_to_the_UART0、in_port_to_the_PIO_Button[7..0]、in_port_to_the_PIO_Swith[7..0]、out_port_from_the_PIO_LED1[7..0]、out_port_from_the_PIO_LED2[7..0]和txd_to_the_UART0上,并对所有端口重新命名为Clk、Reset、RXD、Button[7..0]、Switch[7..0]、LED1[7..0]、LED2[7..0]和TXD,如图2-19所示,即完成了bdf文件的设计。
图2-19设计好的bdf文件
13.对刚刚设计完的bdf文件进行编译,编译通过后,对照附录进行管脚绑定,然后再编译一次。
14.编译无误后,通过JTAG电缆将刚刚编译通过的sof文件下载到FPGA当中,并选择实验箱时钟模块的时钟为24MHz,这时系统板上的FPGA就变成了一个具有刚刚设计模块的32位的NiosCPU。
15.在工程目录>CPU_sdk>src文件夹中新建一个exp2.c文件,内容如下:
#include"excalibur.h"
voidSwitch_ISR(intcontext);
intmain(void)
{
nr_installuserisr(na_PIO_Switch_irq,Switch_ISR,0);
//分配中断服务子程序
na_PIO_Switch->np_pioedgecapture=0;
//清除中断标志
na_PIO_Switch->np_piodirection=0;
na_PIO_Switch->np_piointerruptmask=0xff;
//允许中断
while
(1)
{
nr_delay(10);
na_PIO_LED2->np_piodata=na_PIO_Button->np_piodata;
//查询方式获取按键状态
}
}
voidSwitch_ISR(intcontext)
{
na_PIO_Switch->np_pioedgecapture=0;
na_PIO_LED1->np_piodata=na_PIO_Switch->np_piodata;
//中断方式获取拨挡开关状态
}
16.选择开始>程序>Altera>Nios3.01>NiosSDKShell,启动NiosSDKShell,转换到相应目录,在NiosSDKShell命令提示符下键入命令nbexp2.c,系统会编译刚刚编写的exp2.c文件,并生成exp2.srec文件。
17.用串口电缆把计算机的串口1和实验箱的串口1相连接,然后在NiosSDKShell中键入命令nrexp2.srec,系统通过串口1发送可执行代码到系统板,并开始执行。
18.查看实验结果。
拨动拨挡开关或者按下按键,观察LED显示的状态是否正确。
实验三键盘扫描和8位7段码管显示实验
一实验目的
1.进一步熟悉用QuartusII开发SOPC的基本流程。
2.进一步掌握PIO外设的使用方法。
3.熟悉对PIO的更复杂的操作过程。
4.掌握驱动8位七段码管的方法。
二实验器材
1.EDA/SOPC实验箱一台。
三实验原理
实验中要用到4×4键盘,系统需要完成4×4键盘的扫描,确定有键按下后需要获取其键值,根据预先存放的键值表,逐个进行对比,从而进行按键的识别,并将相应的按键值进行显示。
键盘扫描的实现过程如下:
对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,首先输出4列中的第一列为低电平,其它列为高电平,然后读取行值;然后再输出4列中的第二列为低电平,读取行值,依此类推,不断循环。
系统在读取行值的时候会自动判断,如果读进来的行值全部为高电平,则说明没有按键按下,否则如果读进来的行值发现不全为高电平,则说明键盘整列中必定有至少一个按键按下,读取此时的行值和当前的列值,即可判断到当前的按键位置。
获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。
8位七段码管的显示是在程序中定时扫描显示的,为了使显示的过程简化,可以在程序中开辟8个存储区,用于存放8个七段码管对应值,然后每按下按键一次,则相应的值出现在最右边的七段码管上,原先的显示的值依次左移。
为了完成键盘的扫描和七段码管的正确显示,必须在原来CPU模块的基础上再加入一个定时器模块,用以产生周期性中断,在中断服务程序中完成键盘的扫描以及七段码管的扫描。
四实验内容
本实验要完成的内容是设计一个CPU模块,该CPU需要加入一个定时器模块,用以产生周期性中断进行键盘扫描和七段码管的扫描显示。
实验要求能够在按下按键时获取其键值,然后在8个七段码管上正确显示按下的键值,每按键一次,原先显示的值整体左移,新的键值出现在8个七段码管道的最右边。
五实验步骤
完成本实验的基本实验步骤为:
1.启动QuartusII软件,并建立一个新的工程文件exp3。
2.建立一个新的bdf文件,并将其另存为exp3.bdf。
3.打开SOPCBuilder,重复实验一的步骤3~步骤12。
4.为键盘行加入PIO模块。
由于键盘为4×4键盘,有4行4列,因此需要加入两个4bits的PIO,行作为输入,列作为输出。
在PIO属性中可作如下设置(见图2-20):
-Width:
4bits
-Direction:
Inputportsonly
图2-20键盘行PIO设置向导
点击Finish,并将其重命名为PIO_Key_Row。
5.为键盘列加入PIO模块。
重复步骤4,将其配置为Outputportsonly。
点击Finish后,将其重命名为PIO_Key_Col。
6.为七段码管加入PIO模块。
选中Other下的PIO点击Add,在弹出的设置向导中进行如下设置:
-Width:
8Bits
-Direction:
Outputportsonly
点击Finish后,将其重命名为PIO_7Seg_LED,这个PIO用来完成七段码管8个LED的驱动。
再选中Other下的PIO点击Add,在弹出的设置向导中进行如下设置:
-Width:
3Bits
-Direction:
Outputportsonly
点击Finish后,将其重命名为PIO_7Seg_SCAN,这个PIO用来完成8个七段码管的扫描驱动。
7.加入定时器模块。
在Other下选中intervaltimer并点击Add,出现的AvalonTimer-timer_0的设置向导,对其进行如下设置(见图2-21):
-TimeoutPeriod下的InitialPeriod:
1msec
-PresetConfiguration:
Full-featrued(v1.0-compatible)
-Registers中全部选中。
-OutputSignals中全部不选。
图2-21定时器设置向导
点击Finish并将其重命名为Timer0。
8.在DeviceFamily中选择Cyclone,另外系统时钟频率SystemClockFrequence键入24。
完成所有IP模块的SOPCBuilder如图2-22所示。
9.点击SOPCBuilder中的NiosMore“CPU”Settings标签,对其进行如实验一的配置。
对于SystemGeneration标签,按默认的配置即可,然后点击Generate按钮,设计生成工程完成时,点击exit按钮,退出SOPCBuilder。
10.把符号(Symbol)加入到BDF文件中。
回到QuartusII软件,在bdf窗口双击鼠标左键,会出现Symbol对话框,在Name中键入nios32(步骤3中键入的名字),点击OK,在bdf文件的空白处加入该符号。
选择File>Save,存储bdf文件。
11.在bdf文件中加入input、output和bidir端口,分别连接到与加入的符号对应的端口,并修改p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验一 Hello实验 实验 Hello
![提示](https://static.bingdoc.com/images/bang_tan.gif)