您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术基于FPGA/CPLD的常见模块设计案例 正文
基于FPGA/CPLD的常见模块设计案例

基于FPGA/CPLD的常见模块设计案例

点击数:7908 次   录入时间:03-04 12:02:19   整理:http://www.55dianzi.com   DSP/FPGA技术

    ②使用PLL满足TI的TMS320C62XX系列DSP中XBUS的建立、保持时间要求。

    3 使用PLL解决使能信号漂移的难题

    由于DSP的XBUS响应FIFO的中断XINT0时,需要回复XRF、XCE0、XOE三个信号。只有三个同时有效时,才可以读FIFO,所以读使能信号RDEN=not(XCE0 or XRE or XOE);XBUS回复FIFO中断信号XINT1时,需要回复XWE和XCE1两个信号。只有两个信号时有效才可以写FIFO,所以WREN=not(XCE1 or XWE)。

    RDEN或者WREN都是由FPGA内部组合逻辑产生的,在FPGA内部组合逻辑的物理延时(tc)为3~5ns。考虑到XBUS的使能信号本身相对于时钟上升沿(td)就有1~7ns,所以使能信号有效相对时钟上升沿来说可能的变化范围为4~12ns,如图4所示。

    系统经过锁相环的相移,驱动FPGA内部逻辑的时钟。相对于XCLK来说,如果XBUS的回应信号的延时为1ns(图4中实线所示部分),则RDEN经过组合逻辑延迟,变为高有效的时候,可以在时钟的第一个上升沿采样到(图4中实线所示);如果XBUS的回应信号延时为7ns,则RDEN经过组合逻辑延迟以后,只能在第二个时钟的上升延才能采样到高有效信号。

    显而易见,XBUS信号延迟的变化范围太大,造成了系统设计的不稳定性。要解决这个问题,通过逻辑优化是没有办法来进行的。因为产生使能信号的那一级组合逻辑本身的延迟是无法改变的。

    本文灵活地运用了FPGA内部锁相环的移相功能,巧妙地解决了信号XCLK_Shift相对于XCLK的相移问题。而且,经过这个相移以后的时钟信号,无论XBUS使能信号怎么在1~7ns内发生变化,都可以保证在XCLK_Shift的第二个时钟周期采样到高有效信号。这样就确定了稳定的逻辑关系,为可靠稳定的设计奠定了基础。

    4 使用PLL满足XBUS的建立、保持时间要求

    如图1中所示,FIFO中数据输出时需要满足一定的建立和保持时间(图1中为时间5和时间6)。但是,时钟信号XCLK输入FPGA的时候需要首先经过IOB(输入输出模块),然后才能连接到锁相环部分进入全局时钟网络。采用同步输出的时候,输出数据也要经过IOB才可以输出。IOB本身的延时就很容易导致无法确保正确的建立和保持时间,满足不了XBUS的要求,如图5所示。

    为了解决这个问题,同样可以采用锁相环进行时钟相位偏移来弥补通过IOB引起的时钟相位偏移。这样,数据端的输出只要相对于经过偏移的时钟信号满足建立保持时间,那么,就可以满足原始时钟信号的要求(如图5中虚线所示)。

    5 结论

    通过合理的使用FPGA内部的锁相环,本文在不改动原有逻辑设计和代码的情况下,巧妙地解决了高速DSP扩展总线XBUS与FIFO的接口问题。为系统和逻辑设计解决了可能遇到的几个难点,为进一步的研究和开发提供了一种解决问题的新方法和思路。



www.55dianzi.com

    分频器是数字系统设计中的基本电路,根据不同设计的需要,我们会遇到偶数分频、奇数分频、半整数分频等,有时要求等占空比,有时要求非等占空比。在同一个设计中有时要求多种形式的分频。通常由计数器或计数器的级联构成各种形式的偶数分频及非等占空比的奇数分频,实现较为简单。但对半整数分频及等占空比的奇数分频实现较为困难。本文利用VHDL硬件描述语言,通过QUARTusⅡ3.0开发平台,使用ALTEra公司的FPGA,设计了一种能够满足上述各种要求的较为通用的分频器。

    一、电路设计

    采用FPGA实现半整数分频器,可以采用以下方法:设计一个模N的计数器,再设计一个脉冲扣除电路,每来两个脉冲扣除一个脉冲,即可实现分频系数为N-0.5的分频器。脉冲扣除电路由异或门和一个2分频器构成。本设计在半整数分频器原理的基础上,对异或门加一个使能控制信号,通过对异或门和计数器计数状态值的控制,实现同一个电路完成多种形式分频,如图1所示。

  45

      二、VHDL语言的实现

    现通过设计一个可以实现8.5分频,等占空比的17分频,2、4、8、16、32分频,及占空比为1∶8和4∶5的9分频等多种形式分频的分频器,介绍该通用分频器的FPGA实现。

    由图1所示的电路原理图可知,分频器由带使能端的异或门、模N计数器和一个2分频器组成,本设计用D触发器来完成2分频的功能,实现方法是:将触发器的Q反输出端反馈回输入端D,将计数器的一个计数输出端作为D触发器的时钟输入端。各功能模块的VHDL语言实现如下。

    1.模N计数器的实现

    一般设计中用到计数器时,我们可以调用lpm库中的计数器模块,也可以采用VHDL语言自己设计一个模N计数器。本设计采用VHDL语言设计一个最大模值为16的计数器。输入端口为:使能信号en,复位信号clr和时钟信号clk;输出端口为:qa、qb、qc、qd。其VHDL语言描述略。

    2.带使能控制的异或门的实现

    输入端为:xor_en:异或使能,a和b:异或输入;输出端为:c:异或输出。当xor_en为高电平时,c输出a和b的异或值。当xor_en为低电平时,c输出信号b。其VHDL语言略。

    3.2分频(触发器)的实现

    输入端为:时钟信号clk,输入信号d;输出端为:q:输出信号a,q1:输出信号a反。其VHDL语言略。

    4.分频器的实现

    本设计采用层次化的设计方法,首先设计实现分频器电路中各组成电路元件,然后通过元件例化的方法,调用各元件,实现整个分频器。其VHDL语言略。

    三、仿真结果及硬件电路的测试

    本设计的目的是通用性和简易性,只要对上述程序稍加改动即可实现多种形式的分频。

    1.实现8.5分频和等占空比的17分频

    只要将上述程序中,调用计数器模块时端口qa、qb、qc匹配为open状态,同时置xor_en为高电平即可。从编译报告看出总共占用8个逻辑单元(logIC elements),其仿真波形如图2~4所示。  54

  图二

  25

  图三

  45

  图四

        由图中qxiao和clk的波形可以看出,每隔8.5个时钟周期,qxiao信号产生一个上升沿,从而实现分频系数是8.5的分频,同时在qzheng端得到等占空比的17分频。设clk为170MHz,则qxiao输出为20MHz,qzheng输出为10MHz。

    2.实现占空比为1∶8和4∶5的9分频

    只要上述程序的xor_en置低电平即可在qxiao输出占空比为1∶8的9分频信号;在qzheng2输出占空比为4∶5的9分频信号。同样仅占8个逻辑单元(logic elements)。仿真波形如下。

    3.实现等占空比的2、4、8、16和32分频

    只要将上述程序中的xor_en置为低电平,同时将计数器模块的计数最大值设为16即可。仿真波形如下。

    由此可见,只要稍微改变计数器的计数状态值,对异或门进行选通控制,即可实现上述多种形式的分频。本设计在Altera公司的EP1K50QC208-3构成的测试平台上测试通过,性能良好。

    结束语

    我们在设计模拟雷达脉冲信号和用FPGA开发扩频芯片时就用到了上述多种形式得分频。本文旨在介绍一种进行FPGA开发时,所需多种分频的实现方法,如果设计中所需分频形式较多,可以直接利用本设计,通过对程序的稍微改动以满足自己设计的要求。如果设计中需要分频形式较少,可以利用本设计部分程序,以节省资源。



上一页  [1] [2] 


本文关键字:暂无联系方式DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术