《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于Virtex-II Pro的双核系统构建
基于Virtex-II Pro的双核系统构建
来源:电子技术应用2011年第7期
吕 平,赵明生
(清华大学 电子工程系,北京100084)
摘要: 基于Xilinx的Virtex-II Pro开发板实现了双PowerPC405核硬件系统构建,支持对共享存储器的访问及共享串口输出。重点给出了系统的构建方法及共享资源控制机制,测试结果验证了系统的可行性。
中图分类号: TN791
文献标识码: A
文章编号: 0258-7998(2011)07-0051-03
Design dual processor system based on Virtex-II Pro board
Lv Ping,Zhao Mingsheng
Department of Electronic Engineering, Tsinghua University, Beijing 100084,China
Abstract: A system with dual PowerPC405 is built based on Virtex-II Pro development board, which support the access of the shared BRAM and Uart. Key steps of building system and principle of share resources are described. Test results verify the feasibility of system.
Key words : dual processor;PowerPC405;Virtex-II Pro;Mutex


    随着对信息处理技术要求的不断提高,单核系统设计在提升系统整体性能上出现瓶颈,系统设计逐渐向多核系统设计转变。Xilinx Virtex-II Pro开发板为各大学主要采用的开发板,该板上主芯片XC2VP30内置两个硬核PowerPC405,具有30 816逻辑单元、136个18位的乘法器、2 448 Kbit的Block RAM。
    但国内研究应用多使用该板进行单核系统设计,未能充分利用其双核资源。其原因在于:Xilinx公司软件对Virtex-II系列开发板的双核系统设计支持性不好;Virtex-II Pro开发板只具有一个串口输出,给调试带来了极大的不便。
    针对在Virtex-II Pro开发板进行双核系统设计难度大的问题,本文给出双核硬件系统的构建方法,提出一种共享串口输出和共享存储器的系统结构,能够充分利用板上资源,下载调试非常便利,可以很好地支持双核的应用设计。
1 硬件系统设计
    系统采用EDK10.1i03开发环境。设计双核的系统硬件结构如图1所示。

    系统具有2个PowerPC405处理器:PPC_0和PPC_1,两个处理器具有各自独立的私有Boot BRAM,用于存储相应的应用程序。PPC_0通过总线PLB_0控制外设SDRAM,PPC_1通过总线PLB1控制外设LED_4Bits。两个处理器具有各自的中断控制器和复位控制器。JTAG具有2个PowerPC的接口,并通过共享串口进行信息输出。
    双核系统设计流程如下:
    (1)利用BSB(Base system Builder)向导生成单核系统。
    系统BSB设置的参数如下:
    · System clock:100 MHz,no cache,no OCM
    · RS232:opb UARTLITE,115200n8,use interrupt
    · DDRAM:PLB DDR 256 MB,use interrupt
    · LEDs_4 Bit:use interrupt
    · PLB_BRAM_IF_CNTLR:64 KB
    (2)添加和配置IP
    由于EDK10不支持双核系统设计,因此需要手动添加和配置相关IP,需添加的IP核有:
    ppc405, plb_v46, plb2plb_bridge, bram_block, opb_intc plb_bram_if_cntlr, xps_mutex
    MHS(Microprocessor Hardware Specification)是描述硬件结构的文件,需要修改MHS文件对添加的IP核进行配置。这里给出主要的ppc405、bram_block、xps_mutex核的配置说明,其他IP核将不再赘述。
    ①对PPC405_1的配置说明
    BEGIN ppc405
      PARAMETER INSTANCE = PPC_1
      PARAMETER HW_VER = 3.00.a
      PARAMETER C_DSOCM_DCR_BASEADDR=
      0b0000100000
      PARAMETER C_DSOCM_DCR_HIGHADDR =
0b0000100011
      BUS_INTERFACE RESETPPC=ppc_rest_bus_1  //复位
      BUS_INTERFACE JTAGPPC = jtagppc_cntlr_0_1   
#用于PPC_1调试
      BUS_INTERFACE IPLB0=plb1//总线
      BUS_INTERFACE DPLB0=plb1
      PORT EICC405EXTINPUTIRQ=xps_intc_1_Irq
      PORT CPMC405CLOCK=proc_clk_s  //时钟
    END    
    ②对Mutex核进行配置
    BEGIN xps_mutex
      PARAMETER INSTANCE = xps_mutex_0
      PARAMETER HW_VER = 1.00.a
      PARAMETER C_NUM_MUTEX = 2
      PARAMETER C_SPLB0_BASEADDR = 0x82400000
#该地址应用于Mutex初始化
      PARAMETER C_SPLB0_HIGHADDR = 0x8240ffff
      PARAMETER C_SPLB1_BASEADDR = 0x82600000
#该地址应用于Mutex初始化
      PARAMETER C_SPLB1_HIGHADDR = 0x8260ffff
      BUS_INTERFACE SPLB1 = plb1
      BUS_INTERFACE SPLB0 = plb0
    END
    ③共享BRAM核进行配置
    BEGIN bram_block
      PARAMETER INSTANCE = share_bram
      PARAMETER HW_VER = 1.00.a
      BUS_INTERFACE PORTB=share_bram_if_cntlr_1_PORTA
      BUS_INTERFACE PORTA = share_bram_if_cntlr_0_
PORTA
    END
    (3)生成地址空间(Generate Addresses)
    使用Generate Addresses命令,系统自动分配地址空间。由于软件本身不支持双核系统设计,在地址空间冲突时,需要手动对冲突的地址空间进行调整。使用Generate Bitstream可产生系统的硬件比特流。
2 软件工程设计
2.1 软件工程构建

    (1)配置软件平台
    由于两个PowerPC通过总线及总线桥共享串口输入,因此需要在Software Platform Settings中,对stdout和stdin配置为RS232_Uart_1。
    (2)添加应用工程
    添加工程ppc0_test_share和ppc1_test_share。选中两个工程文件,分别Mark to initialize BRAM,并将软件工程指定给各自的处理器。
    Generate the linker script,指定将所有程序段放入各自的私有BRAM中。Update Bitstream以生成相应的全局比特流文件。
    软件工程包括SDRAM 测试、LED外设测试、SHARE BRAM的读写操作,测试结果通过共享串口进行输出。双核CPU通过Mutex核进行互锁访问,控制访问共享串口。
2.2 Mutex核使用
    Mutex提供多核环境下处理器对共享设备的互斥访问。其原理是:Mutex具有32 bit的写数据寄存器,如图2所示。CPU_0访问共享资源前,先向该数据寄存器写自己的CPU_ID,如果Mutex设备空闲,则将CPUID写入寄存器,并Lock置1。CPU_0通过查询和比较写数据寄存器和自己的CPUID,以确定是否获得访问共享资源的权限。没有获得权限,则等待或者退出;获得权限后,对共享资源访问,访问结束后释放锁。其在系统中的连接如图3所示。

 

 

    xps_mutex连接到PLB0和PLB1总线上,初始化时需要对其地址进行配置。在设计过程中发现,由于Xilinx的软件设计问题,EDK10在头文件xparameters.h中不能正常生成SPLB1的地址,表现为软件自动生成的SPLB1和SPLB0的地址相同,会造成Mutex初始化失败。因此在初始化Mutex时,切勿直接使用XMutex_LookupConfig()函数。PPC_1初始化Mutex的过程如下:
#define XPAR_XPS_MUTEX_0_SPLB1_BASEADDR 0x82600000
void init_lock ()
{    XMutex_Config *cfg;
    XMutex_Config XMutex_ConfigTable[] ={
        {    XPAR_XPS_MUTEX_0_DEVICE_ID,
            XPAR_XPS_MUTEX_0_SPLB1_BASEADDR,
//该地址需要对应SPLB1的地址
            XPAR_XPS_MUTEX_0_NUM_MUTEX,
            XPAR_XPS_MUTEX_0_ENABLE_USER}
    };
    cfg=&XMutex_ConfigTable[0];
    XMutex_CfgInitialize(&mutex, cfg, cfg->BaseAddress);
}
    访问共享串口的操作为:
void share_rs232(char *messages)
{    char *tmp;
    XMutex_Lock(&mutex, MUTEX_NUM);//对共享资源加锁
    printf("CPU(%x):%s\r\n",XPAR_CPU_ID,messages);
    XMutex_Unlock(&mutex,MUTEX_NUM);  //释放
}
2.3 系统测试结果
2.3.1 共享串口测试

    设置超级终端,连接JTAG电缆,选中Download Bitstream将比特流下载到目标板上。通过共享串口,两个CPU分别输出其工作状态。输出结果如图4所示。

    其中CPU(0)输出私有存储器SDRAM的测试正确信息,说明PPC_0正常工作。
    同时观察板上LED显示,led_0、led_2和led_1、led_3呈现交替闪烁状态,说明PPC_1及外设LED工作正常。
2.3.2 共享存储器读写测试
    SSHM_READFLAG为CPU读写状态指示。SSHM_READFLAG为0时,PPC_0进行写操作;为1时,PPC_1进行读操作。共享存储器的读写操作测试结果如图5所示。

    PPC_0对共享BRAM进行写数据操作,数据依次为0~4,每次写操作完成后将SSHM_READFLAG置1。PPC_1在PPC_0每次数据操作完毕后,检测到SSHM_READFLAG为1时进行读数据操作,操作完成后置SSHM_READFLAG为0。
    本文完成基于Virtex-II pro开发板的双核PowerPC系统的构建,提高板上资源利用效率。系统通过Mutex的互锁机制完成对共享资源的控制。共享串口输出调试结果,解决了开发板的单串口不易调试的问题;通过共享BRAM进行数据交换,可以实现系统的并行协同处理;直接下载比特流即可实现双核的系统运行,调试和系统运行更为方便。该系统为使用Virtex-II Pro开发板进行双核系统设计提供了参考价值。
参考文献
[1] Kowalczyk J.Multiprocessor systems virtex-II series. Xilinx WP162(v1.1).2003.
[2] ASOKAN V.Designing multiprocessor systems in platform studio.Xilinx WP262(v2.0).2007.
[3] Xilinx.ML410 dual processor hardware build using EDK 8.2i SP1.2007.
[4] Asokan V.Dual processor reference design suite.Xilinx XAPP996(v1.0),2007.
[5] Harn Hua Ng.PPC405 lockstep system on ML310.Xilinx XAPP564(v1.0),2004.
[6] Bennett J K.Shared memory multiprocessing using the virtex II PPC:sharing memory,sharing a UART,and synchronization a guide for the XUP development board. University of Colorado at Boulder,2005.
[7] XPS Mutex(v1.00c).www.xilinx.com.2009,24(6).

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