《SOPC设计与应用技术》研究性实践教学指导书-学生
更新时间:2024-03-26 09:58:01 阅读量: 综合文库 文档下载
- sopc设计与应用推荐度:
- 相关推荐
东华理工大学自编教材 2011年6月
《SOPC设计与应用技术》 研究性实践教学指导书
编写 黄乡生
东华理工大学 机械与电子工程学院
二○一一年六月
《SOPC设计与应用技术》研究性实践教学指导书 前 言
前 言
随着电子技术的发展,特别是集成电路技术的发展,使电子电路逐步告别分立元件时代,向小型化、集成化方向发展,要开发拥有自主知识产权的硬件电路,就必须进行ASIC(Application Special Integrated Circuit 专用集成电路 )、SOPC(System on Programmable Chip单片可编程系统)的设计,就必须使用和掌握现代EDA(Electronic Design Automation 电子设计自动化)技术,这是科学技术的发展对教学内容提出的新要求。目前,“数字电子技术基础”知识仍然是数字电路和数字系统的基本设计方法。为了适应新世纪人才培养的需要,紧跟新技术的发展,要求学生掌握数字系统设计的新方法,用现代EDA技术解决传统的数字系统设计问题。
EDA技术对于高等学校工科电子类学生能力培养的重要性已经非常明确,但是如何合理安排教学内容,如何实施实践教学,使学生在有限的时间内尽快掌握EDA的基本方法,对于《EDA技术与应用》这门实践性非常强的课程来说是应该首先加以研究的重要问题。基于上述考虑,我们提出“研究性实践”教学方法的理念,作为实践教学改革的一种尝试,这正是编写这本教材的出发点。
本教材完全摒弃了一般EDA教材先给出实验原理、方法、步骤,学生照搬教材内容、按部就班就可完成实验的编写套路。《EDA技术与应用研究性实践教学指导书》分为基本研究方法实验、实验的综合设计与研究、课题研究与设计实现等三个部分。三个部分既互相关联又相对独立是一个内容由浅入深、由易到难、逐层递进的有机整体。前两个部分实验都有原理介绍或实例,然后给出实验或综合设计题目、要求但是不给出程序,最后均有思考题。每个实践内容都要求学生预习,填写预习报告,由指导老师评分。第三部分则在前两个部分内容的基础上,完全由学生自主设计、研究、提交设计论文,并提出了设计论文的规范化要求和评分标准。引导学生认真完成课题研究,撰写规范的设计报告,可以为毕业设计和撰写毕业论文打下好的基础。
《EDA技术与应用研究性实践教学指导书》的主要内容如下。
(1)基础研究方法实验 主要用于学习EDA集成开发平台Quartus II ,训练基本编程方法,包括原理图输入、文本输入、图文混合工程、组合逻辑与时序逻辑电路的设计等5个实验。
(2)实验的综合设计与研究 共有6个实验,涉及较复杂的流水线技术、键盘处理技术、状态机设计、顺序控制问题等方面的程序设计,用于训练数字电路与系统、单片机外围设备、基本自动控制原理等课程知识的综合运用,以提高分析综合能力和多层次模块化程序设计能力。
(3)课题研究与设计实现 共有6个设计题,在前两部分内容(主要是第二部分“实验的综合设计与研究”)的基础上,扩展内容、加大难度。主要内容包括步进电机控制、多位数字密码锁、交通灯控制、多量程频率计、舞台彩灯控制器、多功能数字钟等复杂数字系统设计课题。
电子与机械工程学院于2006年12月购置了美国Altera公司的DE2开发板和Quartus II集成开发平台。DE2以Altera Cyclone II(2C35)FPGA为核心芯片,内含35,000逻辑单元,支持Nios II嵌入式处理器硬件配置与生成和自定制指令。该设备为电路与系统硕士研究生,电子信息工程、自动化、电子科学技术专业本科生、教师进行EDA技术原理的学习和研究性实践应用开发以及教育教学改革研究与探索提供了一个良好平台。
本讲义是2006年江西省教育厅教改课题《以C语言为主线 建设数字化课程群的研究与实践》课题组进行研究性实践教学的尝试,期盼各位老师和同学提出建议和意见,以便共同提高。
黄乡生 2011年6月
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
目 录
一、ZY11203G EDA/SOPC 创新实验开发系统简介 ............................................ 错误!未定义书签。
(一)、实验平台主板组成 .......................................................................... 错误!未定义书签。 二、实验平台各功能模块介绍 ................................................................................................................... 1 二、课程实验 ....................................................................................................................................................... 9
实验1 流水灯实验 .................................................................................................. 错误!未定义书签。 实验2 按键控制指示灯实验 .................................................................................................................... 8 实验3 按键中断实验 .............................................................................................................................. 29 实验4 定时器实验 .................................................................................................................................. 30 实验5 数码管显示实验 .......................................................................................................................... 36
1
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
第一部分ZY11203G EDA/SOPC 创新实验开发系统简介
一、实验平台主板组成 ??电源模块 ??下载接口模块 ??数码显示模块 ??LED 显示模块 ??液晶显示模块 ??拨码开关模块 ??按键模块 ??扬声器模块 ??配置芯片
??VGA、PS2接口模块 ??核心功能模块 ??串口模块
二、实验平台各功能模块介绍
1、电源模块
电源模块提供了丰富的直流电源。将220V交流电源插在实验平台的电源接口上,打开电源开关,为系统提供需要的直流电源。在主板上同时用电源转换芯片将+5V电源转换为3.3V,另外还有+12V,-12V,-5V等电源,分别为其它器件供电。 2、下载接口模块
该模块为Altera 的CPLD/FPGA 器件的下载模块,该下载电路为JTAG 形式,因此还能对AS方式的配置芯片EPCSx 进行下载。
连线/下载方法:将USB-Blaster 下载器的USB延长线一端连接PC机的USB接口,另一端连接到USB-Blaster 的USB-B 型接口;再将下载器十针连接线插入核心板右侧的JTAG 下载接口,然后通过Quartus II软件即可进行JTAG 模式的下载配置;如果需要进行AS模块的下载,需将下载器的十针连接线连接核心板左侧的AS下载接口(AS)。
下载器十针连接线的下载接口遵守如下定义: JTAG AS 1 TCK Dclk 2 GND GND 3 TDO CONF 4 VCC VCC 5 TMS Nconf 6 VCC nCE 7 NC Data0 8 NC nCS 9 TDI ASD 10 GND GND 注:NC表示悬空。AS是一种下载方式,专为FPGA掉电保护芯片提供下载配置。 十针连接插座引脚如右图所示。 定义引脚顺序为从下到上,从左 到右。
3、数码显示模块
数码显示模块由八个七段数码管和八个74HC595D 芯片,构成串并转换显示结构,以实 现串行数据到并行数据的转换,并将该并行数据送入相应的数码管段。 八个数码管为共阴数码管(段码为高电平时,点亮数码管),数码管结构如下图所示:
2
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
4、LED段显示模块
16 位发光二极管用于输出显示,输出高电平时发光二极管点亮。
5、液晶显示模块
液晶显示模块是基于KS0108 控制器的128×64 图形点阵液晶屏,它采用的是动态驱动原理,由行驱动控制器和列驱动控制器两部分组成128(列)× 64(行)的全点阵液晶驱动显示。
6、拨码开关模块
该模块有8个拨码开关,共分配了8 个I/O 端口。8 个按键的电路连接与下图KD1 相同。
3
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
7、按键模块
该模块有16个按键,共分配了16 个I/O 端口,KD01~KD15均是复位式按键。
8、扬声器模块
该模块提供了声音输出功能,蜂鸣器输入端接至核心芯片的I/O164 脚。
9、VGA、PS2 接口模块
如下图所示该模块可完成VGA接口、PS/2 接口相关实验:
10、核心功能模块介绍
主板模块的核心芯片采用Altera 公司cyclone 系列的EP1C12Q240C8;flash 存储器采用AM29LV065DU
4
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
(8M×8bit);SRAM 存储器采用CY7C1041CV33(256K×16bit);AS 配置芯片为EPCS4(4M);同时给出两个钟振作为时钟源;数据地址总线采用高精度连接器与外部连接,以保证用户对Nios 二次开发的需要。实验平台右侧的双排直插针用于连接开发板,用户也可自行设计开发扩展模块。
三、扩展板介绍
扩展模块包括高速AD/DA模块,通信扩展模块,语音扩展模块,SD 卡语音扩展模块, USB扩展模块等。
四、系统管脚分配
系统管脚分配见附录。
五、实验平台的使用说明以及注意事项
1、不使用实验平台时,请关闭电源,并拔下电源插头。
2、实验平台上各种硬件设备的安装,均应在实验平台断电的情况下进行,严禁带电操作。 3、电源的开关顺序:先接好交流电源,打开箱体右侧的交流电源开关,再打开实验平台 左上侧的直流开关。关闭电源的顺序与此相反。
4、实验平台电路板上的所有芯片在出厂前经过严格检验,在实验过程中请勿插拔芯片。 特别注意:请勿用手触摸核心芯片EP1C12Q240C8,以防手上所带静电损坏芯片。
5、安装扩展模块时,应检查扩展板的双排插座与实验平台的双排插针是否一一对好,是 否错位或插反;检查无误后再插入插座。若遇到阻力,不要强行安装以免损坏器件。 6、拆卸扩展模块时,应首先断开电源,然后慢慢向上拔出扩展模块;不要猛然拔出,以 免造成高速连接器的损坏。
7、插拔USB-Blaster 下载器延长线时,要拔接口插壳,不要直接去拉电缆线,以免使连 接在插壳内的线断掉。
8、拆卸液晶屏时,首先拧下螺钉,然后轻轻拔出液晶屏,注意保护液晶屏的插针。 9、实验平台的使用和保存必须谨慎,防止实验平台非正常损坏。
10、由于操作不当或其它原因出现异常情况(如数码管显示闪烁,芯片发烫等),应立即 断电,排除故障后方可继续使用。切忌继续实验,以免造成严重的后果。
11、本实验指导书中所有实验均针对主板系统的核心芯片EP1C12Q240C8 设计,在实验 例程中提供了原理图管脚分配情况,管脚分配好后必须先编译通过方可下载。注意不要随意 修改管脚分配。
12、在高密度反复下载操作时,会碰到下载不成功的情况,若确定不是软件或操作问题, 建议将实验平台断电一次,再打开实验平台的直流电源,重新进行下载,或者改变下载方式, 如从JTAG 方式改为AS方式,下载成功后,再换回到原来的下载方式,即可解决此问题。 13、短路块短接后能够接通电路,某些模块的使用需要短接相关的短路块,使用时请认 真查阅原理图和相关说明。
第二部分:SOPC设计实验
实验说明
该部分主要论述Nios嵌入式处理器和SOPC设计。利用Nios II软核处理器为核心控制器, 在其上添加LED 接口等模块,利用软件在IDE 环境下进行编译运行,完成对LED 等模块的 控制。
设计流程的第一步是设计规划。根据系统设计要求,划分各个软、硬件模块。基于Nios II 的SOPC 系统是一个软硬件复合的系统,在开发时可以分为硬件、软件两个部分。对于通常 的嵌入式系统开发,CPU是不可更改的,因而外围设备的变动也受到CPU的限制,因而通常
5
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
的嵌入式开发更多的是PCB 设计及软件开发;但Nios II 是一个灵活定制的CPU,它的外设 是可选的IP核或自定制逻辑,可以根据系统设计要求,通过SOPC Builder 向导式的界面,定 制裁剪得当的SOPC系统。Nios II的开发流程分为两个大部分:硬件开发与软件开发。 Nios核软硬件的开发流程如下:
Nios II的硬件设计流程是为了定制合适的CPU和外设,在SOPC Builder 和Quartus II中完成。在这里可以灵活定制Nios II CPU的各个特性甚至指令,既可以使用Altera 提供的大量IP Core来加快开发者开发Nios II外设的速度,提高外设的性能,也可以使用第三方的IP Core,或者使用VHDL、Verilog来自己定制外设。
完成Nios II硬件开发后,SOPC Builder 可以帮助开发者生成相应的IDE 或SDK(软件开发包)。这是由于在硬件开发中的Nios II CPU及其外设构成的系统是定制的,存储器、外设地址的映射等各不相同,需要的IDE 也是专有的,SOPC Builder 可自动生成IDE。Nios II嵌入式系统是自己定制、裁剪的,可能受到的硬件局限较小。开发者可以使用汇编、C 语言或者C++来进行嵌入式程序设计。软硬件开发完成后,接下就需要在Nios II开发板上实现一个系统原型。在这个软硬件原型上,运行整个系统,测试是否达到要求。
(1)课程实验
实验1 流水灯实验
实验2 建立带SRAM的NiosII系统实验 实验3 按键控制指示灯实验 实验4 按键中断实验 实验5 定时器实验 实验6 数码管显示实验
(2)课程设计
6
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
设计1 NiosII软核的液晶显示器设计 设计2 Nios II软核的点阵控制设计 设计3 Nios II处理器与Flash接口设计 设计4 正弦信号发生器设计
设计5 直接数字频率合成器(DDS)综合设计
7
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
实验1 流水灯实验
一、实验目标
1. 掌握基本的开发流程
2. 熟悉QUARTUS II软件的使用 3. 熟悉NIOS II软件的使用 二、实验内容
将4位LED灯点亮,进行流水灯控制。 三、实验原理与步骤
⑴ 在QUARTUS II 中建立工程
⑵ 用SOPC BUILDER建立NIOS系统模块
⑶ 在QUARTUS II 中的图形编辑界面中进行管脚连接、锁定工作 ⑷ 编译工程后下载到FPGA中
⑸ 在NIOS II IDE中根据硬件建立软件工程
⑹ 编译后,经过简单设置下载到FPGA中进行调试、验证 下面根据以上的步骤进行进行一次全程开发: 第一步:硬件部分设计 1. 在自己的文件目录下(如E:\\edatest\\)建立一个hello_led文件夹,注意目录中不能有空格或中文;
2. 打开QUARTUS II,点击FILE菜单下的New Project Wizard…会弹出如图2-1所示的对话框:
图2-1 建立工程
3. 然后输入工程存放目录,或点击工程路径右面的按钮设置工程存放目录,在第二栏中输入工程名称,我们这里输入为led;之后点击Finish,对话框消失,此时已经建立好了LED工程文件; 4. 点击New Project Wizard…菜单中的Next,选择芯片为Cyclone II系列的EP2C35F672C6,如图2-2所示。
8
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2-2 选择器件
5. 确认后。点击Quartus II 界面第一行工具栏中的SOPC Builder工具,出现如图2-3所示对话框。
图2-3 设定名称 6. 在系统名称(System Name)填写为nios_led,选择语言后点击OK,在Device Family中选择所要使用芯片的系列,我们所用的Cyclone II,系统频率为50MHz,Target中的Board中暂时先不做选择,使用Unspecified Board;如图2-4所示。
9
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2-4 设定芯片及系统时钟
7. 在左边元件池中选择元件:这个设计工程需要使用Nios 32Bit cpu、调试串口、ledPIO、RAM,首先选择如下图2-5所示的Nios processor,这个是NIOS处理器,双击会弹出如图2-6所示对话框。
图2-5 选择NIOS II
图2-6 NIOS II设置
在JTAG Debug Module栏中选择Level 1,点击Finish按钮后返回SOPC Builder窗口,将CPU_0重新命名为CPU,如图2-7所示。
10
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2-7 重命名CPU
注意:对模块命名要遵循如下规则: * 名字最前面应该使用英文;
* 能使用的字符只有英文字母、数字和“_”;
* 不能连续使用“_”符号,在名字的最后也不能使用“_”。
8. 添加JTAG UART Interface:此接口为NIOS II系统嵌入式处理器新添加的接口元件,通过它可以在PC主机和SOPC Builder系统之间进行串行字符流通讯,主要用来调试、下载数据等,也可作为标准输出、输入来使用;
① 选择Communication -> JTAG UART加入,会出现设置向导,如图2-8所示。
图2-8 加入JTAG UART
② 保持默认选项,单击Finish,返回SOPC Builder窗口。 ③ 将jtag_uart_0重新命名为jtag_uart。 9. 添加内部RAM:RAM为程序运行空间,类似于电脑的内存,此空间越大越有利;在EP2C35F672C6这个元件中建议使用4Kbytes;
① 选择Memory -> On-Chip Memory,双击加入,会出现如下图2-9所示设置向导。
11
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图3-9 设置内部RAM作为系统内存
② 设置后如上图所示,点击Finish,返回到SOPC Builder窗口,重新命名为RAM;
10. 加入led_PIO:此元件为I/O口,和单片机中的I/O口类似,用户可以根据需要配置选项; ① 选择Other->PIO(Parallel I/O),双击加入,会出现如下图2-10所示设置向导。
图2-10 加入LED_PIO
② 将Widths位宽改为4 bits; ③ 选择Output ports noly,点击Finish,重新命名为led_pio。 11. 指定基地址和分配中断号:SOPC Builder会给用户的NIOS II系统模块分配默认的基地址,用户也可以更改这些默认地址; * 选择System下拉菜单中的Auto-Assign Base Address; * 选择System下拉菜单中的Auto-Assign IRQs; 12. 系统设置:选择Nios II More “CPU” Settings或窗口下方Next按钮,按照下图2-11所示对系统进行设置。
12
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2-11 设置系统运行空间
13. 生成系统模块:
* 选择System Generation栏,如图2-12所示。
* 在System Generation中选中HDL选项,如果安装了Modelsim软件并需要仿真设计,可以选择Simulation选项。
图2-12 生成CPU
*点击窗口下方Generate按钮,SOPC Builder根据用户设定不同,在系统生成过程中所执行的操作不同。系统生成后点击“Exit”退出SOPC Builder。
14. 将刚才生成的模块以图标形式添加到BDF文件中:在SOPC Builder生成的过程中,会生成系统模块的图标(Symbol),可以将该图标像其它Quartus II图标一样添加到当前项目的BDF文件中。步骤如下:
* 单击New 按钮,弹出如下图2-13所示的对话框。
图2-13 加入原理图输入文件
* 选择Block Diagram/Schematic File,如图2-13所示,点击OK;
* 在图形界面中单击右键或双击图形界面,选择Insert-> Symbol,如图2-14所示。
13
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2-14 加入系统顶层文件
* 在图2-15所示的弹出对话框中选择Project->nios_led,双击加入;
图2-15 加入生成的NIOS II 32BIT CPU模块
点击保存,系统会自动命名为led,不要对此文件名再作更改;
* 将模块与输入输出接口相连,连接后如图2-16所示;
图2-16 顶层文件图
* 锁定管脚:新建引脚锁定命令文件,File->New -> Other Files -> Tcl Script File,如图2-17所示。
14
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2-17 新建引脚锁定命令文件
文件的格式和内容如下:
#Setup.tcl
#Setup pin setting
set_global_assignment -name RESERVE_ALL_UNUSED_PINS \set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF set_location_assignment PIN_N2 -to clk set_location_assignment PIN_G26 -to rst set_location_assignment PIN_AE23 -to led[0] set_location_assignment PIN_AF23 -to led[1] set_location_assignment PIN_AB21 -to led[2] set_location_assignment PIN_AC22 -to led[3] set_location_assignment PIN_G26 -to KEY[1]
set_location_assignment PIN_N23 -to KEY[0] //管脚锁定序号错,2012.11.12修改
写好之后,点击保存按钮。假如保存的文件名为Tcl_script1.tcl,需要放到当前的工程目录下。如图2-18所示:
图2-18 添加引脚锁定命令文件到工程目录
然后选择Tools -> Tcl Scripts,会弹出如图2-19所示的对话框,选择Tcl_script1.tcl,然后点击RUN,管脚约束与锁定就会自动加入了。
15
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2-19 运行TCL脚本文件对管脚进行锁定
* 编译工程:选择Process->Start Compilation命令对工程进行编译;
15. 配置FPGA:接上实验板电源、连上USB下载线,将编译生成的SOF文件下载到目标板上,选择Tools-> Programmer目标文件夹下载,选择USB-Blaster模式,通过JTAG口对FPGA进行配置,如图2-20所示:
图2-20 下载配置文件
第二步:软件部分设计
1. 打开NIOS II IDE,会弹出工作环境路径选择,点击右边的Browse按钮选择自己的工程所在的文件夹,如图2-21所示:
图2-21 工作环境路径选择
2. 选择菜单File -> New -> Project,会弹出如下图2-22所示对话框:
16
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2-22 添加新工程
3. 选择C/C++ Application,如上图所示,点击Next,会弹出图2-23所示对话框:
图2-23 选择现有工程实例
4. 在Select Project Template中选择Hello LED;在SOPC Builder System中选择我们刚才建立好的工程,CPU栏会自动选择,如上图所示,点击Finish,系统会自动生成一个循环点亮LED的软件工程。代码如下:
17
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
#include \
#include \ #include \
int main (void) __attribute__ ((weak, alias (\))); int alt_main (void) {
alt_u8 led = 0x2; alt_u8 dir = 0; volatile int i; while (1) {
if (led & 0x81) {
dir = (dir ^ 0x1); } if (dir) {
led = led >> 1; } else {
led = led << 1; }
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); i = 0;
while (i<200000) i++; } return 0; }
5. 右键单击工程,选择Builde Project,会弹出如下图2-24所示信息,表示正在进行工程编译。
图2-24 编译软件工程
6. 选择RUN -> RUN…,系统会自动探测到JTAG连接电缆,并弹出如下图2-25所示对话框:
18
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2-25(a) 自动探测电缆
如果在Configurations栏中的Nios II Hardware前面没有“+”号(如图2-25(a)所示),就用鼠标左键双击Nios II Hardware进行电缆自动探测;成功后如下图2-25(b)所示:
图2-25(b) 自动探测电缆
7. 在Main列表中的Project中选择我们刚才建立的工程hello_led_0,在Target Connection中选择所要使用的电缆,如本实验板使用的USB-Blaster,如下图2-26所示:
图2-26 选择电缆、设置通讯接口
8. 其它部分使用默认选项,点击RUN后,目标板上的灯就会出现逐个点亮的状态。 9. 如何要使用Debug进行单步、断点等调试,选择RUN -> Debug…,其它步骤类似于上面的RUN -> RUN…操作过程。
四、实验总结与思考 1. 如何实现LED灯逐个熄灭的控制程序?请自己更改程序进行尝试。 2. 函数IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led)如何使用你是否能够理解?
19
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
实验2 建立带SRAM的NiosII系统实验
一、实验目的
1、在实验一的基础上进一步熟悉Quartus II、SOPC Builder、Nios II IDE的操作,熟悉SOPC开发过程;
2、掌握较复杂NiosII系统的定制,熟悉添加SRAM的方法; 二、实验设备
硬件: PC机,GW48系列SOPC/EDA实验开发平台; 软件: Quartus II 8.0,SOPC Builder 8.0,Nios II IDE 8.0。 三、实验内容
1、建立一个包括Nios II/e、PIO、SRAM和JTAG_UART的系统。 2、建立一个流水灯应用程序,并下载到SRAM中运行。 四、实验原理
开发平台上LED接口的电路原理图如图1所示。
图 1 LED接口电路
Nios II系统完整的顶层图如图2所示。
20
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图2 完整的顶层模块图
管脚分配表如表1所示。
表 1 管脚分配表
序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
管脚名称 CLOCK RESET SRAM_D0 SRAM_D1 SRAM_D2 SRAM_D3 SRAM_D4 SRAM_D5 SRAM_D6 SRAM_D7 SRAM_D8 SRAM_D9 SRAM_D10 SRAM_D11 SRAM_D12 SRAM_D13 FPGA管脚号 类型 O 序号 36 37 38 39 40 41 42 43 IO 44 45 46 47 48 49 50 51 21
管脚名称 LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7 SRAM_BE0 SRAM_BE1 SRAM_BE2 SRAM_BE3 SRAM_CS SRAM_OE SRAM_WE SRAM_ADDR0 FPGA管脚号 类型 PIN_? O O O O O O 《SOPC设计与应用技术》研究性实践教学指导书 课程实验 序号 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 管脚名称 SRAM_D14 SRAM_D15 SRAM_D16 SRAM_D17 SRAM_D18 SRAM_D19 SRAM_D20 SRAM_D21 SRAM_D22 SRAM_D23 SRAM_D24 SRAM_D25 SRAM_D26 SRAM_D27 SRAM_D28 SRAM_D29 SRAM_D30 SRAM_D31 FPGA管脚号 类型 序号 52 53 54 55 56 57 58 59 60 61 62 63 64 65 IO 66 67 68 69 70 管脚名称 SRAM_ADDR1 SRAM_ADDR2 SRAM_ADDR3 SRAM_ADDR4 SRAM_ADDR5 SRAM_ADDR6 SRAM_ADDR7 SRAM_ADDR8 SRAM_ADDR9 SRAM_ADDR10 SRAM_ADDR11 SRAM_ADDR12 SRAM_ADDR13 SRAM_ADDR14 SRAM_ADDR15 SRAM_ADDR16 SRAM_ADDR17 SRAM_ADDR18 SRAM_ADDR19 FPGA管脚号 类型 PIN_? O 注:SDRAM的I/O电平为SSTL-2 CLASS I。 以上管脚需要自行查阅所提供的管脚文件填充。
五、实验步骤
1、使用Quartus II建立工程
(1) 打开Quartus II软件并建立工程
参考实验1实验新建工程的步骤来新建一个SmallCore工程,只是在图3中的设置不同。
图3 新建工程路径、名称、顶层实体指定对话框
22
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图3第一栏指定工程所在的工作库文件夹为SmallCore;第二栏指定工程名,直接用顶层文件的实体名作为工程名(建议使用);第三栏指定顶层文件的实体名。本实验工程的路径为D:\\DE2\\example\\SmallCore文件夹,工程名与顶层文件的实体名同名,为SmallCore。
(2) 建立顶层模块
参考实验一建立顶层模块的步骤,新建空白BDF文件,并保存为SmallCore.bdf。保存时确保Add file to current project选项选中,以使该文件添加到工程中。
2、使用SOPC Builder定制NiosII系统 一些步骤的详细解释请参考实验一节实验。
(1) 启动SOPC Builder
新建工程后,在Quartus II界面中选择Tools→SOPC Builder来启动SOPC Builder,打开Create New System对话框,如图4所示。
图 4 Create New System对话框
在图4中单击“OK”,进入SOPC Builder 图形界面,如图5所示。
(2) 指定目标FPGA和时钟设置
Target和Clock选项区域用来设置SOPC Builder系统与外部的联系。在定制系统前,还需要指定系统的时钟频率。SOPC Builder将利用这个时钟频率产生时钟分频或波特率等。该频率要与系统实际运行的时钟频率相匹配。本实验选择的是50 MHz。如图5所示。
确保Device Family下拉列表框中器件选择Cyclone,否则最终的设计将不能运行。
图5 指定目标FPGA和时钟设置
(3) 添加NiosII处理器内核
在可用元件列表中,双击Avalon SOPC Builder组件下的Nios II Process,出现Altera Nios II配置向导,在Nios II Core选项卡中指定下列设置: ? Nios II Core: Nios II/e
23
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
? Hardware Multiply: None ? Hardware Divide: 不选中
由于是Nios II/e核,在Cache & Tightly Coupled Memories选项卡中不进行设置。不改 变JTAG Debug Module选项卡中的设置。
为了方便调试,给CPU加入JTAG调试模块。JTAG调试模块要占用较多的逻辑单元,如果整个系统已经调试完毕,可以选用No Debugger,以减少系统占用资源。
由于不使用自定义指令,因此不改变Custom Instructions选项卡中的设置。
单击Finish按钮完成Nios II处理器的配置,生成一个带有JTAG调试接口的Nios II/e型CPU核。在激活的元件窗口中将出现名称为cpu的Nios II内核。
添加Nios II内核后,在SOPC Builder Message窗口会出现错误信息。这些信息暂不考虑,将在后面步骤中处理它们。
(4) 添加JTAG_UART
带Avalon接口的JTAG_UART设备可以实现PC与Nios II系统间的串行通信。在许多设计中,JTAG_UART常取代RS232通信设备,用于字符的输入/输出。与UART设备不同的是,JTAG_UART是通过JTAG接口来传输数据的。
在可用元件的列表中,双击Interface Protocols Serial组件下的JTAG UART,出现JTAG UART配置向导,如图6所示。不改变其中的设置,直接单击Finish按钮完成添加。激活元件窗口中出现jtag_uart。
图6 JTAG UART配置对话框
(5) 添加SRAM控制器内核
众所周知,处理器系统至少要求一个存储器用于数据和指令。本实验利用一个SRAM控制器来使用板上1MB的SRAM存储器,用于程序运行、变量存储(R/W数据)、Heap和Stack等。
在可用元件列表中,双击GW_SOPC组件下的SRAM Controller ,Cy7C1041出现如图7所示对话框, 按图7所示对话框中配置。
24
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图 7 SRAM控制器配置
(6) 添加PIO
PIO为NiosII处理器系统接收输入信号以及输出信号提供一种简易的方法。本实验设计使用8个PIO来驱动实验箱主板上的8个LED。
执行下列步骤添加PIO: ①在可用元件列表中,双击Peripherals Microcontroller Peripherals组件下的PIO(Parallel I/O),出现Avalon PIO配置向导,如图8所示。
② 默认Width选项区域的文本框中宽度设置8;在Direction选项区域中选择Output ports only,即仅为输出模式。
③ 单击“Finish”,元件窗口中出现名称PIO。
④ 右击激活元件窗口中PIO,然后选择Rename将其重命名为led_pio。 注意,此处必须命名为led_pio,因为后面的实验程序中将使用该命名。
图 8 PIO置向导
(9) 指定基地址和中断请求优先级
至此,已经将本实验所有必需的元件添加到系统中,如图10所示。
25
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图10 添加完所用元件的窗口
接下来,要为每个外设分配基地址和中断请求优先级(IRQ)。由于本实验中所有外设都没有中断,所以无需进行中断优先级分配。只需使用SOPC Builder提供Auto Assign Base Addresses命令分配外设基地址。
(10) 设置NiosII复位和异常地址
双击激活窗口中CPU 进入Nios II Processor,如图11所示,设置系统的复位地址和异常向量地址。
图11 设置系统的复位地址和异常向量地址
将Reset Vector和Exception Vector对应的Memory 都设置为sram、Offset只有在多处理器系统中才
26
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
进行设置,且其值必须是0x20的倍数,此处不用修改。由于本实验没有添加掉电保存的存储器,所以系统只能用于程序的调试。系统上电后,应用程序从Nios II IDE下载到SDRAM中运行。
(12) 生成Nios II系统
使用SOPC Builder生成Nios II系统,执行下列步骤: ① 选择System Generation选项卡。
② 关闭Simulation. Create simulator project files复选框,以节省时间,因为本实验不进行硬件仿真。 ③ 单击“Generate”,系统生成开始。
系统生成时间的长短随计算机的性能而变化,一般需要几分钟。System Generation选项卡显示系统生成的过程。当系统生成结束时,System Generation选项卡中将显示一条消息“SUCCESS: SYSTEM GENERATION COMPLETED.”。
④ 单击“Exit”返回到Quartus II主界面。
至此,已经完成Nios II处理器系统的创建。系统生成后,要将其集成到Quartus II硬件工程中,并使用Nios II IDE来开发软件。可以先使用Nios II IDE进行软件开发,也可以先将系统集成到Quartus II中。如果是多人合作开发,两者可同时进行。
5、集成各模块到Quartus II工程
第2、3、4步中已经建立好各功能模块,下面将其添加到顶层模块中。单击模块编辑工具栏中的按钮,打开添加模块对话框,选择nios2e_2C35进行添加。并按图19input、output以及bidir三种类型的引脚。
图19系统顶层模块设置
6、设置编译选项并编译硬件系统
(1) 设置编译选项
本实验采用默认的编译设置。若要进行编译选项设置,请参考Altera公司的Quartus II使用手册。
27
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
(2) 编译硬件系统
选择Processing→Start Compilation进行全程编译,也可选择工具栏上的过程中,可能产生很多警告信息,但不会影响设计结果。
(3) 查看编译报告 编译结束后,对话框显示消息“Full compilation was successful.”,单击“OK”进入Compilation Report界面,可查看编译报告、综合报告、适配报告、时序分析报告。
展开Timing Analyzer部分,单击Summary检查Actual Time单元中列出的频率,这是该FPGA设计能够运行的最大频率(FMAX)。如果Actual Time中的频率低于板上实际的振荡器频率,该设计可能不会正常运行。必须执行Quartus II高级编译选项设置和时序分配来优化时钟。
(4)按表1分配管脚。
(5)从新编译硬件系统 7、下载硬件设计到目标FPGA 8、使用Nios II IDE建立用户程序 应用程序文件为led_flow.c 9、调试/运行程序
28
按钮启动编译。在编译
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
实验3 按键控制指示灯实验
一、实验目标
1. 掌握基本的开发流程
2. 熟练掌握QUARTUS II软件的使用 3. 进一步熟悉NIOS II软件的使用 4. 熟悉基本I/O口的软件编程方法 二、实验内容
使用2个按键作为输入,4位LED灯作为输出。 按下1号键4个LED正向循环点亮; 按下2号键4个LED反向循环点亮;
无键按下时,第1、3个LED点亮,第2、4个LED熄灭; 两个键同时按下时,4个LED全部点亮。 三、实验原理与步骤
1. 具体实验步骤请参考“实验二 流水灯实验”。 与“流水灯实验”的不同之处在于:
⑴ 在SOPC Builder中生成CPU时,需要加入两位仅为输入的key_pio接口,如图3-1所示:
图3-1 加入key_pio接口
⑵ 生成的顶层原理图如图3-2所示。引脚锁定的文件的编写请参考实验二,注意要加入两个按键接口的引脚锁定。
nios_led1clkINPUTVCCVCCPIN_N2KEY[1..0]clk reset_n in_port_to_the_key_pio[1..0] out_port_from_the_led_pio[3..0] instOUTPUTINPUTVCCPIN_W26PIN_P23led[3..0]PIN_AE23PIN_AF23PIN_AB21PIN_AC22 图3-2 顶层原理图
2. NIOS II软件程序还是采用Hello LED模块,并对其中的程序进行修改,加入对输入按键的检测与判读等操作。示例代码如下:
29
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
#include \
#include \ #include \
int main (void) __attribute__ ((weak, alias (\))); int alt_main (void) {
alt_u8 led = 0x2; //赋led初值02 alt_u8 dir = 0; //赋dir初值0 alt_u8 keydat = 0x03; //赋keydat初值03 volatile int i; while (1) {
keydat = IORD_ALTERA_AVALON_PIO_DATA(KEY_PIO_BASE);
if((keydat & 0x03) == 0x01) dir = 1; // keydat&0011=0x01,按1号键,则dir=1; else if((keydat & 0x03) == 0x02) dir = 0; //keydat&0011=0x02,按2号键,则dir=0; else if ((keydat & 0x03) == 0x03) dir = 3; //keydat&0011=0x03,同时按两键,则dir=3;
else dir =2; //否则无键按下,则dir=2;
if (dir == 1) { led = led >> 1; if(led == 0x00) led = 0x80; } // 若dir=1,led右移1位循环; else if(dir == 0) { led = led << 1; if(led == 0x00) led = 0x01; }//若dir=0,led左移1位循环; else if(dir == 3) led = 0xff; // 若dir=3,8个led全亮; else led = 0x55; //否则无键按下,第1、3、5、7个LED点亮,第2、4、6、8个LED熄灭;
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); i = 0;
while (i<200000) i++; } return 0; }
注:其中宏函数IORD_ALTERA_AVALON_PIO_DATA和IOWR_ALTERA_AVALON_PIO_DATA在头文件\中定义,格式如下:
#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0) #define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)
宏函数IORD和IOWR在头文件\中定义,格式如下:
#define IORD(BASE, REGNUM) \\
__builtin_ldwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM))) #define IOWR(BASE, REGNUM, DATA) \\
__builtin_stwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM)), (DATA))
请大家要一定仔细理解体会这两个函数的用法。
3. 将工程编译后,下载到目标FPGA进行调试等操作,看看运行结果是否满足设计要求。
四、实验总结与思考 1. 输入接口与输出接口的函数在使用上有何区别?
2. 不利用Hello LED模块,能否自己独立在NIOS II书写一个完整的软件程序?
30
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
实验4 按键中断实验
一、实验目标
1. 进一步了解简单设备及其编程 2. 熟悉相关I/O操作函数
3. 了解中断原理及中断函数编写方法 二、实验内容
使用4个按键作为输入,4位LED灯作为输出。 按下1号键第1个LED亮; 按下2号键第2个LED亮; 按下3号键第3个LED亮; 按下4号键第4个LED亮; 三、实验原理与步骤 1. 在SOPC中加入各元件并设置好各地址,方法如实验三(实验四是在实验三的基础上加入中断函数的编程)。不同之处在于:加入按键输入接口时需要加入边沿触发中断使能。如图4-1所示:
图4-1 加入key_pio接口
其中图4-1中右边的图是: 选择触发模式、选择中断模式。 其它设置同实验三设置,完成编译。
2. 加入引脚锁定文件(引脚锁定的文件的编写请参考实验三),绘制顶层原理图。生成的顶层原理图如图4-2所示。
Nios_KeyIntclkINPUTVCCVCCPIN_N2key[3..0]clk reset_n in_port_to_the_key_pio[3..0] out_port_from_the_led_pio[3..0] inst4OUTPUTINPUTVCCPIN_N23PIN_G26PIN_P23PIN_W26led[3..0]PIN_AE23PIN_AF23PIN_AB21PIN_AC22
图4-2 顶层原理图
3. 在NIOS II IDE下,根据刚生成的硬件建立一个空工程文件,方式如图4-3所示:
31
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图4-3 建立空工程文件并命名
在空白的工程上点击右键,弹出快捷菜单,选择New -> File,准备建立一个新的C语言源文件,方法如图4-4 所示。
图4-4 建立新的源文件
4. 然后编写软件代码如下:
#include \ #include
#include \ #include
32
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
volatile int edge_capture; alt_u8 flag;
static void handle_key_interrupt(void* context, alt_u32 id) {
/* Cast context to edge_capture's type. It is important that this be declared volatile to avoid
unwanted compiler optimization. */
/* 将edge_capture与*context对应起来 */
/* 设置为volatile 是为了避免下面的指令被编译器给优化掉 */ volatile int* edge_capture_ptr = (volatile int*)context;
/* Store the value in the Button's edge capture register in *context. */
/* 读取按键中断边沿捕捉寄存器中的值 -> *context (这里就等于*edge_capture_ptr) */ *edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE); /* Reset the Button's edge capture register. */ /* 清0 边沿捕捉寄存器中的值 */
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0); flag = 1; //中断产生标志置1 }
static void init_key_pio() {
/* Recast the edge_capture pointer to match the alt_irq_register() function prototype. */
/* 准备将寄存器 edge_capture作为中断注册函数alt_irq_register的一个输入参数*/ void* edge_capture_ptr = (void*)&edge_capture; /* Enable all 4 button interrupts. */ /* 使能4个按键的中断 */
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, 0xf); /* Reset the edge capture register. */ /* 清0 边沿捕捉寄存器中的值 */
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0x0); /* Register the interrupt handler. */ /* 对中断函数进行注册 */
alt_irq_register(KEY_PIO_IRQ,edge_capture_ptr,handle_key_interrupt); }
int main (void) __attribute__ ((weak, alias (\))); int alt_main(void) {
alt_u8 led = 0x0; flag = 0;
alt_irq_init(ALT_IRQ_BASE); //使能中断 (很重要,相对于总的中断开关) init_key_pio(); while(1) { if(flag) {
33
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
flag = 0;
switch(edge_capture) {
case 0x01:
led = led ^ 0x01; break; case 0x02:
led = led ^ 0x02; break; case 0x04:
led = led ^ 0x04; break; case 0x08:
led = led ^ 0x08; break;
default: led = 0x0f; }
//将led的值写入到led对应的硬件寄存器(LED_PIO_BASE)中 IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); } } return 0; }
注:下面的函数不容易理解因为它们与硬件有很大的相关性:
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_PIO_BASE, 0xf); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE, 0x0); IORD_ALTERA_AVALON_PIO_EDGE_CAP(KEY_PIO_BASE); IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);
alt_irq_register(KEY_PIO_IRQ,edge_capture_ptr,handle_key_interrupt); 在文件\中有如下定义:
#define IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, 2, data); #define IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base,3, 0x0); #define IORD_ALTERA_AVALON_PIO_EDGE_CAP(base,3);
#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0)
第1个函数是使能中断函数,是按位来使能的,比如0x0f表示4位全部使能,而0x07表示低3位中断使能; 第2个函数是设置边沿捕捉寄存器函数,用来重新设定寄存器的值,一般在读取之后会重新设定为0; 第3个函数是读取边沿捕捉寄存器函数,用来读取寄存器的值; 第4个读取硬件寄存器函数,用来从固定的硬件地址读取一个数据。
下面是alt_irq_register函数的原型,此函数用来声明ISR,在软件使用之前一定要先声明:
extern int alt_irq_register(alt_u32 id,void *context,void (*irq_handle)(void *, alt_u32) );
请大家要一定仔细理解体会上面几个函数的用法。
将程序编辑完成后,先进行设置,在左边的工程上点击右键,弹出快捷菜单,选择System Library
34
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
Properties,在弹出的对话框中断选择System Libray,主要是选中Small C library和Reduce device drives,将stdout设置为JTAG_UART。方法如图4-5 所示。然后再进行编译、调试、运行等操作。
图4-5 编译前工程设置
四、实验总结与思考 1. 根据实验代码总结按键中断流程。
2. 更改实验代码,将功能更改为:1位按键中断输入,键按下,4个LED循环向右点亮;键释放4个LED循环向左点亮。
35
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
实验5 定时器实验
一、实验目的
1. 熟悉NIOS II中定时器的相关设置 2. 了解定时器中各寄存器的作用
3. 在NIOS II开发环境中对Timer进行编程 二、实验内容
利用定时器Timer实现LED闪烁功能。 三、实验原理 概述:SOPC Builder中的定时器是一个32位的减法计数器,在IDE软件开发中主要通过向几个相关的寄存器进行读写操作来控制该定时器。 NIOS软件开发控制定时器的操作流程一般包含以下几个步骤: * 设置定时器的定时周期; * 向定时器的控制寄存器中的start位或stop位写1来开启或停止定时器工作; * 向定时器的控制寄存器中的定时中断使能位(ito)写1或0来使能或禁止定时器中断; * 向定时器的控制寄存器中的cont位写1或0来设置定时器连续工作或单次工作。
设置定时器的计时周期,主要是分别向定时器的两个16位寄存器(periodl)和(periodh)写入一个32位预置数的低16位和高16位数值。
与定时器相关的寄存器还有两个快照(snapshot)寄存器:snapl和snaph。读取这两个寄存器中的值可以获取定时器内部的减法计数器当前计数值的低16位和高16位数值。如果向snapl和snaph这两个寄存器进行写操作,将使这两个寄存器重新装载计数器当前计数值的高、低16位数值。
如果在SOPC Builder中设置了定时器模块使用“Watchdog”看门狗配置方式,则定时器能够输出一个系统复位信号给系统复位逻辑,如果这时还使用Writeable period和Start/Stop control bits寄存器功能,还可以更改看门狗定时器周期以及停止看门狗计时。其内部结构如图5-1所示:
Register FileAddress,Data,etcAvalon-NM slaveinterfaceto on-chip logicstatuscontrolperiodlperiodhCountersnaplsnaphIRQReset Requset(watchdog)ControlLogictimeout_pulse
图5-1 Timer内部结构图
定时器寄存器定义: 定时器中主要包含6个寄存器,它们分别是状态寄存器status、控制寄存器control、周期寄存器periodl和periodh、快照寄存器snapl和snpah。表5-1列出了这些寄存器的读写方式及相关说明。
36
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
表5-1 定时器寄存器定义 偏移量 0 1 2 3 4 名称 Status Control Periodl Periodh Snapl R/W RW RW RW RW RW 说明/位描述 15 ……. 3 2 1 run cont 0 to ito stop start 定时器周期低16位 定时器周期高16位 定时器内部计数器低16位快照 定时器内部计数器高16位快照 5 Snaph RW 1. 状态寄存器Status 低2位有效。如上表,第0位是to位,当定时器内部计数器下降计数器到0时,to位被置1。如果使用中断方式操作定时器,那么当定时器定时完成时,to位为1并将一直保持到用户手动清零。
Status寄存器的第1位是run位,其值为1时表示定时器内部计数器正在计数,为0时则表示计数器停止工作。要使定时器重新开始或停止工作(即内部计数器开始或停止计数),则需要向control寄存器的stop或start位写1。run位不受status寄存器的写操作影响。
2. 控制寄存器Control
低4位有效。如上表,第0位是ito位,定时器中断使能时ito位置1,当定时器计数到0将产生一个中断请求信号(定时器的IRQ输出为1)。如果ito位置0,定时器中断禁止,IRQ输出信号始终为0.
Control寄存器的第1位是cont位,当定时器一次定时完成,内部计数器重新装载预置的定时周期计数。如果cont位为1,则计数器就会继续开始计数,定时器连续不断地循环定时直到control寄存器的stop位为1;如果cont位为0,计数器在重新装载完预置的定时周期计数后停止工作,定时器完成一次定时后停止。
Control寄存器的第2位是start位,向start位写1后定时器内部计数器立即启动向下计数,定时器开始工作。start位是一个事件位,即只有向start位进行写1操作时定时器才开始工作。向start写0对定时器没有影响,也就是不能停止工作。如果在向start位写1之前定时器已经被停止了,那么此时定时器将接着上次停止的计数值向下计数。
Control寄存器的第3位是stop位,向stop位写1将会停止定时器内部计数器工作,从而暂停计时。stop位也是一个事件位,只有向stop写1操作时才能停止定时器工作,而向stop位写0对定时器没有影响。
3. periodl和periodh寄存器
它们分别存放定时器的32位预置计数数值的低16位和高16位。考虑到定时器内部计数器工作方式(预置数为0算一个时钟周期),定时器的实际定时周期要比预置的定时周期多一个时钟周期。定时器内部计数器在以下两种情况下将重新装载预置的定时周期计数:
⑴ 用户程序中对peirodl和periodh寄存器进行写操作时; ⑵ 内部计数器下降到0时。
要注意的是,向peirodl和periodh寄存器进行写操作时,定时器内部计数将会自动停止,因此启动定时器之前应先设置好定时器周期,即先设置定时周期再启动定时器。
4. snapl和snaph寄存器
这两个寄存器分别存放定时器内部计数器当前计数值的低16位和高16位数值。要读取当前定时器内部计数器的计数值,应当先向snapl和snaph两个寄存器之一进行写操作(装载当前计数值数值),然后再读取这两个寄存器的数值。
当启用看门狗功能的时候,软件一旦开启了定时器,就无法将其结束,当看门狗内部计数器为0时,定时器将产生一个复位信号输出到NIOS系统复位端。向定时器的peirodl或periodh寄存器进行写操作(写入数据大小无关),将对看门狗内部计数器进行复位。因此要防止看门狗系统复位,就必须连续不断地对peirodl或periodh寄存器进行写操作。
37
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
四、实验步骤
此实验要求用户对NIOS整体开发流程较为熟悉,如果不熟悉请参考前几个实验,在此只讲述关键步骤:
1. 生成带有timer功能的硬件系统
timer元件在System Contents -> other-> Interval timer中,如图5-2所示:
图5-2 如何加入timer元件
双击Interval timer弹出如图5-3所示的对话框,采用默认设置即可。
图5-3 timer元件对话框
Led灯只要设置1位即可。包含的所有SOPC元件模块如图5-4所示:
38
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图5-4 包含的所有SOPC元件模块
最后生成的硬件电路图如图5-5所示。
nios_TimerclkINPUTVCCVCCPIN_N2clk reset_n out_port_from_the_LED_PIO instOUTPUTledPIN_AE23 图5-5 系统硬件电路原理图
Tcl引脚锁定文件可以参考前面的实验,示例如下:
set_global_assignment -name RESERVE_ALL_UNUSED_PINS \set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF set_location_assignment PIN_N2 -to clk set_location_assignment PIN_AE23 -to led
2. 根据硬件建立软件工程;
3. 包含头文件,编写软件代码,主要代码如下:
#include \ #include
#include \ #include \
#define alt_cpu_freq 50000000 //系统输入时钟为50MHz int main (void) __attribute__ ((weak, alias (\))); int alt_main(void) {
alt_u8 led = 0x0;
//设置定时周期
IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_BASE, (short)(alt_cpu_freq&0x0000ffff)); IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_BASE, (short) ((alt_cpu_freq >> 16)&0x0000ffff));
//开启定时器,并设定为循环工作
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE,
39
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
ALTERA_AVALON_TIMER_CONTROL_START_MSK +
ALTERA_AVALON_TIMER_CONTROL_CONT_MSK);
while(1) {
if(IORD_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE)
& ALTERA_AVALON_TIMER_STATUS_TO_MSK)
{
led = ~led;
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); //向状态寄存器执行写操作,清除定时器溢出状态
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE,0x0); } } return 0; }
四、实验总结与思考 1. SOPC中的定时器与单片机中的定时器使用有何异同?
2. 如何将定时器溢出由查询方式改为中断方式?
40
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
实验6 Nios II软核的数码管设计
一、实验目的
本设计是利用Nios软核处理器为核心控制器,在其上添加数码管控制接口,从而利用软件控制数码管的运行。
二、实验内容
利用Altera 的SOPC Builder 开发工具构成Nios 处理器的最小系统,然后在最小系统上添加数码管控制接口,编译,生成Nios 核模块,在Quartus II工程中调用Nios 核,分配管脚下载至FPGA中构成硬件部分。然后利用IDE编译环境编写软件控制程序,控制数码管显示。
三、实验仪器
1、ZY11203G 型实验箱。2、USB-Blaster 下载器。
四、实验原理
1、重点难点
搭建NIOS软核系统。 2、硬件设计步骤:
(1)具体的硬件搭建步骤参考实验4-1Nios II软处理器核定制流水灯实验。具体的组件参数,请参考光盘中4-2LCM例程的参数。最终搭建的NIOS组件如下图所示:
图5-1 Nios系统组件窗
(2)Nios II系统生成前设置与系统生成 首先,地址自动分配设置和中断自动分配设置。为了保证所有组件的地址安排是合法的,如图4-4-2所示,选择菜单System中的Auto-Assign Base Addresses 项,对各组件地址进行自动分配。同理,选择菜单System中的Auto-Assign IRQs项,对各组件中断进行自动分配。
图5-2 地址自动分配设置
41
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
然后,复位地址和程序运行区域设置。进入如图4-4-3 的Nios II 处理器配置窗。选择onchip_mem作为复位程序区域:Reset Address;选择onchipmem作为外部存储单元中的软件运行的存储地址区域:Exception Address。本页主要设置CPU 的复位地址和外部RAM 程序运行地址。
图5-3 Nios II处理器配置窗口
(3)系统文件生成。系统文件生成控制页如图4-2-4所示。在该页将最终生成Nios II系统的VHDL 文件,以及对应的硬件仿真文件。点击Generate。生成过程如图4-4-4 所示。注意如图4-4-4所示信息栏中出现“SUCCESS:SYSTEM GENERATION COMPLETED”,则可点击Exit按钮,退出系统生成窗口。
图5-4 系统生成窗口
(4)Nios II 硬件系统生成。回到Quartus 窗口,新建文本文件。将例程中的文本文件 lcd_m.vhd中的内容复制到新建文件夹,保存后将lcd_m.vhd置为顶层文件(如图4-4-5所示)。 该文件包含了对nios软核处理器的例化。
图5-5 文件置顶
对工程进行编译。编译完成后分配管脚。将分配管脚后的工程编译下载到板上。 3、软件调试:
(1)启动NIOS II 7.2 IDE
选择“开始”>“所有程序”>Altera>Nios II EDS 7.2>NIOS II 7.2 IDE,出现IDE 窗口如图4-2-6 所示。选择File-?switch workspace软件过程路径选择窗workspace,在此选择如图所示的路径,它是本示例中已预先建立的一个空文件夹;如果此前已经有了自己的软件实例工程库文件夹,现在还想使用,则必须浏览到对应路径,并进入该文件夹。在此工程中,我们将路径选择为QUARTUS工程所在路径即可。 点击OK 后将出现图4-4-6 所示的窗口(以后进入同一工程库将不会出现该窗)。再点击此窗右上角的workbench按钮,即进入IDE 环境。
42
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
图4-4-6 选择软件工程库
(2)新建C/C++Application工程。为了新建一个开发软件的工程项目,选择菜单File的New->Project.在弹出的窗口中选择C/C++ Application ,并按Next按钮,在弹出的窗口中选择现成的实例“Hello_Led”作为实验程序,并在工程名栏键入当前软件实例工程名:“hello_led_1”。
再将光盘提供的实验例程中工程文件下的.c和.h文件全部复制到新建的工程中。
图4-7 工程文件系统
(3)编译运行C 程序。在左边的“C/C++ Projects”页一栏中,右键点击需要运行的工程名:“hello_led_1”,将出现图4-4-8 所示下拉选择框;选择Run As 后出现另一下拉栏,此栏有3 个选择项:第一个选项功能是编译并向FPGA中的Nios II CPU下载和全速运行该工程中C程序;第二个选项功能是编译并在虚拟的Nios II 中运行程序;第三个选项功能是使用第3方工具运行;在此选择第一项功能:Run As-> Nios II Hardware.。选中后将可能出现一个窗口,选择OK,表示对新改的程序存盘。
注意:在运行这一步之前,必须保证已经将Quartus 工程中下载文件下载到板上了。
图4-8 编译、下载并在Nios II CPU中全速运行该示例
43
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
(4)观察运行结果。在下方的console信息窗将出现如图4-4-9所示信息,表示已将程序下载到Nios II系统,并已运行。
注意,如果有问题可以再下载一次。一般出现的问题有多种:如没有将当前硬件工程中的SOF 文件配置进FPGA;没有为复位信号设置正确电平;没有设定正确的系统时钟输入频率;没有设置好正确的下载接口模式等。
图4-9 C程序下载成功,启动运行
程序运行后可以看到在实验系统上数码管上显示“76543210”,然后数字从左至右消失,再从右至左显示,一直循环显示。
五、实验步骤
1、下载LCM12864文件夹下的lcm.sof文件至FPGA。
2、通过JTAG 下载仿真器在IDE中下载C语言程序至Nios II核。 3、观察数码管显示。
六、实验结果
数码管显示“7654321”—>“-6543210”?“--543210”???“7654----”???“76543210”。
思考题:
1. 如何修改程序,使得数字从右至左消失,再从左至右出现,循环显示? 2. 总结自定制组件的过程。
44
《SOPC设计与应用技术》研究性实践教学指导书 课程实验
(4)观察运行结果。在下方的console信息窗将出现如图4-4-9所示信息,表示已将程序下载到Nios II系统,并已运行。
注意,如果有问题可以再下载一次。一般出现的问题有多种:如没有将当前硬件工程中的SOF 文件配置进FPGA;没有为复位信号设置正确电平;没有设定正确的系统时钟输入频率;没有设置好正确的下载接口模式等。
图4-9 C程序下载成功,启动运行
程序运行后可以看到在实验系统上数码管上显示“76543210”,然后数字从左至右消失,再从右至左显示,一直循环显示。
五、实验步骤
1、下载LCM12864文件夹下的lcm.sof文件至FPGA。
2、通过JTAG 下载仿真器在IDE中下载C语言程序至Nios II核。 3、观察数码管显示。
六、实验结果
数码管显示“7654321”—>“-6543210”?“--543210”???“7654----”???“76543210”。
思考题:
1. 如何修改程序,使得数字从右至左消失,再从左至右出现,循环显示? 2. 总结自定制组件的过程。
44
正在阅读:
《SOPC设计与应用技术》研究性实践教学指导书-学生03-26
2012年现代咨询方法与实务考点06-09
员工试用期离职证明(5篇范文)08-22
WM-SE-QDND汽车起重机三代机模拟机技术参数(三自由度) - 图文03-14
电大《当代中国政治制度阶段测验全集06-11
石雕图片02-09
德国汽车品牌有哪些02-09
欢迎您浏览背景图02-09
09年高考英语380易错词01-01
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实践教学
- 指导书
- 研究性
- 应用技术
- 学生
- 设计
- SOPC
- 2018年英语同步优化指导(人教版选修7)练习:阶段质量评估1
- 复句练习题 -
- 第七八届全国大学生节能减排竞赛获奖统计
- 模块1(1-10单元语法专练)
- 部编人教版七年级上册语文期中试卷10套(2018最新审定) - 图文
- 辽宁省大连二十四中2014-2015学年高一(下)期中生物试卷 - 图文
- 6102采后总结
- 液体涂装厂安全管理规范
- 《概率统计》期末考试题(有答案)
- 单元整组教学 学习心得
- 18共边硼酸盐的结构和性质 - 图文
- 初二物理 力学 每节练习题
- 离石施工组织设计
- 《现代远程教育导论》2015年春学期在线作业(一)满分答案
- 基于MATLAB的二进制数字系统的调制(包括2ask,2fsk,2psk,2dpsk) -
- 材料科学与工程
- 鸿业市政道路简易操作步骤(好用)
- Web实验报告 - 3
- 药剂学 复习 知识总结
- 修订版,苏教版五年级下册科学教案(1)