第10章综合创新实验.ppt

上传人:本田雅阁 文档编号:2106902 上传时间:2019-02-14 格式:PPT 页数:55 大小:346.02KB
返回 下载 相关 举报
第10章综合创新实验.ppt_第1页
第1页 / 共55页
第10章综合创新实验.ppt_第2页
第2页 / 共55页
第10章综合创新实验.ppt_第3页
第3页 / 共55页
亲,该文档总共55页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第10章综合创新实验.ppt》由会员分享,可在线阅读,更多相关《第10章综合创新实验.ppt(55页珍藏版)》请在三一文库上搜索。

1、1,综合创新实验,陈文智 浙江大学计算机学院 2005年4月,2,提纲,1、设计任务 2、设计分析 3、FPGA设计基础 4 模块分析 5 驱动设计 6 测试程序设计 7 GUI程序设计,3,1. 设计任务,设计题目:FGPA扩展子板系统设计 设计内容: 扩展一块FPGA子板,合理选用FPGA器件。有效使用XSBase255扩展槽资源。扩展以下硬件资源:16键键盘、8个LED灯、拨码开关、2路A/D和D/A。,4,设计要求 合理选择各种元器件,包括FPGA、A/D、D/A芯片。 合理使用XSBase255开发系统扩展槽资源,设计原理图,要考虑子板和母板的安装。布局图:,5,软件测试要求: L

2、ED显示 A/D D/A KeyPad 开关量输入,6,2. 设计分析,嵌入式系统项目开发流程要经历项目分析、设计和实现与维护四个阶段 本设计: 前期准备 FPGA逻辑设计 设备驱动设计 驱动测试 GUI应用程序设计,7,3. FPGA设计基础,可编程逻辑器件简介 什么是FPGA?什么是CPLD? FPGA与CPLD的主要区别 为什么要使用CPLD/FPGA? 可编程逻辑器件有哪些? 如何使用可编程逻辑器件进行开发? 如何使用Xscale和FPGA进行开发?,8,3.1 VHDL语言介绍,随着EDA技术的发展,使用硬件描述语言(HDL)设计CPLD/FPGA成为一种趋势 VHDL的程序结构特点

3、是将一项工程设计,分成外部(端口)和内部(涉及实体的内部功能实现部分) VHDL主要用于描述数字系统的结构、行为、功能和接口,跟原理图有对应的关系,9,一个简单的VHDL例子 :,10,3.2 Quartus II使用简介,QuartusII软件为设计者提供了一个完整的图形化多平台开发环境,它包含整个FPGA和CPLD的开发方案 Quartus II的使用,操作步骤主要有工程建立、设计输入、编译、仿真和下载操作,11,扩展板逻辑主要包括: 总线接口逻辑 中断管理逻辑 键盘扫描逻辑 拨码开关逻辑 AD部分逻辑 DA部分逻辑,3.3 扩展板逻辑设计要点总线接口逻辑,12,总线接口,总线接口部:,1

4、3,总线接口要完成的功能是实现各寄存器的读写操作。包括地址译码、寄存器输入、总线输出和各模块读写信号产生 总线信号有: 输入到FPGA的外部总线的信号有SA_A250、SA_CS4、SA_D310、SA_WE、SA_OE SA_A250为地址信号 SA_CS4为扩展板的片选信号,低有效 SA_D310为32位双向数据信号 SA_WE为写信号,低有效 SA_OE为读信号,低有效,14,地址译码,使用两个Decode兆功能模块(写译码模块和读译码模块)实现译码操作 写译码模块用于产生各内部寄存器的写信号,写译码模块的使能直接由SA_CS4控制 读译码模块用于产生内部寄存器的读信号,读译码模块的使能

5、信号受SA_CS4和SA_OE控制,15,中断管理部分,当各内部中断产生后,中断状态寄存器对应位将置“1”,这主要由DFF触发器来实现,16,键盘扫描逻辑,采用硬件描述语言方式设计,17,AD部分逻辑,向AD提供采样时钟,并读取转换数据 自动循环采集模式下,AD的采样时钟由ADCNTR寄存器控制 FPGA将转换结果自动存入内部的双口RAM进行缓存,当缓存满后,产生中断通知处理器读取,18,AD采样时钟,19,AD地址发生器及其中断产生逻辑,20,4.模块分析,键盘模块 : 功能说明 当16键中的任一按键被按下时,即产生4位键码值,更新键码寄存器,并置位状态寄存器中的按键标志位 键盘的扫描周期为

6、20毫秒,以实现硬件消抖功能,若无按键动作,键码寄存器的值保持不变 当有按键动作,如果中断控制寄存器中的键盘中断允许位置1,则产生中断信号,21,键盘模块,相关寄存器定义 键码寄存器(KEY),8位 中断控制寄存器(ICNTR),16位,中断方式为电平触发,高有效 中断标志寄存器(IFLAG),8位,22,键盘模块,使用方法 中断工作模式操作 设置中断控制寄存器的D0位为1,使能键盘中断; 当有按键时,键盘产生中断; 读取键码寄存器的键码值; 往中断标志寄存器对应的键盘标志位置“1”,清除中断 查询模式操作 读取中断标志寄存器 判断按键标志位是否为1。否,则返回;是,则继续 读取键码寄存器的键

7、码值 往中断标志寄存器对应的键盘标志位置“1”,清除该标志,23,A/D模块,功能说明 A/D模块的精度为12位,输入电压范围为0-2V(DC/AC)。 A/D模块共2路,每路的数据输出为并行12位,2路A/D共用一个32位寄存器存放数据。 相关寄存器定义 使用方法,24,5. 驱动设计,驱动设计总思路: 考虑驱动程序操作的对象。 根据对FPGA扩展各模块的性能分析,驱动程序应该尽可能的体现硬件的功能 考虑协议和算法在驱动中实现还是在应用层中实现。 根据应用程序的需要,在驱动中实现相应的方法。,25,5.1驱动方法概要 (1),设备的方法集中包含了8个方法 : open这个方法在驱动中必须实现

8、,因为应用程序打开设备文件时就就会调用此方法 release这个方法与open是成对出现的,当应用程序调用close关闭设备文件时,就会调用此方法 ioctl 应用程序中必须通过ioctl方法向驱动传递命令字,来通知驱动操作的模块,同时也通过ioctl来通知或改变模块的工作模式。,26,5.1 驱动方法概要(2),read, write 应用程序实质对扩展板的操作是通过这两个函数完成的 poll实现此方法主要目的是满足当应用程序调用select或poll时设备能正确的响应。 fasync实现异步信号通知 select,27,5.2 驱动具体实现要点,注册中断号 中断号与设备所使用的中断引脚息息

9、相关,内核维护中断号 FPGA扩展板以GPIO11作为中断信号线,键盘,拨码开关,ADC共用这一中断信号线 注册中断号前,必须先初始化GPIO11,这里可以通过一个函数完成: GPIO80也必须初始化为nCS4功能管脚 board_irq_handle为中断处理函数,SA_INTERRUPT | SA_SHIRQ用于设置中断的属性,28,模块选择与命令字 当应用程序选择操作扩展板上的模块时,或选择模块的操作模式时,需要通过ioctl传递命令字到驱动,驱动代码如图:,29,阻塞与非阻塞操作 阻塞操作的目的是当应用程序去读写设备时,如果此时设备没有数据流经过,则应用程序会进入睡眠状态,并一直等待数

10、据 令应用程序进入睡眠状态的原因是因为驱动程序里使用了令进程睡眠的函数或宏 以键盘为例,键盘的read驱动如下:,30,31,poll方法分两步完成 第一步,poll方法需要将所有这些可让进程睡眠的事件队列都加入到poll_table结构的链表中 第二步是返回一个用来描述操作是否可以立即无阻塞执行的位掩码,32,Poll方法代码如下:,33,fasync方法 当应用程序修改文件描述符的FASYNC标志(filp-f_flags)时,该方法就会被调用。fasync方法代码如下:,34,中断处理函数 在注册中断号中,使用如下函数: 参数filp用于传递信息给中断处理函数,中断处理函数通过参数dev

11、_id接收 中断处理函数的代码,以键盘为例:,35,36,驱动的加载,1.安装位置 将以上的驱动程序文件放入嵌入式Linux的源代码目录中:driver/char/ 2.修改Makefile 在位于driver/char/目录下的Makefile文件中加入如下语句: obj-$(CONFIG_FPGA) += fpga_board_0.o fpga_board_1.o fpga_board_2.o fpga_board_3.o fpga_board_4.o,37,3.修改菜单文件 修改config.in文件,增加如下语句:,38,4.初始化FPGA扩展板的中断引脚 修改 include/asm

12、-arm/arch-pxa/xsbase255.h,增加以下语句: 修改arch/arm/mach-pxa/xsbase255.c, 增加以下语句:,39,5.编译Linux内核 进入Linux源代码目录中,执行make menuconfig,进入Linux内核配置菜单将FPGA扩展板的驱动加入内核中 进入Character devices菜单 选择“FPGA_BOARD” 编译内核,40,6. 测试程序设计,测试程序(应用程序)可以通过驱动提供的接口函数来操作设备文件结点来控制设备 6.1 设备文件 FPGA扩展板的设备文件为“fpga_board_x” 在应用程序中通过以下指令打开设备文件

13、:,41,6.2 操作命令字,操作命令字是一些符号,通过ioctl系统调用,将这些符号传递到底层驱动程序,告诉驱动程序将要执行的操作 FPGA扩展板上有五个部件:分别是灯,键盘,拨码开关,A/D控制器,D/A控制器,相应的操作对象可以使用对象选择命令字来表示:LED、KEYBOARD、SWBOARD、DAC和ADC,42,如果需要操作扩展板上灯,键盘,拨码开关,可使用以下程序 :,43,select系统调用:是用在访问多个设备文件,但又不想阻塞于任何一个设备文件时使用 异步通知:是应用程序中通过向系统注册一个信号,并且将该信号与某一处理函数相关联,当中断产生时,激发该信号,然后系统调用与该信号

14、相关联的处理函数 FPGA扩展板中只有键盘,拨码开关,A/D控制器才能使用异步通知,当使用异步通知前需要开启中断,44,KEYBOARD对象 KEYBOARD对象命令字 使用方式: 键盘的操作模式有查询和中断方式两种,45,ADC对象 A/D控制器有两个输入通道,并且每个通道的工作模式都有两种选择: 模式一. 即时输入方式 模式二. 自动缓冲采集 采集频率设置,46,板级对象 有一些命令字是针对整个FPGA扩展板的,包括如下:,47,7. GUI程序设计,着重介绍如何为FPGA扩展板设计具有图形用户介面的应用程序 建立回调函数 监控I/O 绘制图形,48,Key&Led 界面,49,DA控制界

15、面,50,AD控制界面,51,完成界面后,还需完成以下工作: 响应ADC发出的中断。 为控件的事件添加回调函数。 绘制图形。,52,建立回调函数 以普通按钮控件为例,在Glade的Properties窗口的Signal下拉菜单中,为按钮的clicked事件添加回调函数,53,监控I/O 这一步我们需要控制AD控制器对外部信号的采集 对ADC的控制方式,这里选择模式二自动缓冲采集 GDK+中包含更加简便的方法来监测IO,54,绘制图形 建立一个pixmap,并且将该pixmap的背景色置为白色,drawingarea1为绘图区域控件,代码如下:,55,思考,思考现代电子设计中,为何很多产品设计中使用ARM处理器和FPGA的组合方式? 总结嵌入式系统开发的流程。 简述设备驱动开发的要点。 简述GUI应用程序设计的要点。,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1