论文部分内容阅读
摘要:SoC是当前微电子芯片发展的趋势,然而由于受带开发环境的PC终端、额外硬件接口、连接线等条件的约束,很难支持SoC产品的二次开发。本文提出一种SoC无线程序加载系统设计方案,通过无线控制实现不同程序的加载,不需要添加额外的接口与复杂的模块,不需要连接下载线和IDE开发环境等工具,简化了芯片的二次开发,增加了芯片的利用率、,并且在FPGA板上测试通过。
关键词:二次开发;无线程序加载:开发环境;芯片利用率
DOI: 10.3969/j.issn.1005-5517.2017.8.012
引言
随着SoC技术的不断发展,其产品在市场上的占用比例也越来越大。对于SoC的开发流程,它需要有一套相应的IDE开发工具,包括装有配套开发环境的PC、硬件接口和连接线。开发完成后应用于嵌入式领域,但是由于受带开发环境的PC终端、电路板、连接线等条件的约束,一般很难支持二次开发。
为了解决上述技术问题,本文提出一种能方便实现二次开发、芯片利用率高的基于SoC的无线智能程序加载方法。使用带蓝牙功能的终端发送不同的命令即可选择flash程序区中不同的程序加载到内存模块,通过无线控制实现不同程序的加载,不需要添加额外的接口与复杂的模块,不需要连接下载线和IDE开发环境等工具,并提供一种无线智能程序加载SoC系统。经过在FPGA开发板上测试,该方法能很好地应用在智能终端领域中,例如智能玩具小车,主控采用本发明的SoC芯片,就能设定小车的三种工作场景
遥控控制小车、小车自动避障和小车循迹,通过带蓝牙的终端向主控发送相应的命令就能改变小车的工作模式,增加小车的功能。
1 系统总体结构
本文中的无线智能程序加载SoC系统包括时钟模块、处理器模块、只读存储器ROM模块、Wishbone总线仲裁模块、SPI控制器模块、内存DDR2模块和通用异步收发传输器UART模块。所有模块均通过Wishbone总线连接到处理器。总线仲裁采用轮循机制实现主设备与从设备之间的访问。本系统改变了传统的把一个程序存储在flash中,当烧录下一个程序时就会覆盖上一个程序的做法,而是把flash划分成三个程序区,烧录flash时,把不同的程序放在不同的程序区。当从SPl flash启动时,程序指针首先指向只读存储器ROM里的bootload区,以完成程序从flash拷贝到内存,再从内存开始执行指令。本系统在此基础上增加了bootload的功能,不仅能完成程序的拷贝,还能监测串口,根据收到的命令选择一个程序区的程序拷贝到内存,使得芯片封装好之后,无需接线,无需相应的IDE软件来加载程序,通过手机或带有蓝牙模块的终端就可以加载不同的程序,简化芯片的二次开发,在智能终端领域能有很好的应用。总体框架图如图1所示。
2 硬件系统设计
2.1硬件顶层结构设计
系统硬件顶层采用硬件描述语言Verilog HDL设计,以总线作为分割介质来看整个系统,包括一个主设备和四个从设备。其中主设备为处理器OR1200,从设备为只读存储器模块、內存模块、串行外设接口模块和通用异步手法传输器模块。如图2所示。
2.2 总线仲裁设计
总线仲裁设计主要包含两组仲裁,一组为处理器中的指令总线IBUS,通过高位地址判断从只读存储器ROM取指令还是从内存模块DDR2中取指令;另一组为处理器中的数据总线,通过高八位地址判断访问哪个外设,具体访问哪个寄存器通过低位判断。其中主设备采用轮询的机制抢占总线,核心设计思想为:统计主设备的个数n,然后定义n位的变量token={00_01},通过一定周期把1向左循环取到每个主设备,而实现仲裁的轮循机制。
2.3 flash存储器程序区划分结构设计
如图3所示,flash存储器地址从Oxl00000到Oxlc0000是bit文件放置区1,Oxlc0001到Oxlf0000是程序区1 2,地址从Oxlf0001到Ox220000是程序区II3,地址从Ox220001到Ox250000是程序区111 4,地址从Ox250001到Ox300000是扩展区5。SoC系统bit文件利用Xilinx ISE中的impact工具烧录进去,其他程序区的程序通过硬件描述语言中的readmemh命令写入。
3 软件设计
系统在上电启动的时候,程序指针PC指向只读存储器ROM中Bootload区的一段代码,这段代码一般完成程序从flash存储器拷贝到内存,再将程序指针跳转去内存一条一条执行的功能。本文中的软件设计在此基础上增加了改进,如图4所示。首先优化串行外设接口SPI和通用异步收发传输器UART,并实时监测终端发过来的命令:若监测到命令,校验接收到的命令是否为有效命令,若为有效命令则根据接收到的命令选择flash存储器相应程序区的有效地址,否则通过通用异步收发传输器UART和蓝牙模块向终端发送“错误”提示,继续等待命令。得到有效的地址后,初始化串行外设接口SPI,产生串行外设接口SPI时序和发送读命令,根据flash程序区的有效地址拷贝程序到内存模块DDR2中,直到程序大小等于程序大小变量sizeword的值,最后执行跳转命令,将处理器指向内存模块DDR2的起始位置,实现系统的自启动。程序流程图如图4所示。
4 仿真与下板测试
OR1200处理器是OpenRisc家族中的一员,在软件编译的时候我们需要安装OpenRisc交叉编译工具链:采用Xilinx的Virtex-5开发板,同时需要安装ISE等EDA工具。
编译工具链把前面设计的加载启动代码(bootloader)从汇编语言编译成硬件描述语言,并实例化到SoC系统顶层中。然后进行flash存储器的分区并烧录程序,本文通过readmemh命令向程序区1、程序区11和程序区III依次烧录hellowa.c、hellowb.c和hellowc.c。这几个测试程序会通过串口分别打印出“Hello word A”、 “Hell。word B”和“Hello word C”。这样我们就可以很直观地判断系统在执行哪个程序。 将板子上电,并利用Xilinx ISE中的impact工具将编译好的SoC系统bit文件烧录至flash存储器Oxl00000到Oxlc0000区域,当编译综合通过,下板成功后,我们就可以抓取波形和串口打印判断结果。其波形图和串口打印如图5和图6所示。从波形图中我们可以看出串口控制器输出14个字符,正好是“Hell。World A/B/C”,放大波形我们可以看到第一个数据为Ox48,正好是字符“H”的ASCLL码。而从窗口上打印的输出更为明显。给串口发送命令“0”,选择flash程序区1hellowa.c,从Oxl00000开始拷贝程序,仿真测试结果输出“Hello word A!”。给串口发送命令“1”,选择flash程序区Ⅱhellowb.c,从Ox130001开始拷贝程序,仿真测试结果输出“Hell。word B!”。给串口发送命令“2”,选择flash程序区Ⅱhellowc.c,从Ox160001开始拷贝程序,仿真测试结果输出“Helloword C!”。
5 结论
本发明基于SoC的无线智能程序加载方法中,首先将flash存储器划分成若干个程序区,并通过加载指令把不同的程序分别加载到不同的程序区,然后运行加载启动代码,初始化串行外设接口并监测串口接收到的命令,从flash存储器中选择相应程序区,实现程序到内存模块的拷贝,最后执行跳转命令,将处理器指向内存模块的起始位置,实现系统的自启动:整个加载过程简单,不需要接线和留出程序加载接口,也不需要相应的IDE软件来加载程序,通过手机或带有蓝牙模块的终端就可以加载不同的程序,适用范围广。
参考文献:
[1]唐明华,黄诚,刘新,等一种基于SoC的无线智能程序加载方法及系统国家发明专利专利申請号:20160139229.2中国2015
[2]苏纪娟,孟祥玲,朱庆明系统芯片技术国内外发展现状[J]军民两用技术与产品2015(13)
[3]王龙兴集成电路的过去、现在和将来(一)世界集成电路的发展历史[J]集成电路应用2014(01)
[4]李争,李范呜,陈捷,等基于Wishbone SoC总线接口的高性能SDRAM控制器[J]科学技术与工程2008(12)
[5]郑文静,李明强,舒继武Flash存储技术[J]计算机研究与发展2010(04)
[6]陈光武,范多旺,于超,等基于Wishbone片上总线的IP核的互联[J]微计算机信息2009(20)
关键词:二次开发;无线程序加载:开发环境;芯片利用率
DOI: 10.3969/j.issn.1005-5517.2017.8.012
引言
随着SoC技术的不断发展,其产品在市场上的占用比例也越来越大。对于SoC的开发流程,它需要有一套相应的IDE开发工具,包括装有配套开发环境的PC、硬件接口和连接线。开发完成后应用于嵌入式领域,但是由于受带开发环境的PC终端、电路板、连接线等条件的约束,一般很难支持二次开发。
为了解决上述技术问题,本文提出一种能方便实现二次开发、芯片利用率高的基于SoC的无线智能程序加载方法。使用带蓝牙功能的终端发送不同的命令即可选择flash程序区中不同的程序加载到内存模块,通过无线控制实现不同程序的加载,不需要添加额外的接口与复杂的模块,不需要连接下载线和IDE开发环境等工具,并提供一种无线智能程序加载SoC系统。经过在FPGA开发板上测试,该方法能很好地应用在智能终端领域中,例如智能玩具小车,主控采用本发明的SoC芯片,就能设定小车的三种工作场景
遥控控制小车、小车自动避障和小车循迹,通过带蓝牙的终端向主控发送相应的命令就能改变小车的工作模式,增加小车的功能。
1 系统总体结构
本文中的无线智能程序加载SoC系统包括时钟模块、处理器模块、只读存储器ROM模块、Wishbone总线仲裁模块、SPI控制器模块、内存DDR2模块和通用异步收发传输器UART模块。所有模块均通过Wishbone总线连接到处理器。总线仲裁采用轮循机制实现主设备与从设备之间的访问。本系统改变了传统的把一个程序存储在flash中,当烧录下一个程序时就会覆盖上一个程序的做法,而是把flash划分成三个程序区,烧录flash时,把不同的程序放在不同的程序区。当从SPl flash启动时,程序指针首先指向只读存储器ROM里的bootload区,以完成程序从flash拷贝到内存,再从内存开始执行指令。本系统在此基础上增加了bootload的功能,不仅能完成程序的拷贝,还能监测串口,根据收到的命令选择一个程序区的程序拷贝到内存,使得芯片封装好之后,无需接线,无需相应的IDE软件来加载程序,通过手机或带有蓝牙模块的终端就可以加载不同的程序,简化芯片的二次开发,在智能终端领域能有很好的应用。总体框架图如图1所示。
2 硬件系统设计
2.1硬件顶层结构设计
系统硬件顶层采用硬件描述语言Verilog HDL设计,以总线作为分割介质来看整个系统,包括一个主设备和四个从设备。其中主设备为处理器OR1200,从设备为只读存储器模块、內存模块、串行外设接口模块和通用异步手法传输器模块。如图2所示。
2.2 总线仲裁设计
总线仲裁设计主要包含两组仲裁,一组为处理器中的指令总线IBUS,通过高位地址判断从只读存储器ROM取指令还是从内存模块DDR2中取指令;另一组为处理器中的数据总线,通过高八位地址判断访问哪个外设,具体访问哪个寄存器通过低位判断。其中主设备采用轮询的机制抢占总线,核心设计思想为:统计主设备的个数n,然后定义n位的变量token={00_01},通过一定周期把1向左循环取到每个主设备,而实现仲裁的轮循机制。
2.3 flash存储器程序区划分结构设计
如图3所示,flash存储器地址从Oxl00000到Oxlc0000是bit文件放置区1,Oxlc0001到Oxlf0000是程序区1 2,地址从Oxlf0001到Ox220000是程序区II3,地址从Ox220001到Ox250000是程序区111 4,地址从Ox250001到Ox300000是扩展区5。SoC系统bit文件利用Xilinx ISE中的impact工具烧录进去,其他程序区的程序通过硬件描述语言中的readmemh命令写入。
3 软件设计
系统在上电启动的时候,程序指针PC指向只读存储器ROM中Bootload区的一段代码,这段代码一般完成程序从flash存储器拷贝到内存,再将程序指针跳转去内存一条一条执行的功能。本文中的软件设计在此基础上增加了改进,如图4所示。首先优化串行外设接口SPI和通用异步收发传输器UART,并实时监测终端发过来的命令:若监测到命令,校验接收到的命令是否为有效命令,若为有效命令则根据接收到的命令选择flash存储器相应程序区的有效地址,否则通过通用异步收发传输器UART和蓝牙模块向终端发送“错误”提示,继续等待命令。得到有效的地址后,初始化串行外设接口SPI,产生串行外设接口SPI时序和发送读命令,根据flash程序区的有效地址拷贝程序到内存模块DDR2中,直到程序大小等于程序大小变量sizeword的值,最后执行跳转命令,将处理器指向内存模块DDR2的起始位置,实现系统的自启动。程序流程图如图4所示。
4 仿真与下板测试
OR1200处理器是OpenRisc家族中的一员,在软件编译的时候我们需要安装OpenRisc交叉编译工具链:采用Xilinx的Virtex-5开发板,同时需要安装ISE等EDA工具。
编译工具链把前面设计的加载启动代码(bootloader)从汇编语言编译成硬件描述语言,并实例化到SoC系统顶层中。然后进行flash存储器的分区并烧录程序,本文通过readmemh命令向程序区1、程序区11和程序区III依次烧录hellowa.c、hellowb.c和hellowc.c。这几个测试程序会通过串口分别打印出“Hello word A”、 “Hell。word B”和“Hello word C”。这样我们就可以很直观地判断系统在执行哪个程序。 将板子上电,并利用Xilinx ISE中的impact工具将编译好的SoC系统bit文件烧录至flash存储器Oxl00000到Oxlc0000区域,当编译综合通过,下板成功后,我们就可以抓取波形和串口打印判断结果。其波形图和串口打印如图5和图6所示。从波形图中我们可以看出串口控制器输出14个字符,正好是“Hell。World A/B/C”,放大波形我们可以看到第一个数据为Ox48,正好是字符“H”的ASCLL码。而从窗口上打印的输出更为明显。给串口发送命令“0”,选择flash程序区1hellowa.c,从Oxl00000开始拷贝程序,仿真测试结果输出“Hello word A!”。给串口发送命令“1”,选择flash程序区Ⅱhellowb.c,从Ox130001开始拷贝程序,仿真测试结果输出“Hell。word B!”。给串口发送命令“2”,选择flash程序区Ⅱhellowc.c,从Ox160001开始拷贝程序,仿真测试结果输出“Helloword C!”。
5 结论
本发明基于SoC的无线智能程序加载方法中,首先将flash存储器划分成若干个程序区,并通过加载指令把不同的程序分别加载到不同的程序区,然后运行加载启动代码,初始化串行外设接口并监测串口接收到的命令,从flash存储器中选择相应程序区,实现程序到内存模块的拷贝,最后执行跳转命令,将处理器指向内存模块的起始位置,实现系统的自启动:整个加载过程简单,不需要接线和留出程序加载接口,也不需要相应的IDE软件来加载程序,通过手机或带有蓝牙模块的终端就可以加载不同的程序,适用范围广。
参考文献:
[1]唐明华,黄诚,刘新,等一种基于SoC的无线智能程序加载方法及系统国家发明专利专利申請号:20160139229.2中国2015
[2]苏纪娟,孟祥玲,朱庆明系统芯片技术国内外发展现状[J]军民两用技术与产品2015(13)
[3]王龙兴集成电路的过去、现在和将来(一)世界集成电路的发展历史[J]集成电路应用2014(01)
[4]李争,李范呜,陈捷,等基于Wishbone SoC总线接口的高性能SDRAM控制器[J]科学技术与工程2008(12)
[5]郑文静,李明强,舒继武Flash存储技术[J]计算机研究与发展2010(04)
[6]陈光武,范多旺,于超,等基于Wishbone片上总线的IP核的互联[J]微计算机信息2009(20)