原创 乒乓机制

2009-10-12 15:59 3197 13 15 分类: FPGA/CPLD

        以前用RAM静态采集了AD的数据,当时时间太紧那种结构只适合用来验证AD采集的正确性,不能用于动态显示和控制。前一段时间写了一个乒乓机制的程序,用来控制两个FIFO分别进行读写,跟适合我们的测试系统,不过还有一些小问题还需要解决,边调试边解决吧!


点击看大图


主要的控制部分的程序给出,欢迎拍砖!


-------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-----------------------  Entity Declaration------------------
ENTITY control IS
 PORT
 (
  clk : IN STD_LOGIC;
  a_full : IN STD_LOGIC;
  a_empty : IN STD_LOGIC;
  b_empty : IN STD_LOGIC;
  b_full : IN STD_LOGIC;
  a_q : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
  a_wr : OUT STD_LOGIC;
  b_wr : OUT STD_LOGIC;
  a_rd : OUT STD_LOGIC;
  b_rd : OUT STD_LOGIC;
  b_q : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
  data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
  a_data : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
  b_data : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
  q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
 );
 
END control;



--  Architecture Body


ARCHITECTURE control_architecture OF control IS
 TYPE states IS (S0,S1,S2,S3);
   SIGNAL current_state,next_state : states;
BEGIN
TRS:PROCESS(clk)
    BEGIN
      IF (CLK='1' AND CLK'EVENT)THEN current_state<=next_state;
      END IF;
END PROCESS TRS;
REG:PROCESS(a_empty,b_empty,a_full,b_full)
    BEGIN
      CASE current_state IS
        WHEN S0 => IF(a_empty='1' AND a_full='0'AND b_empty='1')THEN next_state <=S1;
                     ELSE next_state <=S0;
                   END IF;
        WHEN S1 => IF(a_full='1' AND b_empty='1' AND b_full='0')THEN next_state <=S2;
                     ELSE next_state <=S1;
                   END IF;
        WHEN S2 => IF(a_empty='1' AND b_full='1')THEN next_state <=S3;
                     ELSE next_state <=S2;
                   END IF;
        WHEN S3 => IF(a_full='1' AND b_empty='1')THEN next_state <=S2;
                     ELSE next_state <=S3;
                   END IF;   
      END CASE;
    END PROCESS REG;
COM:PROCESS(current_state)  
    BEGIN
      CASE current_state IS
      WHEN S0 => a_wr<='0';a_rd<='0';b_wr<='0';b_rd<='0';
      WHEN S1 => a_wr<='1';a_rd<='0';b_wr<='0';b_rd<='0';a_data<=data;
      WHEN S2 => a_wr<='0';a_rd<='1';b_wr<='1';b_rd<='0';q<=a_q;b_data<=data;
      WHEN S3 => a_wr<='1';a_rd<='0';b_wr<='0';b_rd<='1';q<=b_q;a_data<=data;
      END CASE;
END PROCESS COM;             
END control_architecture;

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1559257 2012-12-21 10:20

不过我有一点不明白,就是q和data的时钟是不一样的,只建立一个模块不会出现问题吗?

用户1559257 2012-12-20 14:57

最近我也在做FIFO的乒乓球设计,觉得有点难,实在不知道应该如何去设计control这个模块,看到楼主的图,简直就是茅塞顿开呀!
相关推荐阅读
bitao1983_395643617 2016-01-26 16:32
华为硬件开发是怎么做的,有什么不一样?(感同身受)
朱晓明 最近很多朋友咨询的一些硬件问题,发现朋友们没有仔细的看datasheet,也没有好好的做电路分析。我讲一讲华为是怎么做硬件开发的,给正在做硬件开发的朋友一些启示。说的不对的地方,大家批...
bitao1983_395643617 2015-12-08 11:24
(多图)宽带数字下变频器的FPGA实现
随着软件无线电理论的日趋成熟,软件无线电技术越来越多地应用到军用或民用通信系统中。其中,数字下变频技术(DDC)是软件无线电中的核心技术之一。数字下变频工作在模拟前端输入模拟信号经模数转换之后,而在终...
bitao1983_395643617 2015-10-15 09:41
扒开看移动5G原型机,聊聊其硬件设计的构想?
虽然5G标准尚未成型,但距离大家公认的商用化时间已不足5年(业界公认到2020年会实现5G的大规模部署)。为了抢占先机,参与标准制定,许多公司目前已提出了就5G的新兴算法和应用进行原型设计的需求,全球...
bitao1983_395643617 2015-10-15 09:39
(多图)时钟抖动和相噪及其测量方法
抖动测量一直被称为示波器测试测量的最高境界。传统最直观的抖动测量方法是利用余辉来查看波形的变化。后来演变为高等数学概率统计上的艰深问题,抖动测量结果准还是不准的问题就于是变得更加复杂。 时钟的特性可...
bitao1983_395643617 2015-06-27 22:49
你设计的PCB EMI达标了吗?
电子设备的电子信号和处理器的频率不断提升,电子系统已是一个包含多种元器件和许多分系统的复杂设备。高密和高速会令系统的辐射加重,而低压和高灵敏度 会使系统的抗扰度降低。因此,电磁干扰(EMI)实在是威胁...
bitao1983_395643617 2015-04-10 14:28
(多图) FPGA与ADC数字数据输出的接口及LVDS应用诀窍
现场可编程门阵列(FPGA)与模数转换器(ADC)输出的接口是一项常见的工程设计挑战。本文简要介绍各种接口协议和标准,并提供有关在高速数据转换器实现方案中使用LVDS的应用诀窍和技巧。 接口方式和标...
EE直播间
更多
我要评论
2
13
关闭 站长推荐上一条 /3 下一条