CPLD/FPGA和单片机接口制作:李桂林2009-8-3主要内容:一、CPLD/FPGA和单片机各自的优缺点三、CPLD/FPGA和单片机的接口方式四、设计举例二、CPLD/FPGA和单片机优势互补一、CPLD/FPGA和单片机各自的优缺点单片机CPLD/FPGA优点:缺点:强大的信息(数据)处理、逻辑分析、决策判断等能力;体积小、性价比高、功能灵活、可靠性高、易于人机对话。低速;复位工作方式;程序跑飞。优点:一般只能实现数字逻辑;信息处理、逻辑分析、决策判断等“智能”方面相对单片机较弱。缺点:用户可自定制逻辑,在线可编程,开发便捷。信号传输效率高,适合高速采样场合;可以加密,抗干扰能力强,功耗低,可靠性高;将单片机和CPLD/FPGA相结合,可以优势互补,开发出功能强大,线路简洁、性能优越的系统。二、CPLD/FPGA和单片机优势互补单片机与CPLD/FPGA相结合,可由单片机处理复杂指令数据;CPLD/FPGA负责传送高速实时信号。CPLD/FPGA的I/O资源丰富,可以扩展单片机的接口;CPLD/FPGA可作为单片机的外设,完成单片机所要求的功能,例如,实现常用的地址译码,锁存器,8255等功能;也可实现加密、解密等单片机所要求的特殊功能。三、CPLD/FPGA和单片机的接口方式两种接口方式:1、总线方式2、独立方式接口要解决的两大问题:1、如何进行数据传输2、如何进行控制信息通信MCS-51RDALEP0P2WRPSENFPGA/CPLD其他外部设备基本原理框图:1、总线方式利用片外三总线结构(即数据总线、地址总线、控制总线)很容易实现单片机与FPGA/CPLD的总线接口。双向数据总线完成数据传输,单向控制总线和地址总线通过CPLD对外围对象控制。图1总线方式原理框图总线接口设计的要点:1、要详细了解单片机的总线读写时序,根据时序图来设计逻辑结构,其通信的时序必须遵循单片机内固定的总线方式读/写时序;2、FPGA/CPLD的逻辑设计较复杂,在程序设计上必须与接口的单片机程序相结合,严格安排单片机能访问的I/O空间。总线接口方式的优点:1、速度快;2、节省PLD芯片的I/O口线;3、相对于非总线方式,单片机编程简捷,控制可靠;2、独立方式基本原理框图:MCS-51P2P0P1P3FPGA/CPLD其他外部设备直接将单片机的I/0端口线与FPGA/CPLD的I/O相连。图2独立方式原理框图独立接口方式的优点:1、与总线接口方式不同,几乎所有的单片机都能以独立接口方式与FPGA/CPLD进行通信,其通信可由所设计的软件自由决定,形式灵活多样;2、FPGA/CPLD中的接口逻辑无需遵循单片机内固定总线方式的读/写时序,FPGA/CPLD的逻辑设计与接口的单片机程序设计可以分先后相对独立地完成。四、设计举例工程实例1:“山东省防工业计量站于2003年研制了“导爆索、雷管爆速校准仪”,并于2004年1月通过专家评审。该项目的研制,解决了导爆索、雷管爆速仪在1(1S^-10s)范围内各种信号端口模式下的校准问题。在研制过程中,由于单片机系统存在处理高速实时信号能力不强和抗干扰能力较差的缺点,引入可编程逻辑器件(CPLD/FPGA)弥补单片机系统的不足,用以处理高速实时信号,提高整机抗干扰能力。”单片机做主控芯片,实现集中管理外围设备(包括CPLD/FPGA)、处理复杂指令数据;CPLD作为单片机的被控设备,主要处理关键的高速实时信号;设计思路:为了进一步提高。为了进一步提高处理高速实时信号的可靠性,两部分之间功能应设计为相对独立,即单片机部分的故障应尽可能不影响CPLD部分的工作。设计原则:为了使硬件的设计应使软件设计尽可能简单——除串行设备外的其他所有部件应采用总线结构。硬件接口设计:图3单片机与CPLD通用接口连接方式P2.7P2.5ABCP2.6Y074138CSnMCU8031CPLDP2.0~P2.4P0.0~P0.7ALEWRnRDnA0~A1274373ADDRESSBUSRDnWRnGDATABUSD0~D12逻辑接口设计:要点:单片机下达一个任务给CPLD,CPLD完成任务后给单片机一个反馈信号,任务运行期间CPLD不响应单片机发来的除复位信号以外的其他信号。可根据实际需要,通过程序调整各个任务执行的优先级,一般设置处理高速信号的CPLD为最高优先级。单片机和CPLD通讯采取存储器控制和地址命令控制,即单片机发给CPLD的控制信息尽可能发送到CPLD中的一片存储区,CPLD根据此存储区的数据决定自身的动作;另一方面,对于单片机下达的实时命令信号可以采用地址组合的方式实现。程序实现:#defineCPLDADDRESS0x0000#includeabsacc.hmain(){unsignedcharADDRESSIndex;//CPLD某个功能部件的地址unsignedcharDATA_READ,DATA_WRITE;XBYTE[CPLD_ADDRESS+ADDRESSIndex]=DATA_WRITE;//单片机向CPLD写数据DATA_READ=XBYTE[CPLD_ADDRESS+ADDRESSIndex];//单片机从CPLD读数据}1)单片机部分2)CPLD部分moduleBusInterface(rst,CSn,ADDRESS,DAWRn,RDn);inputrst,CSn,WRn,RDn;input[7:0]ADDRESS;inout[7:0]DATA;wire[4:0]ADDRESSRAM;wire[7:5]ADDRESS_CONTROL;assignADDRESS_RAM=ADDRESS[4:0];assignADDRESS_CONTROL=ADDRESS[7:5];reg[7:0]InterfaceRAM[31:0];reg[4:0]ADDRESSValue;always@(ADDRESS_RAM)ADDRESSValue=ADDRESS_RAM;wire[7:0]DATA_IN;reg[7:0]DATA_OUT;……assignDATA_IN=DATA;assignDATA=(CSn}RDn)?8'bz:DATA_OUT;always@(ADDRESS_RAMorDATAorrstorCSnorWRn)begin//writebusif(~rst)beginInterfaceRM[0]=8'b0;InterfaceRM[1]=8'b0;InterfaceRM[2]=8'b0;InterfaceRM[3]=8'b0;InterfaceRM[4]=8'b0;InterfaceRM[5]=8'b0;InterfaceRM[6]=8'b0;InterfaceRM[7]=8'b0;//othersasfollowsendelsebeginif(CSn==1'b0&(!WRn))InterfaceRAM[ADDRESSValue]=DATA_IN;endend……always@(CSnorADDRESSorRDn)begin//readbusif(CSn==1'b0&(!RDn))DATA_OUT=InterfaceRAM[ADDRESSValue];endregADDRESS_CONTROLValue;always@(ADDRESS_CONTROL)ADDRESS_CONTROLValue=ADDRESSCONTROL;always@(ADDRESS_CONTROL)beginif(!CSn)begincase(ADDRESSCONTROLValue)3'b000:begin;end3'b001:begin;end//asfollows3'blll:begin;endendendendmodule工程实例2:——远距离数据采集监测系统随着现代工业的发展,远距离数据采集监测已成为日益重要的检测技术,广泛应用于工农业等需要同时监控温度、湿度和压力等场合。设计思路:为了提高系统的智能性、可靠性和实用性,可采用双CPU的方法,即在数据采集的远端和本地都采用单片机控制,远端完成数据的采集、抽样和发送,本地完成数据的接收、处理,同时采用一片CPLD作为键盘、显示器及打印机的接口扩展。系统硬件构成框图:传感器放大与调理ADC08098031RS485RS4858031XC95108键盘打印机显示器现场部分控制室部分下位机上位机图4系统组成框图CPLD与单片机及键盘、显示器的接口:打印机与CPLD及单片机的接口:8031RDP0WRCPLDBUSYINT1Data1~7STROBE图6打印机与CPLD及单片机的接口8031RDP0WRCPLDALEPB1~PB7LEDX44X3键PA1~4PA1~4PC1~PC3图5键盘、显示器与CPLD及单片机的接口程序设计:下位机负责数据的采集、抽样和发送。为了保证数据采集的实时性,下位机在未收到上位机指令时,内部轮流对8路模拟信号进行采集和变换,并存入缓冲存储器中。上位机负责数据的接收、处理和打印。上位机发送完指令后,立即转人接收状态,等待从远端下位机回送两个字节的数据,如果在规定的时间内未收到数据,或者是收到的数据中两个字节不一致,则说明通讯线路有错误,不能接收该数据,故重新发送一次指令,如果重发3次都未成功,则发出出错报替信号,提醒用户检查线路或设备。否则,上位机对收到的有效数据进行处理,将数值大小为0~255之间的数据转换为0^-5V的电压值,并进行显示。同时还要扫描键盘,处理各种功能键,完成用户的功能要求。CPLD主要完成接收单片机发送来的数据并控制4个LED数码管显示相应的数码,同时控制打印机将上位机处理的结果打印输出。工程实例3:——信号源设计DDS工作原理:图7DDS信号源框图分频比定时时钟CLK的频率输出波形的频率一个周期的波形所包含的样点个数相位累加步进值DDS合成信号频率分辨率输出频率计算公式:假设给定:150/2151fckNFfQ则,150/2151fckNFfQ设计方案:图8DDS实验系统框图工作过程分析:系统上电后,开始等待输入选择。当用户选择一种波形后,计算相位、幅度值,对RAM初始化。初始化完成后,即可输入一个有效的频率值,按回车键后,输出相应频率的波形,并且在数码管上显示出波形的类型和频率。设计分组:单片机系统的软硬件设计、CPLD的Verilog程序设计;数模转换以及滤波器的设计。附:总线接口模块设计Verilog参考程序:MCS-51RDALEP0A15WRCPLDmcu_alemcu_wrmcu_rdmcu_p0Mcu_p2_7接口定义:moduleinterface(mcu_p0,mcu_p2_7,mcu_ale,mcu_wr,mcu_rd,creg1,creg2);inout[7:0]mcu_p0;//8位数据总线inputmcu_p2_7;//地址总线inputmcu_ale,mcu_rd,mcu_wr;//控制总线inputcreg1;//连接内部控制寄存器,用于单片机从CPLD读取信号outputcreg2;//连接内部控制寄存器,用于单片机将信号写入CPLDregdph;//内部变量,用于锁存高位地址reg[7:0]dpl;//内部变量,用于锁存低位地址……锁存地址信号……always@(negedgemcu_ale)begindpl=mcu_p0;dph=mcu_p2_7;end如果需要读取或写入较多的CPLD内部寄存器时,地址锁存信号ALE可以从CPLD的全局时钟引脚global_clk引入,保证ALE信号到每个宏单元的延时相同,确保电路可靠工作。单片机读周期时序图:assignmcu_p0=((mcu_rd==0)&&({dph,dpl}==ADDR_CREG1))?creg1:8’hzz;单片机写周期时序图:always@(negedgemcu_wr)if({dph,