APP下载

类脑计算机的CAM驱动设计

2019-05-13梁君泽刘怡俊

数字技术与应用 2019年1期

梁君泽 刘怡俊

摘要:为了满足类脑计算机对CAM的控制和通信要求,要在Linux操作系统下开发一款与CAM通信的读写控制程序。为了解决上述问题,本文实现了一种Linux操作系统下,基于MISC框架的CAM驱动开发程序。在类脑计算机硬件台上进行了验证,通过调用设备驱动程序实现了对CAM设备的读,写,初始化CAM表和设置各种模式等功能。

关键词:设备驱动程序;linux;CAM;类脑计算机

中图分类号:TP338 文献标识码:A 文章编号:1007-9416(2019)01-0190-02

0 引言

人工智能学科经近60年的发展,已经奠定了若干重要的理论和实践基础,理论方面就有模式识别、机器学习、深度学习等,而实践方面就有BM Deep Blue系统击败国际象棋世界冠军卡斯帕罗夫、 IBM Watson问答系统在“危险边缘”挑战赛中击败人类对手、 Siri等自动人机对话与服务系统的出现、 Alphago(阿尔法狗)击败世界围棋第一高手李世石,Google 汽车自动驾驶等都从不同视角展示了这个领域的进展[1]。然而,上述的突破都仅是在某一个特定邻域超过人脑。而相关理论、算法与系统很难推广到其他邻域,用于解决其他问题。

为了全面提升智能科学水平,国内各大科研院所也陆续成立专门团队参与国际竞争,并开展各类人工智能、仿生科技、类脑计算的前沿研究。

本项目组也开展了类脑计算机的项目,类脑计算机平台中的每块主板是由6组计算模块组成,每组有8个8核的ARM和一个FPGA组成。ARM通过EMAC与FPGA进行通信,组间通过SATA通信。为了能够保证计算模块之间的数据传输和有效的转发,需要用到内容可寻址存储器CAM(Coment-Addressable Memo-ry),所以需要设计一个基于linux CAM驱动用于对CAM进行数据项的操作。

1 总体方案设计

1.1 芯片选择

本项目类脑计算机平台可以选择使用FPGA实现的方法实现CAM功能或者CAM芯片。考虑到用FPGA芯片实现CAM需要庞大资源,为节省成本并为其他功能的实现节约片上资源,本平台选择使用美Motorola公司的CAM芯片MCM69C232[2]。

1.2 驱动程序方案设计

本文CAM驱动程序的开发在Linux驱动中misc的驱动框架基础上,在Linux操作系统的环境下利用gcc-4.7编译工具,使用c编程语言实现对CAM的cam_open,cam_read和cam_ctrl功能。 然后映射到file_operation中的open,read和ctrl函数上,供应用层调用。驱动框架如图1所示。

cam_open的主要功能是对CAM芯片进行复位。cam_read的主要功能是通过输入参数对cam的4个寄存器进行操作,然后返回cam的输出。cam_ctrl的功能是根据输出的命令完成设置全局屏蔽寄存器,数据项插入,数据项的删除、设置快读寄存器,快读模式,快读模式,初始化CAM表和带缓存读写模式等功能。

2 驱动程序的实现

2.1 cam_ioctl函数

cam_ioctl是根据传入的指令,执行对应功能的函数。这个ioct支持的功能有:

CAM_SET_GLOBAL_MASK_REGISTER(设置全局屏蔽寄存器):屏蔽寄存器为0的位要求数据项的对应位作匹配操作;为1,则对应位无需匹配。典型的應用中用户总是把数据项的高位序位定义为“待匹配字节”,低位序位定义为“结果输出字节”。

CAM_FAST_ENTRY_MODE(快读模式):用于将批量数据项快速写入CAM表的一种模式。它绕开12×64位的输入数据项队列,直接往写入CAM表内写入数据。这种情况下只有当输入队列为空时才执行成功,否则错误代码寄存器会输出为0xFFFA。并且操作完成后需要初始化表操作后,匹配口才能进行数据检索。

CAM_FAST_READ_REGISTER(设置快读寄存器):设置快读操作下CAM表的起始地址。12位的地址通过I/O寄存器0的低12位输入,只有当输入队列为空时才可进行操作,否则会出错。

CAM_FAST_READ(快速读取):从CAM表读出一个数据项。起始地址由快读寄存器定义,读一次地址自动加1,连续的操作可读出CAM表连续的数据项。结果输出在4个I/O寄存器中,只有当输入队列为空时才可进行快读操作,否则会出错。

CAM_INITALIZE_TABLE(初始化表):选择快速写入模式时,该操作确定CAM表数据项之间的相互关联,实际上就是将CAM表数据项内部由小到大排序。完成后将标志寄存器的表初始化位置高,同时会有中断产生。选择动态写入模式时,不需要该操作。

CAM_BUFFERED_ENTRY_MODE(带缓存读写模式):进入这个模式后,写入和删除数据操作都会使用一个缓冲队列。任何时刻都可以进入这个模式,并且立刻可以进行数据的匹配。

2.2 实现misc设备

misc设备是注册到misc架构的,使用struct miscdevice定义misc平台设备,通过misc_register完成设备向内核注册,设备注册成功后,就会在/dev目录下创建名字叫‘cam的节点。

2.3 实现misc驱动

Misc驱动定义结构体cam_gpio_dev,核心代码如下所示:

static struct miscdevice cam_gpio_dev = {

.minor = MISC_DYNAMIC_MINOR,

.name = "cam",

.fops = &cam_ops

};

在本驅动中,当驱动加载时系统会调用cam_gpio_init入口函数,入口函数会执行misc_register(&cam_gpio_dev)函数向内核进行注册。

3 结语

从Alphago(阿尔法狗)击败世界围棋第一高手李世石开始人工智能越来越受关注,如Alphago、IBM Watson都是用机器学习、深度学习等的方法解决特定领域的问题,而类脑计算通过借鉴大脑中进行信息处理的基本规律,对硬件实现和软件算法多个方便面研究。本文的CAM设计的驱动,经过测试,证明满足了类脑计算机平台对CAM的控制和更新CAM表的需求。

参考文献

[1] 曽毅,刘成林,谭铁牛.类脑智能研究的回顾与展望[J].计算机学报,2016,39(1):212-222.

[2] 杨黎明.内容可寻址存储器MCM69C232及其应用[J].单片机与嵌入式系统应用,2006(11):35-38.

Abstract:In order to meet the requirements of CAM control and communication by brain-like computers, a read / write control program with CAM is developed under the Linux operating system. In order to solve the above problems, this paper implements a CAM driver development program based on MISC framework under Linux operating system. The functions of reading, writing, initializing the CAM table and setting up various modes are realized by calling the device driver on the brain-like computer hardware platform, and the functions of reading, writing, initializing the CAM table and setting up various modes are realized by calling the device driver.

Key words:device drive;linux;CAM;brain-like compute