采用VHDL语言在CPLD内部编程实现Flash读取控制设计

时间:2025-11-01  作者:Diven  阅读:0

1、概述

采用VHDL语言在CPLD内部编程实现Flash读取控制设计

本设计已实用于国家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 基本设计模块图

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

F_CS 《= ”1“;

F_OE 《= ”1“;

F_WE 《= ”1“;

elsif enable”event and enable =“1” then

F_Abus 《= C_Abus;

F_CS 《= “0”;

F_OE 《= “0”;

F_WE 《= “1”;

C_Dbus 《= F_Dbus;

end if;

end process;

Flash control 2

d_count_rst 《= not(d_count(1) and (not d_count(0)) and empty);

sig_WD 《= not(d_count(1) and (not d_count(0)));

WR_DATA 《= sig_WD;

process(gclk,d_count)

begin

if reset =“0” then

d_count 《= “1”;

elsif F_CS = “1” then

d_count1 《= not d_count1 ;

if gclk“event and gclk =”1“ then

d_count2 《= d_count1;

d_count 《= d_count2;

end if;

end if;

end process;

process(reset,d_count,C_Dbus)

begin

if reset = ”0“ then

data_adder 《= (others =》”0“);

elsif d_count”event and d_count = “0” then

data_adder(31 downto 16) 《= C_Dbus;

elsif d_count“event and d_count = ”1“ then

data_adder(15 downto 0) 《= C_Dbus;

end if;

end process;

enable 《= enable1 and enable2;

process(reset,d_count,F_CS)

begin

if reset = ”0“ or F_CS = ”0“ then

enable1 《= ”1“;

enable2 《= ”1“;

elsif d_count”event then

if gclk“event and gclk =”1“ then

enable1 《= ”0“;

enable2 《= not enable1;

end if;

end if;

end process;

process(reset,F_CS)

begin

if reset = ”0“ then

address《= X”400000“;

elsif F_CS = ”1“ then

C_Abus 《= address;

address 《= adderss +1;

end if;

end process;

process(reset,F_CS)

begin

if reset = ”0“ then

address《= X”400000“;

data_adder 《=(others =》”0“);

elsif F_CS = ”1“;

address 《= adderss +1;

end if;

end process;

process(d_count2,F_CS)

begin

if F_CS = ”0“ then

enable1 《= ”1“;

enable 《= ”1“;

elsif d_count2 = ”00“ or d_count2 = ”01“ then

enable 《= ”0“;

end if;

end process;

process(gclk,sig_WD)

begin

if sig_WD = ”1“ then

Pulse_RW 《=”1“;

elsif gclk”event and gclk =“1” then

W_D1 《= sig_WD;

W_D2 《= W_D1;

if empty =“0” then

data_adder1 《= data_adder;

Pulse_RW 《= (W_D1 or (not W_D2));

end if;

end if;

end process;

(注:此程序在Xilinx公司的ISE6.2i环境下用VHDL编程实现,其仿真波形见下图)

3、 结束语

在实际应用中,以此CPLD对Flash的读取进行控制。仿真结果及最后的实际调试都表明该设计符合项目的要求。在程序中通过对读取的记数控制,本设计可以在不增加Flash片数的情况下支持16/32/64位的数据输出宽度。可以节约一定的成本,具有相当的灵活性和实用性。

(注:此程序在Xilinx公司的ISE6.2i环境下用VHDL编程实现,其仿真波形见下图)

图2 Flash control 1仿真图

图3 Flash control 2仿真图

3 、结束语

在实际应用中,以此CPLD对Flash的读取进行控制。仿真结果及最后的实际调试都表明该设计符合项目的要求。在程序中通过对读取的记数控制,本设计可以在不增加Flash片数的情况下支持16/32/64位的数据输出宽度。可以节约一定的成本,具有相当的灵活性和实用性。

猜您喜欢

分流器(Shunt Resistor)作为测量电流和保护电路的重要组成部分,受到关注。susumu作为知名的电子元件制造商,其分流器产品以高精度和高可靠性。市场...
2019-03-25 20:00:30

电流采样电阻作为关键的电子元器件,受到了关注。在众多品牌中,PHYCOM(飞元)作为一家专业从事电流采样电阻研发与制造的企业,凭借其高品质的产品和良好的市场口碑...
2013-10-29 11:08:30

我们的生活中,电子设备已经无处不在,而这些设备的稳定运行离不开一个关键部件——线性稳压器。就像电子设备的守护者,默默地保证着电流和电压的稳定,为电子设备的正常工...
2023-12-19 00:00:00

硬度计附件在测量过程中是非常重要的配件。附件可以提高测量的准确性和可靠性。不同材质和形状的样品需要相应的测量工具,专用附件能够确保测量结果的精准性。硬度计附件能...
2013-08-10 00:00:00

贴片电阻是电子电路中常见的元件,其封装尺寸直接影响电路板的设计和布局。以下列出一些常用的贴片电阻封装尺寸及其代码,方便工程师快速查阅:0402 (英制):也称1...
2025-04-14 15:01:56

贴片电阻,因其体积小巧,在电子电路中应用广泛。快速识别其阻值和型号对于电路设计和维修至关重要。一般来说,我们可以通过观察电阻表面的标识来判断。对于三位数的标识,...
2024-11-26 11:29:23

贴片电阻上的5m指的是电阻值为5毫欧姆,用符号Ω表示。毫欧姆是电阻单位欧姆的千分之一,即1毫欧姆=0.001欧姆。因此,5毫欧姆的电阻值非常小,通常用于需要低电...
2024-11-29 10:26:14

十字槽薄头自攻螺钉是应用于各类工业和日常生活中的紧固件。设计特点使其在连接材料时具有独特的优势。十字槽设计方便使用电动工具或手动工具进行快速安装,极大提高了工作...
2020-07-25 00:00:00

单向阀是重要的流体控制元件,应用于各类机械设备和管道系统中。其主要功能是允许流体单向流动,防止回流,从而保护设备的正常运行。单向阀通常由阀体、阀瓣和弹簧等组成,...
2021-08-25 00:00:00

气动钻机因其独特的工作原理和优越的性能,成为许多工业领域的首选工具。气动钻机具有较高的功率与转速,能够快速完成钻孔任务,提高工作效率。气动钻机在使用过程中产生的...
2009-10-15 00:00:00