用双端口RAM实现与PCI总线接口数据通讯

提出了一种使用cpld解决双端口ram地址译码和pci接口芯片局部总线仲裁的的硬件设计方案,并给出了pci总线接口芯片寄存器配置实例,介绍了软件包windriver开发设备驱动程序的具体过程。
随着计算机技术的不断发展,为满足外设间以及外设与主机间的高速数据传输,intel公司于1991年提出了pci总线概念。pci总线是一种能为主cpu及外设提供高性能数据通讯的总线,其局部总线在33mhz总线时钟、32位数据通路时,数据传输速率最高可达133mbps。实际应用中,可通过pci总线实现主机与外部设备的高速数据传输,有效解决数据的实时传输和存储问题,为信号的实时处理打下良好基础。
本文主要提供一种基于pci总线的数据传输系统设计方案,其中双口ram起桥梁作用,完成上位机与外围主控单元之间的数据握手。
1 双端口ram实现pci总线接口方案
本系统主要用于解决上位机与外围控制单元的数据传输问题。上位机运行信息诊断程序,通过pci总线与外围控制单元以一定速率传输数据,在主机中实时监控并保存数据。由于实现高速实时数据传输,数据量大,所以在pci局部总线上插入一个高速双端口ram。双端口ram一端作为pci总线接口的本地端存储器,一端作为dsp目标存储器。需要传输保存的数据经dsp处理后借助双端口ram和pci总线接口完成了上位机与dsp的数据握手。本文提出的双端口ram实现pci总线接口方案如图1。
考虑到pci总线接口对局部总线的控制时序比较复杂,需要译码和控制电路来实现局部总线的访问及控制。本系统使用cpld解决双口ram的地址访问竞争冲突问题。需解决的主要问题有:①pci接口电路设计;②cpld地址译码和总线仲裁;③pci总线驱动程序开发。
2 pci接口电路设计
pci卡的设计一般采用两种方案。一种是根据pci协议在fpga或cpld中实现pci总线接口控制器,但是由于pci协议的复杂性,使得开发难度大、周期长;另一种使用现成的pci接口芯片,用户开发难度降低,只把重点放在pci接口芯片局部总线的接口设计和pci总线配置空间的初始化,而不用速度考虑pci总线规范上众多的协议规范,加快了开发时间。
本数据传输系统使用plx公司的pci9030总线接口芯片,以cpld完成逻辑控制及与外设的连接,整个系统的硬件框图如图2。其中双端口ram采用idt71v321,cpld选用xilinx公司的xc9536cpld芯片,eeprom选用ns公司的93cs56,控制单元dsp选用tms320lf2407a。
function imgzoom(id)//重新设置图片大小 防止撑破表格 { var w = $(id).width; var m = 650; if(w< m){return;} else{ var h = $(id).height; $(id).height = parseint(h*m/w); $(id).width = m; } } window.onload = function() { var imgs = $(content).getelementsbytagname(img); var i=0; for(;i
2.1pci9030内部结构及其数据传输
pci9030是plx公司开发的pci总线目标接口芯片。其特点:低功耗,pqfp176针封装,符合pciv2.2规范;在pci总线上是从设备,但在局部总线上是主设备;pci9030支持突发传输,有5个pci总线到局部总线地址空间,9个可编程的通用i/o,4个可编程的片选,支持热插拔。pci 9030主要由pci总线接口逻辑、局部总线接口逻辑、串行e2prom接口逻辑和内部逻辑组成,结构框图见图3。
pci9030支持pci主设备直接访问局部总线上的设备,数据传输方式分为内存映射的突发传输和i/o映射的单次传输,并且由pci基址寄存器设置在pci内存和i/o空间中的合适位置,另外局部映射寄存器允许pci地址空间转换到局部地址空间。
2.2配置实例
系统访问的双口ram存储空间为2kb,要求将这个存储器空间映射到局部地址空间0,采用内存方式映射,存储器的数据宽度为8位,并且不采用突发传输,读写时不可预取。下面介绍这个地址空间各个寄存器的具体配置过程。
(1)配置地址范围寄存器
根据pci配置寄存器与las0rr的对应关系以及双口ram的地址空间800h,取7ffh的补码得到fffff800h。又因为按照设计要求,要映射到内存空间的任何位置并且设置为不可预取的,这样lasorr寄存器后3位应该为000h。所以las0rr的值应该最终确定为fffff800h。
(2)配置基址寄存器
该寄存器的基址必须是地址空间范围的整数倍,在本例中必须是2k的整数倍,可将基地址定为00004000h,又由于基址寄存器位0为空间使能位,所以应将这一位设置1;至于位2、位3,由于是映射到内存空间,设为00h即可。所以las0ba的值最终被确定为00004001h。
(3)配置片选信号控制寄存器
该寄存器的地址范围和基地址必须与las0rr或las0ba所定义的范围和空间相对应。可根据pci9030提供的配置寄存器的方法确定cs0base的数值:板卡的2kb空间可以用十六进制表示为800h,将800h右移一位得到400h,然后将基地址加到400h左边的任何一位中。因为所采用的基地址为00004000h,所以得到的值为00004400h;又因为第1位为片选使能位,应该设置为1。所以最终确定的数值为00004401h。
由于局部总线采用8位的宽度,将工作方式定义在不使能突发,不预取,配置总线区域描述寄存器的数值确定为400140a2h。另外,还要根据要求设置cntrl寄存器控制pci9030的工作状态,确定为18784500h。当所有这些数据都配置完成后,便可将这些数据按照加载顺序写入串行e2prom中,从而完成整个系统的配置。
通过这几个寄存器的配置,一个局部地址空间便可以确定下来。在系统上电后,系统bios根据这几个寄存器的内容将板卡上2kb的ram空间重映射到pci空间中,使主机可以像访问自己的地址空间一样访问板卡上的ram。
2.3cpld控制逻辑
对于双口ram同一个地址单元,不能同时进行读或写操作,但两边连接的主控芯片,都可以对其进行读、写操作,因此必须解决地址竞争问题。本系统中,使用xilinx公司的xc9536cpld芯片完成pci局部总线的译码和控制电路。由于系统控制计算主要在dsp中完成,上位机只起监控和数据保存作用,因此规定对双口ram的操作dsp优先于pci9030;同时cpld也参与了dsp片外程序存储器flash和数据存储器ram的地址译码,控制逻辑用公式表示为:
3设备驱动程序设计
设备驱动程序开发工具通常有ddk、vtoolsd、windrvr等。为加快开发速度,采用jundo公司的windrvr开发设备驱动程序。其使用简单,支持多种操作系统。
采用windrvr开发pci桥接设备的驱动程序有两种方法。一种wizard开发向导是自动生成驱动程序框架代码,然后根据实际需要,加入定制功能。这种方法生成的代码较多,程序较复杂。另一种是在vc++创建工程中直接利用windrvr的api函数生成驱动程序,比在wizard生成的框架代码上修改更为灵活。本文采用后一种方法。以下是用windrvr开发pci9030桥芯片的驱动代码,只要稍加改动就可以作为其他pci芯片驱动程序的一部分,例如pci9050、pci9052等。程序中出现的变量名都由其名称反映含义,具体可以参见windrvr设计文档说明。
至此获得了本地端映射到用户的内存地址,调用读写函数就可以对本地芯片进行操作。

贴片机在线编程
静电纺丝机远程监控运维系统解决方案
LY12CZ铝合金极化腐蚀的声发射研究
康佳LED55X9电视拥有1×网络接口,采用60Hz刷新率,图像响应时间为4ms
iPhone 12已成二手市场最受欢迎的5G手机
用双端口RAM实现与PCI总线接口数据通讯
有了变频器,为什么还要使用软启动器?
国产质量较好的蓝牙耳机、质量好性价比又很高的蓝牙耳机
蛋白质检测仪的使用方法
无线通信技术的特点
遭到多方抨击质疑,Libra直面国会听证会
人员定位安全管控系统:提升安全管理水平的智能解决方案
电路板是如何设计出来的
超级UTM设备的功能组件及形态介绍
iPad 3将搭载A5X处理器并非A6
人工智能的发展前景和局限性
光宝科技完成全球首份桌上型电脑(Desktop Computer)产品类别规则
经典的运用PIC单片机实现LED点阵手写屏设计方案
安森美半导体推出LDO及超低压降线性稳压器
提升通道能力,发展通道经济,华为重磅发布智慧公路新产品与解决方案