《电子技术应用》
您所在的位置:首页 > 模拟设计 > 设计应用 > 双口RAM在PCI总线与AVR接口设计中的应用
双口RAM在PCI总线与AVR接口设计中的应用
邓江涛,傅 煊 中国工程物理研究院
摘要: 为了提高PCI总线与AVR单片机之间的数据传输速度,利用双口RAM通过共享的方式实现PCI总线与AVR单片机之间的高速数据交换。利用有限状态机方法将PCI接口芯片局部端逻辑转换为双口RAM读写控制信号和地址数据信号,并通过仿真工具Modelsim Se对接口电路进行了验证,得出的仿真波形符合要求;利用乒乓操作方法实现PCI接口芯片和AVR单片机交替读/写数据存储区,有效提高了PCI总线与AVR单片机之间的数据传输速度。实践证明该设计方法是解决高低速设备的传输瓶颈问题的有效途径。
Abstract:
Key words :

    由于PCI总线工作在频率33 MHz,AVR单片机工作在16 MHz,它们之间时钟不同步,要进行有效通信,必须在它们中间设置数据缓冲区,作为双方交换数据的单元。双口RAM正好解决了这个问题,它既作为PCI总线的局部空间又作为AVR单片机的外部扩充存储器,通过交替读/写达到交换数据的目的。下面以PLX公司的PCI总线接口芯片PCI9052和IDT公司的双口RAMIDT7006为例,介绍实现数据交换的方法。

1 PCI9052和IDT7006
1.1 PCI9052简介
    PCI9052是PLX公司为扩展适配板卡推出的低价位PCI总线目标接口芯片,低功耗,符合PCI V2.1规范,它的本地总线(Local Bus)可以通过编程设置为8/16/32位的复用或非复用总线。其主要性能特点如下:
    (1)异步操作。PCI9052的Local Bus与PCI总线的时钟相互独立运行,两总线的异步运行方便了高、低速设备的兼容。Local Bus的时钟频率范围为0~40 MHz,TTL电平;PCI的时钟频率范围0~33MHz。
    (2)可编程的局部总线配置。PCI9052支持8位、16位或32位Local Bus,它们是复用或非复用。PCI9052有4个字节允许信号(LBE[3:0]#),26条地址线(LA[27:2])和32位、16位、8位数据线(LAD[31:0])。
    (3)直接从(目标)数据传送模式。PCI9052具有双向FIFO,可用于零等待状态突发操作,支持从PCI总线到Local Bus的存储器映射空间的突发传送和I/O访问。Local Bus能被设置成突发或持续单周期。
    (4)4个局部片选。PCI9052提供4个片选,每个片选的基地址和范围被E2PROM或主机编程成唯一的。
    (5)5个局部地址空间。PCI9052提供5个局部地址空间,每个局部地址空间的基地址和范围可以被E2PROM或主机编程成惟一的。
1.2 IDT7006简介
    IDT7006是美国IDT公司开发研制的高速16K×8 B双口静态RAM。该双口RAM提供两个独立的具有控制、地址和I/O引脚的端口。其主要性能特点如下:可同时访问双端口同一存储器空间;高速存储访问,访问速度最高可达到15 ns;低功耗运行;双片选,允许不需要外部逻辑的深度扩展;使用级联和主从选择引脚可以扩展IDT7006的数据总线宽度到16位或更宽;具有硬件仲裁方式、中断仲裁方式和信号灯仲裁方式,来防止访问冲突。

2 PCI9052和IDT7006的时序转换
    为将PCI9052的局部信号逻辑转换为双口RAMIDT7006的读/写控制信号逻辑,采用有限状态机的方法来实现它们之间的逻辑转换。在可编程器件设计中,状态机的设计方法是应用最广泛的设计方法之一,它是一种简单、结构清晰、设计灵活的方法,易于建立、理解和维护,特别应用在具有大量状态转移和复杂时序控制的系统中,更显其优势。设计中用VerilogHDL描述的状态机来实现接口的时序转换。
2.1 硬件连接
    硬件上采用可编程逻辑器件MAXⅡ(EPM240)来实现PCI9052和IDT7006的接口电路,PCI9052采取非复用、8 b局部总线宽度和单周期读/写方式,信号连接关系如图1所示。

a.jpg


2.2 有限状态机
    PCI9052局部总线有4个基本的状态:空闲状态、地址状态、数据/等待状态和恢复状态。一旦局部总线的主设备拥有总线并需要开始一个总线访问,则进入地址状态,b.jpg有效,此时一个有效的地址出现在地址/数据总线上;数据传输是在数据/等待状态进行的,c.jpg或者内部等待产生器用来在此状态插入等待状态;d.jpg在最后的数据/等待状态有效,用来申明最后的数据传输;在地址/数据复用的模式下,所有数据传输完毕后,总线会进入恢复状态;随后总线回到空闲状态,等待下一次的总线访问。
    整个状态机分为外状态机和内状态机两个大的部分,外状态机识别PCI9052的读周期和写周期,并转移到相应的内部状态机,然后内部状态机再进行读/写的内部状态转移,通过不同的状态输出不同的双口RAM读/写控制等信号,达到时序转换的目的。外状态机状态转移图如图2所示。

e.jpg


    内状态机中写状态机有5个状态:S0,写空闲状态;S1,写开始;S2,写等待;S3,单周期写;S4,写结束。具体的状态转移图如图3所示。

f.jpg


    当系统复位后,状态机输出双口RAM的片选信号g.jpg,输出使能h.jpg,状态机处于空闲状态。
    写操作的状态机转移过程是:当状态机处于空闲状态时,在每次时钟的上升沿采样到b.jpg有效和h1.jpg=1,并且如果双口RAM的片选信号i.jpg有效,状态机进入写开始状态,输出j.jpgk.jpg有效,并将9052的局部有效地址输出给双口RAM;当采样到l.jpg有效时,状态机进入写等待状态,输出m.jpg;当采样到n.jpg且BUSYL=1、时,状态机进入单周期写状态,输出p.jpg,将有效数据输出到双口RAM;当采样到m1.jpg无效,状态机进入写结束状态,输出q.jpgg.jpgh.jpg;之后如果采样到b.jpg有效就进入下一次的写操作循环,如果采样到b.jpg无效且r.jpg无效,状态机回到空闲状态。
    读状态机也有5个状态:S0,读空闲状态;S1,读开始;S2,读等待;S3,单周期读;S4,读结束。具体的状态转移图如图4所示。

u.jpg


    读操作的状态机转移过程是:当状态机处于空闲状态时,在每次时钟的上升沿采样到b.jpg有效和h1.jpg=0,并且双口RAM的片选信号i.jpg有效的话,状态机进入读开始状态,输出j.jpgk.jpg有效,并将9052的局部有效地址输出给双口RAM;当采样到l.jpg有效时,状态机进入读等待状态,输出s.jpg;当采样到n.jpg且BUSYL=1,o.jpg时,状态机进入单周期读状态,输出p.jpg,将有效数据输出到PCI9052;当采样到m1.jpg无效,状态机进入读结束状态,输出q.jpgg.jpgh.jpg;之后如果采样到b.jpg有效就进入下一次的读操作循环,如果采样到无效且无效,状态机回到空闲状态。
2.3 仿真结果
    在ModelsimSE仿真平台下,实现了PCI9052读/写双口RAM的读/写过程,读操作仿真波形如图5所示,写操作仿真波形如图6所示。从仿真波形可以看出,该代码可以实现将PCI9052的读/写控制信号转换成双口RAM的读/写控制信号,完成时序的匹配。

v.jpg

w.jpg



3 双口RAM的读/写程序
    为了达到用低速模块处理高速数据流的效果,在双口RAM的程序处理上采用乒乓操作的技巧。乒乓操作的最大特点是通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块”进行运算与
处理。把乒乓操作模块当作一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流水线式处理。所以乒乓操作常应用于流水线式算法,完成数据的无缝缓冲与处理。
    设计中将双口RAM分为A,B两个部分,各占8 KB空间。通过9052和AVR交替对两个存储器进行读/写操作到达交换数据的目的。在双口RAM的仲裁方式选择上选取中断和硬件仲裁结合的方式,中断仲裁在硬件电路设计上比较简单,只要将双口RAM两侧的INT引脚连接到AVR和PCI90 52的中断引脚上,软件设计上只要编写双口RAM操作程序和中断服务程序两部分。具体过程是:
    (1)数据下行(PCI9052写,AVR读)。在首次发起数据传输时,通过握手信号告诉AVR本次数据传输共多少个字节。然后发起本次数据传输,如果数据传输长度小于8 KB,9052向双口RAM的A区写入数据,并在数据全部写完之后对地址3FFFH(右端口信箱)执行一个写操作,这样i.jpg引脚变为低电平,触发AVR的一个中断响应程序,该程序就是双口RAM读写程序中的读函数,该函数读取双口RAM A区中事先约定长度的数据,并在操作的最后对地址3FFFH(右端口信箱)执行一个读操作以恢复x.jpg引脚为高电平,随后退出中断响应程序。
    如果数据传输长度大于8 KB,9052写完A区后,立即对地址3FFFH(右端口信箱)执行一个写操作,这样x.jpg引脚变为低电平,触发AVR的中断响应程序,该程序读取全部A区的数据,然后对地址3FFFH(右端口信箱)进行一个读操作,使x.jpg恢复为高电平,之后继续读取B区的数据;这时9052如果在B区完成了全部数据的写入,则AVR在B区读到约定长度的数据后结束本次数据传输;如果9052在B区没有写完全部数据,则它查询x.jpg是否为高,如果为高则继续把剩下的数据写入A区;AVR在读完全部B区数据后进入暂停状态,直到接到再次中断信号继续读取A区数据;9052在A区的地址结束时继续触发x.jpg中断使得AVR继续读取A区数据,A区没完接着读B区,这样循环下去,直到完成约定数据的全部传输。具体的流程如图7所示。

y.jpg


    (2)数据上行(PCI9052读,AVR写)。双口RAM读/写程序中的写函数会将数据写入双口RAM的A区,并在最后一步对左端口信箱3FFEH地址执行一个写操作,引脚变为低电平,该引脚连至PCI9052的局部中断引脚,通知9052读取写入的数据,9052在读取数据之后会对左端口信箱3FFEH地址执行一个读操作,这样引脚恢复为高电平,使之退出中断响应程序。整个数据传输程序流程和下行相似,具体的流程如图8所示。

z.jpg



4 结语
    高性能双口RAM可以有效解决上位机和下位机之间的复杂数据处理问题,实现时序的粘连;乒乓操作是一个常应用于数据流控制的处理技巧,是解决高速设备和低速设备交换数据的常用方法。实践证明本文的设计方法是解决高低速设备的传输瓶颈问题,提高PCI总线与AVR单片机之间的数据传输速度的有效途径。

此内容为AET网站原创,未经授权禁止转载。