标题：FPGA技术
FPGA简介
FPGA由可编程逻辑单元阵列、布线资源和可编程的I/O单元阵列构成，一个FPGA包含丰富的逻辑门、寄存器和I/O资源。一片FPGA芯片就可以实现数百片甚至更多个标准数字集成电路所实现的系统。 
FPGA的结构灵活，其逻辑单元、可编程内部连线和I/O单元都可以由用户编程，可以实现任何逻辑功能，满足各种设计需求。其速度快，功耗低，通用性强，特别适用于复杂系统的设计。使用FPGA还可以实现动态配置、在线系统重构（可以在系统运行的不同时刻，按需要改变电路的功能，使系统具备多种空间相关或时间相关的任务）及硬件软化、软件硬化等功能。 
鉴于高频疲劳试验机控制器控制规模比较大，功能复杂，故我们在研制过程中，在传统试验机控制器的基础上，通过FPGA技术及微机技术两者的结合，来全面提升控制器系统的性能，使整机的工作效率、控制精度和电气系统可靠性得到了提高，且操作方便而又不乏技术的先进性。
控制器结构及内容
本控制系统的总体结构,下位机是整个高频疲劳试验机控制器的核心。用于实现产生控制试验机的控制信号和数据，反馈信号的处理，以及和上位机进行数据通信。其控制功能强弱也直接影响着整个控制器性能的好坏。图中波形发生器是用于激励和保持电磁激振器的振动。在此，波形发生器应输出正弦波。
系统采取的技术路线
系统在实现技术参数、功能要求的基础上，结合目前微机及FPGA等微电子技术，采取了以下主要技术路线： 
（1）下位机是系统控制的核心。由于本系统控制规模相对比较复杂，控制对象具一定特殊性（如高频率，高负荷等），且牵涉到控制电机，故不采用传统的8位机，而是考虑采用功能相对更强大，速度更快的16位机—87C196系列。 
（2）激振器要求输入波形为正弦波，试验的频率范围为80～250Hz。另外，系统还应该能够进行扫频试验。在扫频试验中，系统以1Hz为步长进行扫频（粗调），再在粗调的基础上进行微调（以0．1Hz为步长），以确定系统的共振点。可以看出，能产生精度为0．1Hz波形的电路模块是整个系统设计中很关键的一部分，也是设计难点之一。这部分如通过单片机或其它专用芯片则不能或很难实现。系统采用FPGA作波形发生器，见图1中虚线框所示部分。这样做的优点是：高速（一般芯片频率至少几十兆，甚至上百兆）且能满足上述精度要求；采用数字电路实现，抗干扰性好；能把其它逻辑电路也集成至该芯片中，省掉了许多分立元件，同时也减少了体积；能够按需改变波形。 
（3）直流调速通过变压实现，而变压则通过采用晶闸管的可控整流器来完成。通过单片机输出可变电压给移相触发器，触发器输出可控导通角给可控整流器，实现电机速度的调整。有利于提高系统的可靠性。 
（4）系统部分重要信号用数字滤波器滤波，该数字滤波器用FPGA实现。与软件滤波相比，此方法有利于改善信号的滤波效果，且滤波速度得到很大提高。
部分模块设计
FPGA部分可划分成两个模块，其中正弦波发生器模块又可细分成几个小模块，如图2所示。
锁存器设计锁存器用来将单片机送来的频率数据锁存稳定在FPGA中，可以用片内的锁存器资源（或用触发器）来构成。
运算器设计运算器是用来将频率数据转换成正弦波点与点之间的定时数据。该运算器实际上最终可转换成一除法器。该除法器描述如下： 
—VECTOR（WIDTH— R－1 DOWNTO 0））； 
END COMPONENT； 
上述描述实际上是调用了Altera公司的参数化模块库（LPM）中的一个元件。元件描述后，只要在程序中用Generic map和port map语句映射该元件即可。所要注意的是，上述口信号remainder是numerator和denominator模运算的结果，所以应将remainder与denominator/2相比较，实际结果应在比较的基础上决定加1还是不加1。
定时器设计定时器根据运算器传来的定时数据定时。它可以通过对基准时钟计数来实现，当定时时间一到，就触发波形的输出。 
设计中采用了两个计数模块来同时计数，一个模块计数时钟的上边沿，而另一模块则计数时钟的下边沿。这样相当于使系统时钟频率提高了一倍，充分利用了系统资源。
波形输出波形输出是当定时器满足定时要求触发后就输出此时的正弦值，多个点的触发输出就形成了一个正弦波。 
为节省芯片资源，这部分求某时正弦值的功能不采用构造运算器来算出正弦值，而是利用查表结构。象Xilinx公司FPGA芯片则可以利用CLB块来配置RAM或直接利用Logiblox来生成。还有象Altera公司的Flex10k系列就用查找表结构（LUT）来构建片内ROM或RAM。在工程文件中创建RAM或ROM块以后，可以通过将各时刻的正弦值（以ASCII字符表示）写进MIF文件（初始化文件）中，从而存储在RAM或ROM块中。在定时器触发后生成该时的地址，通过查询该RAM或ROM块就可输出该时得正弦值。
红外线遥控设计红外遥控技术已经在日常家用电器中得到了广泛应用，其使用方便、功耗低、抗干扰能力强的优点也越来越在智能仪器系统中受到重视。市场上的各种家电红外遥控系统技术成熟、成本低廉，但都是针对各自的遥控对象(彩电、冰箱、空调等)，不能直接用于智能仪器。本文探讨了如何借鉴家电红外遥控系统的原理，自行设计解码电路，使智能仪器具有遥控功能。该模块是建立在遥控器内部使用的芯片为HS622 1的基础上的。红外接收头型号为IRM3638，输出为IR管脚。而该模块则是对IR的输出信号进行译码处理，并从中提取红外发射包中的有效数据，然后并行输出8位数据以及8位遥控器用户码(地址码)供别的模块调用。

1、 红外接收控制模块设计原理
遥控器发射的信号由一串0和1的二进制代码组成。不同的芯片对0和1的编码有所不同，通常有曼彻斯特编码和脉冲宽度编码。HS6221的0和1采用PWM方法编码，即脉冲宽度调制，0码由0．56ms低电平和0．565ms高电平组合而成，脉冲宽度为1．125ms。1码由0．56ms低电平和1．69ms高电平组合而成，脉冲宽度为2．25ms。在编写解码程序时，通过判断脉冲的宽度，即可得到0或1。HS6221以及同类的芯片的数据格式包括引导码(起始码)，用户码(地址码)，用户反码(地址反码)，数据码，数据反码，编码总共32位，数据反码是数据码取反后的编码，用户反码原理一样，可以用来对数据的纠错。
当按下遥控器的按键时。遥控器将发出一串二进制代码，称它为一帧数据。根据各部分的功能，可将它们分为5部分，分别为引导码、用户码、用户反码、数据码、数据反码。遥控器发射代码时，均是低位在前，高位在后。红外接收头会将高低电平变反，所以实际从IR端出来的电平是上述格式图中的波形取反，即停止状态时IR为高电平，然后接收到9ms左右的低电平后进入准备状态。由图中分析可以得到，引导码高电平为9ms，低电平为4．5ms，当接收到此码时，表示一帧数据的开始，FPGA可以准备接收下面的数据。用户码(地址码)由8位二进制组成，共256种，图中用户反码(地址反码)主要是加强遥控器的可靠性，不同的设备可以拥有不同的用户码(地址码)。因此，同种编码的遥控器只要设置用户码(地址码)不同，也不会相互干扰。在同一个遥控器中，所有按键发出的地址码都是相同的。数据码为8位，可编码256种状态，代表实际所按下的键。数据反码是数据码的各位求反，通过比较数据码与数据反码，可判断接收到的数据是否正确。如果数据码与数据反码之间的关系不满足相反的关系，则本次遥控接收有误，数据应丢弃。在同一个遥控器上，所有按键的数据码均不相同。
2 红外接收控制模块的HDL设计
2．1 红外接收控制模块功能简介
红外接收控制模块是基于遥控器内部使用的芯片为HS6221。在红外接收控制方面，抗干扰能力强、使用灵活。红外接收控制模块的功能包括消除时钟的延时、频率的合成、时钟相位的调整等系统方面的需求。红外接收控制模块的主要优点在于以下四点：
(1)实现红外数据译码功能，提取数据包中有效内容并并行输出；
(2)由于红外收发协议中利用了PWM协议，更加增强了数据的抗干扰能力；
(3)可以通过改变地址参数实现对不同地址发射器的接收；
(4)将数据包中的数据与数据包中的数据反码进行比较从而确保接收过程中没有出错。
对于红外接收控制模块来说，其关键参数为起始码、数据1、数据0的各自高低电平的脉宽以及本地地址等。
2．2 红外接收控制模块组成
红外接收控制模块共由2部分组成。主要由时钟分频器和红外接收控制模块组成。Data是由8位数据以及8位地址组成。
2．3 红外接收控制模块各组成部分说明
时钟分频器：主要是将系统 时 钟(50MHz)分 频 成0．01MHz的时钟以驱动红外接收控制模块正常工作。PERIOD时钟分频模块的分频周期，当为15’d2500时分频得到周期为0．1ms的irda_clk时钟信号；仿真时候取15’d2是为了缩短仿真周期，减少工作量，产生周期为80ns的irda_clk时钟信号[2，3]。
注意：同时只能取一个值，仿真用15’d2，下到FPGA时用15’d2500数据处理模块：该模块是红外接收控制模块的核心部分主要由状态机构成(FSM)。
3、电路仿真、FPGA实现及应用测试

芯片的具体实现
本系统的FPGA采用Altera公司的Flex10k系列芯片。芯片利用开发软件Max+plusII将各个模块（图1虚线框部分）用VHDL语言描述并输入，由软件自动编译、综合、布局和布线，生成编程用的数据文件，加载到FPGA的配置存储单元。对FPGA芯片进行配置可有多种模式，由于本系统中有单片机，所以采用串行从模式，省掉了用一片EPROM来存储编程数据。当系统上电时，单片机自动将存在其内部的配置数据送到FPGA内部存储单元中。
这个技术基本上多运用于电路方面.