FPGA核心控制板

2024-08-11

FPGA核心控制板(精选7篇)

FPGA核心控制板 篇1

1 引言

电磁干扰 (EMI) 是指任何可能引起装置、设备、传输通道或系统的性能降低的电磁现象[1]。在具有控制器[2]的电子产品设计中, 应充分考虑并满足抗电磁干扰性的要求, 避免在产品成型后再进行一系列的验证测试或采取抗电磁干扰的补救措施。FPGA核心控制板的PCB抗EMI设计的优劣直接影响电路的性能。本文从分析FPGA控制板存在的电磁干扰问题入手, 对控制板的PCB进行有效的抗电磁干扰设计, 提高控制系统抗EMI干扰效果。

2 FPGA控制板与电磁干扰问题

设计一种教学与科研应用的FPGA核心控制板, 由主控芯片FPGA、电源电路、时钟电路、下载接口电路、SRAM存储器与I/O引出接口等部分组成。主控芯片FPGA采用Altera公司的Cyclone III系列EP3C120F780I7N。FPGA核心控制板系统组成如图1所示。

对FPGA控制系统进行分析, 主要存在的电磁干扰问题有:

(1) 控制板需+5V、+3.3V与+1.2V等多个工作电源, 易产生电源噪声干扰;

(2) 控制系统复杂, PCB布线密度大, 信号之间容易产生空间辐射耦合与串扰;

(3) 敏感信号如50MHz时钟信号、下载时钟信号容易受干扰;

(4) 控制板作为核心板, 与其它功能模块集成存在电磁兼容问题。因此, 需对FPGA控制板采取必要的抗电磁干扰措施。

3 FPGA控制板抗电磁干扰设计

3.1 FPGA控制板层叠设计

电路板的板层设计是整个FPGA控制板PCB设计的首要环节, 合理的PCB叠层设计, 可以有效地抑制电磁干扰辐射。PCB叠层设计应当遵从以下两个规则[3]:

(1) 每个走线层必须有一个邻近的参考层 (电源层或地层) ;

(2) 邻近的电源层与地层要保持最小间距, 以提供较大的耦合电容。

FPGA控制板的器件密度与布线密度大、电源种类多, 并考虑PCB板制造成本与信号完整性等因素, 拟采用4层板, 板层布置为:S (信号层) —G (接地层) —P (电源层) —S (信号层) , 如图2所示。地层与电源层相邻, 两个近距离平面形成电容, 具有去耦和抑制共模噪声信号的EMI辐射, 减小板层间的阻抗, 提高电源系统的供电性能。信号层采用地层和电源层隔开, 增加信号层间的厚度, 有利于吸收和抑制信号辐射, 使信号间串扰最小, 抗EMI效果最佳。

3.2 防串扰设计

随着FPGA控制系统复杂性与布线密度的增加, 对PCB布线设计提出更高要求。PCB上信号线间的“串扰”主要来自两相邻导体所形成的互感与互容[3], 串扰会随着PCB印制线密度增加而越显严重。为消除串扰带来的影响, 不同板层信号线采用相互垂直或斜交的布线, 对50MHz时钟信号线CLK采用“蛇形”走线, 进行信号延时调整, 保证信号完整性。FPGA核心控制板PCB交叉布线与时钟走线如图3所示。

3.3 电源抗EMI设计

FPGA核心控制板接入可提供1A或以上的+5V外部直流电源, 由LDO芯片LT1117将+5V转换成FPGA芯片EP3C120F780I7N所需的+3.3V VCCIO端口电源与+1.2V VCCINT内核电源。在设计电源层时, 采用内电层分割的方法满足多种电源的要求, 使电流平稳, 减少环路电阻, 提高PCB的抗EMI能力。FPGA核心控制板的电源分割平面如图4所示。

为了减少电源系统的耦合噪声[4], FPGA核心控制板从去耦与滤波电容的布局、数量和容值进行优化设计, 减小高频电流流动的环路面积, 提高电源抗EMI性能。具体设计为:

(1) 将电容布置在靠近电源输入引脚和FPGA芯片电源引脚处, 使电容与芯片电源引脚连线最短, 去耦电容和芯片之间的电流环路所包围的面积最小, 电源的滤波与去耦效果最佳。

(2) FPGA芯片的每一个电源引脚分别连接一个单独的去耦电容, 走线要短。

(3) 电源输入接口连接容值为10u F~100u F电解滤波电容, 以获取稳定的电源信号, FPGA电源引脚连接容值为0.01u F与0.1u F的陶瓷耦合陶瓷, 滤去电源高频噪声。

3.4 敏感信号与敷铜屏蔽处理

针对PCB中某些敏感信号易受干扰的问题, 比如时钟线的长度、时钟线与其它信号线的间距有特殊要求[5]。加大平行信号线的间距或利用地线分离敏感信号线可减少容性串扰。地线对信号有很好的屏蔽效果, 因此, 将敏感信号布置在顶层 (信号层) , 利用地线 (GND) 将下载接口时钟线 (TCK) 包围, 使其封装在独立的空间, 使得时钟线 (TCK) 不受其它信号线的干扰, 提高程序下载功能的稳定性。图5为FPGA控制板的下载接口时钟信号线的抗EMI处理方法。

敷铜是将PCB上闲置的空间作为基准面, 用固体铜填充。大面积敷铜接地, 可以加大电流与电磁屏蔽的作用[6]。设计时将控制板顶层与底层敷铜, 敷铜时将信号线与铜箔的距离设定在28mil以上, 否则容易引起短路。FPGA控制板采用大面积敷铜屏蔽干扰, 减少地线阻抗和环路面积, 提高PCB板的抗电磁干扰能力。

4 PCB板制作实现

在Altium Designer环境下设计完成FPGA控制板的PCB后, 输出Gerber光绘文件交付给PCB制作厂家, 制作完成后的FPGA控制板的PCB如图6所示。FPGA控制板的线路通断测试结果表明, 未发现有短路现象。

5 结语

本文对高速数字FPGA控制板的PCB板层结构、布线、去耦、电源、接地与敷铜等方面进行抗EMI设计, 有效抑制与消除线路中的电磁干扰。实现了FPGA控制板的PCB板实物制作, 相比PCB板制作完成后再采取抗EMI措施, 具有更好的稳定性、可靠性与经济性。该FPGA控制板已应用于四川交通职业技术学院PCB设计与实践课程的实际教学中, 具有一定教学与科研价值。

参考文献

[1]朱兴华.印制电路板设计与工艺对信号完整性的影响[J].印制电路板信息, 2012 (1) :21-23.

[2]冉江.印刷电路板电磁兼容仿真及优化设计[J].数字技术与应用, 2013 (9) :155-156.

[3]黄智伟.印制电路板 (PCB) 设计技术与实践[M].北京:电子工业出版社, 2013.

[4]林修杰.剖析减少电磁干扰的PCB设计原则[J].电子技术.2015 (10) :34-37.

[5]高媛, 宋捷.SDRAM接口时序和PCB布线长度的分析[J].电子产品世界, 2011 (9) :47-50.

[6]韩洁琼, 曾碧, 等.四层电路板的PCB设计[J].单片机与嵌入式系统应用, 2006 (8) :11-14.

FPGA核心控制板 篇2

高级综合工具对两种类型的潜在用户非常有用, 一是正在实现高强度数字信号处理 (DSP) 应用的FPGA用户, 二是正在实现高强度数字信号处理 (DSP) 应用的高性能DSP处理器用户。这是因为信号处理工作负载非常繁重, 通常需要较高的数据速率和高级并行处理能力, 这种需求往往适合采用HLST的FPGA来实现。

对目前的FPGA用户来说, HLST工具有望简化并加速设计进程。而对目前的DSP处理器用户而言, HLST则提供了一种独特且相当富有吸引力的作用, 无需编写RTL代码就能移植到更强大的处理引擎FPGA上。

过去的高级综合工具都不能生成高效的RTL代码 (就资源使用率而言) 。大多数工程师都不愿牺牲手编的RTL代码的性能和效率, 因此这种工具未能赢得较大市场份额。不过, 最近出现的一些新鲜事例显示, 面向赛灵思FPGA的新型HLST工具其效率和易用性都非常高。在这种情况下, 潜在用户要如何去评判高级综合工具是否有使用价值呢?

为了回答这一问题, 独立基准测试与分析公司BDTI于2009年制定了BDTI高级综合工具认证计划。其目标是为FPGA的HLST提供客观可信的数据与分析, 确保潜在用户能快速了解其在高强度信号处理应用中的功能及局限性。评估时站在没有FPGA开发经验但却具有丰富DSP软件开发经验的工程师角度, 这也反映了大量潜在受益于HLST的处理器用户的实际情况。

最初进行评估的两个HLST程序是Synfora的PICO和AutoESL的AutoPilot。2010年初, BDTI发布了首次评估测试计划的结果, 其中的一些结果让许多FPGA和DSP处理器用户都感到吃惊。

采用HLST实现应用

采用HLST实现测试应用的步骤是, 先对所需功能进行高级语言描述, 高级综合工具由此生成RTL实现。随后赛灵思的RTL工具 (集成综合环境 (ISE) 和嵌入式开发套件 (EDK) ) 将RTL实现转化为比特流形式的完整FPGA实现, 用于对带有I/O和存储器的特定硬件平台上的特定赛灵思FPGA进行编程。本案例中使用的平台为赛灵思的XtremeDSPTM视频入门套件———Spartan誖-3A DSP版本, 这是一款基于Spartan-3A DSP FPGA的目标设计平台。

该评估本可以仅限于高级综合工具, 忽略设计流程中的“RTL到比特流”部分的评估, 但评估者认为, 潜在用户应该了解从高级应用描述转变到FPGA实现的整个流程情况, 而这项工作需要RTL工具以及高级综合工具, 因此还是应对整个实现流程进行评估, 不只是“C到RTL”部分, 还包含赛灵思RTL工具链。

在任何硬件目标上实现应用的第一步通常都是重建初始C代码。这里所说的“重建”是指重新编写初始的C代码 (初始的代码主要是为了让代码变得更清晰, 便于了解, 而不是出于性能考虑) , 将其转变为更适合于目标处理引擎的格式 (例如在DSP处理器上重新安排应用的控制流程, 确保中间数据始终适应高速缓存要求) 。就面向FPGA的高级综合工具而言, 重建通常要提供应用表示法, 确保工具能提取潜在的并行性, 从而优化流水线实现。

一般而言, 高级综合工具都不能自动进行重建, 而是需要手工重建。事实上, 设计人员可以不借助高级综合工具来进行重建。例如, 在评估中使用Microsoft Visual Studio重建并验证C代码。相对于重建和语言翻译作为统一步骤出现的手编RTL代码而言, 完全用C语言进行重建相对比较简单, 出错的可能性也少, 这是高级综合工具的一大优势。

重建高级代码后, 用户让HLST综合生成RTL HDL代码所指定功能的硬件实现。赛灵思的RTL工具 (ISE和EDK) 采用HLST生成的RTL代码, 执行综合和布局布线任务, 报告实现的资源利用率, 并通知用户各种时序问题。

BDTI的工具认证计划

BDTI制定高级综合工具认证计划的目标就是进行两大关键点对比, 以满足两类潜在HLST用户的需求。首先, 希望比较基于HLST的FPGA应用实现和基于手编RTL代码实现的效率, 这一信息对目前正在考虑是否要采用HLST加速开发时间的FPGA用户而言至关重要 (就资源使用率而言) 。其次, 希望对用面向FPGA的HLST与用DSP处理器及相关软件开发工具实行同一工作负载时的性能与难度比较。这一对比可帮助DSP处理器用户估算出将技术移植到FPGA设计方案上的难度有多大。

用明确定义的样本应用 (即“工作负载”) 评估高级综合工具流程 (包括相关的RTL工具) 。上述应用 (下一节将做简要说明) 主要代表设计人员通常在FPGA上实现的高强度数字信号处理应用, 对数据速率和计算强度均要求高。其他类型的应用产生的结果与这里给出的结果可能会有所不同。

用不同方法实现这两种应用。首先, 将高级综合工具与赛灵思RTL工具结合使用, 在目标FPGA上实现给定的工作负载。随后, 采用传统的RTL设计方法, 或者用DSP处理器配合其相关开发工具 (取决于具体的工作负载) , 在相同的FPGA上实现相同的工作负载。这样就能比较出采用不同工具与芯片组合实现的应用的结果质量与生产力。

评估工作负载

用于评估目的的两个应用是BDTI Optical Flow Workload和BDTIDQPSK Receiver Workload。

“光流法”是指一种分析场景中对象运动和对象特性 (如边缘) 的视频处理算法。BDTI Optical Flow Workload操作720 p分辨率 (1 280×720逐行扫描) 的输入视频序列并生成一系列双维矩阵, 确定序列中的水平及垂直运动。在设计工作负载时集成了动态数据依赖性决策和阵列索引, 从而确保为工具提供严格的测试。

BDTI Optical Flow Workload涉及两个操作点, 每个操作点都使用相同的算法, 但针对不同的标准优化。操作点1是固定工作负载, 定义为60帧/s的720 p分辨率处理视频。其目的就是最大限度地减少实现指定分辨率所需的资源利用率 (资源利用率指的是实现工作负载所需资源占可用处理引擎资源的比例) 。

与此同时, 操作点2的目的则是用所有可用资源来最大限度地提高吞吐量 (以每秒帧数为单位) 。

第二个工作负载BDTI DQPSK Receiver Workload为无线通信接收器基带应用, 其中包含许多无线收发器中的传统通信模块。这是一种固定工作负载, 只有一个操作点来处理输入流, 输入流为复数调制数据, 速率为18.75 MS/s, 接收器链的时钟速率为75 MHz。接收器可生成4.687 5 Mb/s的解调输出比特流。该工作负载的目的是最大限度地减少实现指定吞吐量所需的FPGA资源的使用。

对不同工作负载而言, 存储器的使用与存储器的带宽要求差异较大。BDTI DSPSK Receiver Workload只需使用最小的存储器 (因此无需外部存储芯片) , 而BDTI Optical Flow Workload则需要存储4个视频帧 (每帧1 280×720像素) 的历史记录, 因此需要外部存储芯片来配合Spartan-3A DSP FPGA。Optical Flow Workload操作点1需要单一外部存储芯片与接口 (带宽约为每秒450 MB) , 而Optical Flow Workload操作点2通常需要两个外部存储芯片与接口, 其带宽之和约为1.4 Gb/s。

就BDTI Optical Flow Workload而言, 在典型的FPGA实现中, 操作点1每个时钟循环处理一个像素, 而操作点2每个时钟循环处理2个像素。BDTI DQPSK Receiver Workload实现每4个时钟循环处理1个输入样品。

度量指标和平台介绍

此前, 虽然用手写RTL代码在FPGA上实现的较高要求应用通常能实现更优异的质量 (即性能和效率较高) , 但工作效率不高;而用DSP处理器实现的应用工作效率虽高, 但结果质量差强人意。面向FPGA的高级综合工具旨在提供二者相结合后的最佳水平, 既提供较高质量, 又实现较高效率。因此在评估中考虑了两组度量指标:结果质量和可用性。

结果质量度量指标用于评估工作负载实现的性能和资源使用情况。BDTI Optical Flow Workload提供HLST-Xilinx流程和DSP处理器流程的结果质量度量指标。BDTIDQPSK Receiver Workload提供HLST-Xilinx流程以及赛灵思根据典型业界设计实践采用手写RTL设计的传统FPGA实现方案的结果流程, 其中包括在适当的时候使用赛灵思CORE GeneratorTM知识产权模块。

可用性度量指标用于评估HLSTXilinx设计方案的工作效率和易用程度, 并以实现BDTI Optical Flow Workload的情况为参考依据。这些度量指标将面向FPGA的HLST和赛灵思工具流相对于使用DSP处理器及其相关软件开发工具链的工作效率和易用性进行比较。根据工具使用的9个方面量化评估可用性度量指标, 其中包括直接体验、易用性、工具功能完整性、整体设计方法的效率以及文档与支持质量等。

就本次评估而言, 目标FPGA为赛灵思Spartan-3A DSP 3400 (XC3S-D3400A) ;就BDTI Optical Flow Workload而言, 赛灵思XtremeDSP Video Starter Kit—Spartan-3A DSP Edition为目标平台。使用了赛灵思RTL工具, 包括ISE和EDK工具套件 (版本10.1.03, lin64) 以及高级综合工具等。

本项目中的目标DSP处理器为德州仪器的TMS320DM6437。这款面向视频的处理器采用600 MHz TMS320C64x+DSP内核以及视频硬件加速器 (硬件加速器不适用于BDTI Optical Flow Workload, 因此并未使用) 。评估中采用了德州仪器的DM6437 Digital Video Development Environment作为目标平台, 并采用了德州仪器的Code Composer Studio工具套件 (版本为V3.3.82.13, Code Generation Tools版本为6.1.9) 。

实现与认证进程

将两个工作负载的实现工作分配给两个芯片, 并根据使用的芯片和工具链来选择采用赛灵思和BDTI不同的高级综合工具厂商。HLST厂商使用其自有工具以及赛灵思的工具实现两个工作负载, 并将性能和资源使用结果提交给BDTI进行验证与认证。利用认证的结果生成了本文的结果质量度量指标。

与此同时, 工程师接受了HLST厂商的培训, 并分别用高级综合工具和赛灵思工具独立实现了BDTI Optical Flow Workload的某些部分。这一过程为BDTI提供了工具链易用性及其生成结果质量的第一手信息。此外还在DSP处理器上实现了BDTI Optical Flow Workload, 而赛灵思则实现手写RTL FPGA版的BDTI DQPSK Receiver Workload (随后也经BDTI验证与认证) 。

结果质量:性能和效率

如图1所示, 使用HLST的Spartan-3A DSP FPGA在BDTI Optical Flow Workload视频应用上以720 p的分辨率获得了195帧/s的成绩, 而同样情况下C64x+DSP处理器的成绩仅为5.1帧/s。前者的性能比后者高出约40倍。再分析一下芯片成本, 图2所示的是相应的性价比优势, Spartan-3A DSP FPGA上使用HLST的BDTI Optical Flow Workload (720p) 性价比优于600 MHz TI C64x+架构的DSP, FPGA实现方案大约有30倍的优势。显然, 配合高级综合工具使用的FPGA能为某些类型的应用提供出色的价性比优势 (更多详细结果请参见www.BDTI com) 。

此外还就BDTI DQPSK Receiver Workload对基于HLST的FPGA实现方案与采用手写RTL实现相同工作负载的效率进行了评估。再次发现, HLST的表现非常出色。如表1所示, AutoPilot和PICO都能生成效率 (即资源使用情况) 相当于手写RTL代码的RTL代码。HLST和手写RTL的效率结果相当并非偶然。在评估工作开始时就为AutoESL和Synfora提供了手写RTL实现方案的资源使用示意图, 这两家公司可能用该图作为其优化实现方案的目标 (不过我们也应当注意, 这种信息并非是高效使用高级综合工具所必需的, 而且HLST厂商并未获得RTL设计方案) 。

使用AutoESL和Synfora高级综合工具的设计人员确认了资源使用情况的真实性。他们表示该工具所产生的结果优于通过手写RTL代码所能实现的结果, 而且还减少了大量设计和验证工作———这是一个巨大的成就。

易用性度量指标

易用性度量指标主要用于评估高级综合工具流程相对于DSP处理器工具链的易用性。对每个易用性度量指标都相应给出优秀、很好、好、一般和差等评分。在打分时, 要考虑完整项目的整体设计方法———先是C语言应用规范, 最后是目标芯片 (FPGA或DSP处理器) 上的实时实现。易用性度量指标如表2所示。

(输入数据速度为18.75 MS/s, 时钟速度为75 MHz)

通常, PICO和AutoPilot都便于安装和使用, 甚至无需FPGA设计经验就能进行。与此形成对比的是, 在安装和使用赛灵思的RTL工具时遇到了很大困难, 最终还是决定邀请经验丰富的FPGA工程师协助设置运行在FPGA上的设计方案。例如, 需要让FPGA工程师解读赛灵思RTL工具发出的错误消息, 并将HLST生成的RTL模块与I/O和存储器模块连接在一起, 以生成可在FPGA上运行的完整设计方案。总体而言, 高级综合工具之外发生的设计问题相当难以解决。如果HLST用户没有RTL设计和工具技能, 那么在设计流程的这一阶段就需要具有相关经验的工程师予以帮助。

不过, 即便考虑到与流程中RTL-比特流部分相关的挑战, 从表2中仍能看出, HLST-Xilinx工具链仍能够实现出色的易用性和生产力业绩, 且并不比DSP处理器流程所产生的业绩差。总之, 如果有经验丰富的FPGA工程师帮助开展流程中的某些工作, 则可发现在TI DSP处理器上实现BDTI Optical Flow Workload的工作量与采用两种HLST在赛灵思FPGA上加以实现的工作量基本相同。

上述结论意义重大, 可能会让很多DSP软件工程师感到惊讶。在比较可编程DSP处理器和FPGA的使用时, 开发时间对许多系统设计人员来说都是一大障碍。BDTI的评估显示, 这种新方法在很大程度上为BDTI Optical Flow Workload等应用消除了时间障碍。

HLST:规则改变者

BDTI早先对FPGA和DSP处理器进行的基准测试 (发表于2007年的“用FPGA完成DSP工作任务”报告中) 显示, 用传统RTL设计方法实现FPGA时, FPGA在某些应用中具有较大的性能和性价比优势。新的分析结果确认了上述性能优势, 这表明FPGA配合使用高级综合工具也可实现类似的性价比优势。此外还发现, 目前所评估的两种高级综合工具———Synfora的PICO和AutoESL的AutoPilot所实现的资源使用效率相当于通过手写RTL代码所实现的效率。尽管没有直接评估HLST相对于手写RTL代码的时间节约优势, 但根据对目前HLST用户的采访结果可以相信时间方面的优势也会相当显著。

用传统手写RTL编码创建的FPGA设计方案通常比DSP处理器上用软件实现的同类应用花费更加多的工作量, 这较好地解释了很多DSP处理器用户不愿意改变工作方法的原因。因此, 本项目最令人惊讶的结果或许就在于, 在FPGA上 (用AutoPilot或PICO配合赛灵思工具实现评估工作负载与使用DSP处理器所需的工作量基本相当。

对FPGA用户而言, 我们的研究充分说明HLST可在无显著负面影响的情况下提升生产力。而对于DSP处理器用户, FPGA显而易见确实值得考虑, HLST正快速成为改变格局的重大技术。

摘要:以往, 手写RTL代码在FPGA上实现的高强度应用通常能实现较高的质量, 但是生产力不高;而用DSP处理器实现的应用生产力虽高, 但结果质相对较差。权衡可编程DSP处理器和FPGA的使用问题时, 开发时间对许多系统设计人员而言都是一大障碍。BDTI的评估显示, 高级综合工具可以在很大程度上消除这一障碍, 能够简化DSP开发人员用FPGA实现设计的工作。

基于FPGA的路标显示控制器 篇3

1 上位机 (PC机) 的C++语言编程

上位机采用Microsoft Visual C++ 6.0为编译环境, 建立MFC App Wizard.exe工程。如果具有“So EZ-USB2.0开发板”, 建议直接在第三个“USB控制LED”工程上加以修改。在工程中双击“Dialog”, 再双击“IDD_ (自己的工程名) _DIALOG”, 会弹出一个编辑区, 在上面使用控件画出如图2所示的文本框及按键。

双击“显示汉字”, 其主要代码如下:

2 下位机USB固件编程

USB传输数据, 实现系统与PC机 (上位机) 通信, 以便于操作以及数据处理。FPGA用于控制数据传输。

编译环境使用Keil C51μVision4。Cypress公司针对68013单片机开发了一套USB固件库, 可在官网下载。重点看其中的两个文件:

1) Cy Down.c:整个文件是USB固件根本, 负责上电枚举、重枚举、唤醒以及调用用户自己写的程序和控制命令等等, 如非必要, 请尽量不要修改其中的代码。

2) periph.c:这个是用户编写自己的代码的文件。所有的代码都写在这里。里面有几个用到的函数需要介绍一下:

void TD_Init (void) :这个函数只在单片机启动后执行一次, 书写初始化代码。

BOOL DR_Vendor Cmnd (void) :这个函数是自定义命令代码书写处。Vendor命令写在这里。

对于这两个文件, 主要的修改如下:

1) 在上位机程序中, 定义了自定义请求码为0xA1, 在Keil中lp.h加入

“# define SC_Show Text 0xa1”

2) CyDown.c中“void Setup Command (void) ”函数的“switch (SETUPDAT[1]) ”语句中, 添加如下条件及语句:

3) 至于上一步“DR_Show Text () ”函数, 将其书写在periph.c中, 其作用就是将收到的数据送至无线发射模块NRF24L01进行发送。对于此函数, 有一点值得说明:USB接收缓冲区的第一个字节并不是真实数据, 而是设备描述符, 所以需要如下转换:

在将程序固化到EEPROM中, 实现掉电存储时, 需要在Keil Target Options User Run User Programs After Build/Rebuild中加入如下代码:

其中CyDown为文件名, 0xC2表示从EEPROM启动, -v 0x1234-p 0x1234表示设备PID、VID码, 在终端固件可以不加。

3 基于NRF24L01的无线传输

3.1 底层无线传输程序库

此部分负责无线模块硬件及驱动层, 不涉及应用层, 下位机及终端都以库的形式包含。

NRF24L01无线发射接收模块如图3所示。右下角黄色方框内为1脚, 以“之”字形类推2脚, 3脚。

NRF24L01无线模块, 采用的芯片是NRF24L01, 该芯片的主要特点如下:

1) 2.4G全球开放的ISM频段, 免许可证使用。

2) 低工作电压 (1.9~3.6V) 。

该模块通过SPI总线与68013进行通讯, 最大SPI速度可达10MHz, 但由于68013没有硬SPI模块, 故采用I/O BitBang模式模拟SPI总线, 此I/O模拟SPI例程可在Cypress官网上下载到相应的应用文档, 加以适当提取即可使用。但要注意无线模块SPI空闲时SCK信号线是低电平。此模块一个数据包最多可以发送32字节。

数据采用透明传输。本次试验使用的通讯底层程序移植自Alientek MiniSTM32开发板的第24章“无线通信实验”。源代码来自www.openedv.com, 此论坛以开源为理念, 可自由下载。

下面是SPI底层通讯代码:

void SPIByte Write (unsigned char byte) 和unsigned char SPIByte Read (void) 来自Cypress公司的官方应用文档。

以下介绍来自Alientek的无线通信程序及修改方法:

对于:

这4个函数, 要对其中形如“status=SPIx_Read Write Byte (reg) ;”进行修改,

例如:

其余程序不用修改, 由于篇幅原因不一一列出。

3.2 下位机无线传输程序

3.3 终端无线传输程序

4 终端及显示程序

本系统采用OCM J2*8A液晶作为显示模块, 该模块带有中文字库, 只需输入内码及行与列的位置即可显示。

Hanzi[32]字符串是终端的显示程序与无线传输程序沟通的桥梁。

对于液晶模块的写指令程序重点做一下介绍, 当液晶模块收到数据后, 需要经过一段时间的延迟才能再继续接收下一个数据。对于这段时间的掌握, 可以采取延时一段时间的方法, 还可以采取不断查询BUSY信号线的方法判断液晶是否忙。对于第一种方法, 要注意FX2单片机时钟频率的设置以及延时的准确性。建议采用第二种方法:循环检测忙信号, 此方法最稳定, 由51汇编语言程序改编而来:

5 结语

基于FPGA的步进电机优化控制 篇4

步进电机是将电脉冲信号转变为角位移或线位移的开环控制电机,输入脉冲总数控制步进电机的总旋转角度,电机的速度由每秒输入脉冲数目所决定,因此易实现机械位置的精准控制[1]。而且由于步进电机价格低廉、可控性强等特点,使其在数控机床传送控制等自动控制领域中得到了广泛的应用[2]。但随着技术的发展以及企业生产的要求,步进电机传统的以单片机等微处理器为核心单元的控制系统暴露出了如下缺点:控制策略单一不利于实现人机交互,而且控制电路复杂、控制精度低、生产成本高[3],系统稳定性不够,步进分辨率低、缺乏灵活性[4,5],低频时的振荡和噪声大[6],而且受步进电机机械结构和空间的限制,步进电机的步距角不可能无限的小,难以满足高精度开环控制的需求。由于FPGA编程方式简单,开发周期短,可靠性高,使其在工业控制领域的应用越来越广泛。本文在总结FPGA的分频技术以及步进电机细分控制原理的基础上,通过PWM控制技术来提高步进电机的分辨率,仿真和实验表明,本文采取的措施有效地实现步进电机控制的高效、精确控制。

1 步进电机细分控制原理

步进电机的工作原理如图1所示,对四相步进电机而言,按照一定的顺序对各相绕组通电即可控制电机的转动。例如,当开关B与电源导通而其他开关断开时,在磁力线的作用下B相磁极和转子0,3号对齐;当开关C与电源导通而其他开关断开时,在磁力线的作用下,转子转动,1,4号齿和C相绕组的磁极对齐。同理,依次向A,B,C,D四相绕组供电,电机就会沿着A,B,C,D方向转动[7]。

为了理解步进电机的不足,还需了解步进电机的步距角。步距角的定义为:

式中:km为步进电机的工作节拍系数;zn为齿数[7]。

受步进电机的拍数和转子齿数的限制,步进电机的步距角不可能非常小,即每一单步控制的转动量相对比较大,在许多精密控制领域,步进电机的功能达不到使用要求。因此为了提高步进电机的分辨率,需采用细分控制技术对其进行优化控制。细分控制类似于插值,其基本原理就是将电机绕组中的电流细分,在两个控制电流之间增加许多中间状态的电流,使得步进电机可以工作在许多中间的状态,从而使得步进电机的每一步得到细分,其步距角更小,系统的分辨得到提高[8,9],性能得到优化。而细分控制通常有两种细分方式,一是使电流按线性规律变化来细分,二是按等步距角细分。为了比较两种细分方式的优劣,还需要了解步进电机工作时的静态距角特征。

式中:M为电磁转矩;Mk为一定绕组电流时的最大静转矩;对于反应式步进电机,当不考虑磁路饱和时,可以认为Mk与电流i的平方成正比[8],负号表示电磁转矩与定子磁场之间为楞次关系,即电磁转矩总是阻碍转子离开磁场最小磁阻的位置[9]。

现以三相反应式步进电机来分析两种细分方式。三相反应式步进电机三相绕组分别通电时,其矩角特性为彼此相差120°电角度的正弦曲线,如图2所示。

当A、B两相通电时,设电流分别为iA、iB,相应的静转矩为MA、MB,忽略磁路之间的影响,其合成矩角特性为二者相叠加[8],如式(3)所示:

其中α为此通电状态的平衡点电角度,其表达式为[7]:

由公式(3)和(4)可知,当步进电机的电流按照线性规律变化时,其距特性如图3(a)所示。由于距角特征幅值因通电电流的不同而各不相等,因此各细分步的步距角就不能保持一致。理想的细分电流波形应使各通电状态下的步距角特性的幅值、形状均相等,如图3(b)所示[8]。

因此电流按线性规律变化的细分方式使得细分后的每一小步的控制精度不相等。而如果按等步距角细分,则细分后的步距角为:

式中:M为细分的次数。设细分后的第k微步距角时A相和B相的电流分配系数为kA和kB,则有:

为了使细分后的静态距角与细分前一样,则有:

因此可以求得电流分配系数为:

如果在控制电路中严格按照电流分配系数来控制各个通电状态,则能够保证细分后的每一小步的控制精度相等。因此本文采用按等步距角的细分方式。

2 步进电机细分控制硬件的实现

为了实现步进电机的等步距角细分,本文采用脉冲宽度调制(PWM)的方式来实现。PWM就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲。这些脉冲综合在一起即可形成等效的正弦波、方波等预期的波形。而等效输出波形的质量与脉冲的步距有关,即同一时刻输出的PWM路数越多,则脉冲密度越高,则输出等效波形的质量就越好。而传统的步进电机控制系统多采用单片机作为微处理器,而单片机是单线程的微处理器,同一时刻只能执行一条命令,也即是同一时刻只能产生一路PWM信号,因此输出波形质量较差,从而导致步进电机的控制精度偏低。而FPGA的运算速度远远高于单片机的运算速度,且通过模块化设计可以使其处于多线程工作模式,即可以同时产生多路PWM信号,提高了输出等效波形的质量。本文中选取Altera公司2004年推出了新款CycloneⅡ系列FPGA器件作为开发平台,同时输出8路PWM信号,控制实现四相步进电机的16细分。同时利用串口模块与上位机相连以实现人机交互。系统原理图如图4所示。

该控制系统中采用总线控制方式,利用片选信号依次控制4路PWM锁存器的通断,这样可以简化硬件电路和软件设计。以A相控制为例,当片选A为高电平而其他几路片选为低时,A路PWM锁存器工作而其他几路PWM锁存器休眠。根据公式(8)计算出细分的电流分配系数,进而转化成控制PWM信号的占空比,同时开通几路锁存器,通过锁存器输出驱动步进电机。

3 步进电机细分控制软件的设计

本设计中采用QuartusⅡ软件开发平台和Verilog设计语言进行控制软件的设计。系统中需要在FPGA内利用线性反馈移位寄存器(Linear Feedback Shift Registers)来实现随机数的产生[10],控制步进电机的随机取样转动[11],本系统中最核心的PWM控制模块设计如下:

4 系统测试

系统设计完成后,对整个系统进行测试和检验。PWM控制系统的仿真结果如图5所示,观察仿真输出波形可知控制脉冲输出正确。将程序固化到FPGA硬件中之后,将被控的四相反应式步进电机连接上,并通过串口将FPGA与上位机相连,由上位机输出命令控制步进电机的转速、转向、转动角度等。

5 结语

验证结果表明,该控制系统实现了步进电机等步距角的16级细分,并通过人机交互实现了任意改变各相顺序的主要技术指标,控制精度高,可靠性强。

参考文献

[1]李贺然,王黎,高晓蓉,等.基于FPGA的步进电机控制器设计[J].信息技术,2012(2):23-24.

[2]孙建忠,白凤仙.特种电机及其控制[M].北京:中国水利水电出版社,2005.

[3]高琴,刘淑聪,彭宏伟.步进电机控制系统的设计及应用[J].制造业自动化,2012,34(1):150-152.

[4]DONNELLY W,LAURITZEN A.Variance shadow maps[C]//Proceedings of the Symposium on Interactive 3D Graphics and Games.[S.l.]:ACM,2006:161-165.

[5]SCHOLL Cristoph.Functional decomposition with application to FPGA synthesis[M].Germany:Springer,2002.

[6]郝小江,黄昆.基于FPGA的步进电机控制设计[J].仪表技术,2011(9):8-10.

[7]郑宇.步进电机细分控制的单片机实现[J].贵州师范大学学报:自然科学版,2012,30(2):106-109.

[8]李山.步进电机细分控制的研究[J].重庆工业管理学院学报,1998,12(2):34-39.

[9]杨晓沸.步进电机细分控制的PWM实现[J].电机技术,2008(5):15-16.

[10]邱晖,林伟,黄世震.基于FPGA步进电机驱动控制系统的设计[J].电子器件,2011,34(6):686-689.

LZW控制器的FPGA设计 篇5

随着技术的不断进步, 人类不断寻求探测更加丰富的物理信息, 使得数据采集的信息量不断膨胀, 从而导致实时传输和存储越来越困难。如用声波测井技术探测地理信息, 不断增加的声波测井数据使得遥传系统难以完成实时传输, 为此需要对其进行压缩。数据压缩分为有损压缩和无损压缩。有损压缩是指对数据进行重构后, 利用该重构数据还原出来的数据与原来的数据有所不同, 是一种对原始资料的近似表达, 优点就是可以获得较大的压缩比。而无损压缩是指对原始数据进行重构后, 利用重构后的数据还原出来的数据与原来的数据完全相同, 其缺点是压缩比不高。常用的无损压缩算法有霍夫曼 (Huffman) 算法、算术编码算法、游程编码算法和LZW (Lenpel-Ziv&Welch) 压缩算法。

目前, 无损压缩有软件和硬件两种实现方案, 软件方案的缺点是需要大量的存储空间和消耗过多的CPU资源, 速度较慢;而硬件方案因其压缩速度快处理能力强而逐步获得重视, 尤其是FPGA硬件的出现, 为硬件压缩提供了较好的物质条件。无损压缩要获得较大的压缩比, 需要根据信源的统计特性进行相应的压缩。而声波测井数据的统计特征随地理环境的不同而不同, 无法构造一个最佳的无损硬件压缩方案;并且声波测井仪器的软件数据处理能力和存储空间非常有限, 要将大量的声波测井数据采用软件压缩, 然后再传输是至井口仪器, 这将无法保证数据传输的实时性。而LZW算法通过对输入码流进行分析, 充分利用了相邻输入数据之间的相关性, 对于数据流中连续重复出现的字节和字串具有很高的压缩比, 实时性好;并且在解压过程中逐步建立与压缩时完全相同的字典, 是一种解码速度与压缩性能综合指标较好的一种压缩算法。

因此, 本文将LZW无损压缩方法, 根据声波测井数据的特点, 设计一种FPGA硬件实现方案, 并且重点设计了LZW的控制器时序流程, 并对其进行Verilog HDL设计与时序仿真验证。

1 LZW基本算法

LZW是一种基于字典的压缩算法。LZW编码的原理是:设字典中有n个基本字符, 编码器逐个输入字符K并累积成一个字符串C。每输入一个字符就被串接在C后面形成新的字符串C, 然后在字典中查找C, 只要在字典 (串表Table) 中找到C, 该过程就继续进行;直到添加下一个字符K导致搜索失败, 字符串C在Table中, 而CK (字符K串接在C后) 却不在, 这时编码器将执行: (1) 输出指向当前字符串C的字典编码值; (2) 在下一个可用的字典词条中, 存储字符串CK, 其对应的编码值为n+1: (3) 把字符串C预置为K。LZW的编码流程图如图1所示。

2 LZW的硬件框图

根据声波测井数据流的二进制数据特点, 本文设计LZW的FPGA的硬件设计主要划分为数据输入缓冲模块、压缩模块、控制模块和数据输出模块, 如图2所示。

其中, 数据输入缓冲模块完成输入数据Din的缓存工作, 为了便于输入输出的同步, 使用FPGA片内的RAM构成一个FIFO来缓存被压缩数据, 本文设计的FIFO输出为8bit。压缩模块是LZW算法核心模块之一, 分为字符串查找算法子模块, 字典项编码、前缀码、当前码存储块。数据输出模块主要实现压缩后的码流转换为8bit。

控制模块主要完成时钟的产生, 为各功能模块提供时钟, 并初始化各模块的使能端信号;根据压缩器外部的指令信息, 产生各模块控制信号, 使系统各模块协调工作。当外部复位信号有效时, 控制器将对各模块进行复位操作。当外部压缩使能信号有效时, 控制模块将同时对数据输入FIFO、字典模块及数据输出模块分别进行控制。

根据LZW的工作流程可以设计出控制模块的时序图如图3所示。

3 LZW控制器的仿真验证与分析

这里仅给出了控制器对压缩模块的主要控制信号的Verilog HDL定义为:

其中读时钟受到两个信号的控制, 一个是读使能信号, 另外一个是压缩模块给出的数据压缩成功信号。由于压缩模块的压缩速度非常快, 在读使能信号的一个时钟之内便能完成, 在正常压缩情况下, 读使能信号时钟周期能够与压缩成功信号的时钟相匹配。当字典在处理冲突的过程中, 考虑到处理冲突的时间长短不确定, 此时必须关闭读信号时钟的计数器, 以免影响正常的计数。

在QUARTUS II平台上用EP2C5Q208C8N对字典模块的控制子模块进行了时序仿真, 其时序仿真结果如图4所示:

由图4可以说明:当字典模块正常压缩的时候, 每压缩成功一个数据就会发出压缩成功的标志信号 (dic_suc为高电平) , 控制器将这一信号反馈给FIFO然后读数据, 如此循环。当在压缩的过程中出现冲突时 (dic_conf为低电平) 读数据关闭, 直到处理完冲突后重新发出压缩成功的标志信号。因此上述的时序仿真结果与设计思路一致。

通过QUARTUS II的时序分析, LZW控制模块的最高工作频率最差为381MHz。

4 结论

本文所设计的无损压缩系统经过的时序仿真和验证, 可以发现:软件设计有较强的可移植性, 功能易于扩展。其时序分析结果表明用FPGA实现声波测井数据的LZW实时无损压缩是可以满足该应用需求的。关于控制器对FIFO和输出模块的控制时序设计将另文介绍。

摘要:针对声波测井采集数据量较大给实时传输造成较大困难的现状, 本文提出了一种基于LZW的无损压缩算法的PFGA实现方案。根据声波测井数据采集电路的特点, 本文设计了声波测井的LZW硬件压缩系统框图和控制器的控制时序, 采用Verilog HDL对核心控制单元进行了模块化描述和详细设计。并在QUARTUSⅡ平台上用EP2C5Q208C8N进行了时序仿真验证, 结果表明:该控制器设计是有效的, 并具有较好的移植性和可扩展性。

关键词:无损压缩,LZW算法,FPGA

参考文献

[1]王国权, 朱振玉, 卜小平.数据压缩技术的应用与研究[J].煤矿机械, 2003.

[2]于翔.数据压缩技术分析[J].青海大学学报 (自然科版) , 2002.

[3]杨雄, 李凌.数据压缩技术及其常用算法[J].软件世界, 1996.

[4]Phillips Dwayne, LZW data compression, Computer Application Journal Cir-cuit Cellar Inc.1992.

[5]刘虹.数据无损压缩技术的应用及硬件实现[J].红外, 2003.

[6]靳鸿, 裴东兴, 祖静.无损数据压缩在数据采集系统中的应用探讨[J].华北工学院学报, 2003.

FPGA核心控制板 篇6

数据采集和控制系统是对生产过程或科学实验中各种物理量进行实时采集、测试和反馈控制的闭环控制,它在工业控制、军事电子设备、医学监护等许多领域发挥着重要作用[1]。其中,数据采集部分尤为重要,而传统的数据采集系统,通常采用单片机或DSP作为控制器,用以控制ADC、存储器和其他外围电路的工作,使得采集速度和效率降低。近年来,微电子技术,如:大规模集成电路和超大规模集成电路技术的发展,为数据采集系统的发展提供了良好的物质基础。从而使器件向模块化和单片化发展,使所用软件均向实时高级语言和软件模块化发展,接口向标准化发展。由于 FPGA时钟频率高,内部延时小,全部控制逻辑均由硬件完成,速度快,效率高[2],同时它有非常强大的硬件描述语言和仿真工具,方便检验结果的正确性。基于以上考虑,在设计中采用FPGA作为控制处理器。而VGA接口的设计,更突出了该模块的兼容性,更易于采集数据的直观表现。

1 系统总体设计方案

完整的数据采集过程通常由数据的通道选择、采样、存储、显示构成,有时也要对数据进行适当的处理。其中,控制模块起到了核心作用,他作为控制信号产生和处理的中枢对这些外围电路进行着实时的监控和管理。设计过程中采用FPGA作为控制器,完成对A/D转换器的控制,并将采集到的数据存储到一定的存储单元,通过VGA接口协议,最后在显示器上显示。具体涉及的外围电路中,数据采集部分主要应用ADC0809 作为数据采集芯片,对输入的模拟量进行A/D转换;数据缓存部分应用6116作为存储芯片,用来缓存0809采集的数据;按键控制部分利用8个按键来控制0809的转换通道选择;图形显示部分输出标准的VGA信号,使用CRT显示器,以显示实时波形。由于在设计中对外部器件进行控制的控制器都是由FPGA完成的,FPGA的工作量很大,因此所采用的FPGA芯片为FLEX系列中30万门的EPF10K30。

2 基于FPGA的主控模块的实现[3,4]

主控制器的工作原理如图1所示。

通过一个A/D转换控制器产生对ADC0809的控制信号。启动ADC0809之后,随即就会按照一定频率进行A/D转换。同时通过一个数据锁存信号将数据锁存到A/D转换控制模块中。这个锁存信号将作为RAM控制器写输入控制信号。当RAM读写控制器的写控制信号有效之后,将开启RAM的写使能有效信号,将采集到的数据写入RAM的第600个地址单元中,然后RAM控制器将RAM中的数据向上移动一位,移动完之后,产生一个数据更新完毕信号,之后才通过内部的一个控制信号,允许从RAM读出数据。

若RAM中读数据使能,每当VGA显示控制器发出一个读数据命令时,RAM读写控制器便开启RAM的读有效信号,读出RAM 中的数据,并且通过VGA控制器的时序控制和输出信号进行显示[5]。外部的按键部分共有8个,这8个按键控制ADC0809的8路通道的选择。键盘控制器的功能就是扫描所按下按键的行和列值,并且合成键值,转换成按键数值0~7,最终控制8个模拟输入通道的选择。

2.1 VGA显示控制器的设计

常见的彩色显示器一般由阴极射线管(CRT)构成,彩色是由红、黄、蓝(R,G,B)三基色组成的,用逐行扫描的方式解决图像显示,其引出线共含5个信号:R,G,B三基色信号;HS;行同步信号;VS;场同步信号。

对于VGA显示器的这五个信号的时序驱动要严格遵循“VGA工业标准”,即640×480×60模式,否则会损害VGA显示器[6]。在此,控制器共有2个输入信号,6个输出信号。CLK连接到外部的晶振上,其晶振频率是50 MHz。由于VGA工业标准所要求的晶振频率是25 MHz,因此,在此控制器中首先要将时钟进行二分频。RD是一个8位的数据量,它接收从RAM读出的数据。输出信号READ用于控制RAM控制模块开启RAM的读有效信号,只要READ有变化,那么将进入读数据状态,由RD接收读出来的数据。HS和VS分别是行同步信号和场同步信号,R,G,B为三条输出的信号线。显示波形是通过改变R,G,B这三条输出信号的值来实现的[4]。

每读出一个数据,其实是对应着一个像素点。由于这里所采集的电压值范围是0~5 V,对应ADC0809转换成的数据量是0x00~0xFF,所以在设计时只要将RD接收的具体数值与显示器中的某一行相对应即可,具体实现用比较语句就可以实现行定位,同时列辅助寄存器LLV加1即可,这样即可实现连续波形。这些点连接起来就是一个完整的波形,而其中行同步和场同步信号的产生则分别由内部信号CC,LL根据已知的输入时钟,通过计数器计数的方式,达到工业标准要求的频率。

2.2 A/D转换控制器的设计[7,8]

在此设计中,是利用状态机对A/D转换进行控制的。控制ADC0809采样状态图,如图2所示。

在状态ST0中,对0809进行初始化,之后进入到状态ST1;在状态ST1中,ALE和START信号有效,这时EOC信号变为低电平,进入转换状态ST2。此时,需要对0809工作状态信号EOC进行测试,如果为低电平,表示转换没结束,仍需要停留在ST2状态中等待,直到变成高电平后才说明转换结束,在下一时钟脉冲到来时转向状态ST3。在状态ST3,由状态机向0809发出转换好的8位数据输出允许命令,这一状态周期同时可作为数据输出稳定周期,以便能在下一状态中向锁存器中锁入可靠的数据。在状态ST4,由状态机向FPGA中的锁存器发出锁存信号,将0809输出的数据进行锁存。

2.3 RAM读写控制器的设计

在该模块设计中,RAM读写控制模块又分为读控制模块、写控制模块和读写状态转换模块。写控制模块中两个输入信号分别与A/D转换控制模块的数据锁存和转换输出相连。当锁存信号使能,即发出写信号,将数据存储到外部RAM的第600个地址空间之后,再对之前的数据进行前移,以达到数据的及时更新。读控制模块的控制信号分别与写更新完毕信号和读信号相连,当写更新完毕信号使能时,只要接到读信号,则依次读完外部RAM前600个地址空间(一场)的数据。

2.4 键盘扫描控制器的设计

键盘控制模块由四个模块组成,包括:时钟分频模块、行键值输出模块、键值锁存模块和键值合成模块[9]。键值锁存模块将按下按键的行、列信息锁存,并交由键值合成模块,该模块配合行键输出模块输出的结果进行查表,最终确定键值。

3 仿真结果

Max+PlusⅡ仿真平台的图形输入方式直观,符合传统数字系统设计人员的习惯,便于进行接口的设计,容易实现仿真,便于信号的观察[10]。基于以上考虑,利用此平台,用硬件描述语言VHDL来实现各个功能模块,A/D转换控制器和VGA显示控制器模块的时序仿真结果如图3、图4所示。

4 结 语

这里的数据采集控制模块主要以FPGA为基础,本着软件硬件化的思路,着重研究主控制模块的实现。由于采用FPGA作为控制处理器,其速度快,效率高,且标准的VGA接口使得系统的使用更加便捷,键盘控制的多通道间切换,也为实现多路采集奠定了基础。

参考文献

[1]马明建.数据采集与处理技术[M].西安:西安交通大学出版社,2005.

[2]叶卫东,曹照连.基于FPGA的数据采集系统设计[J].现代电子技术,2005,28(24):112-114.

[3]赵明富,李立军.EDA技术基础[M].北京:北京大学出版社,2007.

[4]潘松,黄继业.EDA技术与VHDL[M].北京:清华大学出版社,2007.

[5]曾喜芳,屈能伸.用FPGA实现终端中的显示RAM控制[J].计算机工程与科学,2001,23(4):41-42.

[6]蒋艳红.基于FPGA的VGA图像信号发生器设计[J].电子测量技术,2008,31(3):79-81.

[7]吴繁红,井新宇.用CPLD/FPGA设计A/D采样控制器[J].电子工程师,2002,28(2):37-38.

[8]牛斌,马利,张玉奇.一种应用VHDL语言设计有限状态机控制器的方法[J].微处理机,2003(2):10-12.

[9]王美丽.用FPGA设计和制作键盘扫描[J].仪表技术,2008(10):47-49.

FPGA核心控制板 篇7

关键词:FPGA,串行通讯,脉冲

1 引言

随着FPGA技术的快速发展, 在一定的应用领域中, 有逐步代替ASIC的趋势, 使用FPGA可以将以前需要的多块集成芯片的电路设计到一片FPGA中, 大大减少了电路板的尺寸, 增强了系统的可靠性和设计的灵活性, 因此, 用FPGA代替原有的集成电路, 是现代数控企业研究的主要问题之一。

该设计采用的FPGA芯片是XILINX公司生产的Spartan3系列中的XC3S400-pq208, 采用40M有源晶振。为了以后改进系统的需要, 该设计采用分模块的编写方法, 整个设计分如下模块:串口采样时钟模块[1], 串口接收模块, 数据整合模块, 单位换算模块, 计算输出模块。

2 模块化的设计方法

该程序主要实现的功能是从串口接受数据, 数据为3组, 其中每组是2个16位的数据, 第一个数据要求是脉冲的周期, 周期的单位为us, 第二个数据要求是脉冲的个数。这3组数据控制的脉冲最后通过3个IO口引出, 以达到3轴脉冲同步控制的目的。整个程序的结构图如图1。

2.1 串口采样时钟模块的设计

该模块的设计是为了给波特率提供采样频率。我们采用的芯片是XILINX的Spartan3系列中的XC3S400-pq208, 芯片的晶振频率为40MHZ, 即一个周期为25ns。所谓采样频率, 就是将从串口传输进来的每位数据进行分频, 为了保证采样的准确性, 采样率为16倍的波特率。在数据在中间状态进行采样, 以保证最大程度上数据的准确性, 降低误码率。该设计要求波特率为38400bit/s, 即每传输一位数据的时候, 需要的时间为1/38400s, 将此时间进行16倍的分频之后, 得到的波形为每32个系统周期的时候翻转。于是设一个常数值为N=64, 当计数器counter的值为N/2-1的时候, 波形翻转。

端口定义如下:

Input clk;

Output div-baud, counter;

其中clk是系统时钟, div_baud是16倍波特率的分频, counter是内部计数器。

仿真结果如图2所示。

2.2 串口接收模块的设计

由串口发送过来的数据共有10位, 其中8位是有效数据。根据RS232异步通讯的帧格式, 在串口接收模块中采用每一帧的格式为:1位开始位+8位数据位+1位结束位。首先该模块要检测串口数据的起始位, 在检测到起始位后, 每隔一个波特率的时间对串口进行一次采样, 并存入寄存器的相应位置, 当每一帧的8位数据全部写入寄存器后, 再统一输出。

该模块的实现是通过一个较为简单实用的状态机来实现的。该模块有3个状态, 第一个为闲置状态, 第二个为开始状态, 第三个为接收状态。在时钟clock的驱动下, 对串口的起始位进行检测。在闲置状态中, 根据RS232的通信协议, 当没有数据传输的时候, 串口高电平的状态, 当输入数据变为低电平的后, 连续的采样值为0时, 则表明起始位到来。通过连续检测三个低电平状态来判断是否有起始帧, 有效的降低了系统噪声的干扰。当判断起始位到来之后, 进入开始状态, 即需要开始接受串口的数据。此后进入第三个接受状态, 控制内部计数器的递增, 并保持对rx进行采样, 将采样后的信号作为数据保存到寄存器中相应的位置。当8个有效的数据位接收之后, 将data_ready设置为高电平, 表示这一帧数据接收完成, 通知下一个模块接收数据, 并且准备接收下一帧的数据。

该模块的端口设置如下:

Input clock, rx;

Output data, data_ready;

串口接收的仿真结果如图3所示。

2.3 数据整合模块的设计

设计该模块的主要目的是为了接收从串口发进来的全部数据, 然后传给下一个模块, 这样可以在下一个模块中方便的处理全部数据。从串口输入的数据一共是3组, 每组2个数据, 每个数据是16位, 即12个8位数据。每组数据中的第一个数据代表了脉冲的周期, 第二个数据代表了脉冲的个数。从上个模块中传进来的是12个8位数据, 为了方便下一个模块直接计算串口数据, 将从上一个模块传送进来的数据放入一个寄存器中, 然后输出到下一个模块。从上一个模块传送进来的数据是12个8位数据, 将这些数据放进寄存器中, 每放一次, 计数器的值加1, 当计数器的值加到12之后, 将通知下一个接收模块接收数据。

2.4 单位换算模块的设计

该设计要求的精度为微秒级, 从串口传进来的数据要求对每微秒的脉冲进行处理, 所以, 需要将系统的时钟周期分频为微秒级, 这样, 在下一个模块中, 可以直接对微秒级的脉冲进行处理。这个模块的设计原理和串口采样时钟模块的设计思路一样, 这里设定的常数M=40, 即每四十个系统周期clk的时候翻转一次, 达到设计要求。

2.5 计算输出模块的设计

该模块的输入数据是6个16位数据, 要对这6个数据分成三组, 做同样的处理, 来输出3个通道的脉冲波形。因此在这里我们详细说明其中一组数据的处理。在做计算之前, 需要提取从数据整合模块中传进来的96个数据其中32位, 即:

其中的countx表示脉冲的周期, pulsex表示脉冲的个数。

将脉冲周期里的数据放在一个寄存器中, 然后开始将这个寄存器中的数据进行减1操作, 当寄存器为0的时候, 将波形进行翻转, 然后重新开始将寄存器中的数据减1计数, 此过程重复执行, 在每一次翻转的时候, 将存放脉冲个数的寄存器中的数据进行减1操作, 当寄存器中的数为0的时候, 波形停止翻转 (如图4) 。

3 结语

本文设计的串口数据接收模块经过仿真, 数据传输稳定可靠, 可以满足串口通信的要求, 该模块有很强的通用性和移植性。

该设计进行分模块的编程, 编程后, 将每个模块分别进行仿真, 仿真成功之后, 将各个模块连接在一起, 组成整个系统, 经实际示波器测试, 该程序运行可靠。

参考文献

[1]郭树涛, 靖永志.基于FPGA的串口通讯设计[J].北京电子科技学院学报, 2006, 14 (4) :75-78.

上一篇:成本的控制和管理下一篇:非档案资料