专栏中心

EEPW首页 > 专栏 > 用PLD和FIFO来转换总线带宽

用PLD和FIFO来转换总线带宽

发布人:mayer 时间:2009-07-23 来源:工程师 发布文章
用PLD和FIFO来转换总线带宽

 

许多场合下都需要在不同带宽总线之间进行数据的快速转换。例如,一个系统捕获视频信号并将其转换为8位数字信号,但系统用的是32位微处理器;在这种情况下8位数据必须用某种方法存储配置后才能和32位带宽总线进行通信。这就使FIFO缓存有了应用的可能。如图所示电路是由四个FIFO和一个可编程逻辑器件(SPLD)组成,这个电路提供了一个将8位数据转换成32位数据的解决方案。

8位数据按顺序存入4个FIFO中,且数据写入FIFO的动作是由可编程逻辑器件PALC22V10D来控制。其中有源低端EN电平用于控制22V10输出信号。当FIFO复位时,有源低端reset信号可以使所有输出信号都为低电平。当EN电平升高时,/WEN1为低电平,这时8位带宽总线上的数据写入FIFO1中。在下一个时钟周期,/WEN1断开,/WEN2为低电平,则下一个8位数据存入到FIFO2中。FIFO3和FIFO4用同样的方法写入数据。FIFO4写完后,计数器计数后,数据又能存入FIFO1中了。重复上述操作,8位数据就能顺序存入FIFO中了。

    P_O3]%3RDE9B%0X}ZWJ]YJ0.jpg

上图是一个实用小电路,它用于不同带宽总线的通信;它是将8位数据转换成32位带宽总线的数据,同样也可以通过改变FIFO和对PLD重新编程的办法,能很快也很容易地应用于其他系统和不同微处理器。数据读取线(REN)用于FIFO数据阵的输出,处理器从FIFO并行地读出数据。处理器以1/4写时钟速率用一个读时钟信号来读取,否则它能以更快的速度读取大量的数据。处理器通过FIFO的可编程标志位的空/满状态来知道什麽时候可以读取FIFO的数据。这种电路给很多带宽不匹配的系统提供了一个简单的解决方案,通过对逻辑器件进行重新编程和改变FIFO,我们能把它用于不同系统和不同微处理器的情况。

下面用于是22V10 FIFO控制器的程序代码:

library ieee;

                       use ieee.std_logic_1164.all;

                       USE work.STD_ARITH.all;

                      entity control is port(

                          clk, en, reset: in std_logic;

                          wen: buffer std_logic_vector(3 downto 0));

                       end control;

 

                       architecture archcontrol of control is

                       signal count: std_logic_vector(1 downto 0);

                       signal intwen: std_logic_vector(3 downto 0);

                       begin

                       upcount: process (clk)

                         begin

                            if (clk'event and clk = '1') then

                               if reset = '0' then

                                  count <= "00";

                               elsif en = '0' then

                                  count <= count + 1;

                               end if;

                            end if;

                         end process upcount;

 

                       demux: process (clk)

                         begin

                            if (clk'event and clk = '1') then

                               if en = '0' then

                                  case count is

                                      WHEN "00" => intwen <= "1110";

                                      WHEN "01" => intwen <= "1101";

                                      WHEN "10" => intwen <= "1011";

                                      WHEN "11" => intwen <= "0111";

                                      WHEN others => intwen <= "1111";

                                  end case;

                               else

                                  intwen <= "1111";

                               end if;

                            end if;

                         end process demux;

                        wen(0) <= intwen(0) and reset;

                        wen(1) <= intwen(1) and reset;

                        wen(2) <= intwen(2) and reset;

                        wen(3) <= intwen(3) and reset;

                        end archcontrol;

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

应用 V.I 晶片驱动LED II - 大功率 LED 阵列

视频 2010-02-26

AT89C52单片机与VB串行通信的实现

技术干货 | 采用 GaN 的 Cyclo 转换器如何帮助优化微型逆变器和便携式电源设计

应用 V.I 晶片驱动LED I - 恒流示范

视频 2010-02-26

技术干货 | 太阳能应用中的电力线通信

电源与新能源 2025-09-16

AT93C46or56or55串行EEPROM及单片机程序

模拟芯视界 | 如何确保有源 EMI 滤波器的稳定性和性能

模拟技术 2025-09-16

Kioxia 股价因 NAND 短缺上涨 70%;SK hynix 收获股份收益

MC56F8006 DSC简介

AT93C46 56 55串行EEPROM及单片机程序

AVR 单片机GCC 程序设计

技术干货 | 汽车激光雷达简介

飞思卡尔智能电表演示

视频 2010-02-10

源来如此 | 使用 LLC 谐振转换器实现宽工作电压范围建议的和技巧

3相永磁同步电机(PMSM)矢量控制

模拟芯视界 | 使用混合热插拔架构防止高电流故障

技术干货 | 协作机器人到人形机器人:将系统效率和安全性融入更大功率的机器人中

Atmel单片机应用技巧

技术干货 | 重新定义电池精度:Dynamic Z-Track™ 算法如何预测不稳定的电池负载

源来如此 | 以简便方式实现转变;通过 PWM 全桥实现 ZVS

更多 培训课堂
更多 焦点
更多 视频

技术专区