硬件实现方法

2024-05-09

硬件实现方法(共7篇)

硬件实现方法 篇1

0引言

实现电信网、广播电视网和互联网的“三网融合”, 达到三网互联互通、资源共享, 对于促进信息和文化产业发展, 提高国民经济和社会信息化水平等都具有重要意义。下一代广播电视网 (Next Generation Broadcast, NGB) 的终极目标是向用户提供高清、标清、数字视音频、高速数据接入和话音等“三网融合”服务, 而如何基于现有有线电视网络进行宽带双向化改造, 提高接入网带宽, 发挥有线电视网频带宽、成本低、易普及的优势, 是NGB建设的关键所在。

新型同轴电缆宽带接入系统HINOC是基于有线电视网带外信道的宽带接入解决方案。在光纤到楼 (Fiber To The Building, FTTB) 逐渐推广的基础上, HINOC利用小区楼道和户内已经敷设、分布广泛的有线电视同轴电缆, 仅通过添加相关调制解调器设备, 而不对线路做任何改造来实现高速数据业务的双向传输, 为最后一百米的宽带接入提供了一种便捷实用的新型解决方案。

在HINOC系统中, 如何合理的设计硬件体系结构, 使其既能达到性能指标, 又能便于低成本的芯片化, 对于后续的工程化开发具有重要的意义。本文将针对HINOC系统的应用场景和功能需求, 提出HINOC系统硬件体系结构, 并对其中主功能模块的实现方案进行介绍, 从而为进一步设备开发打下基础。

1 HINOC系统应用场景及其硬件体系结构

作为一种新型的同轴电缆接入技术, HINOC使用16MHz频带进行以IP为主的数据信号业务传输。图1给出了一个典型HINOC网络解决方案。如图1所示, 只需在楼道的光节点处和屋内用于连网的终端处添加缆桥 (HINOC Bridge, HB) 和缆猫 (HINOC Modem, HM) , 即可将原有的有线电视信号与采用HINOC技术调制转换后的以太网数据信号进行混合传输, 从而实现基于有线电视同轴网络的IP包传输, 达到单用户最高100Mbps以上的高速数据传输。

HINOC网络协议栈为分层结构, 如图2所示, 自下而上依次为PHY层 (HIPHY) 、MAC层 (HIMAC) 和高层。MAC层又可分为公共部分子层 (CPS) 和汇聚子层 (CS) , 实现HINOC网络中的媒质接入控制和业务适配功能, 其中CPS实现MAC层的接入控制和信道分配等核心功能, CS实现MAC层核心功能与高层功能的适配。PHY层规定了传输信号的帧结构、信道编码以及调制技术。

根据HINOC系统的应用场景, 由于其主要支持以太网类型业务, 其系统实现可以采用如图3所示的硬件体系结构。其不同部分的功能分析如下:

1.介质访问控制 (Media Access Control, MAC) 部分:MAC部分主要有两个对外接口, 主机控制接口 (Host interface) 与以太网的物理层接口 (Ethernet MII接口) 。对于主机控制接口, MAC部分需要执行上层控制端传递的控制信息, 实现HINOC系统的终端自动上线配置、远程配置、全网管理、QoS保证、优先级设定、流量管理、组播与广播控制等功能[1]。而对于以太网的MII接口, MAC部分需要完成数据从以太网帧格式到HINOC所规定帧格式的转换, 即实现以太网帧与HIMAC (HINOC-MAC) 帧之间的解包和打包。此外, 由于业务的需要, 在MAC部分还需要对以太网数据流进行相应的处理, 比如实现IGMP/MLD/DHCP分组的重定向, 区分不同数据业务流的优先级, 实现VLAN TAG的添加、删除和修改, 实现COS/TOS的修改, 根据黑白名单控制分组的转发和丢弃等等。

2.物理层 (PHY) 部分:物理层部分的主要功能是完成从逻辑上HIMAC帧格式到同轴电缆上实际可以传输信号的转换。它采用正交幅度调制 (QAM) , 并根据同轴电缆不同的噪声、衰减、反射等情况自适应地使用QPSK到1024QAM的调制格式。为了避免由于多径效应引起的码间串扰问题, 提高信道的利用率, 在物理层部分选用正交频分复用 (OFDM) 技术传输数据。同时在纠错码方面, 物理层采用高编码效率、低实现复杂度的 (508, 472) 和 (504, 432) BCH截短码。所以物理层可以在16MHz的信道带宽上实现最高100Mb/s的物理层传输速率, 其有效带宽的频率利用率可达到7bit/s/Hz[2]。

3.时钟生成 (Clock generation) 部分:时钟生成部分主要负责给各个功能模块提供时钟, 其中由于MAC部分和物理层部分用到的时钟不尽相同, 特别是CPU使用的频率较高, 所以可以使用锁相环 (PLL) 输入的低频信号倍频。

4.模拟前端 (Analog front-end, AFE) 部分:AFE部分的主要功能是实现数字信号与模拟信号之间的转换以及线路上模拟信号的发送和接收。其中由于物理层需要完成最高1024QAM的调制, 所以对于ADC和DAC的位数精度要求较高。同时为了适应同轴电缆网络不同衰减特性, AFE部分必须能够提供可控增益的大功率驱动发送和高增益接收。

5.切换开关、低通滤波器及混频器 (Switch+LPF+混频器) :由于一般同轴电缆是单线接入, 且HINOC系统采用TDMA方式通信, 所以一个收发切换开关被放置于AFE的前端实现收发控制。为了减少发射端对线路上其他频段的干扰、滤除接收时不必要的带外噪声, 输入输出口需要使用一个低通滤波器。此外, 系统还需要加入混频器将发射或接收的信号调整到合适的频段。

从以上的模块划分和功能分析中, 可以看出由MAC和PHY组成的主功能模块在HINOC系统的体系结构中占有非常重要的地位。下面将着重分析主功能模块的具体实现方案。

2 HINOC SOC的一种低成本实现方案

如图4所示, 目前HINOC系统主功能模块的实现方案为低性能CPU+硬件协处理器 (HIMAC) +物理层。为了降低对CPU处理能力的要求, 在具体实现中将MAC层功能较为确定的部分剥离出来, 采用硬核的形式进行固化, 形成硬件协处理器, 这样MAC部分的功能由低性能CPU和硬件协处理器来共同完成。在此实现方案中, 以太网帧的打包和解包采用固化EMAC处理器来协助完成。对于以太网数据的流分类、流过滤、流标记、QoS等方面的需求, 都利用一个流分类模块处理, 其规则表可以通过CPU配置以达到灵活处理。由于大量的以太网数据从硬件协处理器流过, 而CPU仅仅处理简单的信令信息和实现功能配置, 该方案使得HINOC系统对于CPU处理能力的要求就大大降低了。同时由于硬件协处理器是可以固化的, 它对于HINOC系统的低成本实现是很有好处的。

在物理层功能控制方面, CPU可以通过硬件协处理器的总线仲裁模块读写物理层的接口区域, 从而实现对物理层相应功能的配置和控制。CPU与物理层之间的接口采用同步静态RAM时序, 通过对物理层接口中三大区域 (数据区、参数区和控制寄存器区) 的配置, CPU可以调节物理层各个相关参数并控制物理层执行相应的收发动作。与此同时CPU还需要完成节点的接纳和链路维护、信道预约与分配、分组调度算法等工作。

根据HINOC系统物理层的性能指标以及物理层与MAC层交互的需求, 对HINOC系统物理层的硬件总体设计框架如图5所示。

HINOC系统的物理层可分成4大模块:

1.HIPHY-HIMAC接口:HIPHY-HIMAC接口负责实现HINOC系统中物理层和MAC层之间信息的交互, 包括收发的HIMAC帧缓冲数据、信道估计参数、控制指令等。本模块采用静态同步RAM时序设计, 将MAC层侧看做CPU的外设RAM, 便于CPU的控制。

2.HINOC发射机:发射机负责将接口发送数据RAM区的HIMAC帧数据转换为同轴电缆线路上可以传输的HINOC信号。主要功能包括前向纠错编码、信道参数的预均衡、OFDM调制、加同步头组帧等等, 最后调制完成的HINOC信号通过DAC转换成模拟信号发送出去。

3.HINOC接收机:接收机负责将ADC采样接收的同轴电缆HINOC信号解调成HIMAC帧并存储到接口接收数据RAM区。其主要功能包括信道参数估计 (包括信道时偏、频偏、信道响应等性能参数) 、OFDM解调、接收数据的信道均衡、前向纠错解码等等。

4.HINOC总控模块:总控模块负责控制HINOC系统物理层的整体工作流程, 其中包括系统时钟的维护、HIMAC收发控制指令的解析、射频模拟端的收发切换控制、对MAC中断反馈维护等。

3结论

本文针对HINOC系统的典型应用场景, 分析了其系统实现的硬件体系结构和各个部分的功能。对于HINOC系统中的主功能模块, 详细介绍了一种采用低性能CPU+硬件协处理器+物理层的实现方案, 并对各个部分的结构和功能进行了介绍。基于CPU+硬件协处理器来实现MAC部分的方案, 由于其将原有MAC部分可以固化的功能硬件化, 从而大大降低了对于CPU的要求, 可以低成本的实现原有MAC功能。通过各个部分的详细介绍可知, MAC层的设计能够到达媒质接入控制和业务适配技术方案及对物理层的规划控制的要求, 物理层硬件结构设计能够很好的达到HINOC物理层传输模式技术方案以及与MAC层交互的要求, 这为后一步的工程化实现打下了坚实的基础, 采用本文介绍硬件体系结构和SOC实现方案对于未来的HINOC系统实现是较为合适的。

参考文献

[1]崔竞飞等.自主创新的同轴电缆双向接入技术HINOC.世界宽带网络, 2010 (6) :60-64.

[2]国家广播电影电视总局广播科学研究院, 北京大学, 西安电子科技大学.高性能同轴电缆接入网 (HINOC) 物理层传输模式及媒质接入控制协议 (面向NGB电缆接入技术的建议方案) .2010.

[3]北京大学信息科学技术学院HINOC项目组.HIPHY HIMAC Interface and Programming Guideline V4.17.2010 (10) .

硬件实现方法 篇2

在个人PC终端、嵌入式系统,尤其是服务器上,基于硬件实现的各种计算资源应用越来越广泛,典型的如高速的密码运算模块、高速的数据压缩等处理模块。这些基于硬件实现的各种运算处理模块极大地加速了上层应用的数据处理能力,尤其是在服务器端,能够缓解由于大量的并发服务连接所带来的运算压力。在并发的环境下,如何让各应用高效公平地使用底层的硬件资源是我们关注的焦点,因此高效的硬件资源调度方法就成为了关键,而针对多阶段调用硬件资源的调度尤其是一个较难处理的问题。

所谓多阶段调用,是指应用对硬件资源的一次使用需要分为多个阶段,而各个阶段必须顺序地不被打断地完成,典型的例子就是对硬件实现的hash算法的调用;应用需要把待处理的数据分块多阶段的送入运算模块处理,在每个阶段,应用都需要和底层硬件进行交互,在此期间,运算模块无法处理其它应用的运算请求。整个调用过程如图1所示。

1 方法描述

针对多阶段调用类型的硬件资源,一般的调度方法有两类。

一类是把调度做在内核层,由硬件驱动来完成资源的调度,通过内核锁的机制来控制应用对资源的竞争[1]。在应用调用硬件的第一阶段就锁住硬件,在应用调用的最后一个阶段结束时解锁,这样其它应用就可以继续争抢锁来使用硬件资源。这个方法看似不错,但是容易出现死锁的情况,比如有一个应用在调用硬件的多个阶段中,在其中的某一个阶段意外终止了,比如程序出错而崩溃,或者被人为的中止,比如管理员中止了相关进程;而此时对硬件的调用还没有到最后一个阶段,也就是说此时的内核锁还没有解开。这样之后的其它应用都将无法获得这个内核锁而出现死等的情况。尽管也有人提出超时等待后自动获得锁,以及增加调用计数等方法,但都无法从根本解决并发竞争的问题。

另一类方法是把调度做在上层,比如做在上层的动态库里[2],这样的话,锁机制实现在应用层,即使有应用崩溃,那么这个锁也可以做到随之消失,而不影响后来应用的调用,也能满足同进程里各线程间的竞争问题。但是这类方法的问题也很多。比如动态库都是每进程空间私有的,也就是说在动态库里实现的锁机制不能很好的控制进程间的竞争,而且效率比内核锁低,处理起来比较麻烦。另外由于相互不熟悉的人,可能对各自的应用、对同样的硬件开发各自不同的动态库,这样由于双方使用的不是同一个库,这样就无法使用锁的机制来做同步。归根结底还是做控制的层次太高的原因。

通过对上面两类方法的分析可以发现,它们均有不能处理的情况,而这些情况在实际应用中是不可避免会出现的。因此,本文提出一种新的基于内核模式的调度方法,来完美地解决这一问题。

本文提出的方法依然是要基于内核模式,在驱动层来做调度,因为只有这样,做到底层,才能实现完全的控制,所有对硬件的调用请求最终都归口到这里。通过前面的分析可以发现,这个调度问题的难点在于,如果程序意外退出,则没有一种有效的机制来解锁硬件,而本文的方法利用操作系统自身的进程维护机制,再加上对象标记跟踪的方法解决了这个问题。

本文描述方法的核心在于以下两点:一是可以找到一种方法来标识当前正在使用硬件的对象;二是在对象意外消亡时,可以找到有效的方法来补救性地完成该对象对硬件资源的占用释放。本文方法的一般性描述如下:

应用对象在第一阶段调用硬件时候获得锁,同时内核驱动对该对象进行标定。

应用对象继续后续的数据处理工作。

应用对象在最后一个阶段调用硬件结束时,释放锁,同时内核驱动解除对该对象的标定。

在硬件设备句柄被关闭时,内核驱动检查发起这个关闭请求的应用对象是否被标定过,如果是,则解除标定并释放内核锁,否则直接进行后续的事务操作。

下面分别以最为常见的Linux操作系统和Windows操作系统为例来具体描述本文方法的细节,并给出依赖于操作系统的具体实现。

2 Linux操作系统下的算法实现

在Linux操作系统下,应用通过驱动来调用硬件时,都是先要打开设备获得设备句柄之后,才能进一步通过设备句柄来和硬件进行交互,在全部工作完成之后,应用会通过close()调用关闭设备句柄,这样就断开了和设备的连接;即使应用忘记了关闭设备句柄,或者说因为意外终止而无法完成设备句柄的关闭动作,操作系统也会在进程结束时进行相应的善后处理,关闭进程打开的所有句柄。也就是说驱动程序的open和release函数是始终会被成对调用的。同时我们也注意到,在驱动程序的open、release、read、write、ioctl等函数接口中,始终都会带有一个struct file * 类型的指针,它就对应于上层应用打开的设备句柄,而struct file结构体里有一个字段void* private_data,也就是说是一个私有域字段,在初始化时被置成NULL[3,4],可以为硬件驱动自由使用,这样驱动就可以使用这个字段来记录需要的信息,比如本句柄对应的上层应用是否正在占用相关的硬件资源。

算法1

(1) 应用打开设备,在驱动中置file-> private_data为free;

(2) 应用在第一阶段调用硬件时候,在内核驱动里争抢锁;

(3) 获得锁之后,在驱动中file-> private_data=busy; 应用进行后续的调用和数据处理;

(4) 应用在最后一阶段调用硬件结束的时候,在驱动中释放锁,并且file-> private_data= free;

(5) 设备句柄关闭时,驱动检查file-> private_data,如果是busy,则首先解锁,并进行驱动内部的资源善后处理,否则直接进行资源善后处理。

通过上面的算法描述可以看出,如果应用正常使用硬件结束,则内核锁会在第(4)步里解锁;如果应用异常退出,则操作系统会代替应用关闭设备句柄,这样在第(5)步,设备驱动就可以安全的解锁硬件资源,之后其它应用依然可以正常的使用。

3 Windows操作系统下的算法实现

在Windows操作系统上,虽然其内核实现机制和Linux下有较大差别,但是也可以使用类似的方法来实现本文描述的方法机制,下面描述一种具体的实现方法。

在Windows操作系统上,程序异常退出时,系统内核也会为该进程进行相关善后处理工作,包括内存的释放,句柄关闭等[5],同样在关闭句柄的时候,设备驱动会得到通知,来释放相应的资源和进行善后。这样在同进程内使用同一设备句柄的前提下(一般来说都是这种情况,在动态库层内部使用同一设备句柄,向应用层屏蔽底层实现细节),本文提出的调度方法可实现如下。

算法2

(1) 应用打开设备,获得句柄;

(2) 应用在第一阶段调用硬件时候,在内核驱动里争抢锁;

(3) 获得锁之后,在驱动中userid=CurrentProcessId; 应用进行后续的调用和数据处理;

(4) 应用在最后一阶段调用硬件结束的时候,在驱动中userid置0并释放锁;

(5) 设备句柄关闭的时候,驱动检查 userid,如果是CurrentProcessId,则userid置0,释放锁,并进行驱动内部的资源善后处理,否则直接进行资源善后处理。

4 试验测试

本文在Linux Red hat 5.5,内核版本2.6.18下,以及Windows XP SP2下面,对一款PCIE硬件hash加速卡进行了调度算法试验。应用对加速卡的调用分为多个阶段,一个Hash_init初始化阶段, 多个Hash_update数据处理阶段,一个Hash_final取数据结果阶段,应用场景符合本文描述的多阶段调用模式。试验首先验证了在正常的硬件使用流程下,调度算法的有效性,这是一个基本测试;然后通过人为加入程序错误等方式来模拟应用异常中止,包括程序在某个Hash_update之后立即退出,在程序中加入除0错误、非法地址访问错误、堆栈溢出等来导致程序异常退出; 以及用户主动终止进程等方式;通过在内核设备驱动中加入调试打印信息来观察调度算法的行为,以验证算法有效性。通过试验验证也表明,本文描述的方法,在上述两类操作系统下的具体实现,均能高效和正确地处理各种调度情况,达到了预期的设计目标。

5 结 语

本文提出一种针对多阶段调用的硬件资源调度方法。通过对硬件使用对象的跟踪标识、以及对象意外消亡后的补救处理技术,正确高效地解决了对多阶段调用的硬件资源的竞争使用问题,尤其是对上层调用者意外退出运行的情况给出了有效的处理方法,保证了后续调用者能继续正常使用硬件资源,整个调度逻辑也能继续正常运转。本文还给出了Linux和Windows这两类不同的操作系统环境下的具体实现细节,并分别进行了试验验证,通过试验也表明,本文提出的调度方法的两个具体实例化算法,能够高效和正确地处理各种调度情况,证明了算法的有效性。

参考文献

[1]Walter Oney.Programming the Microsoft Windows Dirver Model,Sec-ond Edition[M].Redmond,Washington:Microsoft Press,2002.

[2]Jeffrey Richter.Windows核心编程[M].王建华,译.北京:机械工业出版社,2000.

[3]Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman.Linux De-vice Drivers[M].O'Reilly Media,2005.

[4]宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2008.

硬件实现方法 篇3

直线光栅化是计算机图形学中的基本操作,许多复杂图形的边缘均可以由有限数目的直线来近似,直线光栅化的速度在一定意义上决定了显示芯片系统的性能。

Bresenham画线法采用增量技术,只需计算加法和整数操作,运算速度快,易于硬件实现。

本文介绍的简单直线绘制硬件加速引擎采用Bresenham画线法,并将二维平面八等分后,将任意方向的直线光栅化操作,统一为简单的实现过程。该实现简化了硬件实现结构,提高了硬件加速性能。

1 Bresenham算法

为叙述清楚,规定:如果直线斜率绝对值大于1则称该直线位于Xb象限,否则位于Xa象限(X指根据x,y正负所划分的4个象限)。二维平面划分,如错误,未找到引用源。

Bresenham算法流程(以1a象限内起点(x1,y1),终点(x2,y2)直线为例):

(1)画点(x1,y1),dx=x2-x1,dy=y2-y1,误差初值p1=2dy-dx,i=1。

(2)xi+1=xi+1,if(pi>0)yi+1=yi+1;esle yi+1=yi

(3)画点(xi+1,yi+1)。

(4)if(pi>0)pi+1=pi+2dy-dx;elsepi+1=pi+2dy

(5)i=i+1。

(6)if(i<dx+1)转2else toend。

可以看到Bresenham算法不计算斜率,只用整数,只做加减法。

2 加速引擎框图

直线光栅化加速引擎的工作机理简述如下:首先,直线预处理模块根据对称性,将任意直线映射到1a象限内的参考直线;其次,直线光栅化模块按照Bresenham算法对参考直线进行绘制;最后,直线后处理模块根据对称性,将参考直线映射为原始直线。

图2为ISE8.1 XST综合出的加速引擎框图,表1为接口信息。左上模块为直线预处理模块;右上模块为直线后处理模块;左下模块为直线光栅化模块;右下模块为完成信号生成模块。

2.1 直线预处理模块

该模块将平面各方向原始直线经过平移、对称操作转换为1a象限参考直线。对应关系总结如表2所示:

原始直线转换为参考直线的Verilog代码(仅以第三象限为例说明):

AREA3a:

begin

rxend <= XBEG-XEND;

ryend <= YBEG-YEND;

end

AREA3b:

begin

rxend <= YBEG-YEND;

ryend <= XBEG-XEND;

end

其中XBEG,YBEG,XEND,YEND分别是原始直线的起点、终点坐标;rxend,yend是对应的参考直线的终点坐标,起点坐标固定为原点。

2.2 直线光栅化模块

该模块对1a象限参考直线进行光栅化操作。其状态数据通道图如图3(矩形框表示状态,圆角矩形表示数据通道所作操作)所示。start为操作开始信号,高有效;p为误差值,其正负来决定下一个点的位置;x,y为当前像素点的坐标;当光栅化过程完成后,使用ready信号,进入idle状态,等待下一次操作开始。

2.3 直线后处理模块

该模块根据原始直线所在象限将直线绘制模块输出的参考直线的点转换为原始直线的对应点。这样参考直线绘制完成后,原始直线也在同一时间绘制完成。其转换总结如表3所示。

2.4 完成信号生成模块

上述三个模块操作完成后各有一个完成信号输出。该模块根据三个完成信号产生整体模块的完成信号输出。

3 实验结果

该硬件加速引擎经过Synplicity Verilog Compiler, version 3.1.0综合后得出如下时序和资源报告。如表4,表5所示。

为验证该引擎工作在100MHz下没有时序错误及输出信号正确。本文在modelsim下进行后仿真得出如图4波形(以绘制起点(1,1)终点(4,4)直线为例)。可以看到复位后ready有效,当接收到start信号后一个周期ready无效,表明该引擎处于忙状态;当最后一个点绘制完成后一个周期,ready信号有效,表明该引擎处于空闲状态,可进行新的绘制操作。其中en信号为当前输出数据有效信号,高电平时候表示输出数据有效。

为测试硬件加速引擎的正确性,给定给定八个方向(代表任意方向)直线进行绘制。将绘制的直线输出输出到.ppm格式的图形文件中。绘制结果如图5所示。可以看到该引擎可正确绘制给定的任意方向的直线。

4 结束语

直线光栅化的速度对显示加速芯片的性能有很大影响,如何快速绘制直线是设计显示芯片时重要的考虑因素。本文基于Bresenham算法,通过将二维平面八等分,任意直线的光栅化过程统一到一个特定区域。该加速引擎硬件结构简单,光栅化速度可以达到100MHz以上,配置灵活且耗费资源少。

摘要:直线光栅化在图形绘制过程中占有很大比例,直线光栅化的速度也在很大程度上影响着显示芯片的加速性能。文中基于Bresenham算法,实现了单像素直线的光栅化。将二维平面八等分后,任意直线的光栅化根据对称性映射到一个固定区域进行,简化了硬件结构,提高了加速性能。基于FPGA平台(Xilinx的Virtex2pXC2VP30),该光栅化系统稳定运行在100MHz。

关键词:Bresenham,FPGA,对称性,直线光栅化

参考文献

[1]BresenhamJ E.Alinear algorithmfor incremental digital display of circular arcs[J].Communications of ACM,1977,20(2):100-106.

[2]Donald Hearn,MPauline Baker.Computer Graphics[M].C Version,2nd Ed.NewYork:Prentice Hall,1997:84-94.

硬件实现方法 篇4

1 系统主机组成 (如图1)

在这个系统中, 家用无线路由器模块实现和以太网的连接, 采用Linux作为操作系统, 因此可以开发多个基于Linux操作系统的应用软件;感应及控制驱动单元用来接收感应设备 (门窗磁、燃气报警感应器等) 传来的信号, 或者驱动控制设备 (接收无线指令而动作的灯泡、电饭锅等) 动作。

采用家用的无线路由器模块还有一个额外好处是:可以外接无线网络摄像机, 从而实现远程视频监控, 极大的扩展了智能家居主机的应用范围。

2 家用无线路由器模块的组成 (如图2)

RTL-8196C是一款Realtek公司生产的高度集成的So C芯片。内嵌高性能的32位RISC处理器、以太网和WLAN控制器。RTL-8192CE是一个支持802.11/b/g/n标准的WLAN单芯片控制器。两片LSP5502芯片分别输出3.3V和1.0V供电电压。

3 感应及控制驱动单元的组成及功能

单片机采用的是STC12LE32S2, 它是一个低成本的51系列单片机, 该单片机通过RS232串口和家用无线路由模块通信。433M无线接收模块承担接收、变频、解调无线控制信号的功能, 将解调后的信号送给单片机进行解码, 433M无线发射模块将控制信号进行调制后, 变成433MHz的无线信号发射出去。电源芯片AMS1117-3.3V, 将5V电源降压变成3.3V后提供给单片机使用。

整个系统的设计分为硬件部分和软件部分, 本文只涉及到硬件实现部分, 至于软件部分也已经实现了, 但是由于篇幅和主题的关系, 没有详细说明, 感兴趣的读者可以参看笔者的其他文章。

摘要:本文介绍了采用家用无线路由器配合感应及控制驱动单元实现低成本智能家居控制主机的方法。本文详细介绍了其硬件实现方法。

硬件实现方法 篇5

中频模拟信号经过A/D采样后将数字信号送入FPGA进行基带数字信号处理,在FPGA和DSP内完成数字下变频、捕获、码跟踪、载波跟踪等过程,最终实现卫星信号的解扩解调。在实际应用中,需要设计多个通道对多颗卫星同时进行跟踪,才能获得解算结果。

1 硬件设计

硬件平台用FPGA芯片和DSP芯片作为主处理器,主处理器之间可以互相通信。经过AD采样后的信号直接进入FPGA,此后所有对信号的处理均由软件来实现。如此可以充分利用FPGA和DSP的重复烧写及在线调试能力,尽量减少对其他硬件的依赖程度,从而增加了平台的灵活性。另外,每片DSP都外接了Flash和SDRAM。由于Flash掉电数据不会丢失,可以在Flash内保存程序及数据,而外接的SDRAM是DSP的扩展Ram,当DSP运行大型程序以致DSP的内部Ram不够用时,可以将程序放到外接的SDRAM内运行。

2 软件设计

信号处理模块框图如图1所示,捕获模块和通道的跟踪环路占用FPGA和DSP。整个跟踪环路包括五个部分:FPGA内的下变频模块,通道模块,通道控制器和DSP接口模块,以及DSP内的码环、载波环。

AD采样后的信号首先进入数字下变频模块,下变频输出的基带I/Q信号直接进入捕获模块和各个通道(跟踪模块)。各个通道的数据通过DSP接口被送到DSP, DSP和FPGA之间的数据传输通过中断的方式来完成。DSP完成鉴频鉴相及滤波运算后将结果反馈回FPGA。图中各个通道通过通道控制器共用一个捕获模块。

3 多通道设计

多通道的设计总体包括两个部分:多通道的控制和各个通道数据的传输。一种简单的多通道控制方法就是采用多个并行通道的设计,各个通道有各自独立和完全一样的功能模块,包括捕获模块,这种并行结构的设计不需要额外的通道控制逻辑,各个通道独立工作,不受干扰,尤其在捕获时各个通道可以同时工作,减少捕获时间。但是这种方法需要很大的硬件资源,尤其是在捕获算法很复杂时,捕获模块的资源占用最大。因此,在硬件资源有限的条件下,这种方法资源分配的不合理性使得实现这种结构不实际。在实际设计时,由于捕获模块需要占用整个FPGA的资源,因此只能采用捕获模块共享的结构,如图1所示,各个通道通过一个通道控制器共用捕获模块。这种结构下,各个通道的捕获是串行的方式,因此捕获时间为并行结构的N倍。

4 中断处理设计

由于跟踪环路的鉴频鉴相算法都是在DSP内运行,因此FPGA需要将通道的累加值及时发送到DSP, DSP运算结束后又需要及时将结果反馈回FPGA,这个过程需要用中断的方式来实现。传统的中断处理方法分为独立请求法、菊花链法和软件轮询法3种。独立请求法的方式给每个设备一个中断请求线,当有几个设备同时请求时,经判优逻辑选择一个优先级最高的中断请求,并形成对应的中断向量,通过数据总线送到处理器。菊花链法和软件轮询法都只需要一个中断请求线,处理器检测到中断请求信号后,根据优先级,分别通过硬件和软件的方法来选择中断请求设备。本课题选用的DSP处理器只有4个外部中断,而FPGA共有多个通道。因此,给每个通道分配一个中断请求线的方法不可行。另外,多个通道的数据到达时间间隔虽然固定,但是各个通道之间的数据到达时间并没有固定关系。综合考虑,本课题采用每个通道在积分累加结束后将累加值存入对应的相关峰值寄存器,DSP每隔时间T响应中断,并读取多个通道的相关峰值,运算结束后依次写入FPGA内的反馈寄存器。相关峰值寄存器的更新率和中断速率相同,但是两者并不同步;另外12个通道的数据更新也不同步。这里相关峰值寄存器组有类似双口Ram的功能,所不同的是该寄存器组的所有寄存器可以同时写入数据。

5 结论

可以根据实际来增加或删减通道达到相应的功能需要,用此种方法可以同时多通道稳定跟踪卫星信号,为后续的解算提供稳定的数据。

摘要:在设计卫星导航接收机时, 需要同时对多颗卫星实时跟踪才能获得最终的导航结果, 这就要求对每颗卫星都要有一个处理通道。本文提出了一种在FPGA和DSP的硬件开发平台上设计多通道跟踪环路的方法, 以及设计中断控制器来实现FPGA和DSP数据交互接口, 从而实现卫星信号的跟踪。

关键词:多通道,卫星信号,跟踪,中断

参考文献

[1]袁建平, 罗建军, 等.卫星导航原理与应用[M].中国宇航出版社, 2003.

[2]杨小牛, 楼才义, 徐建良.软件无线电原理与应用[M].电子工业出版社, 2001.

[3]王忠.高动态GPS接收机的设计.航天电子对抗.

[4]田明坤.高动态GPS接收机的一种设计方案[J].遥控遥测.

[5]刘基余.GPS卫星导航定位原理与方法[M].科学出版社, 2003.

[6]董在望.通信电路原理[M].高等教育出版社, 2003.

[7]郑君里, 杨为理.信号与系统[M].高等教育出版社, 2001.

硬件实现方法 篇6

1 电弧炉硬件仿真平台组成

仿真平台主要由4部分组成:波形发生电路,功率放大电路,仿真变压器电路和检测环节。系统组成框图如图1所示。其中波形发生电路,功率放大电路和检测环节从工业电弧炉炉体的输入/输出特性上来模拟。仿真变压器部分从工业电弧炉供电系统的结构及相关参数上来模拟。

2 波形发生电路

波形发生电路模拟的是工业电弧炉炉体本身。电弧炉模型有很多种,有时域、频域、电压-电流模型等[5,6,7]。本文采用电压-电流模型来模拟电弧炉的输入/输出特性。工业电弧炉电极电压的幅值与电弧弧长成正比,且工业电弧炉电弧电压波形有一个典型的形状,如图2所示。

因此,波形发生电路模拟电弧炉炉体要从两个方面来进行:波形发生电路要能输出图2所示的典型电压波形,频率为50 Hz。输出的电压波形幅值与输入弧长信号大小成正比。

2.1 硬件设计

波形发生电路的硬件设计以单片机为核心。在此所选取的芯片为STC12C5A60S2(含片内A/D模块)[8]。此款芯片性能好,工作稳定,而且比使用片外A/D成本降低1 2。单片机输入端接直流信号,在实验中利用一个电位器来调节输入电压大小;输出端接DAC0832,将数字电压信号转化为模拟电流信号。DAC0832后接运放电路,将电流信号转换为双极性电压信号,即为电弧炉典型电压波形。电路原理图如图3所示。

2.2 软件设计

由于工业电弧炉工作电压频率为50 Hz,因此该仿真电路输出的电压波形频率也应为50 Hz,即周期为20 ms。将一个周期的电压波形按横轴即时间轴等分50份,即主程序定时器设置为400µs。单片机每过400µs输出一个数值,即可满足波形的完整性。程序采用C语言编写,主程序流程图如图4所示。

3 功率放大电路

波形发生电路的输出为-5~5 V的电压信号,驱动能力很弱,而设计的单片机与仿真变压器之间的电流为2 A左右,仿真变压器端电压输出为20 V,因此波形发生电路必须通过功率放大电路的驱动,才能与仿真变压器端连接。

功率放大电路的设计以高性能音频功放芯片LM3886为核心。该芯片±35 V电源供电,8Ω负载时平均输出功率可达到50 W,峰值功率最大可达到135 W。而要求功放的输出电压为20 V,电流为2 A左右,因此该芯片可以满足需要。电路设计方案采用芯片手册上的典型应用电路[9]。通过调节输入端电位器RIN的大小可以调整电路的放大倍数。

4 仿真变压器电路

仿真变压器电路从系统结构及器件参数方面模拟工业电弧炉的供电系统。工业电弧炉供电系统主要由配电变压器部分和电弧炉变压器部分组成。以西安唐都钢厂3吨电弧炉供电系统为例[10]:配电变压器容量为6 300 k VA,110 k V变11 k V,11 k V侧总的等效阻抗为(0.407 07+j3.575 76)Ω。电弧炉变压器容量为1 800 k VA,11 k V变220 V,220 V侧总的等效阻抗为(2.195 6+j12.937)mΩ。

仿真变压器电路的设计参照唐都钢厂3吨电弧炉实例。仿真配电变压器容量选择120 VA,220 V变60 V,副边接0.4Ω电阻,10 m H电抗器,总的阻抗Z1=(0.4+j3.14)Ω,与工业电弧炉配电变压器副边阻抗保持时间常数一致。仿真电弧炉变压器容量选择120 VA,60 V变20 V,副边接2Ω电阻,30 m H电抗器,总的阻抗Z2=(2+j9.42)Ω,与工业电弧炉变压器副边阻抗保持时间常数一致[11]。

由系统框图图1可以看出,Z2一端接功率放大电路的输出端,为20 V交流电;另一端接仿真电弧炉变压器副边,也为20 V交流电。因此流过Z2的电流即电弧电流也为交流。经计算,该电流有效值为2.08 A。

5 检测环节

由于工业电弧炉电弧电压与电弧电流是同相位的,即电弧的对外特性表现为纯阻性。所以我们还增加了电流互感器检测环节。电流互感器变比为10 A/10 m A,可将大电流转换为小电流。电流互感器检测经过Z2的电流,输出电流为毫安级,然后接1 kΩ的电阻将电流转化为电压信号送给波形发生电路中的硬件中断电路,硬件中断电路输出接单片机的INT0。当硬件中断环节检测到电流过零点时,会给单片机中断信号,单片机此时开始产生电压波形。这样,就保证了电弧电压与电弧电流的同相位,与工业电弧炉电弧的纯阻性特性保持一致。

6 实验结果与分析

经过调试,在实验室测得波形如图5,图6所示。示波器型号为Tektronix TDS 1002。

由图5可以看出,仿真平台输出的电弧炉电压波形与工业电弧炉典型电压波形形状基本一致。示波器测得波形发生电路输出电压波形(放大前)幅值为5 V,放大后波形幅值为20 V,且频率都为49.8 Hz,接近所要求的50 Hz。波形发生电路输出的电压波形并可通过输入端电位器在0~5 V之间连续可调。由图6可以看出,电弧电压与电流同相位,即电弧为纯阻性。

综合实验结果可以看出,本仿真平台可以产生出与工业电弧炉典型电压波形基本一致的波形;产生出的电压波形幅值连续可调,频率满足要求;仿真电弧电流波形与电压波形同相位,达到了我们的预期目标。此外,本硬件仿真平台运行稳定,精度较高,成本低,因此可以作为研究电弧炉电极控制策略的一个可靠平台。

参考文献

[1]刘世瑞,吴文平.电弧炉电极升降自动调节系统简介[J].中国科技信息,2011(14):120-121.

[2]管萍,李明辉,刘小河,等.电弧炉的反步自适应模糊控制[J].控制工程,2012(4):221-224.

[3]黄亮,赵辉.BP神经网络模糊控制在电弧炉电极调节系统中的实现[J].电气自动化,2010,32(3):18-20.

[4]BHONSLE D C,KELKAR R B.Simulation of electric arc fur nace characteristics for voltage flicker study using Matlab[C]//2011 International Conference on Recent Advancements inElectrical,Electronics and Control Engineering.Sivakasi:[s.n.],2011:174-181.

[5]顾建军,李凯,郑永征.交流电弧炉系统建模与仿真研究[J].冶金动力,2010(2):1-3.

[6]王琰,毛志忠,李妍,等.交流电弧炉供电系统建模及耦合关系仿真研究[J].系统仿真学报,2010,22(4):841-844.

[7]池伟,李恺伦,查蕾,等.基于能量平衡的电弧炉模型的仿真与参数辨识[J].机电工程,2012,29(4):454-457.

[8]丁向荣.STC系列增强型8051单片机原理与应用[M].北京:电子工业出版社,2011.

[9]National Semiconductor.LM3886 OvertureTM audio power ampli fier series[EB/OL].[2013-03-10].http://www.wenku.baidu.com.

[10]刘小河.电弧炉电气系统的模型、谐波分析及电极调节系统自适应控制的研究[D].西安:西安理工大学,2000.

网络传输中CRC的硬件实现 篇7

CRC的应用范围非常广泛, 研究CRC的硬件实现具有代表意义。

一、CRC原理的介绍

CRC的原理就是通过对初始数据进行运算, 产生一个固定长度的数据附加在初始数据后面构成新的数据, 这个新的数据和初始数据的关系就是运算。也就是说, 对新的数据进行校验运算, 可以判定数据的传输过程有没有发生错误。具体运算过程如下。

设初始数据为P (X) , 是一个n阶多项式, 表示为:

P (X)  = an-1xn-1+ an-2xn-2 + ··· + a1x + a0

式中ai为0或1, x为2。比如一个8位的二进制数1001_1101可以表示为:

P (X)  = 1x7 + 0x6 + 0x5 + 1x4 +1x3 + 1x2 +0x1 + 1x0

P (X) 通过除以CRC多项式G (X) 后, 得到一个余数R (X) 和商Q (X) , 这个R (X) 就是我们需要的CRC校验值, 用公式表示如下

P (X)  = Q (X)  * G (X)  + R (X) [2]

最后, 将Xk* P (X)  + R (X) 作为信息码M (X) 发送出去。K为G (X) 多项式的最高位减1。

接收方收到信息后, 做如下处理:

计算M (X) /G (X) , 如果传输正确, 应有M (X)  = Xk* P (X)  +R (X) , 即M (X) /G (X)  = R (X) 表示除尽。如果传输有错, 则M (X) /G (X) , 余数不为0。

理论的具体实现需要考虑几个问题:

首先, 这里所说的除法就是二进制的模二加 (或称为逻辑的异或) , 是不需要考虑进位或借位的。

其次, 虽然G (X) 的数据位是固定的, 但是P (X) 的数据位是未知的, 而我们总是希望能够生成固定长度的校验值, 这样才方便硬件的实现。分析得出, 主要是防止P (X) 的位数比G (X) 短, 解决的办法就是将P (X) 的位数加长, 传统的做法是在P (X) 后添加相应的CRC位数 (具体应该是CRC多项式最高位减1, 因为CRC多项式最高位可以忽略) 。即:CRC-5在运算时在初始数据后面增加5位的0;CRC-16在运算时在初始数据后面增加16位的0。

第三, CRC的最高位固定为1, 所以计算时可以不考虑最高位。

第四, 尚不需要, 因此不列入考虑范围。

二、CRC实现

在网络传输循环冗余校验 (CRC) 用来在令牌和数据包中保护所有的非PID字段, 检测传输是否发生错误。其中包括两种类型的CRC校验:5位CRC校验和16位CRC校验。令牌包采用5位CRC校验, 数据包采用16位CRC校验。5位CRC校验采用的生成多项式为:G (X)  = x5 + x2 + 1, 如果数据准确无误地接收到, 接收机中的5位余数应该是01100。16位CRC校验使用的生成多项式是:G (x)  = x16 + x15 + x2 + 1, 接收机中正确的余数是1000000000001101[1]。

为什么数据校验过程产生的余数不是0呢?这是由网络传输协议中的CRC原理得到的。网络传输协议为了保护包的最高位为0的数据传输, 为接收或发送的数据包都加上了一个与CRC位数相同的但各位全1的种子。另外, 如果是对发送的数据产生CRC, 则在运算结束后, 将产生的余数各位取反, 加到传输的数据的结尾。为什么要取反呢?这次是为了保护数据结尾为0的数据[1], 因为按位取反相当于加上一个全1的数。这种方式对于CRC-5和CRC-16同时有效。

以CRC-5为例来介绍整个运算过程。假设一个和CRC-5位数相同的全1的种子是I5:

I5 = 1*24 + 1*23 + 1*22 + 1*21 + 1*20

P11是11位要保护的数据;

G (X)  = x5 + x2 + 1是生成多项式;

R5是余式;

C16是16位包含了CRC5的数据。

在传输时, 运算如下:

R5 =  (I5*211 + P11*25) /G (X)              (1)

C16 = P11*25 + R5 + I5                     (2)

式 (2) 中加上一个I5相当于是对R5按位取反。

接收方接收到数据对数据进行同样的运算, 但此时的数据已经是16位了, 所以运算原理相同, 但过程稍有不同:

(I5*216 + C16*25)  mod G (X)  是否为余项01100。

如果是01100则说明传输正确, 否则传输有误。为什么, 证明如下:

(I5*216 + C16*25)  mod G (X)

=  (I5*216+ ( P11*25 + R5 + I5)  *25)  mod G (X)

=  ( (I5*211 + P11*25 + R5) *25 + I5*25)  mod G (X)

=  (I5*211 + P11*25 + R5) *25 mod G (X)  + I5*25 mod G (X)   (3)

由于 (I5*211 + P11*25 + R5) 是G (X) 的整数倍, 所以 (I5*211 + P11*25 + R5) *25 mod G (X) 一定为0, 即余数为0。

所以对式 (3) 的化简结果应为:I5*25 mod G (X) 。

而I5*25为 (1111100000) 2 , G (X) 为 (100101) 2 。

通过模2计算, 可知结果应为 (01100) 2 。

同理可证CRC-16的余项为1000000000001101。

三、网络传输中的串行CRC算法

对于CRC的产生和校验, 在开始时发生器和检验器里的移位寄存器置成全l。对于每个被发送或者接收的数据位。当前余项的最高一位和数据位进行异或, 然后余项左移1位。并且最低1位置零。如果异或的结果是1, 余项要与生成多项式作异或。当要检查字段的最后1位被发送的时候, 发生器里的CRC按位变反, 再以最高位在前的方式发给检验器。当检验器收到CRC的最后1位, 且不发生错误的时候。余项将等于发送多项式的剩余。如果最后计算出的结果和余项不匹配, 则存在CRC误差[3]。

四、网络传输中的串行CRC校验的设计与实现

通常CRC校验可以通过线性反馈移位寄存器 (LFSRs) 来实现。因此, 串行5位CRC校验可以采用一个5位移位寄存器、几个异或门和一条反馈回路实现。根据网络传输协议中的规定, 移位寄存器初始值置为全“1”, 输入的串行数据比特先与移位寄存器的最高位进行异或, 然后移位寄存器左移一位, 并把右边的最低位置为“0”。如果前面异或结果为“1”, 则把移位寄存器和G (X) :00101进行异或, 异或的结果作为新的寄存器值;如果为“0”, 则不需要这步操作。由于X ^ 0=X, 因此无论是否要与生成多项式的比特模型进行异或, 除了第2位和第0位之外, 移位寄存器的其余3位始终保持不变[4]。

同理对应CRC-16, 只有第0位、第2位和第15位有变化, 巧合的是前两位与CRC-5的变化模式一样, 所以可以将两者的生成与校验混为一体。具体对应的硬件描述语言如下:

证明上述代码的正确性之前, 首先要清楚, 硬件描述语言的各个模块是并行的。所有模块都在不停的运转。下面证明CRC-5校验算法的正确性。

上述代码的核心是第4个模块, 根据其它模块可以得出, 如果是对CRC-5进行校验, 则Ip Data为Rx Bit, Feedback Data为Shift Reg[4], 并且我们只关心移位寄存器的低5位。因为从校验模块可以看出只要Shift Reg[4:0] == 5'h0C, 就输出CRCGood =1。将第4个模块简化如下:

从原理中可知, 只有第0位和第2位需要变化, 其它位就是每过一个周期就移一位。

原理中:首先, 输入的串行数据比特先与移位寄存器的最高位进行异或, 表达式就是Rx Bit^ Shift Reg[4]。

异或之后左移寄存器, 最低位补0。

1. 如果该式为0, 则移位寄存器不变, 而我们这里没有对该位进行判断, 为什么?

因为Shift Reg[0] <= Rx Bit^ Shift Reg[4]满足最低位为0 (该式运算结果就为0) ;

Shift Reg[2] <= Shift Reg[1] ^  (Rx Bit^ Shift Reg[4])  =Shift Reg[1]^ 0 = Shift Reg[1];也不变

2. 如果该式为1, 则移位寄存器与G (X) 异或, 即最低位的0和1异或, 结果为1,

而Shift Reg[0] <= Rx Bit^ Shift Reg[4]为1, 说明该式正确;

第2位与1异或,

Shift Reg[2] <= Shift Reg[1] ^  (Rx Bit^ Shift Reg[4])  = Shift Reg[1]^ 1, 满足原理的要求。

使用SILOS工具 (Simucad Inc.) 进行仿真, 输入串行比特流:1010_1000_1111_0111, 该数据的低5位为前面11位的校验码。仿真波形如图1所示:

由图中可以看出, 从第一个数据输入开始, 经过16个周期数据接收完毕, 之后CRCGood信号在时钟上升沿跳变为1, 表示CRC校验成功。

其它证明以此类推, 可以得出CRC-5的生成与CRC-16的生成与校验都满足协议的要求。

五、结论

本文使用Verilog描述的CRC代码非常短小精悍, 比软件实现更方便, 并且硬件电路的实时性优于软件实现。硬件描述语言在大规模IC (集成电路) 芯片的实现过程中是不可或缺的。由于我国IC发展的滞后, 导致硬件描述语言的发展也相对落后。不过, 现在可以在一些大规模的FPGA上使用硬件描述语言进行编程, 推动了硬件描述语言的发展。掌握硬件描述语言不仅需要大量的实践, 还要对数字电路有很深的了解。本文以网络传输物理层中CRC电路为实例说明了硬件描述语言的一种分析方法——即算法、实际的数字电路和程序三者相结合的方法。本文描述的是一个CRC的串行实现, 该电路须与接收发送数据的时钟相一致。根据本文提供的分析方法结合文献[3]、[4]不难推导出并行电路。

摘要:讨论了串行计算循环冗余校验码 (CRC) 的原理, 并给出了对应的硬件实现。

关键词:CRC,网络传输,Verilog HDL

参考文献

[1]Universal Serial Bus Specification[/OL].Revision 1.1.http://www.usb.org.

[2]循环冗余校验 (CRC) 原理与实现[/OL].http://www.430diy.com

[3]程军, 陈贵灿, 姜飞.USB数据传输中CRC校验码的并行算法实现[J].微电子学与计算机, 2003, 20 (3) :77-80.

上一篇:播音腔下一篇:一条龙