基于XC2VP30的双核处理器嵌入式系统的构建与实现

摘要:基于xilinx 的virtex-ii pro 开发板实现了双核嵌入式系统构建,具有共享存储器及共享串口输出的特性。主要给出了双核系统的构建方法及原理,共享串口的输出验证了双核系统的可行性。
随着信息技术的逐渐发展,传统的嵌入式单核系统已经不能适应高性能的计算要求,基于fpga 的双核系统架构也逐渐发展起来。xilinx 公司设计的virtex-ii pro 开发板有较高的硬件配置,由digilent 公司制造,有高达30,816 个逻辑单元的xc2vp30 fpga 芯片,主芯片xc2vp30 上内置两个硬核powerpc405,136个18 位的乘法器、2 448 kbit 的block ram,在各大学中使用广泛。但xilinx 公司的系列开发工具并不支持在此开发板上构建双核,xilinx 公司也没有提供如何利用此双核的技术文档,并且virtex-ii pro 开发板只具有一个串口输出,调试不便,所以国内的多数大学实验室都是进行的单核powerpc405 的应用开发,没有利用到其有两个硬核的优势,造成资源闲置。
为了充分利用virtex-ii pro 开发板的双核资源,提出了一种构建双核的方法,步骤简洁明了,下载调试方便,共享串口的输出结果验证了此双核系统的可行性,且对virtex ii pro及virtex4 系列面临同样问题的开发板也具有指导意义。
1 硬件系统构建 开发工具为edk9.1i02,硬件结构如图1 所示。
硬件体系利用了ppc_0 和ppc_1 两个处理器,它们共享了一部分外设,共享的外设需要设置共享通道。各处理器也可独占部分外设, ppc_0 通过总线桥控制外设dip swiches,ppc_1 控制外设led_4bits,可以验证各处理器的工作状态,为了保存程序,为两个处理器分别设置了独占的boot bram及中断控制器和复位控制器。2 个powerpc 共享jtag,都能通过串口进行输出。
系统设计流程如下:
(1) 利用xps 生成单核系统系统参数设置如下:
①system clock:频率100 m,无缓存。
②rs232:波特率115200,8 位,无中断。
③ddram:片内存储器512mb,无中断。
④leds_4 bit:无中断。
配置好后的总线与端口如图2 所示。
(2) 添加ppc405_1 及相关设置
1) ppc405_1 的设置
添加新的ip 核ppc405,则ppc405_1 已经随ppc405_0一起添加到了工程中,只不过还没有连上线而已。点击businterface,把dplb 和iplb 分别连到plb 总线上。然后点击-ports,配置ppc405_1 的端口, (默认情况下,有plbclk,bramdsocmclk,bramisocmclk 这三个端口看不到,需要点击connection filters 才会看到) 增加一个reset 的ip 模块,选择reset control->processor system reset module,会生产一个proc_sys_reset_0 模块。配置ip 属性中external resetactive high 的值为0。为了方便验证两个核是否正常工作,用uart 为ppc405_0 显示运行信息,用led 为ppc405_1 显示运行信息,所以增加一个opb_gpio 核,属性为位宽4 bit,设置channel 1 为bi-directional, channel 1 的input only 设置为false。
2) jtagppc_cntlr 核的配置
begin jtagppc_cntlr
parameter instance = jtagppc_0
parameter hw_ver = 2.00.a
bus_interface jtagppc0 = jtagppc_0_0
bus_interface jtagppc1 = jtagppc_0_1
end
3) 共享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) 配置地址
给外设和ocm 分配地址,对于powerpc,isocm 必须落在地址的最高端,dsocm 可以随意。
2 软件工程配置 2.1 工程构建 (1) 配置软件平台
为ppc405_1 添加应用程序是最关键的一步,所以要分别为ppc405_0 和ppc405_1 设置编译选项,也就是修改linkerscript(.ld 文件),一种可行的方法是:把启动代码和数据分别放在两个核独立的isbram_if_cntrl 和dsbram_if_ctrl 中,而把stack 和heap 放在公共的bram 中,如plb_bram_if_ctrl 中。
(2) 添加应用工程
添加工程ppc0_test_share 和ppc1_test_share,分别mark to initialize bram,并将软件工程指定给各自的处理器,所有程序段则放入各自的私有bram 中,更新bitstream 以生成相应的全局比特流文件。
为两个核设置software platform settings,其输入输出设备都配成uart,,然后生成库和bsp,编译应用程序,更新bitsream,最后下载bitsream 到fpga,输出到超级终端则能验证双核配置的正确与否。
2.2 互锁程序的编写 互锁程序是在xilinx 自带的测试程序基础上修改而成,主要的修改部分在于添加识别处理器状态的程序,作用在于保证两个处理器不会互相干扰,其中定义了lwarx.ppc and stwcx.ppc 两个声明,并为了让gcc 编译器顺利编译,编写如下代码:
#define lwarx (adr) ({unsigned int rval; \
__asm__ __volatile__ (\
lwarx %0,0,%1\n \
: =r (rval) : r (adr) \
) ;\
rval;\
})
#define stwcx (adr,val) __asm__ __volatile__ (\
stwcx. %0,0,%1\n \
: : r (val) , r (adr) \
)
互锁程序通过变量pr_lock 的值来表示串口占用情况,0 表示空闲,1 表示ppc_0 占用,2 表示ppc_1 占用,代码段如下:
volatile int* pr_lock = pr_lock_addr;
void prlock ()
/* prlock implements a test & test & set using the
ppc stwcx and lwarx instructions*/
{
while (1)
{
while (*pr_lock ! = 0) ; //等待释放
if (lwarx (pr_lock) ! = 0) continue; //锁存
stwcx (pr_lock,my_lock_val) ;
if (*pr_lock == my_lock_val)
{
sync; // 返回
return;
}
else continue; // 重试
}}
void prunlock ()
{
// 等待清空
while ( xuartlite_mistransmitempty
(xpar_rs232_uart_1_baseaddr) == xfalse) ;
sync;
*pr_lock = 0;
return;
}
2.3 系统测试结果 配置好超级终端,连接好电缆,下载线,将比特流文件输出到开发板上。通过共享的串口输出,两个处理器的运行状态均可显示。输出结果如图3 所示。
3 结语 实现了在fpga 开发板上的双核系统构建,充分利用了系统资源,能通过互锁程序合理控制共享的外设,并能共用一个串口进行输出,克服了调试不便的难题。设计方法简单易行,运行结果证明了可靠行,在开发板厂商没有提供相关资料的情况下,该系统为基于fpga 的双核嵌入式系统设计提供了参考价值。

数据分析指导商业实践潜力巨大 究竟如何应用?
紫光携手厦门国资共建160亿联合发展基金
视频系统设计中的配置方式判断和交流耦合分析
信息通信新技术与互联电网强耦结合的大电网调度控制系统
什么是幂等性?幂等的实现原理
基于XC2VP30的双核处理器嵌入式系统的构建与实现
曙光推出智慧医疗AI解决方案
5款机械键盘大推荐
打破垄断局面 比亚迪布局完整的LED产业链
人工智能从感知智能迈入认知智能的开展阶段?
2017年5月性能排行,小米6性价比最高,三星S8位居第二,华为P10和荣耀9既然无缘榜单!
5G和物联网的发展取决于中国
向日葵技术支持坐席助力解决旅游业软件提供商售后支持问题
投资建设鸿利光电LED新型背光显示项目
10余款开源静态站点生成器
R型控制变压器的作用是什么?
基于SA1110的掌上电脑显示器的设计与实现
REECHO余音BR-1蓝牙耳机评测 相比同价位的耳机都有大幅度提升
关于Xilinx中DDS IP的运用与讲解
台积电拿下苹果A12订单 海康大华遭遇美政府采购禁令