基于NiosII的电子时钟设计样本.docx
- 文档编号:5333880
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:33
- 大小:805.64KB
基于NiosII的电子时钟设计样本.docx
《基于NiosII的电子时钟设计样本.docx》由会员分享,可在线阅读,更多相关《基于NiosII的电子时钟设计样本.docx(33页珍藏版)》请在冰点文库上搜索。
基于NiosII的电子时钟设计样本
电路设计EDA
期末设计报告
设计题目:
基于NiosII电子时钟设计
学号:
姓名:
12月
摘要
本文简介基于NiosⅡ电子时钟设计办法,在文章中重要分为硬件设计和软件设计两个某些。
在设计过程中,采用QuartersⅡ作为仿真平台。
在各个某些中,给出每一步设计办法。
读者只要依照所给办法做,就能设计好一种完整电子时钟。
核心字NiosⅡQuartersⅡ电子时钟设计办法
第一章设计规定与软硬件规划
在本章中我将给出一种电子钟软、硬件方案设计以及系统功能和某些详细功能实现等。
1.1系统功能
电子钟功能涉及下面两个方面:
1、在液晶屏上显示时间、日期、状态提示;
2、对时间、日期可以进行设立。
1.2硬件系统构成规划
1.2.1需要硬件设备
在硬件系统组织规划中系统需使用外围器件涉及下面四个方面:
1、LCD:
电子钟显示屏幕;
2、按钮:
电子钟设立功能键;
3、Flash存储器:
存储硬件和程序;
4、SRAM存储器:
程序运营时将其导入SRAM。
在SOPCBuilder中建立系统要添加模块涉及:
1、NiosⅡ32bitsCPU;
2、定期器;
3、按键PIO;
4、LCDDisplay;
5、外部RAM总线(Avalon三态桥);
6、外部RAM接口;
7、外部Flash接口;
8、重新配备祈求PIO;
9、JTAGUARTInterface;
10、EPCSSerialFlashController。
1.2.2端口定义
在系统中需要对某些端口进行定义,详细定义方式在下面表中给出:
序号
名称
输入/输出
描述
1
clk
In
时钟输入,50MHz
2
reset_n
In
复位输入
3
in_port_to_the_button_[3..0]
In
4个按键输入
4
be_n_to_the_ext_ram[3..0]
Out
字节选取
5
ext_ram_bus_address[22..0]
Out
SRAM地址
6
ext_ram_bus_data[31..0]
Inout
SRAM数据
7
read_n_to_the_ext_flash
Out
FLASH输出使能(即读信号)
8
read_n_to_the_ext_ram
Out
SRAM输出使能
9
select_n_to_the_ext_flash
Out
FLASH片选信号
10
select_n_to_the_ext_ram
Out
SRAM片选信号
11
write_n_to_the_ext_flash
Out
FLASH写信号
12
write_n_to_the_ext_ram
Out
SRAM写信号
13
LCD_E_from_the_lcd_display
Out
LCD使能信号
14
LCD_RW_from_the_lcd_display
Out
LCD读写信号
15
LCD_RS_from_the_lcd_display
Out
LCD端口寻址信号
16
LCD_data_to_and_from_the_lcd_display[6..0]
Inout
LCD数据
17
bidir_port_to_and_from_the_reconfig_request_pio
Inout
重新配备祈求
1.2软件系统规划
软件功能涉及显示、设立和时间算法三大某些。
1.2.1显示某些
显示某些分为下面几种某些:
(1)显示时间(小时:
分钟:
秒)
(2)显示日期(年-月-日)
(3)显示状态提示(如BeijingTime、Sethour等等)
1.2.2设立某些
设立功能涉及设立小时、分钟、年份、月份、日期和退出设立。
编写程序前对开发板上4个功能键分派如下:
(1)主菜单
SW0:
设立选取键,可依次选取设立小时、分钟、年份、月份、日期
SW1:
显示日期键
SW2:
显示时间键
(2)子菜单(即进入到对某个对象设立后键盘功能)
SW1:
对象数字增长
SW2:
对象数字减少
SW3:
退出,返回主菜单
1.2.3软件系统规划
(1)时间累加
(2)拟定每月最大天数,使年、月、日可以对的累加
1.2.4电子钟主程序流程图
系统电子钟主流程图如下面所示:
1.2.5程序设计阐明
(1)显示日期是调用display_day(lcd)子程序,在lcd上显示年-月-日;
(2)显示时间是调用display_time(lcd)子程序,在lcd上显示小时:
分钟:
秒。
当begin=0时开始计时;当begin=1时,暂停计时。
一旦有按键按下,当选取设立小时或分钟时,则将begin置为“1”,暂停计时,这样能更清晰地看到设立值变化。
而在设立年或月或日时,由于计时单位较小,计时值变化普通不会影响到日期值,因此可以使begin=0,边设立日期边计时。
(3)按键解决子程序handle_button_press(FILE*lcd)是一种重要子程序。
它一方面采用多分支if…elseif…else形式,依照flag取值,执行不同程序块。
在每一种条件下(如flag=0,flag=1,……,flag=5),又采用开关(switch)分支构造,依照edge_capture值判断应执行哪个程序段。
flag=0
flag=1
flag=2
flag=3
flag=4
flag=5
进入主菜单
进入小时设立子菜单
进入分钟设立子菜单
进入年份设立子菜单
进入月份设立子菜单
进入日期设立子菜单
按键所代表十六进制数
哪个按键被按下
SW0
SW1
SW2
SW3
edge_capture取值(十六进制)
0x1
0x2
0x4
0x8
下面以表格形式给出按键解决子程序进行解决核心环节。
详细工作过程如下面所示:
(1)flag初始值为0(主菜单模式),若要设立小时,则顾客按下SW0,则调用timer_set子程序,flag变为1,并在lcd上显示相应提示信息,提示顾客对小时进行设立;
(2)由于此时flag=1,则进入小时设立子菜单,若顾客按动SW1,则调用增长小时数值子程序,若顾客按动SW2,则调用减小小时数值子程序当flag=1时,若按下SW0,则调用timer_set子程序,且flag变为2……
第二章硬件某些设计
2.1创立工程
硬件某些设计可以分为下面几种设计过程:
1、创立一种QuartusⅡ工程
2、启动QuartusⅡ6.0
3、创立工程quartus_nios2_project
①法建立一种工程,取名为quartus_nios2_project.qpf,选取元件为Cyclone库EP1C20F400C7
②新建设计文献quartus_nios2_project.bdf
③在设计文献中依次添加某些引脚,增添成果如下图所示:
详细办法如下面所示:
(1)将“C:
\altera\kits\nios2\examples\verilog\niosII_cyclone_1c20\standard”中所有文献拷入自己新建工作目录elec_timer_std;
(2)在QuartusⅡ6.0中打开其中standard.qpf文献;
(3)打开顶层图形文献standard.bdf;
(4)依照实际需要删除或添加引脚,对引脚重命名。
对引脚命名成果如下图所示:
2.2创立NiosⅡ系统模块
1、启动SOPCBuilder
(1)在QuartusⅡ6.0中执行“Tools>SOPCBuilder”命令,则浮现CreateNewSystem设立向导;
(2)在“SystemName”栏中输入系统名称first_nios2_system;
(3)点击OK按钮,弹出AlteraSOPCBuilder主窗口;
(4)在Target-Board选取NiosDevelopmentBoardCyclone(EP1C20);
(5)在Clock-clk中输入50,详细状况如下面所示:
注意:
要在QuartusⅡ6.0中启动SOPCBuilder,事先必要已打开了相应QuartusⅡ工程!
如果系统已有NiosⅡ系统模块,此时要修改已有NiosⅡ系统模块,详细办法如下:
(1)在standard.bdf文献中双击std_1c20,则自动打开SOPCBuilder;
(2)在SOPCBuilder模块表中将不用组件(或称模块)Use复选框去掉;更改某些组件名称;删除不用组件(如systemID);添加所需新组件;
(3)如果需要,还可以右击cpu,选取“Edit”,对该cpu类型、InstuctionsCaches大小等选项重新进行设立。
详细状况如下表所示:
2.3添加CPU和外围器件
添加CPU和外围器件需从SOPCBuilder元件池中选取如下元件加入到当前系统中:
NiosⅡ32bitCPU、JTAGUART接口、定期器、按键PIO、LCDDisplay、外部RAM总线(Avalon三态桥)、外部RAM接口、外部Flash接口和新配备祈求PIO。
2.3.1添加NiosⅡ32bitCPU
添加NiosⅡ32bitCPU办法如下面所示:
(1)在模块池AvalonModule下选取NiosⅡProcessor-AlteraCorporation;
(2)点击Add,浮现设立向导(默认名为cpu_0);
(3)在NiosⅡCore页中选取NiosⅡ/S,在Caches&TightlycoupledMemoris页中选取InstuctionsCaches为4Kbytes,在JTAGDebugModule页中选取Level1;
(4)点击Finish返回主窗口,将cpu_0重命名为cpu。
状况如下图所示:
2.3.2添加JTAGUARTInterface
添加JTAGUARTInterface,详细做法如下面所示:
(1)在模块池中选取Communication->JTAGUART,点击Add,会浮现JTAGUART-jtaguart_0设立向导;
(2)保持系统默认选项,点击Finish,返回主窗口;将jtaguart_0重命名为jtag_uart。
详细状况如下图所示:
2.3.3添加定期器
添加定期器办法如下所示:
在模块池中选取Other->Intervaltimer,点击Add,会浮现AvalonTimer-timer_0设立向导
(1)在InitialPeriod栏中选取“1msec”,在PresetConfiguration栏中选取“Full-featured”;
(2)点击Finish,返回主窗口,将timer_0重命名为system_timer。
2.3.4添加外部存储Flash接口
在模块池中选取memory->FlashMemory(CommonFlashInterface),点击Add,会浮现FlashMemory(CommonFlashInterface)-cfi_flash_0设立向导。
(1)依照所使用开发板,在Presets项选取Flash器件为AMD29LV065D-120R;
(2)别的保持系统默认选项,点击Finish,返回主窗口;
将cfi_flash_0重命名为ext_flash。
2.3.5添加外部RAM接口
依照开发板类型在元件池中选取相应SRAM,在本例中选取EP1C20->IDT71V416SRAM,点击Add,会浮现SRAM(twoIDT71V416chips)-sram_0设立向导;在Attributes栏中,拟定存储器大小为1024KB;别的保持系统默认选项,点击Finish,返回主窗口;将sram_0重命名为ext_ram。
成果如下图所示:
2.3.6添加外部RAM总线
AvalonTri-StateBridge是Nios解决器与FPGA片外存储器之间互相通信桥梁。
在模块池中选取Bridge->AvalonTri-StateBridge,点击Add,会浮现AvalonTri-StateBridge-tri_state_bridge_0设立向导;保持系统默认选项,点击Finish,返回主窗口;将tri_state_bridge_0重命名为ext_ram_bus。
2.3.7添加ButtonPIO
在模块池中选取Other->PIO(ParallelI/O),点击Add,会浮现AvalonPIO-pio_0设立向导;拟定如下选项:
Width为4bits,Direction选中Inputportonly,则使能了InputOptions栏;点击InputOptions标签页;在EdgeCaptureRegster域选用Synchronouslycapture;选取FallingEdge;在Interrupt域选用GenerateIRQ;选取Edge;点击Finish,返回主窗口;将pio_0重命名为button_pio。
在添加按键PIO组件时,在InputOptions标签页中,在EdgeCaptureRegster域不要选取“EitherEdge”,而应选取FallingEdge。
否则当按动按键时,按键被按下和弹起所产生脉冲两个边沿都将被捕获到,则计数器会跳动两次。
如果是加1计数器,则每按动按键一次,计数器会加2。
2.3.8添加重新配备祈求PIO
重新配备祈求PIO可使器件依照其他外围设备输入自动进行重新配备。
选取Other->PIO(ParallelI/O),点击Add,会浮现AvalonPIO-pio_0设立向导;添加办法与添加其他PIO过程同样,不同是设立如下属性:
width设为1bit,在Direction中选取Bidirectional(tri-state)ports选项,别的设立均保持默认选项;
点击Finish,返回主窗口;将AvalonPIO-pio_0重命名为reconfig_request_pio。
2.3.9添加LCDDisplay
在模块池中选取Display->CharacterLCD(16ⅹ2optrex16207),点击Add,则直接添加到模块表中,将lcd_16207_0重命名为lcd_display。
状况如下所示:
2.4指定基地址
(1)在SOPCBuilder模块表中点击ext_flash,并修改其Base为0x0,此时会在信息栏浮现基地址冲突错误,如图所示;
(2)选中ext_flash那一行,执行Module->LockBaseAddress菜单命令,会在ext_flash基地址旁边浮现一种锁子图标;
(3)执行System->AutoAssignBaseAddress菜单命令。
使SOPCBuilder给其他没有锁定地址重新分派地址,则之前浮现那些错误信息都消失了。
成果如下图所示:
2.5系统设立
选取NiosⅡMore”cpu”Settings标签页,按照下图所示对系统进行设立。
2.6生成NiosⅡ系统模块
(1)选取SystemGerneration标签页
(2)在SystemGerneration中选中HDL选项;如果安装了ModelSim软件并需要仿真此设计,可以选取Simulation选项;
(3)点击Generate,则生成系统模块,成功则显示“SUCCESS:
SYSTEMGENERATIONCOMPLETED”;
(4)点击Exit退出SOPCBuilder。
2.7将NiosⅡ系统模块符号添加到BDF文献
在生成过程中,SOPCBuilder会生成NiosⅡ系统模块符号(Symbol),可以将该符号像添加其他QuartusⅡ符号同样添加到当前项目BDF文献quartus_nios2_project.bdf中
(1)双击BDF文献空白处,浮现Symbol对话框,选取Project->first_nios2_system
(2)点击OK按钮,将其添加到BDF文献中;
(3)将first_nio2_system模块与输入输出引脚相连,指定目的器件,并进行引脚锁定,完毕系统硬件设计;
(4)保存BDF文献。
(5)编译QuartusⅡ工程设计文献
在QuartusⅡ6.0中执行“Processing->StartCompilation”命令,进行全编译。
2.8配备FPGA
在QuartusⅡ6.0中执行“Tools->Programmer”命令,将quartus_nios2_project.sof下载到目的板上。
第三章软件某些设计
3.1创立工程
创立一种NiosⅡIDE工程分为下面几种环节:
(1)启动NiosⅡIDE6.0
既可以在“开始>所有程序>Altera”中启动,也可以直接在SOPCBuilderSystemGeneration标签页中单击“RunNiosⅡIDE”按钮来启动。
则弹出如下对话框,提示顾客选取一种工作空间来存储所有工程,选取系统默认目录即可。
(2)建立新软件工程elec_timer_std
执行File->New->C/C++application命令;在弹出NewProject对话框中,Name栏填入新建软件工程名elec_timer_std,SOPCBuilderSystem栏选取刚才修改NiosⅡ系统模块std_1c20,CPU项选取cpu,左侧SelectProjectTemplete域中,选取BlankProject,点击next;在弹出对话框中选取creatanewsystemnamed…单选钮,点击Finish,则在QuartusⅡ工作目录elec_timer_std下自动生成software文献夹,新创立工程elec_timer_std会出当前C/C++工程浏览器中,同步会自动创立一种系统库工程<软件工程名>_syslib。
新建C/C++工程如下所示:
创立软件工程后NiosⅡIDE工作界面
若事先已创立好一种软件工程,当启动NiosⅡIDE后没有打开该工程,则需要将它们导入,导入办法如下面所示:
(1)执行File->Import命令;
(2)在弹出Import对话框中,选取“ExistingProjectintoWorkspace”,单击“Next”;
(3)在弹出对话框中单击Browse,则弹出“浏览文献夹”对话框,选取事先已创立好软件工程所相应文献夹elec_timer_std,单击“拟定”,再单击Finish,则此工程会添加到工作区;再将系统库工程elec_timer_std_syslib也导入。
3.2建立源文献time.c和头文献time.h
3.2.1创立源文献time.h
创立源文献time.h环节如下所示:
(1)创立头文献
在NiosⅡIDE左侧C/C++工程浏览器中,选取elec_timer_std,执行“File>new>file”菜单命令,或点击鼠标右建,选取new>headfile,在弹出对话框中,键入time.h。
(2)创立源文献
在C/C++工程浏览器中,选取elec_timer_std,点击鼠标右建,选取new>file,在弹出对话框中,键入time.c。
(3)编译工程
在左侧C/C++工程浏览器中,选取elec_timer_std,点击鼠标右键,在弹出菜单中选取BuildProject;或执行“Project>BuildAll”菜单命令。
编译完毕后会在Task浏览器中显示警告和错误信息。
(4)运营程序
NiosⅡIDE提供三种运营平台,分别为NiosⅡHardware、NiosⅡInstructionSetSimulator和NiosⅡModelSim;这里选取NiosⅡHardware作为平台。
详细环节如下所示:
(1)执行Run->Run命令,弹出Run对话框;
(2)在左边Configration栏双击NiosⅡHardware,浮现运营设立对话框,在Main标签页中选取工程名为elec_timer_std,在TargetConnection标签页中确认JTAGcable栏中为与目的板相连下载电缆;
(3)然后单击Run,将程序下载到FPGA中;
若没有错误,则按动开发板上按键,在线测试设计与否满足预定功能。
运营设立对话框
程序不也许一次就运营成功,如果需要话咱们可以在线调试程序,详细调试过程如下,NiosⅡIDE提供了两种调试平台,分别为NiosⅡHardware和NiosⅡInstructionSetSimulator;这里选取NiosⅡHardware作为平台。
调试环节如下:
(1)选取Run->Debug,在弹出对话框中,确认左边Configration选中NiosⅡHardware,main标签页中选取工程名为elec_timer_std,在TargetConnection标签页中确认JTAGcable栏中为与目的板相连下载电缆;
(2)单击Debug按钮,则启动调试器。
NiosⅡIDE在调试界面Run菜单中提供如下几种调试方式:
(1)StepInto(F5):
单步跟踪时进入子程序;
(2)StepOver(F6):
单步跟踪时执行子程序,但不进入子程序;
(3)Resume(F8):
从当前代码处继续运营;
(4)RuntoLine(Ctrl+R):
运营到断点停止;
3.2.2将程序和硬件下载到外部Flash中
许多NiosⅡ解决器系统都使用外部存储器来存储:
程序代码、程序数据、FPGA配备数据和文献系统。
因而可以将程序和FPGA配备数据下载到Flash中,使系统可以脱机运营。
这时咱们需要下载程序,程序下载环节如下所示:
(1)执行Tools->FlashProgrammer命令,启动编程器;
(2)在“FlashProgrammer”界面中单击“New”按钮,在Main标签页中选中“Programsoftwareprojectintoflashprogrammer”复选框;在Project栏中填入要下载软件工程名elec_timer_std;则在NiosⅡELFExecutable中和TargetHardware中均为系统默认选项(不可选);选中“ProgramFPGAconfigurationdataintohardware-imageregionofflashprogrammer”复选框,并确认在FPGAConfiguration(sof)栏中是要下载硬件目的文献standard.sof;
(3)单击ProgramFlash按钮
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 NiosII 电子 时钟 设计 样本