梁君澤 劉怡俊
摘要:為了滿足類腦計算機對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