邱文静 张 凯 张晓辉
摘 要:提出一种基于SOPC的数据发生系统及其PCI接口的设计方案,详细介绍了系统主要模块的硬件设计方法,实现SOPC系统中定制用户自定义主从外设及其通过相应的主从端口与Avalon总线的连接,并在EDA 工具QuartusⅡ和ModelSim平台上用硬件描述语言VHDL语言对该方案中的基本模块,如数据产生,乒乓结构和PCI9054接口逻辑进行了逻辑综合及功能仿真。可以在本系统的基础上,通过软件的完善,实现复杂的非常规类型数据的产生,提高了系统的适应性和灵活性,有利于参数的修改和系统升级。
关键词:SOPC;Avalon总线;乒乓结构;PCI9054
中图分类号:TP27文献标识码:B
文章编号:1004-373X(2009)05-167-04
Design of Data Generating System Based on SOPC
QIU Wenjing,ZHANG Kai,ZHANG Xiaohui
(Southeast University,Nanjing,210096,China)
Abstract:A design of data generating system based on SOPC is presented.The implement of hardware circuit of significant parts is introduced.In this paper,user logic models are turned into SOPC Builder components with master port or slave port,which are connected to Avalon bus.The basic models,such as data generator,ping-pong structure and PCI9054 interface logic are synthesized in logic and simulated in function with VHDL hardware description language on QUARTUSⅡand ModelSim EDA tool-desk.Meanwhile,based on the system,generating more complex data can be achieved through the well established software.Using this method can enhance the system′s flexibility and adaptability which has wide application in the future.
Keywords:SOPC;Avalon bus;ping-pong structure;PCI9054
0 引 言
可编程片上系统(SOPC)是一种特殊的嵌入式系统,因为SOPC是片上系统(SoC),即由单个芯片完成整个系统的主要逻辑功能;SOPC是可编程系统,具有灵活的设计方式,可裁减,可扩充,可升级,并具备软硬件在系统可编程的功能;SOPC结合了SoC 和FPGA 的优点,涵盖了嵌入式系统设计技术的全部内容;SOPC 涉及目前已引起普遍关注的软硬件协同设计技术。
现以数据发生系统为例,介绍采用SOPC技术,以硬件描述语言为主要手段,产生伪随机序列的设计方案。研究了伪随机序列的产生,两片SRAM乒乓结构存储以及通过PCI9054芯
片与PC机之间数据传递等模块的硬件实现问题。
1 基本原理和系统的整体结构
本系统的主要模块框图如图1所示,SOPC系统采用Altera的Cyclone Ⅱ系列的芯片。系统包括Nios Ⅱ软核处理器,扩展的程序存储器FLASH,数据存储器SRAM,以及用户自定义逻辑如PCI9054接口逻辑模块、数据产生模块、乒乓结构模块等,并通过Avalon总线连接起来。数据产生模块产生伪随机序列,该数据存储到两片片外扩展的SRAM中,PCI9054接口逻辑将数据从SRAM中读出后通过PCI9054接口芯片传输到PC机中,其中SRAM中数据的写入和读出是通过乒乓结构模块控制的。
图1 系统主要模块框图
由于PCI总线协议比较复杂,该系统采用PCI接口专用芯片PCI9054,用于PCI总线的控制。为了实现数据的高速传输,采用了DMA传输模式。在该模式中,PCI9054既是PCI总线的控制器又是本地总线的控制器[1],所以其与FPGA之间的接口逻辑模块设置为Avalon主外设,控制SRAM的读操作。
FPGA的片上资源很宝贵,所以数据的存储采用了片外扩展SRAM。由于数据为16 b,而且为实现数据的高速传输,采用了两片256K×16 b的SRAM(IDT71V416)构成乒乓结构,以用作系统的数据存储器。为保证整个系统高速运行以及以后升级的需要,选用了存取时间为10 ns的IDT71V416。
2 系统主要硬件设计
2.1 数据产生模块
该模块的逻辑功能由VHDL语言设计实现,可以通过修改该模块的设计产生所需要的数据,本系统产生的数据为伪随机序列。模块的逻辑功能是:先产生8 b的伪随机数,再将所产生的数据通过D触发器组合成16 b的数据。该系统采用了非线性反馈的移位寄存器,即全状态移位计数器[2]来产生所需要的伪随机数。这种计数器利用了移位寄存器的所有状态,能够自启动,不需要额外输入。这种伪随机序列发生器,可大大简化结构,提高可靠性,易于实现。
全状态移位计数器的状态变化规律有两个特点:状态的最高位由反馈函数确定;余下的各位由原态移位得到。该系统采用的反馈函数为:
D1 = Q8軶4軶3⊙(Q2Q7Q6Q5Q1)
式中:Q璱(i=1,…,8)为电路的现态。
2.2 乒乓结构模块
2.2.1 乒乓结构的硬件实现
为了提高系统的传输速率,两片SRAM构成了乒乓缓存结构[3],即在一片执行写操作的同时,另一片在执行读操作。乒乓结构模块的原理如图2所示,P1口与数据产生模块相连接,仅具有写入功能,P2口设计为Avalon从端口,与Avalon总线相连仅具有读出功能。
图2 乒乓缓存控制器
对于数据产生模块而言,由于仅具有并行数据的输出,没有地址和控制信号端口,故它无法直接对SRAM进行写操作,因而要求乒乓结构模块有地址产生功能。P1口的CLK作为计数器的脉冲源,计数器的输出作为SRAM的地址。DB1连接数据产生模块的输出端。CB1为控制信号,因为P1口只有写入功能,所以其we_n恒接低,oe_n恒接高。
P2口为只有读出功能的Avalon从端口,所以AB2为从端口的地址线address;DB2为数据线readdata;CB2中的we_n为读信号线read,oe_n恒接低。由于两片SRAM始终处于工作状态,所以相应的片选信号chip_select_n恒接低。
两片SRAM在P1口和P2口之间的切换的控制信号即chipselect,由计数器产生。当计数值小于262 144时,chipselect接低,SR1与P1口相接,SR2与P2口相接;当计数值在262 144~524 288之间时,chipselect接高,SR1 与P2口相接,SR2与P1口相接。当计数值到达524 288时,计数器清零。
2.2.2 Avalon从外设的端口信号设计
系统中,数据产生模块与乒乓结构模块结合为一个模块,通过P2口挂在Avalon总线上。该模块的信号列表如图3所示。其中,avalon_slave_0接口类型的信号与Avalon总线相连接,而conduit_end接口类型的信号与SRAM相连接。图3中的Avalon从端口即为P2口,采用了流水线读传输的模式,这种模式能在前一次传输返回readdata前开始一次新的传输,增加了带宽。
图3 Avalon 从外设端口信号设计
2.2.3 动态地址对齐及其时序设计
Avalon总线模块能够适应主从外设的不同宽度和不匹配的数据宽度。当系统中存在不匹配的存储端口时,要考虑地址对齐问题。对于存储器类型的外设,采用动态地址对齐方式[4]。IDT71V416型SRAM是静态RAM,属于存储器型外设,所以该Avalon从端口采用动态地址对齐方式,如图4所示。选用动态地址对齐方式,使得主端口能连续地对从外设进行读写,并使系统将外设认作存储器型外设。
图4 Avalon从端口地址对齐设置
根据IDT71V416型SRAM手册[5]中读写时序的各时间参数值设定set up,read wait,write wait及hold time的时间均为10 ns,使该端口既符合Avalon总线读写时序的要求[6],又符合IDT71V416型SRAM的读写时序的要求,如图5所示。
图5 Avalon 从端口的时序参数设置
数据产生,乒乓结构和两片SRAM三部分的组合在ModelSim中的仿真结果如图6所示。avalon_address_b不变时是在执行第一次写操作,此时没有数据读出,所以avalon_readdata_b值为高阻;avalon_address_b开始变化时,表示一片SRAM已经写满,正在执行该片的读操作,而另一片在执行写操作,avalon_readdata_b为系统生成的数据。
图6 ModelSim仿真结果
2.3 PCI9054接口逻辑模块
PCI总线作为PC机与外部设备之间重要的连接总线,具有数据传输稳定灵活,传输速度快,即插即用和良好的扩展性等特点,被广泛地用在各种与PC机互联的设备中。该系统采用的PCI9054芯片[1]可以将复杂的PCI总线接口转换为相对简单的用户接口,大大缩短了设计周期。
2.3.1 本地总线状态机设计
由于PCI9054 的DMA传输方式只适宜于做单次传输,故该系统采用了DMA结合中断的方式传输数据。由于数据的存储采用了乒乓结构,可以在一片SRAM执行DMA传输的同时执行另一片写操作,这样不会造成数据丢失,状态也比较容易控制。
系统复位后,数据产生模块开始产生伪随机序列,产生的数据直接存入SRAM中。此时,计数器同步计数,当计数值每一次达到262 144时,也就是一片SRAM已经存满时,SOPC系统就会触发PCI9054中断请求信号LINT#,CPU响应中断,发出读命令、要读取的字节数、地址信号等。PCI9054先通过LHOLD申请本地总线的控制权,SOPC系统通过LHOLDA响应,使PCI9054获得本地总线的控制权。PCI9054将PCI地址空间映射到本地地址空间,接着启动本地总线的DMA传输[7]。
该系统采用VHDL语言,实现了DMA读传输本地端的时序控制状态机设计。状态0为空闲状态(idle),若LHOLD信号被置1,则转到状态1,否则留在状态0。状态1为总线保持状态(hold),在此状态下应将LHOLDA信号置1。如果信号ADS为0且LW_R为0,则转到状态2。状态2为DMA读状态(DMA_read),在此状态下应将READY信号和模块内部信号avalon_read置1,从而使Avalon主端口的master_read置1,表示Avalon主外设发起读传输。如果BLAST为1,则表明此次DMA读取还没有完成,继续留在状态2;如果BLAST为0,则表明此次DMA读取完成,转到状态3。状态3为DMA读操作完成状态(end_cycle),当LHOLD被置0时,表示PCI9054不再请求本地总线,则转到状态0;当BLAST为0且LHOLD为1时,则表明PCI9054还要进行DMA读操作,则转到状态1继续。其中的DMA读操作的时序逻辑的ModelSim仿真结果如图7所示。
图7 DMA读时序逻辑的仿真结果
2.3.2 Avalon主外设的端口信号设计
该系统中,PCI9054控制数据从本地总线上读出,先到PCI9054的FIFO中,再将FIFO中的数据传输到PCI总线上。因此SOPC系统中的PCI9054接口逻辑模块为Avalon主外设,主端口通过address,read,waitrequest等信号发起Avalon总线上的读操作,从而控制Avalon从外设即乒乓结构模块的读操作。
由于本系统定制的从外设采用了流水线读的传输模式,为了使端口传输模式匹配,主外设也采用流水线读的传输模式。流水线主端口一个必须的信号为readdatavalid,Avalon交换结构向主端口发出readdatavalid,以表示readdata信号正在提供有效的数据。
本系统定制的Avalon主外设构成模块主要由5部分构成,其中Read Master Logic提供了符合Avalon接口规范的主端口信号;Control Logic是Read Master Logic与PCI9054 Local Bus Logic控制信号和状态信号转换的桥梁;FIFO是数据由Read Master Logic向PCI9054传输的缓冲区。这三部分通过主端口流水线读传输时序逻辑联系在一起,提供了Avalon主外设的主端口接口界面。PCI9054 Local Bus Logic即VHDL语言设计的本地总线状态机,它将PCI9054本地端的信号通过状态机逻辑转换为与Control Logic和FIFO相对应的信号;Clock/Reset提供了主外设的clk和reset信号。
利用SOPC Builder中的new component edit设计PCI9054接口逻辑模块的接口。在new component edit的signal中设置模块的各信号线以及相应的总线型号类型;在interface中设置各信号线对应的端口类型及其相应的参数。图8为Avalon主端口的参数设置。
图8 Avalon主端口设置
2.4 系统中各中断的实现
在SOPC系统中,当没有进行传输时,Avalon交换结构忽略来自主端口所有与传输相关的输出信号,并且主端口也忽略来自Avalon交换结构所有与传输相关的输入信号。但是Avalon总线接口提供控制信号来实现中断请求等功能,这些信号不直接与数据传输相关。Avalon中断请求信号允许从端口发出一个IRQ,表明它需要主外设来服务[8]。系统中,PCI9054采用了DMA加中断的方式来传输数据,而且DMA传输中的主控制器PCI9054芯片也要通过中断信号LINT#来触发,所以中断的实现是本系统功能实现的关键。
系统从端口的中断原理在于系统复位之后,数据产生模块开始自动产生伪随机序列,并自动将数据存入SRAM中,当一片SRAM存满之后,从端口的irq信号被设置。这个irq信号的时序必须与相关时钟的上升沿同步,其相关地址端口的名字必须是本模块中Avalon从端口的名字。系统中从端口中断的具体设置如图9所示。
图9 从端口中断设置
系统主端口的中断原理:在于主端口的irq检测到从端口有中断发出,通过置为有效来响应这个中断,并同时用该信号触发PCI9054的LINT#信号。PCI9054获得本地总线的控制权,并启动DMA传输,向SOPC系统中的主外设即PCI9054接口逻辑模块发送地址和传输的字节长度,开始DMA传输。当字节长度减为0,另一片SRAM存满时,再次触发PCI9054的LINT#信号,使得PCI9054启动下一次DMA传输。主端口中断的设置如图10所示。
图10 主端口中断设置
3 结 语
详细介绍了基于SOPC设计的数据发生系统中PCI接口的开发过程。对其中的关键技术,如设计添加在SOPC系统中的用户自定义主外设和从外设;PCI9054本地总线状态机的设计,乒乓结构的存储模块的设计,以及系统中各中断的实现等主要部分做了分析和研究,给出了基于SOPC的硬件实现方案。系统的主要部分由VHDL语言设计实现,有利于参数修改和系统升级。
参考文献
[1]PCI 9054 Data Book Version 2.1[Z].2000.
[2]张海峰,段颖妮,吕虹.全状态伪随机序列发生器的实现[J].电子器件,2006,29(1):177-178,182.
[3]周如辉.实时视频处理系统的乒乓缓存控制器设计[J].单片机与嵌入式系统应用,2006(7):25-27.
[4]刘沁.Nios Ⅱ处理器的两类外设接口设计[J].单片机与嵌入式系统应用,2007(11):32-34.
[5]Integrated Device Technology Inc..IDT71V416S,IDT71V-416L,3.3 V COMS Static RAM 4Meg(256K×16 b) [Z].2003.
[6]Altera Corporation.Avalon Interface Specifications Version 1.0[Z].2008.
[7]韩雪峰,黄焱,杨涛.基于PCI总线的高速数据采集接口的设计与实现[J].微计算机信息,2005,21(15):71-73.
[8]周立功.SOPC嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2006.
作者简介 邱文静 女,1982年出生,东南大学硕士研究生。研究方向超声医学成像中的信号处理。