语言:Verilog HDL & C
软件环境:Win7 & ISE 14.7
硬件:工控机 & PC & Xilinx FPGA & PLX9054
调试目的:PLX9054的Local端有3个工作模式:C, J , M。在本次项目中,我们选择了C模式(pin157与pin156接地)。在C模式下有两种数据传输方式,DMA和直接数据传输。我们要往FPGA里先写入一组数据(1024个 16bit宽),然后读出来。直接数据模式有两种,一种是PCI Target,一种是PCI Initial。我们选择的是PCI Target(Direct Slave)数据传输模式。这样,PLX9054是PCI的Slave,是FPGA的Master。
调试过程:选好工作模式和数据传输模式之后,就去研究PLX的一些寄存器,以及PCI端内存地址到LOCAL端本地地址的地址映射规则。PLX9054有五个寄存器,如下图所示。
PCI Register 中存放的是一些比如设备号和别的寄存器的一些基地址,详情请参考PLX9054的文档。LOCAL Register存放的是我们要配置的一些寄存器。分别是:
这里要注意的是,PCIBAR2和LAS0BA。这两个寄存器,分别存储了SPACE 0 在PCI端的基地址,和LOCAL端的基地址。一定要注意这中间的区别。我们要配置的是LAS0BA,因为根据文档,LAS0BA的第0位可以决定是否要使用地址编码,在C模式下,其默认是0,即不采用地址编码。我们要将其设置成1。LBRD0的作用:Memory Space 0 Local Bus Width. Writing a 00 indicates an 8-bit bus width. Writing a 01 indicates a 16-bit bus width. Writing a 10 or 11 indicates a 32-bit bus width.翻译过来就是,内存空间SPACE 0 的本地总线位宽。写入 00 即用8 -bit。下面自己看 ,我们要写入01。而根据文档,在C模式下其默认是11,所以需要设置好。
关于PLX9054和FPGA引脚之间时序图的配置,的确花了我很多时间。首先,我们要找到哪些信号线和控制线是干嘛的,我们要理清楚他们之间的关系。这之后,就好用ISE写Verilog代码来配置了。配置好后,再配置UCF文件,我调用了一个RAM的IP Core。所以,IP Core的文档需要读一读,重点注意文档中的一个时序图。
最后我用C代码,调用了PLX驱动给的一些API函数,对寄存器进行了配置,然后进行了读写操作。
总结:博客写的是有点简陋。主要是为了下次如果再调试9054的时候,好提醒自己一些。通过这次项目,我学习到了很多技术之外的东西,包括该如何读文档,如何开始一项新的工作。
关于读文档,这是每一个技术人员或者研究生必须掌握的技能。那么怎么读才好呢。
1.拿到一个项目后,先去从宏观上掌握这些东西,比如PLX9054,首先,我们要知道它是干什么的,他有哪些工作模式,在这些工作模式下有哪些工作方式。其次,去了解具体工作模式下的一些细节问题。文档是大而全的,你不明白你的目的,往往不知道在看什么,以及看了根本没用。
2.遇见问题的了,千万不要慌张,要上网找资料。你遇见的问题,别人早就遇见了。一定能找到答案的。但是,在找答案之前,一定要明确自己的目的,我要找什么,一些不相关的东西快速略过,免得被一些无用信息包围了。解决不问题。
dp_huang
2015-7-23