新闻中心

EEPW首页>嵌入式系统>设计应用> PCI总线目标控制器的设计

PCI总线目标控制器的设计

作者: 时间:2012-11-07 来源:网络 收藏

共分为10个状态,下面对每个状态的意义及状态跳转条件的详细说明:

  目标空闲(idle):当总线有新的命令但控制器正忙于未完成的数据传输或寄存器配置时,跳转到check_abort;控制器空闲但寄存器内有记录的未完成的读操作,跳转到check_addr;总线上有数据传输要求而又未出现上面的两种情况,状态机跳转至cmd_start。

  启动命令解码(cmd_start):满足放弃条件如奇偶校验错误、强制放弃等条件时,状态机跳转至start_abort;不满足放弃条件,若目标设备没有突发传输能力,状态机跳转至start_single,若目标设备有突发传输能力且主设备发起的是写命令,状态机跳转至start_multiple,如果目标设备有突发传输能力且主设备发起的是延迟读命令,状态机跳至start_retry;上述情况均未发生,状态机跳转至start_wait_rd1。

  检查地址匹配(check_addr):满足放弃条件如奇偶校验错误、强制放弃等条件时,状态机跳转至start_abort;如果地址与之前的请求地址一致,对目标设备进行延迟读,状态机跳转至start_multiple;如果地址不一致状态机跳转至start_retry。

  放弃条件检测(check_abort):满足放弃条件如奇偶校验错误、强制放弃等条件时,状态机跳转至start_abort;不满足条件,状态机转至start_retry。

  读等待状态1(start_wait_rd1):如果FIFO中有了待传输的数据,状态机跳转至start_wait_rd2;否则一直等待在状态start_wait_rd1。

  读等待状态2(start_wait_rd2):FIFO中已经有了所要读取的数据,状态机跳转至start_multiple。

  目标设备放弃(start_abort):一直维持该状态直到主设备声明传输结束,状态机转至idle。

  单数据传输(start_single):如果主设备声明最后一个数据传输,状态机跳转至idle;如果主设备继续对该目标设备进行读写操作,状态机跳转至start_retry。

  数据突发传输(start_multiple):如果剩下最后一个字节传输,状态机跳转到idle;如果地址信息无效或地址越界,状态机跳转到start_retry;如果接收FIFO几乎满了而主设备继续往其中写入数据,状态机跳转到start_retry;其它情况状态机保持start_multiple状态不变。

  重试(start_retry):一直维持该状态直到主设备声明传输结束,状态机转至idle。

3数据通路实现

的数据通路具体可通过两种类型的目标接口实现:寄存器型目标接口和FIFO型目标接口。

  3.1寄存器型目标接口

  每个PCI功能拥有64个配置双字的单元[1](前16个双字的格式和用法由PCI规范预定),保留用于实现配置寄存器。本地可以有一些功能设备,这些设备都有相应的控制/状态寄存器,PCI总线上的主设备要对这些控制寄存器进行编程,进而控制相应的功能设备完成特定功能。两类寄存器可以归为一个数据通道实现,寄存器型目标接口就为本地的功能设备提供了这样一种接口,使得PCI总线上的主设备可以通过它来访问功能设备的寄存器。由于PCI总线主设备的访问目标是一些寄存器,所以该接口无需支持突发传输,主设备每一次访问最多只涉及到32位的数据传输。

  3.2FIFO型目标接口

  FIFO型的目标通道主要用于大量的数据传输,可以将本地的存储器挂接在该接口上,这样PCI总线主设备可以通过FIFO型目标通道访问到本地的存储器,针对PCI主设备对本地存储器的读和写操作,设置了两个异步FIFO,读FIFO和写FIFO。其结构如图3

  命令解码器和目标状态机组成了该接口的控制单元。FIFO型目标接口由地址解码器、读写控制单元和读/写异步FIFO四部分组成,在控制部件的协调控制下,共同完成PCI总线上的其它主设备对本地存储器的数据存储或读取。

  读写控制单元:主要用于目标延迟读的控制,存储并比照前后数据传输请求的地址和命令信息,声明本次传输请求是否为有效的延迟读请求。

  读/写FIFO:异步FIFO,用于缓存PCI主设备到本地存储器的读写数据。

  地址解码器:解码PCI总线上的地址信息,识别对FIFO型目标接口的访问。对于地址解码器的实现,在最初PCI系统分配地址时,FIFO型的目标接口被分配到某一段地址区内,通过地址翻译将其映射到本地的系统中[4]。


图3FIFO型目标接口逻辑结构

  对PCI主设备发起的写操作,数据会先以PCI时钟写入接口内的写FIFO,同时PCI控制器会通知本地存储器控制器有数据写入。本地存储器控制器待FIFO中达到一定数据量时以自己的时钟读取FIFO中的数据存入本地存储器,如果FIFO读空,存储器会暂停等待直到FIFO中有新的数据写入,才进行读取。

  对PCI主设备发起的读本地存储器的操作,为了提高读数据的效率,设计中根据不同数据传输的特点,把读操作划分为两个类型,即立即读和延迟读。

  (1)立即读:在PCI总线主设备发起读操作后,一直占用PCI总线等待,PCI总线控制器向本地存储器请求对应的数据,直到本地存储器将数据写入读FIFO中,PCI控制器读取FIFO中数据开始PCI总线上的数据传输。这种读类型一般适用于进行数据量小的传输且本地存储器可以在较短的时间内将要求的数据送到PCI总线。

  (2)延迟读:PCI总线主设备的读请求到达PCI目标总线控制器时,控制器锁存地址和命令信息,并回应主设备让它重试。同时PCI目标总线控制器向本地存储器请求数据,本地存储器将数据写入总线控制器中的FIFO中。此时如果PCI总线上的主设备重试先前的数据传输请求,PCI就可以响应请求将数据发送到PCI总线上。这个过程中,PCI总线主设备在收到重试回应后就会释放PCI总线,允许其它的主设备占用总线进行数据传输,这样从而提高了总线的利用率。图4给出了PCI主设备突发读时采用延迟读的仿真结果图


图4突发读时仿真波形

4结束语

  本文基于PCI2.2总线规范完成了通用PCI的RTL级设计。经验证设计完全实现了目标控制器的功能,目前已通过了FPGA原型验证并应用到CMOS图象传感器的数据传输中。在后续的开发中,可以考虑在控制器内部加入电源管理模块,进一步降低PCI目标控制器的功耗。

  本文的创新点:该设计方案将目标控制器整体分为控制逻辑和数据通道两部分,并根据目标设备的不同类型,在数据通道内实现不同的目标接口,并引入了立即读和延迟读机制实现数据传输,使整个设计取得了较高的效率。

参考文献

  [1]TomShanley,DonAnderson著.林辉等译.PCI系统结构.电子工业出版社,2000.

  [2]沈涵飞,甘萌.PCI总线目标控制器的设计与实现[J].计算机工程与设计.2004,25(11):2101~2104

  [3]施少敏,马彦恒.基于接口芯片PCI9030的PCI总线接口卡的设计[J].微计算机信息.2006,11-2:295~297

  [4]TinooshMohsenin.DesignandEvaluationofFPGA-BasedGigabit-Ethernet/PCINetwordInterfaceCard.MasterDegreeDissertationofRice

University.2004:71~74

  [5]JanickBergeron,WritingTestbenches-FunctionalVerificationofHDLModels.Boston,KluwerAcademicPublisher,2000.


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭