基于Nios II的电子时钟设计.docx

上传人:b****6 文档编号:7970535 上传时间:2023-01-27 格式:DOCX 页数:30 大小:828.33KB
下载 相关 举报
基于Nios II的电子时钟设计.docx_第1页
第1页 / 共30页
基于Nios II的电子时钟设计.docx_第2页
第2页 / 共30页
基于Nios II的电子时钟设计.docx_第3页
第3页 / 共30页
基于Nios II的电子时钟设计.docx_第4页
第4页 / 共30页
基于Nios II的电子时钟设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

基于Nios II的电子时钟设计.docx

《基于Nios II的电子时钟设计.docx》由会员分享,可在线阅读,更多相关《基于Nios II的电子时钟设计.docx(30页珍藏版)》请在冰豆网上搜索。

基于Nios II的电子时钟设计.docx

基于NiosII的电子时钟设计

 

电路设计EDA

期末设计报告

 

设计题目:

基于NiosII的电子时钟设计

学号:

姓名:

 

2011年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”中启动,也可以直接在SOPCBuilder的SystemGeneration标签页中单击“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中均为系统默认选项(不可选);选中“ProgramFPGAconfigurationdatain

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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