新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > 利用PCI局部总线实现BIade Server的数据交换

利用PCI局部总线实现BIade Server的数据交换

作者:时间:2012-06-04来源:网络收藏


3 基于FPGA的
通常PC都是采用本地硬盘来引导操作系统,完成设备的驱动,Blade则通过网络启动系统,所以网络配置要先于操作系统引导,并完成初始化和驱动装载。为了解决这个难点,我们采用“+FPGA+Flash”结构,在Flash中烧录双端口千兆网卡设备的初始化和驱动装载程序,由CPU在系统上电时加载Flash中的程序到系统内存。由于传输是PCI,而Flash是标准的,这就存在数据转换的
问题,问题解决的方案是通过FPGA完成PCI设备与Flash之间的通信,下面将详细介绍如何FPGA来完成PCI接口和Flash之间的通信。
3.1 FPGA系统逻辑与
整个FPGA系统设计基于PCI2.2从设备设计思想,PCI主设备为PCI桥芯片,用FPGA来完成PCI从设备功能,终端为Flash芯片。在FPGA系统中,PCI总线接口部分的设计参数为:PCI时钟为33 MHz(CLK),32位I/O接口(AD[31..0]),终端接口可以提供20位或32位数据线。PCI主设备与终端Flash间的通信采用PCI从设备(FPGA)来的。在FPGA的逻辑设计中,终端是兼有Memory空间和I/O空间的抽象设备,在实际的设计中终端Flash,只有对应的Memory空间。
根据FPGA的模块设计思想,采用Verilog语言将整个系统按功能进行分块设计,每个模块的输出可以为其他功能模块提供输入,各模块功能和设计思想如下:
“PCI顶层模块”是系统顶层模块,完成系统端口各使能开关的定义和调用其他5个功能模块。
“配置模块”完成PCI从设备配置寄存器的设置。
“基址模块”实现两个功能:1)配置I/O空间和存储空间(memory空间)的基地址;2)告知PCI从设备状态机(The State Machine)。
“状态机模块”是整个设计的核心,控制PCI主设备到终端的所有数据传输。在PCI地址传送阶段,通过采样C/BE[3..0]和IDSEL来决定是配置读写、存储空间读写还是I/O空间读写。
“校验模块”对AD[31..0]和C/BE[3..0]#信号作奇偶校验,以保证数据的有效性。
“重入模块”若PCI从设备进行一个读写操作,则必须在6个时钟周期内(定义PCI从设备为slow=10 b,慢速设备)使能DEVSEL。若PCI从设备进行数据传送(已经使能DEVSEL),终端在9个时钟周期内没有使能READY#,则将告知:“The State Machine模块”,终端暂时中止当前的数据传送,直到传送条件满足后,才重新启动数据传送。
3.2 FPGA系统逻辑功能仿真与结论
完成了各功能模块程序的编辑和编译过程,即可采用xilinx ISE11.2自带的HDL Bencher来生成测试激励文件,而后就可以调用Model Sim进行仿真了,该仿真也叫前仿真(逻辑功能仿真),布线后的仿真称为后仿真,也叫延时仿真,布线后的仿真包含门延时和线延时。
下面给出memory写操作功能仿真的详细步骤,并对结果进行分析。
I/O、memory空间读写过程非常相似,现对memory空间猝发方式写操作进行详细的说明。在图4中,通过测试文件生成pci_rst#=1,不产生复位动作,地址节拍pci_ad=0x2000_0000,表示PCI主设备从系统地址0x2000_0000地址开始写到终端0x00000地址开始的数据空间,可在“PCI顶层模块”定义(bkend_ad[19..0]=pci_ad[19..0]),终端只取系统地址的低20位地址。pci_cbe#[3..0]=0111,表示是memory空间写操作,在idle状态pci_frame#使能,irdy#、devsel#、stop#先不使能,PCI主设备将地址送到终端地址线上,data_stop#=1,表示终端支持猝发方式数据写操作。在下个时钟周期,进入到rw_wait状态,base_regionl#(memory片选)使能,告诉终端准备执行memory写操作,同时打开I/O、memory空间写操作使能。在下个时钟周期,进入到rw_wait2状态,如果终端使能ready#,表示终端准备好接收数据,使能devsel#、tr dy#、date_write#,其中date_write#使能,是让终端产生写使能信号。irdy#、trdy#使能。表示PCI主设备和终端数据可以有效传输,通过测试文件在PCI主设备的对应地址(0x2000_0000)下产生数据cdef0000,在该状态,写入终端第一个数据cdef0000。在下个时钟周期,进入到rw状态,如果在该状态下pci_frame#=0还使能,表示PCI主设备想支持猝发写,继续使能devsel#、trdy#信号,stop#不能使能,因为PCI主设备准备猝发写操作,在该状态下,只要pci_frame#=0(使能),循环写入数据cdef0001、cdef0002、cdef0003、cdef0004,上文已经介绍,下一个数据对应的地址自动加一,地址都是线性增加的。图4中,PCI主设备准备发送cdef0005数据时,irdy#=1(不使能),表示PCI主设备正在取数据,data_write#(终端写使能)不使能,告诉终端等待PCI主设备取数据,插入等待周期。在下个时钟周期,irdy#重新使能,date_wri te#也重新使能,继续写数据cdef0005,这样可以一直写数据。pci_frame#=1,表示进入最后一个周期的写数据操作,关闭irdy#、devsel#、base_regionl#使能。在下个时钟周期,进入到backoff状态,在下个时钟周期进入到idel状态,一个完整的memory猝发写就完成了。

伺服电机相关文章:伺服电机工作原理




评论


相关推荐

技术专区

关闭