微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 基于PCI9054的PCI高速通信接口实现

基于PCI9054的PCI高速通信接口实现

时间:04-22 来源:互联网 点击:
Hiog HDL软件实现

FPGA内部在PCI9054本地总线LOCAL Bus基础之上进行设计;FPGA片内RAM或FIFO可以在QUARTUSII环境下利用利用工具MegaWizard Plug_In Manager调用功能模块生成。单双口、存储容量、数据总线的宽度以及同步或异步自行定制。为与MCU或DSP等处理器通信,要设计RAM访问仲裁模块。决定某一时刻对RAM访问的主方;PCI9054支持单周期、突发和DMA传输,在FPGA内部要设计本地端总线控制模块,实现局部总线的状态控制,同时产生FPGA片内RAM的读写时序及地址信号。

PCI9054支持单周期、突发传输和DMA传输,因此在状态机设计中不仅要满足单周期传输的时序。还要兼顾突发和DMA传输时序。依据FCl9054的datasheet以及PCI总线协议,其状态转换图如图3所示:


图3 PCI9054状态转换图

状态机是控制单元的主体,接受外部信号以及数据单元产生的信号,产生控制信号序列。状态机的关键是如何把一个实际的时序逻辑关系,抽象成一个时序逻辑函数。根据状态转换图.采用3个always语句.即对应三个进程来完成Moore状态机。一个用于状态机的同步时序部分,在本地时钟clk的上升沿到来时.将nextstate状态赋给currentstate;个用于描述状态转换;另一个用于描述输出的组合逻辑。在这里重点阐述状态转换进程,其Verilog HDL代码简略如下所示:

always @ (lads,lblast)
begin case(currentstate)
S0:if(! lads)
nextstate<=S1;
else
nexbtate<=S0;
S1:if(! lblast)
nextstate<=S2;
else
nextstate<=S4;
S2: nextstate<=S3:
S3:if(! lads)
nextstate<=Sl;
else
nextstate<=S0;
S4:nextatate<=S5;
S5:if(blast)
nextstate<=S5;
else
nextstate<=S6;
S6:if(! lads)
nextstate<=S1;
else
nexmmte<=S0;
endcase
end

输出组合逻辑进程如下所示:

always @(currentstate)
case(currentstate)
SO:begin lready<=1'b1;
ram_wr<=1'b0:
ram_rd<=1'b0;
end
......
endcase


图4 利用QUARTUSⅡ仿真生成的State Machine图(可与图3对应)


图5 PCI9054 LOCAL Bus单周期传输时序图

4 结论

利用DriverStdio开发PCI9054的驱动程序,实现主机对FPGA内部RAM的读写,利用示波器检测ads,blast信号,在8位数据总线的情况下,实现数据传输率可以达到26.8Mbyte/s,接近PCI的极限传输速率(图4、5所示)。本设计已经应用,经实际运行,传输速度快,数据正确,稳定可靠,经过扩展,同时可应用于其它需要与PCI数据总线接口的设备当中,可缩短PCI设备的开发周期,提高工作效率。

本文创新点:利用PCI9054设计的PCI高速通信接口,采用了FPGA内部RAM间接缓冲技术,可以与DSP,MCU等微处理器高速通信,扩展性强,适用于可应用于其它需要与PCI数据总线接口的设备当中。

项目经济效益:20万

作者:江勇      来源:《微计算机信息》(嵌入式与SOC)2009年第6-2期

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top