基于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期
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期
总线 PXI FPGA 单片机 DSP MCU 电路 电路图 电阻 Verilog 仿真 示波器 嵌入式 相关文章:
- 热插拔和缓冲I2C总线 (04-14)
- PCIe总线何时突破Unix服务器坚冰(02-03)
- TMS320VC5402 HPI接口与PCI总线接口设计(04-12)
- 基于Nios II的I2C总线接口的实现(04-09)
- 双口RAM CY7C026在高速数据采集系统中的应用(04-12)
- 计算机在新型多电机同步系统中的应用(07-08)