当前位置:首页 > 智能硬件 > 智能硬件
[导读]基于Altera的CPLD器件的PCI总线仲裁器设计,实现仲裁器的AHDL编程,并结合仿真结果对PCI总线的仲裁进行了论述。

 作者Email:  jie_yi@sohu.com

        摘要:基于Altera的CPLD器件的PCI总线仲裁器设计,实现仲裁器的AHDL编程,并结合仿真结果对PCI总线的仲裁进行了论述。

    关键词:PCI仲裁器,CPLD,仿真

    PCI总线仲裁器通常是集成在PCI芯片组中。随着计算机应用的深入,尤其是嵌入式系统的不断发展,集成的仲裁器难以满足某些场合的应用。而采用CPLD技术实现的独立的PCI总线仲裁器,则较好的适应了这方面的需求。

    一﹑PCI总线仲裁机制

    PCI的仲裁是基于设备访问,而不是基于时间分配的。在任一时刻,总线上的一个主设备要想获得对总线的控制权,就必须发出它的请求信号(PCIreqN),如果此刻该设备有权控制总线,总线仲裁器就使该设备的总线占用允许信号(PCIgntN)有效,进而获得总线的使用权。当有多个主设备同时发出总线控制请求时,就必须由仲裁器根据一定的算法判定,当前应该由哪个主设备获得控制权。

    二、仲裁算法

    常用的仲裁算法有:公平算法、循环算法等。

    本仲裁器设计采用的是循环算法,设备的优先级预先设定。目前的设计实现对四个PCI设备请求的仲裁,各设备优先级由高到低安排为:设备0 >设备1 > 设备2 > 设备3。

    系统启动伊始,没有设备使用PCI总线,也没有设备请求使用PCI总线,仲裁器总是设定设备0拥有总线控制权,即将总线停靠于设备0。此时设备0的PCIgntN是有效的。而在此之后,仲裁器总是指定PCI总线的最后一个使用者为总线的停靠设备。

    当有一个或多个设备提出拥有总线使用权的请求时,仲裁器将按照事先安排的设备优先级顺序逐一查询。对于只有一个设备请求的情况,该设备的请求将会马上得到响应;如果多个设备同时发出请求时,仲裁器裁定首先响应优先等级高的设备的请求,当此设备完成数据传输交出总线使用权后,再由优先等级低的设备使用总线。示意框图见图2。

    如果一个设备已获得总线使用权并且正在进行地址、数据传输时,比它优先级别高的设备也发出了占用请求,仲裁器将会撤销优先级别低的设备的总线占用信号,并把总线使用权交给优先级别高的设备,同时还要确保在任一时刻不会出现多个设备同时占用总线的情况。具体见仿真分析。

    三、编程设计与实现

    本设计使用AHDL语言,在MaxplusII 10.0上编译通过,并进行了仿真。

    1. 仲裁器信号定义


SUBDESIGN  PCI_arb
(       -- 输入
PCIclk         :INPUT  -- PCI时钟
          Arbiter_rstN     :INPUT  -- 复位信号
          PCIreqN[3..0]    :INPUT  -- 总线占用请求信号
          frameN         :INPUT  -- 数据交易的启动或开始,主设备发出
          irdyN           :INPUT  --交易数据准备好,主设备发出
         
-- 输出
          PCIgntN[3..0]    :OUTPUT -- 总线占用允许信号
     )

    frameN和irdyN决定了总线的状态,只要两个信号中的一个有效,就表明总线上有数据通过,总线处于忙状态;当两个信号都无效时,则总线处于空闲状态。

2. 仲裁器状态机定义
parb_sm : MACHINE
  OF BITS ( PARB2 , PARB1 , PARB0 )
  WITH STATES (
    PARB_SLT0  = 0, -- PCIgnt0#有效,设备0拥有总线使用权,总线空闲
    PARB_SLT0D = 1, -- PCIgnt0#有效,数据在总线上传输,总线处于忙状态
    PARB_SLT1  = 2, -- 以下类同
    PARB_SLT1D = 3,
    PARB_SLT2  = 4,
    PARB_SLT2D = 5,
    PARB_SLT3  = 6,
PARB_SLT3D = 7 );

    3. 仲裁的实现

   由于采用循环算法,对每一个设备而言状态的变换都是相同的,下面仅以设备0的状态转换为例:
    CASE  parb_sm  IS
       WHEN PARB_SLT0 =>
           IF ( !frameN # !irdyN # frameN & irdyN & PARBtout4 ) THEN
              IF ( !PCIreqN1 ) THEN
                 PCIgntN1  = GND;
                 parb_sm   = PARB_SLT1D;
              ELSIF ( !PCIreqN2 ) THEN
                 PCIgntN2  = GND;
                 parb_sm   = PARB_SLT2D;
              ELSIF ( !PCIreqN3 ) THEN
                 PCIgntN3  = GND;
                 parb_sm   = PARB_SLT3D;
              ELSE
                 PCIgntN0  = GND;
                 parb_sm   = PARB_SLT0D;
           ELSE
              PCIgntN0  = GND;
              parb_sm   = PARB_SLT0D;
           END IF;

      WHEN PARB_SLT0D =>
          PCIgntN0    = GND;
           IF ( frameN & irdyN ) THEN
              parb_sm   = PARB_SLT0;
           ELSE
              Parb_sm   = PARB_SLT0D;
           END IF;
    
    为了避免AD线上和PAR线上出现时序竞争,一个设备的PCIgntN信号有效和另一个设备的PCIgntN的撤销,如果不是在总线空闲状态,则两者之间至少要有一个时钟的延迟。设计中,将每个设备占用总线的状态分为两部分,PARB_SLTx(总线空闲)和PARB_SLTxD(总线忙);状态机不能从一个设备的PARB_SLTxD状态直接转到另一个设备的PARB_SLTyD状态,中间必须经过至少一个时钟的PARB_SLTx状态的衔接,这样就避免了总线上竞争的出现。

    代码中,PARBtout为一5位计数器,对PCI时钟个数进行计数,用来判别设备发出请求信号后是否在规定时间内(16个时钟,即PARBtout[4..0] = 10000)占据了总线,启动了数据的传输;如果超时,则撤销该设备的请求信号,并按预设的优先级顺序,对其余设备总线使用权进行新一轮的裁定。计数器的编程实现:

IF ( PARBtout4 # PCIreqN0 & PCIreqN1 & PCIreqN2 & PCIreqN3 ) THEN
PARBtout [ ] = 0;
     ELSIF ( frameN & irdyN ) THEN
        PARBtout [ ] = PARBtout [ ] + 1;
     ELSE
        PARBtout [ ] = 0;
     END IF;

四、仿真分析

    1. 单一设备总线请求情况

    系统初始化后自动将总线停靠于设备0上,总线处于空闲状态,frameN、irdyN均为高电平。需要强调的一点是,仲裁所用的PCI控制信号均在PCI时钟信号的上升沿采样而得。如图3所示,设备2发出总线占用信号,仲裁器在时钟上升沿A处采样到该信号,并开始启动PARBtout计数,此时的frameN、irdyN为高电平,设备0仍然拥有总线使用权;随后设备2驱动使得frameN和irdyN有效,在时钟上升沿B处,仲裁器采样到frameN和irdyN,计数器清零,使设备2的PCIgntN2信号有效,从而占用总线,设备把地址、数据驱动到总线上,总线处于忙状态。

之后,设备2撤销其PCIreqN2信号,放弃对总线的占用;接着frameN、irdyN信号相继无效,表明数据传输的完成,总线变为空闲,仲裁器在C处采样后,将总线停靠在设备2上。

    2. 多个设备同时请求总线使用权(以两个设备为例)

    设备3首先发出请求信号,仲裁器在时钟A处采样后,计数器开始计数,此时总线仍然为设备0占用着;在时钟B处的采样,检测到frameN有效,表明数据传输的开始,仲裁器使得PCIgntN3信号有效,设备3获得总线所有权;

    在随后的一个时钟上升沿,仲裁器采样到设备2的总线请求信号,此时由于frameN、irdyN依然有效,表明数据传输正在进行中,必须等当前数据传输完成后,设备2才能占用总线进行自己的数据传输,此时仲裁器隐含设定设备2拥有总线使用权。设备3在时钟C之前使得frameN、irdyN无效,总线进入空闲状态,停靠在设备3上。设备2检测到总线空闲,驱动自己的frameN、irdyN信号,仲裁器在时钟D处采样到有效的frameN、irdyN信号后,使PCIgntN2有效,设备2占据总线,开始数据的传输。设备2使用完总线后,使总线回到空闲状态,停靠在设备2上;设备3检测到总线空闲,再次驱动frameN、irdyN有效,从而再次获得总线使用权(时钟上升沿F处)。所有传输完成后,总线将停靠在设备3上。

    值得一提的是,如果设备3在被迫交出总线前不能完成所有数据的传输,它必须使自己的PCIreqN3信号持续有效,这样在设备2用完总线后,仲裁器能将使用权交回,从而完成剩余数据的传输。

    图5为设备获得总线使用权,在设定的16个时钟周期内没有启动传输,仲裁器状态的变换。仍以两个设备为例。

    五、应用CPLD进行PCI总线仲裁器的设计,系统结构简单;配置灵活,可以根据系统的需要,对有关信号进行裁减或者扩展;在线修改方便。本设计采用Altera的EPM3064实现,并应用于所设计的系统板中。

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

船载通信系统是现代船舶中不可或缺的重要组成部分,它为船舶提供了与外界通信和数据传输的渠道。船载通信系统行业设计方案涵盖了多个方面,包括系统架构、硬件设备、软件系统、通信协议等。本文将详细介绍船载通信系统的行业设计方案。

关键字: 船载通信 数据传输 通信协议

12月22日,由广州日报主办的2023年高质量发展年度峰会在广州举行。OPPO凭借持续创新和技术积累,入选2023年广东创新TOP100榜10强,展现出在科技创新领域的领先实力。

关键字: 智能手机 数据传输

短距离无线通信技术是一种利用无线电波进行数据传输的技术,适用于距离较短、对传输速率要求不高的场景。近年来,随着物联网、智能家居等技术的不断发展,短距离无线通信技术也得到了广泛应用。本文将对常见的短距离无线通信技术进行介绍...

关键字: 无线通信 数据传输 物联网

数字通信是指以数字信号作为载体来传输消息,或用数字信号对载波进行数字调制后再传输的通信方式。它可传输电报、数字数据等数字信号,也可传输经过数字化处理的语声和图像等模拟信号。在数字通信中,信号通常是经过抽样、量化和编码后形...

关键字: 数字通信 数据传输

通信模块的作用是实现数据传输和通信。通信模块可以将数据从一台设备传输到另一台设备,或者在一个设备内部的不同部件之间进行传输。通信模块的应用非常广泛,包括工业自动化、电力系统、安防监控、智能家居、医疗设备、交通工具等领域。

关键字: 通信模块 数据传输

常州2023年9月25日 /美通社/ -- 9月23日,由江苏省商务厅指导,世界中餐业联合会、常州市人民政府主办的"第三届中华节气菜大会暨首届江南美食节"在江苏常州开幕。文化和旅游部国际交流与合作局一...

关键字: BSP 可持续发展 大赛 质量控制

北京2023年9月25日 /美通社/ -- 9月21日,由中国质量报刊社·中国质量新闻网主办的第六届食品高质量发展交流会在北京举行,会议主题为"高质量,新生活",旨在推动食品行...

关键字: 自动化 BSP ISO9001 NAS

北京2023年9月23日 /美通社/ -- 近日,主线科技正式获准在北京市智能网联汽车政策先行区道路开启常态化测试与示范,将与物流客户在真实开放的城区道路场景中,率先开启基于L4级别自动驾驶能力的智能卡车运输示范。 随...

关键字: 智能卡 测试 高速公路 BSP

曼谷2023年9月18日 /美通社/ -- 作为东南亚的旅游胜地,泰国一直在全球范围内吸引着无数游客的目光。泰国旅游和体育部近日公布的报告显示,今年前7个月,泰国旅游业总收入约为1.08万亿泰铢(约合人民币2233亿元)...

关键字: BSP GEN 国美 AN

哥伦比卡尔达斯2023年9月22日 /美通社/ -- 近日,天合跟踪与中国电建签订拉美地区哥伦比亚泰普伊光伏电站跟踪支架供货协议,将为其提供108MW智能跟踪系统,其中包含开拓者1P智能跟踪支架、智能算法、以及智慧云平台...

关键字: 光伏电站 跟踪系统 控制器 BSP
关闭
关闭