APP下载

8051 IP核与 CAN IP核的接口技术

2014-09-12薛鹏举倪霞林

机械制造与自动化 2014年4期
关键词:发送数据PC机实例

薛鹏举,倪霞林

(福州大学机械工程及自动化学院,福建福州350108)

0 前言

基于现场可编程门阵列(field programmable gate array,FPGA)的电子系统设计技术是21世纪电子应用工程师必备的基本技能之一,而基于FPGA的可编程片上系统(system on a programmable chip,SOPC)设计技术是当前电子系统设计领域最前沿的技术之一。在SOPC技术的帮助下,使电子系统在IP核层次上的设计成为可能[1]。所谓IP核就是使用硬件描述语言(hardware description language,HDL)实现的一个可重用的逻辑单元,已经过RTL级设计优化和功能验证,但不包含任何具体的物理信息。因此,用户可以综合得到正确的门电路级设计网表,并可以进行后续的结构设计,具有很大的灵活性。它允许用户通过编写HDL代码轻松地设计或改变系统的功能,而无需考虑设备的规格以及印刷电路板(printed circuit board,PCB)布局。本文展示了利用IP核设计CAN节点设的关键要素,提出一个系统的SPOC技术设计的基本方法。

CAN节点是指能够挂接在CAN总线上的单元,并能通过CAN总线实现各个节点间的通信,以实现复杂的控制过程[2],当前主要用于汽车的众多传感器间接收和发送节点信号,是CAN-BUS的最重要的组件之一。一个CAN节点包括三大模块:CAN协议、微处理器和用户模块。CAN协议模块负责提供消息,而微处理器解释它们并生成相应指令,最后用户模块执行这些指令。

在当今的行业,主流的CAN节点设计仍然在使用多芯片模块。然而,这种设计方式确实降低了系统的稳定性和可靠性,并且阻碍了设计的灵活性[3]。本文证明了采用SOPC技术,将8051IP核、CAN IP核以及用户自定义模块复合在一个单一的FPGA芯片设计的可行性。

1 实例化8051 IP核

51系列单片机是基于哈佛体系结构的8位微控制器[5]。8051IP核是使用硬件描述语言编写的,在QUARTUS II环境下可以被综合成具体的硬件电路,并下载到FPGA中运行。8051IP核源代码是完全免费的,可以从网站上下载。当拿到一个IP核时,如何使用这才是最重要的问题。需明确的是8051IP核在使用ModelSim等仿真工具调试的时候,内部使用的是虚拟内存,这些内存在真实的硬件中是不能使用的。因此,应该用目标FPGA中真实存在的内存替换IP核中所有用于仿真的内存,否则系统就会报错。对于51单片机,只读存储器(ROM)和内部的随机存储器(RAM)是必需的,而外部RAM可以没有。由于ROM和内部RAM是用来存储程序和数据的功能,存储器的大小和数据总线的宽度必须要正确定义。推荐ROM的容量为8KB×8bit,片上RAM的容量为128Byte×8bit。利用C51编译器,将51单片机源程序编译生成后缀为hex的可执行代码,然后装载到实例化好的ROM中即可。需要注意的是:传统的51单片机外部使用的是复用总线,即地址总线和数据总线占用的是相同的引脚,而通过8051IP核实例化出来的51单片机采用的是非复用总线。目前,大多数CPU和外围设备都是采用非复用总线结构,所以8051IP核可以很容易与它们互连。另一点需要注意的是8051IP核的IO端口是单向的,这与传统51单片机的双向IO口有明显区别。如果想使用具有双向功能的IO口,必须自己实例化一个外部转换电路。最后需要强调的是,对于任何一款芯片,时钟是必不可少的东西,就像是CPU的“心脏”。为了获得合适的时钟信号,通常还需要实例化一个锁相环(PLL)电路。一个完整的8051系统的结构(图1)用原理图的方式来连接各个模块。

图1 8051系统结构

2 实例化CAN IP核

现场总线是用于生产现场,测量和控制设备上,实现双向、串行、多点通信的数据总线。在制造业、冶金、交通、建筑、工业控制、汽车行业以及其他领域的自动化系统具有广阔的应用前景。CAN是控制器局域网络(controller area network)的简称,最开始用于在汽车内部零件测量与执行之间的数据通信[3]。CAN属于现场总线的范畴,是一种有效支持分布式控制和实时控制的串行通信网络。现在,有很多公司根据CAN协议开发出具有CAN通信功能的微控制器芯片,例如摩托罗拉的MC68HC05X4、英特尔的82527、飞利浦的82C250等。然而,传统51单片机片内部并没有集成CAN控制器。以往通常会使用SJA1000作为CAN通信的控制器。这种设计方式有一些显著的缺点,例如:增加了芯片的数量,扩大了电路板的总体面积,降低了系统编程的灵活性。现在使用IP核重用技术综合8051IP核和CAN IP核,就好像生产出一款就有CAN通信功能的8051内核单片机。要实现这两个IP核的互连,就必须弄清两个IP核对外的接口,也就是IP核使用的总线类型。

在CAN IP核中有两种形式的总线,复用总线和非复用总线——Wishbone总线[4]。Wishbone总线是在IP核之间建立一个通用接口完成互连,可以用于在软核、固核以及硬核之间进行互联。Wishbone规范具有如下特点:简单、紧凑,需要很少的逻辑门;数据总线宽度可以是8-64位;支持大端(big-endian)和小端(little-endian)。通过前面的介绍得知8051IP核例化后外部使用的是非复用总线,因此为了让两个IP核能方便地互连起来,对于CAN IP核采用Wishbone总线形式。

CAN IP核在默认情况下使用的是复用总线,必须通过修改IP核源文件中的代码来启用Wishbone总线。需要注意的是:Wishbone总线的具体实现是不需要自己编写的,因为CAN IP核中已实现,只需在can_tov.v文件中,添加声明:define CAN_WISHBONE_IF,来启动该总线。经过测试,发现如果只是做上述修改,两个IP核之间并不能很好地通信。原因其实很简单,两个IP核之间虽然外部都是使用非复用总线技术,但是8051IP核的总线接口类型并不是Wishbone总线。因此,需要认真研究这两条总线的连接细节,它们的通信方式很相近,造成上述结果的主要因素是CAN IP核的片选信号有问题。同样是在can_tov.v文件中,修改assign CS=cs_sync2&(~cs_sync3)语句为assign CS=wb_cyc_i&wb_stb_i。从这里也可以看出,如果选中实例化好的CAN控制器,需要将wb_cyc_i和wb_stb_i同时置为1。一个完整的CAN节点的结构如图2所示。

图2 CAN节点结构

3 连接CPU和CAN控制器

完成了自定义IP核后,下一个步骤是如何将它们连接起来。采用原理图的方式进行连接。如图3所示,连接wrx_o引脚到wb_we_i引脚,p1_o[3]引脚到wb_rst_引脚,int0_i[0..0]引脚到irq_on引脚,datax_o[7..0]总线到wb_dat_i[7..0]总线,datax_i[7..0]总线到wb_dat_o[7..0]总线,adrx_[9..0]总线到wb_stb_i&wb_cyc_i&wb_adr_i[7..0]总线。还必须将wb_clk_i和clk_i连接到外部时钟信号。wb_std_i和wb_cyc_i信号是非常重要的,它们共同构成了芯片的片选信号。当上述所有任务完成后会得到如图3所示的结果。

图3 8051 IP核与CAN IP核连接原理图

在使用Keil编写具体的CAN测试程序前,需要定义如下寄存器:

#define MODR(*(unsigned char volatile xdata*)0x0300)

#define CMR(*(unsigned char volatile xdata*)0x0301)

#define SR(*(unsigned char volatile xdata*)0x0302)

#define IR(*(unsigned char volatile xdata*)0x0303)

#define IER(*(unsigned char volatile xdata*)0x0304)

#define BTR0(*(unsigned char volatilexdata*)0x0306)

#define BTR1(*(unsigned char volatilexdata*)0x0307)

#define OCR(*(unsigned char volatile xdata*)0x0308)

#define ACR(*(unsigned char volatile xdata*)0x0310)

……

上述都是CAN控制器的内部寄存器,须将其映射到相应的地址。地址的第9位和第10位恒为1,就是对应wb_std_i和wb_cyc_i引脚置1,保证片选信号有效。可以在Keil下编写一个应用程序,然后编译并生成hex文件,用它来替换之前在ROM中的hex文件。最后编译、综合整个Quartus II项目。实验结果如下。

图4显示了从FPGA目标板发送数据“0f21 31 41 51 61 71 81”到PC机上的虚拟CAN节点。

图4 从FPGA发送数据到PC

图5 显示了PC机上的虚拟CAN节点发送数据“55 02 03 04 05 06 07 08”到FPGA目标板,并且FPGA通过串口将其回送到PC机的串口上。在PC机上使用串口调试助手观察结果如图5所示。

图5 从PC发送数据到FPGA

4 结论

文中详细描述了利用SOPC技术设计CAN节点的细节。借助合理的用户自定义模块接口,CAN节点在不同场景的应用得以实现,并且通过这种新方法设计出来的CAN总线也取得令人满意的结果。

综上,基于IP核的设计是将所有组件的节点在单个芯片上实例化,系统的性能更稳定,更可靠。在使用IP核技术时,实例化相应的模块后关键步骤是正确处理不同模块之间的通信接口。IP核的可重用和可重构,使电子系统的设计,从原来的硬件布局变为软件编程,显著降低了开发成本,缩短了开发周期,增强了稳定性,并且具有更高的灵活性。因此,基于SOPC技术的设计方式已经成为电子系统设计的必然趋势。

[1]WISHBONE System-On-Chip Interconnection Architecture for Portable IP Cores.2002,7.

[2]Information onhttp://www.opencores.org.

[3]Information on http://www.oreganosystems.at.

[4]Altera Corp.CycloneII Device Handbook.Altera,2005.

[5]Jianguo Han and Guiyun Tian:Foundation and Application of Microcontroller.2004.

猜你喜欢

发送数据PC机实例
一种车载自组织网络的媒体接入控制协议
基于马尔科夫链的LoRaWAN网络节点性能分析
带标记方式的CRDSA++协议性能分析*
基于PC机与单片机的多机通信技术及抗干扰方法
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
VC.NET下实现dsPIC单片机与PC机的通信
排除OLT设备登录故障
使用IPSec安全传输数据
完形填空Ⅱ
完形填空Ⅰ