正在加载...

一种基于混合信号技术的汽车电子单芯片设计
相关内容: 单芯片 混合 基于 设计 技术 信号 汽车电子
随着汽车部件电子化程度的不断提高,汽车工程师们正积极地寻求车辆系统中的先进控制和接口技术解决方案。目前,汽车系统中用来嵌入这些功能单元的空间和能源十分有限。汽车工程师们正借助于新颖的高压混合信号技术将复杂的——截至目前还不兼容的元件功能集成到一块芯片上。

  现在,应用与42V车载电压兼容的I3T高电压技术已经可以将复杂的数字电路(如传感器)、嵌入式微处理器以及功率电路(如激励源或开关驱动器)集成到一起。

  LIN总线系统

  由于其相对较低的造价,LIN总线正被广泛应用于汽车的分布式电气控制系统中,如控制电动车窗、调节后视镜和车前灯等部位的步进马达和直流电源,或管理传感器采集到的关于气温或座位位置的信息等。LIN总线的传输字节高达20kbps。基于单主节点、多个从节点的结构,通常,从节点安装在收发器、微控制器、传感器的接口或由分立元件组成的激励驱动器的周围。最近研制出了一种带有LIN总线异步收发装置(UART)的微控制器,这种微控制器可同集成有其它从节点模块(如LIN总线收发器、电压调节器、看门狗定时器、激励驱动器和传感器接口)的附件一起配套使用。目前,AMI半导体(AMIS)公司利用混合信号技术将关键的从节点模块全部集成在了一个功能专一、功耗低、符合标准IP模块的芯片上,将LIN总线的发展又推进了一步。该方案的特点有:

  ●集成RC振荡器,误差≤15%;

  ●专用IP模块(如DC或微型步进马达驱动器);

  ●遵守LIN总线V1.3协议;

  ●传输速率高达20kbps(特殊的结构设计);

  ●低频收发;

  ●睡眠/旁路模式中的低电流损耗;

  ●满足潜在的市场需求。

  AMIS的方案提供了应用层和数据链路层需要的所有主要功能模块。这些功能模块可以用VHDL代码编程、用AMIS开发板评估,下文将对它们作简要的介绍。

  带有数字滤波器的采样模块

  该模块从接收器中采集信号,并将结果数据流通过数字滤波器,以除掉由于LIN总线信号的衰减可能造成的伪传输。因此,该模块提高了LIN协议在恶劣环境中应用的性能,并最大程度上减少了同步和数据采样中的问题。

  同步机

  同步机模块从同步域中提取所需的信息,以决定编码器和解码器的准确采样速率。该模块具有内部晶振,并采用了一种可将传统的UART技术中偶尔发生的舍/入误差减到最小的技术。同步机的主要优点在于能用较低的时钟频率来执行LIN协议。例如,可以使用一个250KHz的主时钟及15%的容差来获得精确无误的通讯。另外,AMIS的方案实现了占空比较大的变化范围。典型的UART在晶振零误差的情况下能实现占空比在33~66%间的变化。然而,运用AMIS解决方案可实现占空比在12~88%间的变化,并能完全适应晶振的误差。在对物理层参数提供了较大容差的同时,也提高了对占空比影响较大的电磁兼容性。

  标识符滤波器及其动态管理

  主节点在系统运行的初始及运行过程中依据需要发布不同的从指令标识符。为此,从节点要包含一定数目的寄存器。ROM指令数阵列指的是从节点中执行的不同指令,在RAM或EEPROM中含有相应的标识符。地址寄存器模块识别同一LIN总线上的不同从节点,而第二ROM阵列是为不同的应用和执行过程识别不同的从节点。标识符滤波器依据分配的标识符以决定指令的执行与否,若标识符存在于队列中,则执行该指令,否则不执行。

  纠错

  错误识别模块处于数据链路层,而纠错却是在应用层执行。因此,由嵌入式微控制器在软件中定义误差量。应用层中的纠错模块包含一个状态寄存器,每一种错误都有一个对应的错误标志位,并由该标志位向微处理器的内核产生一个中断请求。错误标志可通过对状态寄存器执行读操作来清除。每次错误直接中断通讯,从而导致一个位错误以停止发送字节。进而这一帧信息被忽略,从节点等待下一个中断域。

  帧缓冲器

  帧缓冲器是将送给微处理器内核的中断减到最小的另一个途径。它与标识符滤波器配合使用,可将中断的数量减到每帧一次。该缓冲器中含17个字节(一个标识符、八个发送字节、八个接收字节)。

  内核/状态机及应用接口

  根据需要,AMIS可提供不同的内核。内核与LIN控制器间通过中断信号和特殊功能寄存器(SFR)实现连接,LIN控制器可看作是SFR总线上的一个外围器件。除了这些LIN总线特点外,与同类半导体处理技术平台一样,AMIS开发了一个广泛的IP模块库,包括贰⑵和SARADC模块、输出电流可达0.3A的延时触发器及输出电流达3A的H桥。当然,运用从节点只是整个功能中的一部分,通过给它们提供足够功率以将它们集成在当今汽车中是汽车电气工程师的下一个重要挑战。

  42V电源技术方案

  一个理想的汽车电源方案中,电源等级将会从传统的12V电池电压转换成42V电源系统。而在42V系统中,电源等级还将会不断地升高。例如,系统整个寿命周期中的最大工作电压设定在50V,如果存在着8V最大动态过电压,电源电压就会达到58V。增加一个12V的外部驱动负荷泵,将会使系统的电压需求达到70V,再增加一个ESD保护窗,系统电压将达到80V。而且汽车的半导体器件不仅要承受较高的电压,同时还必须具备足够的鲁棒性以满足其苛刻的运行环境,比如,应满足运行温度在-40℃~+200℃范围的需求。到目前为止,承受较高电压和满足苛刻运行条件的需求是42V汽车电子系统应用智能SoC技术的重大障碍。

  AMI半导体的I3T80是一种基于0.35mmCMOS工艺的80V电源智能模块集成技术。满足42V汽车系统恶劣的运行条件。由此技术开发出的设备包括电机控制驱动器、DC-DC变换器、具有带宽滤波器的高精度模拟电路以及ADC和DAC等。而且I3T80能够嵌入集成总计超过150000个门电路,其通信协议模块包括PLL、USB、总线协议控制器、CAN和LIN通信控制器。除此之外,它还提供了ROM和RAM存储器。

  结语

  在新型汽车电子应用中,随着电子部件不断地增加,汽车设计者们正在寻求一种合理的解决方案。这样,高集成度、高可靠性SoC解决方案应运而生。这种解决方案技术要求能够简化执行步骤,减少与不同电子系统之间的控制和接口成本。AMIS的高电压、混合信号技术满足了这种需要。它把半导体解决方案与专用IP模块结合在一起,能够满足任何标准接口通信总线(LIN、CAN)节点应用,同时与42V电压等级方案兼容。

查阅全文... http://dz.28xl.com/10/24548/1.htm
基于WEB的通信电源的远程监控研究与实现
相关内容: 远程监控 通信电源 基于 实现 研究

随着IT技术的发展,带动了各行各业,局域网、广域网和互连网的普遍实施, 多数单位有了自己的网站,各系统也建立了自己的网络。因此,对系统的可靠性要求也提高了。

   传统的UPS电源往往是等到机器出现了故障,不能正常供电,才由值班人员去查找故障所在,这样势必耗费很多宝贵的时间,而且很多场合也是不允许的。随着微 处理器CPU和监控软件的引入,大大增加了UPS的自检功能。多数UPS都配备了自己的监控软件,当UPS故障时,监控软件就可以通过面板上的液晶显示 屏,将故障的部位或器件显示出来,大大节省了时间。

   随着网络技术的普及,用户又向UPS提出了更高的要求:UPS应具有无人值守功能,并且不但具有自检功能,还应具有联网功能,即,不但在网上可以随时观察 UPS的各项运行参数,而且在市电或UPS故障时,可以向服务器、工作站等发出信息,同时也可以打电话、发传真或寻呼等手段通知值班人员。反过来,网络技 术以及信息技术的发展为UPS通信电源的网络化监控提供了可能,而建立在WEB上的纳入工厂整体信息化的远程监控系统,才是未来发展的方向。

   以数据库为中心的监控方案

   传统的监控方法基本上都是以数据库为中心的解决方案,其中的控制网络可以是各种现场总线,也可以是其它工业控制网络,各个控制节点通过它进行通讯,监控机 通过发射电台对电源运行状况进行监测,收集现场信息,经处理后传送给实时数据库服务器;Web服务器根据客户端浏览器发来的HTTP请求,通过服务器扩展 模块,从实时数据库中获取数据,然后传回给客户端浏览器进行显示。可以看出,整个过程都是围绕着实时数据库服务器展开的。这种方法在实际应用中存在许多不 足。例如,相对于监测功能,控制功能的实现比较困难,编程上难度较大,特别是安全性方面如认证、加密。为解决实时性问题,一般采用轮询方式,由客户浏览器 定时刷新网页,而这会导致效率低下,有些系统也采用事件触发方式,利用数据库服务器的触发器功能主动推(push)数据,但它一般要求Web服务器与数据 库服务器位于同一台机器上,不便于系统扩展; 数据库服务器是整个系统的核心,需处理Web服务器与监控机的请求,工作负载很重,有可能成为系统性能瓶颈。这些不足之处随着应用模型的扩大显得越来越明 显,需要新的解决方案。

   WEB监控系统

   基于Web的电源远程监控系统,一般可分为3个子系统:即现场监测与控制子系统;数据存储与转发子系统;客户端接收与命令发送子系统。现场子系统负责采集 各个现场控制节点的运行状况数据,然后传递给中间层子系统;中间层子系统是一个中介系统,由工控机、Web服务器和实时数据库服务器组成。工控机通过电台 发射信号向现场采集数据,Web服务器通过服务器扩展技术如CGI、ISAPI等完成与客户子系统以及现场子系统的交互;客户子系统是用户直接与之交互的 部分,它接收用户的输入,从中间层子系统获取监测数据或向其发送控制命令。

   现场信号采集模块选用研华ADAN4017。研华系列的数据采集模块是一套内置微处理器的智能传感器对计算机接口模块,它们可以通过一套简单的ASCII 格式的命令来控制并可以以RS485通信协议传输数据,它有信号滤波A/D、D/A转换、数据比较以及数字通信功能。模块上没有设置开关来配置参数和定标 矫正,只能接受来自主机的命令,来改变模拟量输入范围、热电偶或热电阻输入。所有模块的配置参数包括I/O地址、通信速率、奇偶校验,校验和高低报警均可 以远程设置。另外看门狗定时器的超强功能可以使系统运行失败时重新启动模块。

   因为RS-486网络具有低噪读传感器方式,所以模块可以放置在靠近噪声源的地方利用ADAM的RS-485接收模块,最多可以连接256个数据采集模块到一个RS-485多点网络上。主机通过RS-232/RS-485转化模块经串口连到485网络上。

   系统中,工控机的功能与前面描述所不同的是它不但与实时数据库服务器进行通信,而且还通过套接字Socket与应用服务器通信,即它将采集到的数据传给数 据库服务器的同时还接收来自应用服务器发出的控制命令。当用户访问系统时,通过浏览器向Web服务器发出HTTP请求,然后ActiveX控件随同 HTML文件下载到客户端并由浏览器解释执行,ActiveX控件与应用服务器建立Socket连接,用户进行监控操作只要通过ActiveX控件的界面 就可以进行了。

   Socket编程

   应用程序之间的数据交换是数据通信的重要问题,在TCP/IP网络环境下的应用程序是通过网络编程界面Socket实现的。Socket通常又称为网络套 接字,利用Socket进行通信有两种方式:第一种是流方式,也称为面向连接的方式。在这种方式下,每一次完整的数据传输都要经过建立连接、使用连接、终 止连接的过程。在数据传输过程中,各数据分组不携带目的地址而且内容相同。TCP协议采用的就是这种方式。第二种是数据报方式,又称为无连接方式。在这种 方式下,每个分组都携带完整的目的地址,各分组在系统中独立传送。无连接服务不能保证分组的先后顺序,不进行分组出错的恢复与重传,不保证传输的可靠性 UDP协议提供无连接的数据报服务。

 

  使用Socket进行网络通信程序设计和其它客户机/服务器模式通信应用程序设计过程一样,客户机程序(进程)发送请求给服务器(进程),服务器进程对客户机的请求作出响应,并产生结果。

  客户/服务器模式在操作过程中采取的是主动请求方式,首先服务器方要先启动,并根据请求提供相应服务。

  服务器方

  1.打开一通信通道并告知本地主机,它愿意在某一公认地址上接收客户请求;

  2.等待客户请求到达该端口;

  3.接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。

  4.返回第二步,等待另一客户请求; 5.关闭服务器。

  ?客户方

  1.打开一通信通道,并连接到服务器所在主机的特定端口;

  2.向服务器发送服务请求报文,等待并接收应答;继续提出请求;

  3.请求结束后关闭通信通道并终止。

  从上面所描述过程可知:

  1.客户与服务器进程的作用是非对称的,因此编码不同。

  2.服务进程一般是先于客户请求而启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。

  微软公司联合其他软硬件厂商开发了Windows下的网络接口-Windows Socket,这样开发人员就可以在Windows下 方便的编写基于图形界面的网络程序。在使用VC进行开发时,可以利用MFC提供的CAsyncSocket类和CSocket类,它们都封装了 Windows Socket API。CAsyncSocket类几乎是一一对应地封装了Windows?Socket?API,该类使得我们可以使用 面向对象的方式进行Socket编程,而且可以非常方便地调用其它MFC对象,CSocket类则提供了一个较高级的Socket支持,它运用了MFC的 序列化类来提供和传输Socket对象,使用这两个不同的类进行开发,各有优缺点。在灵活性方面,CAsyncSocket类接近于直接调用 Windows Socket API,灵活性较大。而CSocket类要求通信的两个程序必须能同时识别MFC序列化协议,灵活性较小。在开发的复杂程 度方面,CAsyncSocket类需要开发者处理各种数据类型,比较复杂。CSocket类则在MFC的序列化类的基础上不需要开发者处理各种数据类 型,所以比较简单。最后在系统资源消耗方面,CAsyncSocket类不需要为每个连接建立各自的连接线程,系统资源消耗的少。而CSocket类则需 要为每个连接建立各自的连接线程,连接数目多时系统资源消耗较多。

  当服务器端与客户端建立起通信时,客户端就可以动态地获得服务器端传送过来的各种信息,而它也可以发送各种控制指令给应用服务器,使之作出相应的处理。最后,由于监控机上运行的监控软件会以日志的方式不断的写入数据库,因此,监控人员有也可以通过网络服务器读取数据库的数据来获得监控软件的运行状况信息。

  安全性问题

  在客户端中,可以对操作对象设置访问权限,同时给操作者分配访问优先级和安全区,当操作者的优先级小于对象的访问优先级或不在对象的访 问安全区内时,该对象为不可访问,即要访问一个有优先级设置的对象,要求先具有访问优先级,而且操作者的操作安全区须在对象的安全区内时,方能访问。操作 者的操作优先级级别从0-999,每个操作者和对象的操作优先级级别只有一个。系统安全区共有64个,用户在进行配置时,每个用户可选择除"无"以外的多 个安全区,即一个用户可有多个安全区权限,每个对象也可有多个安全区权限。除"无"以外的安全区名称可由用户按照自己的需要进行修改,以此来保障系统的安 全运行。在软件运行过程中,优先级大于900的用户还可以配置其他操作者,为他们设置用户名、口令、访问优先级和安全区。只要用户定义了一记录报警和事件 文件,在运行时,用户的登录、注销和对变量的操作等事件都记录在报警事件文件中。

  结论

  现实生活中的一切电子设备离开了电源就无从谈正常工作,尤其在信息化高速发展的今天,停电所带来的经济损失是无法估量的。因此,研究如何提供稳定可靠的电源,是很有经济和现实意义的。

查阅全文... http://dz.28xl.com/10/24542/1.htm
基于AVR的室外太阳能气象站一年工作情况报告
相关内容: 报告 工作情况 气象站 室外 基于 太阳能

去年使用AVR和无线模块作了太阳能供电的室外气象站和信件检查器。至今仍旧工作稳定。下面是它采集到的温度湿度情况,以及自身运作状况。这里已图表做一些分析和总结。

 一年来的日均气温、湿度以及电池最低电压走势图 (点击察看原始尺寸):

图表由家中IHES服务器每天每半个小时一次采集得到,从气温上来说,曲线变化还是很明显的,和以前地理书上的曲线图一致。(有没有觉得今年最高日均气温比去年低了一点...)。湿度变化就没那么有规律了。

最后一张是电池最低电压的走势,可以看出大部分时间靠太阳能电池板的发电电池电压均维持在4V以上(锂电池3.3V-4.2V放电范围)。在今年7月份是下降到了3V左右。这是因为太阳能板出现了老化。我采用的是低价的滴胶工艺的电池板,在日照一定时间后其表面开始出现泛黄和龟裂。最终变得完全不透光。这也验证了太阳能电池板工艺与寿命的说法,滴胶工艺的寿命就在1-2年左右。

在更换了电池板后,一切又恢复正常。目前看来太阳能电池的发电量是足够设备使用的,那么接下来就可以考虑增加新的传感器(如监测风向,降雨量和地震波?)

稳定性方面,该气象站在工作近2年中有过一次大修,主要是更新固件以及更换太阳能电池板。不过在雨雪天气中,会出现偶尔的无线通讯困难。总体来说超出了我的预期:-)

电池功耗方面,该气象站在没有日照条件下,每8小时电压约降低0.2-0.3V。应该说是比较低的,考虑到目前的工作模式是服务期没半小时会通过无线进行数据轮训,发射红外线进行邮件检查等。目前遇到的一个麻烦反而是在白天太阳能发电量过大导致电池过充使得内部的保护电路动作。由于考虑到目前核心电路保存在无日光照射的阴暗处,所以没啥危险性。当然,这也另一个角度说明其实AVR的功耗也可以做的很低,只要有合理的编程控制。并非低功耗就需要使用MSP430。

另外一个有趣的现象是在日照充足的夏季,太阳能电池发电量(效率?)反而不如冬天好。电池最高电压在冬季均能在每日中午达到电池饱和水平,而在夏季每天13:00左右达到的最高峰往往只是4.0V。这一点我这里就暂不解释了,留给大家思考:-)

好了,分享就到这里,如果需要具体的气象采集数据,可以与我联系。

查阅全文... http://dz.28xl.com/12/22840/1.htm
基于CPLD控制的通用视频采集模块
相关内容: CPLD 采集 基于 模块 通用 控制 视频

1. 引言
    对于用于视频图像处理的DSP 来说,由于前端的A/D 采集速度较低,一般为了减少DSP 的开销,在视频采集A/D 和DSP之间接入先进先出存储器(FIFO) 作为缓冲。基于先进先出存储器(FIFO) 的多样性,一般在视频采集与微处理器模块之间很少提供无缝接口。传统的方法是用简单的逻辑电路实现很少一部分接口控制,大多数是通过软件来实现,虽然软件设计灵活性比较大,但是对软件设计者提出很高的要求; 一般来说使用的都是线存的FIFO,这种FIFO 的存储量比较少,会花费CPU 很大的开销。
    本文实现了一种在采集A/D 模块、专用视频FIFO 以及DSP 微处理使用CPLD 作为纯硬件控制的方案。使用这种方案的创新点是首先因为使用的是帧存储器FIFO,存储一帧或者一场视频数据,这样可以大大减轻DSP的开销,提高DSP 的效率,从而更好的提高视频处理的实时性;其次因为接口逻辑比较复杂,一般用软件实现起来比较困难,使用可编程CPLD实现全部的硬件接口逻辑,减少软件设计的难度,减少DSP 的开销。同时可以发挥CPLD 现场可编程的特点,可以像软件一样更改; 最后可以作为一个集成的通用硬件采集模块。
    本文实现的是基于TI TMS320C6x 的DSP的视频采集压缩卡的A/D采集模块以及接口控制模块。在采集模块主要功能是将从CCD 摄像头输入的模拟视频信号转换为数字信号,普通CCD摄像头的输出是NTSC 制式的复合全电视信号CVBS 信号,通过SAA7114H TV解码芯片将模拟TV 信号解码,转换为符合ITU-R BT.601 标准的数字视频信号,并且由CPLD 控制模块将数据存储到专用的视频FIFO芯片,中断DSP 读取数据处理。具体的信号控制见图1.1。
 

2. 模块介绍
2.1. 视频采集模块
    采集模块采用PHILIPS 公司的视频A/D 芯片SAA7114H,该专用视频A/D 具有6 路模拟视频输入,两个模拟预处理通道,并且抗混滤波、梳状滤波都被集成到芯片内部,这样对于硬件设计带来了极大的方便。同时场同步信号IGPV,行同步信号IGPH,有效图像数据输出信号IDQ,时钟输出信号ICLK都有管脚直接引出,这样省去了以往的时钟同步电路的设计,可靠性也有所提高。系统内部锁相环技术的集成使得可靠性和设计复杂度都有极大的降低。SAA7114H 的配置支持I2C,可以通过DSP的通用I/O 口软件模拟I2C总线。
    从图2可以看出整个过程是在ICLK在上升沿触发,在 IDQ 有效的情况下传输的数据有效,数据输出的格式为(下为奇数场的一行数据扫描)
FF00 0080 U0Y0,V0Y1,U1Y2,V1Y3,…………,U319Y638,V320Y639
    其中FF00 和0080 是奇数场标志位。
    当输出IGPH 有效表明为一行数据的扫描,当IGPH无效的情况下,表明数据在回扫。从图3可以看出当IGPV 有效说明是一场数据的扫描,当为无效时,说明为一场数据结束。通过这几个状态信号的输出,以及其它标志信号可以对行数据和场数据同步进行控制。具体见图2.1(信号一行扫描输出状态) 和图2.2(信号一场扫描输出状态)。

 图2.1 信号输出状态( 一行扫描)

图2.2 信号输出状态( 一场扫描) 
2.2. 视频缓冲模块FIFO
    AL422B 是Averlogic 公司的专用视频的FIFO,最大存储为384KX 8bits,同时支持VGA,CCIR,NTSC,PAL 等视频制式,两端独立的读写操作,支持不同速率的读写。根据CCIR.601协议,一场图像数字化后最大的数据量是220KX 16bit,因此,采用的AL422B 足够可以容纳完整的一场视频图像的数据量。采用这种大的FIFO 的设计可以降低DSP 对视频FIFO 读写控制时序的复杂度,使整个视频图像处理流程简捷,同时减少控制信号。

2.3. CPLD控制模块
    该模块的组成主要是一片Altera 公司的CPLD 芯片EPM7128STC100,其主要功能是提供DSP 的EMIF 接口与视频FIFO 相连时所需的一些额外的辅助逻辑(glue logic)。另外一个重要的功能是通过检测SAA7114H 输出的同步信号来生成DSP 中断,通知DSP 读取视频FIFO 中已满的一场图像数据。(视频FIFO AL422B 的容量为384KX 8bits,系统中使用两片并联成16bits的接口宽度,整个视频FIFO可以一次存放一帧的视频数据。)
    CPLD通过SAA7114H的输出状态信号以及TMS320C6x DSP的相应输出控制信号生成FIFOAL422B 的控制信号。具体为:

根据SAA7114H输出的VPO 总线同步信号,控制将输出的数字视频信号写入到FIFO 中。 检查到SAA7114H输出的场同步信号后(表明FIFO 中已经存满一场图像数据),向DSP 发出INT 信号,通知其开始读取FIFO 中的图像数据。同时将FIFO 的写入指针复位到地址0x0000处。 根据SAA7114H 的两个输出信号IGP1 和RTS1,判定当前视频AD输出的视频数据是奇数场还是偶数场,同时发出不同的INT中断来通知DSP。 控制DSP 读取FIFO 中图像数据的读写时序,当读完一场数据后,将FIFO 的读出指针复位到地址0x0000 处。 控制FIFO 的写时钟与读时钟,并且使得写时钟与SAA7114H的输出时钟保持同步,使得读时钟与DSP 的外部分频后的时钟保持同步。
图2.4  FIFO 写时序控制
 
图2.5  FIFO 读时序控制
 
图2.6 CPLD 控制写时序的状态机
    从FIFO的写时序图和读时序可以看到,当/WE和/RE(两者都是低电平有效)为高电平的第一个周期,芯片仍然进行写入和读出操作,而下一个周期才进入挂起状态。同样,当/WE和/RE由高电平变为低电平时,也是要延后一个时钟周期才能发生改变。这种特性造成在设计SAA7114H向FIFO写入时序的时候,需要提前一个周期确定下一个数据是否为有效数据。CPLD程序中通过检测IGP0(配置为SAA7114H I-port端口的Buffer almost empty flag) 来实现这点。利用逻辑分析仪测出整个写入时序为图2.8。
 
    在读控制中主要是产生用于DSP 中断的外部使能,中断DSP 读取FIFO的数据,同时还要通知DSP 读取的是奇数场的数据还是偶数场的数据。FIFO 的读时序图上可以看出如果F_OE 为低电平,这F_RE 变高后(F_OE 和F_RE 都是低电平有效),FIFO 的输出仍然保存原来的值,而不是进入高阻状态。CPLD 控制程序中正是利用这点来实现DSP对FIFO 的读写时序的匹配以及保证DMA 传输在被DSP 中断后不会出错。DSP 的FIFO 的读取采用32 位的异步接口,8个DSP的时钟周期(注意: 采用的是DSP 的主频,不是总线频率ClockOut2) 实现一次对FIFO 的读写。具体设置参考EMIF 总线初始化部分。CPLD通过将F_RE 置高,延长FIFO数据的输出时间来匹配整个DSP 的读取时序。利用逻辑分析仪测得FIFO 的读取时序为图9。
 
    根据整个控制过程的逻辑和相应器件的读写时序,可以将整个FIFO 的控制过程分为写入控制和读出控制两个部分,在写入控制中用了4个有限状态机来实现,它们分别是IDLE,WEN0,WEN1,WEN2。根据状态机的图,采用硬件描述语言VHDL 实现了对CPLD 的逻辑的设计、综合和仿真。逻辑综合采用Synplicit7.2 公司专门针对CPLD/CPLD 的逻辑综合工具。该软件带有Altera公司的综合模块库,可以针对Altera公司的CPLD 器件对逻辑综合后的结果进行优化和改进,其中写状态机综合后的电路原理图为图2.7。
 
    对于逻辑设计的仿真时序验证工作重要采用ALDEC 公司的仿真工具Active-HDL4.2,然后加入综合工具生成的标准时延文件(SDF文件),通过仿真结果的验证,说明CPLD 的逻辑设计是符合FIFO 读写控制模块的功能要求的。最后综合的逻辑结果通过Altera 公司的MAXplus10软件,采用ByteBlaster 电缆下载到CPLD 芯片中。

3. 实验结果:
    图3.1 是采用QCIF(176X 144) 格式的视频图像,压缩编码算法采用M-JPEG2000标准。其中前一幅是无损压缩恢复的结果图,后一幅为有损压缩。相应的压缩编码指标如表3.1 所示。
 

表 3.1 压缩编码指标
图像格式 编码后码率 压缩比 内存占用 耗 时
176X 144   11.9KB/帧 2.074    801KByte 0.05 秒
    从上面表3.1 的结果可以看出,整个压缩系统可以实现对视频图像的压缩编码。压缩后的视频流比较流畅。
    从通过逻辑分析仪测得的时序图(图2.8、图2.9)可以看出,CPLD 实现的FIFO 控制信号满足视频AL422B的时序要求,整个视频数据传输的通路工作正常,基本上达到了系统设计的指标和要求。同时这种方案可以作为一个整体的视频采集模块,在一般的使用DSP 的EMIF 总线的情况下的都可以无需改动就可以作为一个采集模块直接使用,大大简化硬件电路开发的难度。此方案已经在基于DSP 的视频PCI 采集压缩卡中得到了验证,达到了很好的效果。本文的基于CPLD的视频采集通用模块已经在M-JPEG2000的视频采集压缩卡得到了应用。


查阅全文... http://dz.28xl.com/21/20378/1.htm
在Nexar上实现基于RTOS51的嵌入式系统
相关内容: RTOS51 Nexar 嵌入式 基于 实现 系统

案例1:构建基于RTOS51操作系统的嵌入式软件工程
在Nexar中创建基于RTOS的嵌入式系统工程,需要创建一个嵌入式工程,其中包括一个用户配置文件(user.oil),用户设计源文件(*.c,*.h);并在系统配置选项中设定编辑,编译,链接及调试环境参数。当修改用户配置文件(user.oil),系统将会在目标代码中重建RTOS库。完成嵌入式系统工程编译后,TASKING调试器可以利用ORTI协议(OSEK实时接口协议)完成嵌入式系统的实时调试。同时,在Nexar中支持软件的仿真调试功能。

以下我们将结合一个实例来简要介绍一下如何在Nexar上实现一个完整的基于RTOS51的嵌入式系统设计过程。
首先:创建一个新的嵌入式系统工程
1、选择菜单  [menus]File>>New>>Project>>Embedded Project,在工程栏中将会显示新建的嵌入式系统工程名,选择菜单[menus]File>>Save Project,在对话框中修改工程名称,然后Save。在工程栏中选择File View选项,在工程中将会列出所有属于当前工程的文件。注:Structure Editor选项用于编辑工程中文件间的链接关系。
 
图1.1 新创建嵌入式系统工程
 
图1.2工程栏----嵌入式工程
2、在嵌入式系统工程添加用户配置文件(myrtos.oil)及系统控制源代码(mymain.c)。选择菜单[menus]File>>New>>C Source Document 及Text Document;也可以在工程栏中选中嵌入式系统工程名,然后点击鼠标,选择[popups]Add New to Project>>C file 及Text Document。保存文件,重新命名为mymain.c及myrtos.oil。
 
图1.3 工程栏----创建原理图
为了便于演示,在这个嵌入式系统工程中仅涉及到了用户配置文件(myrtos.oil)及系统控制源代码(mymain.c)两个文件。实际上,用户可以根据软件设计的需要添加函数头文件及子程序源代码。在工程建立后,Nexar将自动生成一个 makefile(在本项目中为myrtos.mak),在该文档中包含了嵌入式系统构架规则;在每次重编译时,Nexar将会按照makefile中的设定更新嵌入式工程目标代码。在嵌入式系统工程中RTOS库的建立是通过OIL文件中的参数设定。

其次:编辑系统应用文档
1、 在文档mymain.c中编写用户源代码如下,然后保存;
#include <osek/osek.h>      //OSEK/OSEK.H RTOS51内核系统函数头文件

DeclareTask(task0);         //申明任务0
DeclareTask(task1);         //申明任务1
DeclareTask(task2);         //申明任务2
DeclareEvent(EV0);          //定义事件0
DeclareEvent(EV1);          //定义事件1
DeclareAppMode(Ap1);        //定义任务运行模式

int main(int argc)
{
    (void)argc;               //系统传递参数 argc
    StartOS(Ap1);             //调用系统函数  StartOS()
    return 1;
}

TASK(task0)                   //任务0子程序代码
{
    EventMaskType event;
    ActivateTask(task1);             //调用任务1子程序
    while(1)
    {
       WaitEvent(EV0 | EV1);         //调用系统事件判定函数 WaitEvent()
       GetEvent(task0,&event);       //调用系统事件传递函数GetEvent()
       ClearEvent(event);             //调用系统事件释放函数 ClearEvent()
       if(event & EV0)
       {
          ActivateTask(task2);        //调用任务2子程序

       }
       else if (event & EV1)
       {
          ActivateTask(task1);        //调用任务1子程序
       }
    }
}

TASK(task1)             //任务1子程序代码
{
    SetEvent(task0,EV0);
    TerminateTask();
}

TASK(task2)             //任务2子程序代码
{
    SetEvent(task0,EV1);
    TerminateTask();
}
2、 在文档myrtos.oil中编写用户配置文件,然后保存;
#include <osek/osek.oil>     //OSEK/OSEK.OIL RTOS51内核系统配置文件

CPU myRTOS                                        //构架一个基于RTOS的应用代码myRTOS
{
    OS StdOS                                      //定义一个基于RTOS的操作系统结构StdOS
    {
    /* All debug switches are enabled */
        STATUS             = EXTENDED;          //
        STARTUPHOOK        = FALSE;/*TRUE;*/  //上电自加载函数使能
        ERRORHOOK          = FALSE;             //错误信息函数使能
        SHUTDOWNHOOK       = FALSE;             //关闭函数使能
        PRETASKHOOK        = FALSE;             //预先定义任务调用函数使能
        POSTTASKHOOK       = FALSE;              //已调用任务函数使能
        USEGETSERVICEID    = FALSE;             //用户收发函数调用使能
        USEPARAMETERACCESS = FALSE;            //
        USERESSCHEDULER    = FALSE;             //用户任务调用计划函数使能

    /* tetris does not undergo application resets */
       MULTISTART         = FALSE;               //多任务控制使能
    /* shuts down the system in case of stack overflow */
        STACKMONITOR       = TRUE;              //堆栈监控使能
    /* let us have ORTI information */
       ORTI        = TRUE;           //ORTI协议调用使能(注:运行debug时,需设定为true)
    EVENT    EV0;                                 //定义事件0
    EVENT    EV1;                                 //定义事件1
    APPMODE  Ap1;                                 //定义运行模式
    TASK task0                                    //设定任务0的运行模式
    {
         PRIORITY           =     9;              //优先级设定1-255,越大表示优先级高
         SCHEDULE           =     FULL;          //执行任务计划
         ACTIVATION         =     1;             //激活状态
         AUTOSTART          =     TRUE {APPMODE=Ap1;};    //自动调用,true表示任务系统自动调用功能使能
         EVENT              =     EV0;           //定义任务中运行的事件
         EVENT              =     EV1;
    };
    TASK task1                                    //设定任务1的运行模式
    {
         PRIORITY           =     5;
         SCHEDULE           =     FULL;
         ACTIVATION         =     1;
         AUTOSTART          =     FALSE;
    };
    TASK task2                                    //设定任务2的运行模式
    {
         PRIORITY           =     5;
         SCHEDULE           =     FULL;
         ACTIVATION         =     1;
         AUTOSTART          =     FALSE;
    };
};
3、设定嵌入式系统工程参数:
 在嵌入式系统设计中通过选择工程菜单[menus]Project>>Project Options,打开对话框Options for Embedded Project *.PrjEmb(如图2.1)。在图2.1右上角的设定选项中选择TASKING TSK51x/TSK52x;然后,在处理器域中选择当前嵌入式工程的软核对象(如TSK51A)。在C编译域中存储器模式属性选中variables in XDATA并使能 allow reentrant function功能框。(注:对初学者而言,可以简单的通过将所有功能选项设定为系统默认状态,如图2.1中红色标注部分)。
 
图2.1嵌入式系统参数设定栏
3、 构建用户应用系统:
在系统菜单[menus]Project>>Compile Embedded Project *.PrjEmb命令,或在工程栏中,鼠标右键点击当前嵌入式系统工程名(Embedded_Project1.PrjEmb);OIL文件及RTOS库将会通过系统集成开发环境编译、集成、链接及定位一些动作生成一个*.abs文档。就本演示工程而言,在工程构建完成后,在工程目录下将会出现以下一系列自动生成的文档:
工程通用文件:g_conf.c/g_isrstrame.c/g_conf_types.h/g_conf.h
用户配置文件:orti.txt/flag.h
RTOS库文件:OSEK.lib
工程目标文件:*.abs

4、 调试用户应用系统:
在获得一个由系统构建的嵌入式项目目标文件(*.abs)后,Nexar开发工具将可以提供对嵌入式项目的集成在线调试功能,同时也支持仿真调试功能;
首先打开主程序文档,然后在工程栏中用鼠标右键点击嵌入式项目工程并在弹出的浮动命令条上选择simulate命令,接下来通过选择系统菜单[menus]View>>Workspace Panels>>Embedded>>RTOS命令调出调试信息对话框,从系统菜单中选择[menus]Debug>>RTOS>>Tasks命令,最后按功能键F9,仿真执行嵌入式项目。为了便于观察项目的运行状态,在调试信息对话框中可以添加相应的关键字或在主程序中设定断点,如图2.2。
 
图2.2嵌入式系统调试界面
5、 以下是调试功能键的定义,如图2.3:
a、执行            F9
b、设定断点        F5
c、单步执行        F7
d、单步跨越执行    F8
e、停止调试        Ctr F3
f、调试复位        Ctr F2
g、执行到光标处    Ctr F9
 
图2.3仿真调试功能菜单


查阅全文... http://dz.28xl.com/21/20372/1.htm
基于FPGA的SOC系统中的串口设计
相关内容: FPGA 基于 串口 设计 系统

1 概述
    在基于FPGA的SOC设计中,常使用串口作为通信接口,但直接用FPGA进行串口通信数据的处理是比较繁杂的,特别是直接使用FPGA进行串口通信的协议的解释和数据打包等处理,将会消耗大量的FPGA硬件资源。为简化设计,降低硬件资源开销,可以在FPGA中利用IP核实现的嵌入式微处理器来对串口数据进行处理。
    本文中的设计采用了XILINX的FPGA,可选用的嵌入式微处理器IP核种类繁多,但基于对硬件资源开销最少的考虑,最终选用了Picoblaze。
    嵌入式微处理器PicoBlaze适用于Spartan-II/E、CoolRunner-II和Virtex系列FPGA,运行速度可达到40MIPS以上,提供49个不同的指令,16个寄存器,256个地址端口,1个可屏蔽的中断。其性能超过了传统的8bit微处理器。嵌入式微处理器Picoblaze的功能、原理见参考文献[1]。
    Picoblaze使用灵活,但其缺点是可寻址的存储空间非常有限,因此为满足实际需要本文同时也提出了使用片外SDRAM器件对其存储能力进行扩展的设计方法。

2 串口收发接口设计
2.1串口收发接口硬件设计
    嵌入式微处理器PicoBlaze本身并不具备串行接口,因此必须在FPGA中设计串口接收和发送模块并通过总线结构与Picoblaze连接。
    串口接收和发送模块的设计可采用成熟的IP核。实际设计中采用了XLINX的串口收发IP核,其特点是串口波特率,符号规则都可以灵活地定制,同时具有16字节的接收FIFO和16字节的发送FIFO。串口收发IP核的功能、原理见参考文献[2]。
    使用Picoblaze和串口收发IP核构成的串口收发系统结构见图1。
 
    在设计中,发送模块、接收模块和标志寄存器分别有不同的地址,Picoblaze通过地址端口对串口收发模块进行访问。设计中的标志寄存器,可用于指示发送模块和接收模块中FIFO的状态,Picoblaze通过查询标志寄存器来完成对串口数据的收发控制。

2.2串口收发接口软件设计
·串口发送、接收子程序
    Picoblaze通过对标志寄存器的查询,根据FIFO的状态进行操作。串口发送和接收子程序流程见图2。
 
    Picoblaze的编程,类似于汇编语言。
    串口发送子程序代码如下:
(1)串口接收子程序
receive:
  INPUT s0,uartrxflag ;查询接收FIFO是否非空
  AND s0,01
  AND s0,s0
  JUMP Z,receive ;若FIFO为空时继续查询
  INPUT rxdata,uartrx ;若FIFO非空时读取数据
  RETURN
(2)串口接收子程序
translate:
  INPUT s0,uarttxflag ;查询发送FIFO是否为空
  AND s0,01
  AND s0,s0
  JUMP NZ,translate ;若发送FIFO非空时继续查询
  OUTPUTtxdata,uarttx ;若发送FIFO为空时写入数据
  RETURN
·协议处理子程序
    本文应用中的串口通信,采用应答机制,数据具有一定的帧结构,Picoblaze需要对命令帧进行拆包处理,并根据帧的内容进行相应的操作,然后发送响应帧。

表1 通信数据的命令帧结构
帧头 字长 控制字 数据 校验 帧尾
8bit 16bit 8bit N bit 8bit 8bit


表2 通信数据的响应帧结构
帧头 字长 控制字 数据 校验 帧尾
8bit 16bit 8bit N bit 8bit 8bit

  根据帧格式,Picoblaze对串口数据的处理流程见图3。

     以上的Picoblaze程序流程所处理的数据帧结构是较为简单的,当需要处理复杂的通信协议时可以考虑采用多个Picoblaze并行处理。

3 存储器接口设计
    Picoblaze的优点是资源占用少,使用灵活,但可寻址的地址空间最多为256字节,无法满足对大量通信数据进行存储的需要。因此本文中采用了SDRAM器件来对Picoblaze的存储能力进行扩展。
    SDRAM器件的管脚分为控制信号、地址和数据三类。通常一个SDRAM中包含几个BANK,每个BANK的存储单元是按行和列寻址的。SDRAM的具体特性见参考文献[3]。
    SDRAM在使用时需要专用的控制器来产生满足SDRAM所需的信号。FPGA中SDRAM控制器也有多种IP核可以选用。出于对设计通用性的考虑,本文中采用了一款Altera提供的SDRAM控制器IP核,并增加了必要的设计以满足与Picoblaze的接口要求。SDRAM控制器IP核的功能、原理见参考文献[4]。
    对Picoblaze与SDRAM控制器的接口设计有以下几个出发点:

总线匹配
    Picoblaze为8位处理器,数据线仅8bit,而SDRAM控制器总线宽度与SDRAM相同,可以为8、16或32bit。因此对于SDRAM控制器的数据Picoblaze必须以字节为单位进行处理。 地址控制
    Picoblaze地址线仅8位,无法直接对SDRAM进行寻址。因此Picoblaze对SDRAM的寻址可借鉴先入先出存储器FIFO的设计,即设计专门的地址计数器,通过地址计数器实现对SDRAM的寻址。 时序匹配
    Picoblaze的运行速度不超过40MHz,而SDRAM的工作速度通常大于100MHz。因此为了满足SDRAM的时序要求,要增加必要的缓冲机制。

3.1存储器接口硬件设计
    Picoblaze与SDRAM存储器接口的硬件原理框图见图4。
 
    控制状态机控制的地址计数器为SDRAM控制器提供地址,同时控制状态机还控制输入数据缓冲区和输出数据缓冲区,并且根据Picoblaze的地址端口数据和读/写使能信号产生SDRAM控制器的命令字。
(1)SDRAM初始化
    每次加电或复位后控制状态机执行对SDRAM控制器的初始化操作,设置SDRAM的时间参数和刷新周期等。
(2)数据写入SDRAM
    输出数据缓冲区由16X8bit的FIFO构成,当Picoblaze向输出数据缓冲区写入超过8个字节后,通过"半满"信号使控制状态机进入SDRAM的长度为8的突发写模式,在写入完成后控制状态机将地址计数器增加8,以准备好下一次的写入。
(3)数据读取
    数据读取时Picoblaze首先向控制状态机发送读取请求,控制状态机进入SDRAM的长度为1的突发读模式,并将读取的数据写入输入数据缓冲区,此后Picoblaze再由输入数据缓冲区中读取数据。在读取后,地址计数器做相应的增加,以实现先入先出功能。
    以上的设计方法适用于需要数据连续写入后再连续读取的场合。
    控制状态机状态图见图5。
 
3.2存储器接口软件设计
    由于在SDRAM控制器与Picoblaze之间增加了控制状态机,简化了Picoblaze的程序设计。
(1)数据写入
    数据写入时Picoblaze向输出数据缓冲区直接写入数据即可。
(2)数据读取
    数据读取时Picoblaze首先向控制状态机发出请求,然后等待输入数据缓冲区的数据准备就续后再读取。

4 结论
    本文在XILINX FPGA中采用嵌入式处理器Picoblaze进行SOC设计,以较少的硬件资源实现了对串口通信数据的处理,同时采用SDRAM器件对Picoblaze的存储能力进行扩展。所采用的设计已应用于多个产品中。经过了长期的使用和测试证明文中的设计方法稳定、可靠,并且具有资源占用少,设计灵活的优点。

参考文献
[1]PicoBlaze 8-BitMicrocontroller forVirtex-E and Spartan-II/IIE Devices,Ken Chapman Xilinx Ltd,XAPP213 (v2.1)February 4, 2003
[2]UART Transmistter and Receiver Macros,Ken Chapman Xilinx Ltd,2002,10
[3]MT48LC2M32B2数据手册[R].Micron Technology Inc., 2002
[4]SDR SDRAM Controller white pape,Altera Corporation


查阅全文... http://dz.28xl.com/21/20371/1.htm


正在加载... 正在加载...

正在加载... 正在加载...


相关栏目


热门

参数 技术 方法 电路 设计 故障 应用 基于 传感器 检修 电源 使用 分析 电子 原理 维修 二极管 无线 系统 如何 显示器 检测 采用 数字 晶体管 问题 控制器 控制 verilog 机芯 电容 单片机 实现 及其 分类 推出 保护 技巧 芯片 制作 特性 遥控 解决方案 电阻 彩电 介绍 开关 模块 自动 传输 什么 PROTEUS 特点 智能 功率 温度 电机 检查 控制系统 接口 网络 实例 基本 红外 排除 开关电源 发展 播放器 ModelSim 图像 解析 一体化 工作 整流 稳压 原因分析 变压器 信号 转换器 显示 一个 未来 双向 报警 万用表 常见 继电器 空调 电容器 代换 工程师 光电 手工 降低 效应 概述 集成 车载 高速 函数 调试 布局 测试 绝缘 基础知识 安装 汽车 入门 测量 彩色 程序 变频器 视频监控 电池 总线 原因 通用 语音 安全 行业 机顶盒 调整 处理 基础 电阻器 公司 机电 措施


热门


用360搜索本站内容

励志创业 | 精彩瞬间 | FLASH | 2009年4月4日龙城广场 | 2009坪山协力元旦文艺专题 | 2010坪山协力元旦文艺专题

常用资料| 印刷| 电工| 电子| 工控| 论文| 制冷| 包装| 数控| 菜谱| 短信| 范文| 驾车| 安全| 创业| 笑话| 人生| 故事| 宝宝| 幼儿| 小学| 初中| 高中| 古典文学