碧波液压网 欢迎你,游客。 登录 注册

基于CPLD的Flash读取控制的设计与实现

版权信息:站内文章仅供学习与参考,如触及到您的版权信息,请与本站联系。
液压导航网

  1 概述

  本设计已实用于国家863计划“可扩展到T比特的高性能IPv4/v6路由器基础平台及实验系统”项目中。其主要功能是对主控部分的FPGA读取Flash进行控制。

  在本项目中,主控部分的FPGA在重启时需要从Flash中下载初始化程序。当下载完成后,FPGA仍会根据需要从Flash相应地址读取数据。这就要求在FPGA和Flash之间有一块控制逻辑来控制对Flash的读取。本设计就是完成的对这块控制逻辑的具体实现。

  本文用VHDL语言在CPLD内部编程将其实现。本文第2节给出用VHDL语言在CPLD内部编程实现Flash读取的过程,第3节对全文进行概括总结。

  2 实现

  2.1 器件的选择

  我们选用Xilinx公司XC9500XL 3.3V ISP 系列XC95288XL-7TQ144I芯片。XC95288xl是一个3.3V的低电压、高效的CPLD,在通信和计算机系统中的有广泛的应用。它包含16个54V18个功能块,提供了6400个可用的门电路,这些门电路的传播延时为6ns.

  对于Flash,项目中选择了Intel公司的Intel StrataFlash系列的256-Mbit J3型Flash.其数据宽度可分别支持8位或者16位。

  2.2 实现中的问题及解决方法

  项目中选用的Flash的输出为16位,而向FPGA输出的数据为32位,因此产了数据宽度不匹配的问题,解决的方法有两种:

  第一 使用两块相同的Flash,分别将其输出的数据送入FPGA接口的高16位和低16位;其缺点是需要增加一块Flash,从而成本增加。

  第二 采用降低读取速度的方法,把从一块Flash中连续两次读取的16位数据拼接起来,组成一组32位的数据后送入FPGA接口。

  出于对成本和复杂度的考虑,在此设计中我们采取了第二种方法加以实现。

  2.3 基本设计模块图

  图1 程序模块图

  (注:框中部分为本设计所实现模块,setfpga模块完成对FPGA设置)

  2.4 用VHDL进行实现(注:实体部分定义可分别参见模块图中的划分)

  Flash control 1

  process(reset,gclk)

  begin

  if reset ='0' then

  count_reset <='0';

  elsif gclk'event and gclk ='1' then

  count_reset <= not(count(4) and count(3) and count(2));

  end if;

  end process;

  process(count_reset,gclk)

  begin

  if count_reset ='0' then

  count <=(others =>'0');

  elsif gclk'event and gclk ='1' then

  count <=count +1;

  end if;

  end process;

  process(count_reset,reset,enable)

  begin

  if reset ='0' then

  F_CS <='1';

  F_OE <='1';

  F_WE <='1';

  elsif count_reset ='0' then

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码: 看不清?点击更换

最新评论