<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=428 </link><title>CPLD在通信数据传输中的应用</title><author>东部牛仔</author><pubDate>2009-12-15 10:12:42</pubDate><description><![CDATA[<strong>1 概述</strong>
<p>　　随着大规模集成电路和单片机的迅速发展，复杂可编程逻辑器件（<a style="color: blue; text-decoration: underline" title="CPLD" href="http://article.ednchina.com/word/254464.aspx">CPLD</a>）具有使用灵活、可靠性高、功能强大的优点，在电子产品设计中得到了广泛的应用。CPLD 可实现在系统编程，重复多次，而且还兼容IEEE1149.1(JTAG)标准的测试激励端和边界扫描能力，使用CPLD 器件进行开发，不仅可以提高系统的集成化程度、可靠性和可扩充性，而且大大缩短产品的设计周期。由于CPLD 采用连续连接结构，易于预测延时，从而使电路仿真更加准确。CPLD 是标准的大规模集成电路产品，可用于各种数字逻辑系统的设计。近年来，随着采用先进的集成工艺和大批量生产，CPLD 器件成本不断下降，集成密度、速度和性能都大幅度提高，这样一个芯片就可以实现一个复杂的数字电路系统；再加上使用方便的开发工具，给设计修改带来很大方便。</p>
<p>　　实验室设计开发了一款无线数据接收平台，上下行速率可以达到1Mbps。射频部分采用了Maxim 的射频套片，基带部分采用了OMAP 平台，基带射频接口采用了ADI 公司的混合信号前端（MxFE&trade;）基带传输芯片AD9861，系统的逻辑控制和数据的缓冲采用了ALTERA 的CPLD EPM240GT100C3。</p>
<p>　　<strong>2 EPM240GT100C3 实现的功能与总体要求</strong></p>
<p>　　EPM240GT100C3要完成AD9861的时序控制、AD9861和OMAP之间的数据缓存以及提供网口芯片LAN91C93所需的控制信号。在这几项功能中，最主要的是数据缓存功能。要想正确地实现缓存功能，就必须要求缓存的收发I、Q数据不丢失，不颠倒，不错相，同时保证数据的先写后读。按照这样的思想，再结合两边的接口时序正确地配置读写地址、读写时钟，就可以完成所需功能。</p>
<p>　　<strong>3 CPLD 程序的详细设计</strong></p>
<p>　　CPLD的主要功能是完成数据缓存和一些时钟控制信号的产生。其功能框图如图1所示，主要包括双口RAM存储体单元，时钟和控制信号产生单元，OMAP侧地址发生单元，AD9861侧地址发生单元。</p>
<p align="center"><img border="0" hspace="0" alt="CPLD 功能框图" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/1.jpg" width="405" height="255" /></p>
<p align="center">图1 CPLD 功能框图</p>
<p>　<strong>　3.1 双口RAM 的设计方法</strong></p>
<p>　　因为OMAP和AD9861两边都有读写操作，于是选择了双口RAM（DPRAM）作为数据的缓存。由于CPLD内部的逻辑资源和布线资源有限，并且没有独立的DPRAM区，只能用DFF来完成缓存功能，这就限制了DPRAM的大小。因为系统要求每个DMA中断读写8个数据，为了减小读写冲突的可能性，同时尽量地降低FF资源的利用，最终采用了相当于两个8&times;8大小乒乓缓冲的16&times;8双口RAM缓冲区。DPRAM的外部接口如图2所示：</p>
<p align="center"><img border="0" hspace="0" alt="DPRAM 的外部接口" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/2.jpg" width="344" height="243" /></p>
<p align="center">图2 DPRAM 的外部接口</p>
<p>　　其中dina和douta接OMAP的数据线，dinb和doutb接AD9861的数据线，addra和addrb为内部产生的读写地址。Wr_rd_en控制读写的方向，和TX_RX相连，即当Wr_rd_en＝&rsquo;1&rsquo;时，为发射，数据由OMAP写入，AD读出，数据流向从dina－&gt;doub; 当Wr_rd_en＝&rsquo;0&rsquo;时，为接收，数据由AD端写入，AD读出，数据流向从dinb－&gt;doua;wrclk在四种时钟之间切换，分别为3.2768M，6.4M，75M，84M，由TX_RX和V_D_SEL信号的高低来控制。为了降低布线资源的使用，读数时没有用读时钟，而是直接把addra和addrb地址上的数据输出，因为addra和addrb本来就是与读写时钟同步的。</p>
<p>　<strong>　3.2 时钟产生</strong></p>
<p>　　CPLD输入时钟有来自射频的16M时钟，来自外部晶振的32.768M时钟和来自OMAP接口的75M时钟CLK。其中16M时钟用于产生数据应用时AD9861所需要的3.2M、6.4M转换时钟，32.768M时钟用于产生语音应用时AD9861所需要的1.6384M、3.2768M时钟以及CODEC AIC1110所需要的8K和2.048M时钟。SDCLK本可以作为OMAP读写的主时钟，但必须要使用CAS信号作为读写允许配合使用才行，为了节省布线资源，不用读写允许，就直接用CAS作为写时钟及OMAP侧的地址产生使用，而SDCLK则用于产生一些同步脉冲。这些产生的时钟除了输出给外部芯片外，还在CPLD内部作为地址产生的时钟使用。3.2M和6.4M的时钟产生是把16M的时钟从0到4计数，由reset和ad_da_enable给计数器清零，这样的模5计数器的最低位即为6.4M，次低位为3.2M时钟。这种时钟产生的方式只需要三个DFF，节省逻辑资源，而且不会产生毛刺，但产生的时钟占空比不是50％，实践证明在低速应用时，AD9861是可以正常工作的。系统的时钟时序如图3所示。</p>
<p align="center"><img border="0" hspace="0" alt="时钟时序" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/3.jpg" width="477" height="204" /></p>
<p align="center">图3 时钟时序</p>
<p>　　1.6384M和3.2768M时钟的方法同理，只是需要把32.768M的时钟20分频而已，同样计数器的清零由reset和ad_da_enable控制，这样得到的模20计数器的第2位即为3.2768M，第三位为1.6384时钟，时序跟上图相似，这里就不再给出。 这四个时钟被分时赋给AD9861的主时钟ADA_CLK，具体是哪个时钟被赋ADA_CLK，由收发切换信号TX_RX，语音和数据选择信号V_D_SEL控制。当TX_RX=&rsquo;0&rsquo; 且V_D_SEL=&rsquo;0&rsquo;时，输出给ADA_CLK的时钟为1.6384M；当TX_RX=&rsquo;1&rsquo;且V_D_SEL=&rsquo;0&rsquo;时，输出给ADA_CLK的时钟为3.2768M；当TX_RX=&rsquo;0&rsquo; 且D_SEL=&rsquo;1&rsquo;时，输出给ADA_CLK的时钟为3.2M；当TX_RX=&rsquo;1&rsquo; 且V_D_SEL=&rsquo;1&rsquo;时，输出给ADA_CLK的时钟为6.4M。</p>
<p>　　为了进一步节省资源，可以考虑把模5和模20的计数器共用，方案如图4所示，BIT1和BIT2即为所需的时钟，这时前端时钟源由V_D_SEL选择，BIT1和BIT2的选择输出由TX_RX控制。</p>
<p align="center"><img border="0" hspace="0" alt="模5 模20 计数器共用的时钟产生方案" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/4.jpg" width="401" height="164" /></p>
<p align="center">图4 模5 模20 计数器共用的时钟产生方案</p>
<p>　　2.048M的时钟产生由32.768M时钟16分频得到，计数器的复位由reset和语音允许audcken控制，这样得到的模16的计数器的高位即为2.048M时钟。8K时钟是对产生的2.048M时钟256分频得到。</p>
<p>　　<strong>3.3 地址产生</strong></p>
<p>　　在使用双口RAM作为数据缓存时，有两部分地址产生电路：OMAP侧地址产生电路和AD9861侧地址产生电路。AD9861侧地址产生电路和OMAP侧地址产生电路大致相同，但由于这2个地址发生器同时使用，所以不能复用。OMAP的地址发生器框图如下：</p>
<p align="center"><img border="0" hspace="0" alt="OMAP 的地址发生器" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/5.jpg" width="420" height="167" /></p>
<p align="center">图5 OMAP 的地址发生器</p>
<p>　　CAS 时钟只负责对低3 位地址进行计数，而最高位由于选择2 个8&times;8RAM 中的一个，为防止adda 和OMAP 同时读写同一个RAM，将OMAP 侧的高位地址线取值为AD9861 侧的地址最高位的反相。DMA 请求清零信号作用：在AD9861 侧每触发一次DMA 请求，就生成一个DMA 请求清零信号，用于复位OMAP 侧地址发生器，避免由于某此误触发引起OMAP 读写地址混乱。AD9861 侧地址发生器如下：</p>
<p align="center"><img border="0" hspace="0" alt="AD9861 侧地址发生器" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/6.jpg" width="449" height="177" /></p>
<p align="center">图6 AD9861 侧地址发生器</p>
<p>　　4位地址总线的低3位用于选择同一片RAM中的8个地址，最高位用于选择2个8&times;8RAM中的一个，收发切换信号用于在收发切换时给地址发生器清零，复位由于逻辑误触发导致的地址总线错误。</p>
<p>　　<strong>3.4 LAN 控制信号产生</strong></p>
<p>　　lan91c93是一款嵌入式以太网控制器，和OMAP一起构成了嵌入式的以太网网络接口卡。OMAP用异步的FLASH接口时序来访问lan91c93，由于lan91c93没有片选输入端，所以把flash的片选和读写信号通过作一定处理后输出给lan91c93。OMAP把CS1空间分配给了lan91c93，当nFLASH_CS1为低时，把nFLASH_WE，nFLASH_OE输出给nLAN_WE,nLAN_OE，否则nLAN_WE，nLAN_OE为高电平。同时把LAN_RDY信号通过<a style="color: blue; text-decoration: underline" title="CPLD" href="http://article.ednchina.com/word/254464.aspx">CPLD</a>透传给OMAP，通知OMAP lan91c93准备好数据的交换。</p>
<p>　　<strong>4 仿真和实测</strong></p>
<p><strong>　　4.1 数据接收状态仿真</strong></p>
<p>　　置V_D_SEL 为高，TX_RX 也为低，表示现在处于数据接收状态。依据时序关系产生所需的时钟，复位信号；产生AD9861 数据线上的数据，<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr93" jquery1260843129785="67">模拟</nobr>AD 的输出； 产生ADA 使能输入控制信号AD_DA_ENABLE；SDRAM CAS 信号等等。如下图所示，DINB为AD9861数据线上的数据，WRCLK为内部产生的6.4M锁存时钟，用来把DA数据线上的数据写入双口RAM中，AD9861侧的地址ADDRB是对写时钟WRCLK的下降沿计数得到的。当ADDRB为8或0时，产生一DMA中断，触发OMAP通过EMIFF接口把数据读到<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr218" jquery1260843129785="68">DSP</nobr>的MEMORY进行处理，每个DMA请求读8个数据，产生8个低脉冲的CAS信号，对CAS的脉冲个数进行计数，得到OMAP侧地址的低3位，最高位由ADDRB的MSB取反得到，这样能避免读写冲突。可以看出AD的输出数据能够被正确地复现在OMAP的EMIFF接口数据线上，并被OMAP正确地读进去。</p>
<p align="center"><img border="0" hspace="0" alt="数据接收状态信号时序" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/7.jpg" width="476" height="184" /></p>
<p align="center">图7 数据接收状态信号时序</p>
<p>　　<strong>4.2 数据发射状态仿真</strong></p>
<p>　　置V_D_SEL 为高，TX_RX 为高，表示现在处于数据发射状态。依据时序关系产生所需的时钟，复位信号；产生EMIFF 接口数据线上的数据，模拟OMAP 输出的发射数据； 模拟产生ADA 使能输入控制信号AD_DA_ENABLE；SDRAM CAS 信号等等。如下图所示，ADA_CLK为内部产生的6.4M时钟，输出作为ad9861的DA转换的主时钟。对ADA_CLK的上升沿计数得到AD9861侧的地址ADDRB，当ADDRB为8或0时，产生一DMA中断，触发OMAP通过EMIFF接口把发射数据输出到EMIFF接口数据总线上，每个DMA请求写8个数据，产生8个低脉冲的CAS信号，对CAS的脉冲个数进行计数，得到OMAP侧地址的低3位，最高位由ADDRB的MSB取反得到，这样能避免读写冲突。DINA为EMIFF接口数据线上的数据，用CAS延迟信号的下降沿来锁存DINA，满足EMIFF的SDRAM写时序，可以正确地把数据写入到双口RAM中。DOUTB为输出给DA的数据，同时按照时序要求产生一发射同步信号TX_SYNC,用来指示发射的I和Q，用ADA_CLK的上升沿采样，正好能采样到DOUTB和TX_SYNC的中间，确保数据的稳定性。</p>
<p>&nbsp;</p>
<p align="center"><img border="0" hspace="0" alt="数据发射状态信号时序" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/8.jpg" width="465" height="191" /></p>
<p align="center">图8 数据发射状态信号时序</p>
<p>　<strong>　4.3 数据实测结果</strong></p>
<p>　　记录的频谱图，时域波形图和星座图如下，频谱为250K，跟信号源设置的频偏一致。时域波形I 落后Q 90 度，且I 的最大值对应于Q 的零点，两者的正交性得到了保证，星座图是一个圆同样证明了这一点。</p>
<p align="center"><img border="0" hspace="0" alt="接收信号频谱图" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/9.jpg" width="470" height="251" /></p>
<p align="center">图9 接收信号频谱图</p>
<p align="center"><img border="0" hspace="0" alt="接收信号时域波形图" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/10.jpg" width="410" height="296" /></p>
<p align="center">图10 接收信号时域波形图</p>
<p align="center"><img border="0" hspace="0" alt="接收信号星座图" src="http://pagesadmin.ednchina.com/images/article/a90426bd-2be1-43b7-864d-453046d1767e/11.jpg" width="325" height="278" /></p>
<p align="center">图11 接收信号星座图</p>
<!-- 2009/10/24 13:59:14-->]]></description></item></channel></rss>