郭 佳
基于Cosim交換機芯片仿真系統設計
郭 佳
(東華大學 信息學院,上海 201620)
由于現有的仿真器對軟硬件的協同開發支持不足,不能有效銜接軟硬件割裂的開發環境。Cosim仿真系統是建立在TCP/IP socket通信的server/client上的應用程序。Cosim仿真系統的設計結合C語言,Verilog,Linux操作系統相關知識建立了一個基于軟件平臺的交換機芯片仿真系統。實現了對交換機系統中數據包路由信息和ASIC通信的系統仿真。
嵌入式;協同開發;仿真器;ASIC
嵌入式系統的軟硬件設計中一個重要的問題就是怎樣把嵌入式的軟件和硬件集成在一起調試。傳統的設計方法流程是,首先進行硬件子系統的設計實現,其次再進行軟件子系統的設計實現[1-3]。整個系統的開發基本是一個串行的方式,導致軟硬件的開發過程割裂。因此在設計方法學上,業界有迫切的需求改變軟硬件協同設計的現狀,在嵌入式系統設計的早期就可以將軟件和硬件聯合調試[4-5]。
基于業界的軟硬件協同設計和開發的需求,產生了兩類大類仿真器:第一類是基于硬件的仿真器,使用諸如FPGA和獨立的有CPU和內存的PCB板。硬件仿真器運行的比實際系統慢一個數量級,讓設計者可以使用大量的測試例程去測試系統,同時成本較高;第二類是基于軟件的仿真器,為系統的所有組件構建軟件模型,使用軟件模型去仿真來分析系統的行為。它的優點是成本低,運行速度快[6]。
筆者所設計的Cosim仿真器屬于軟件仿真器。通過對交換機芯片C/System C-model的軟件功能建模,實現了對多芯片系統的系統集成功能,接口協議,性能,QOS,向后兼容性的仿真,使得仿真系統模擬在真實硬件上運行軟件的效果,達到軟硬件協調開發的目的。最終得到Cosim在交換機系統中數據包轉發路由和ASIC通信系統的仿真結果[7]。
Cosim是在實際可用的ASIC芯片和PCB板生產出來之前,運行一個硬件的軟件仿真環境,用于測試和驗證整個系統的架構、系統的完整性、軟硬件的穩定性,發現并修復可能存在的錯誤與缺陷。系統主要由五部分組成:軟件客戶端software_client,硬件客戶端hardware_client,仿真服務器端cosim_server,仿真管理端cosim_manager,運行程序cosim_launcher。系統組成結構圖如圖1所示:

圖1 Cosim 系統構架
Cosim_server主要用C語言寫成,用于管理所有客戶端之間的TCP/IP通信,它所起的主要用就是將任何源客戶端發來的消息轉發到目的客戶端,無論該消息是從軟件客戶端發向硬件端還是相反方向;Cosim_manager主要存放客戶端之間的通信的路由信息;Hardware_client可以由一個或多個芯片組成,這些芯片用Verilog寫成,被編譯成一個或多個獨立運行的在單個或多個工作站上的客戶端;Software_client是由C語言開發的程序,被編譯在工作站上運行,程序內部所有與芯片的IO部分都被替換成向對應的硬件客戶端發送與接收消息;Cosim_launcher是一個初始化配置和啟動服務器端與各個客戶端的程序,它從預定義好的XML中讀取各個客戶端的關系配置,再啟動對應的客戶端,從而能靈活的根據配置文件構造出不同的系統。
Cosim的客戶端之間都是通過Cosim server來通信,他們使用Cosim內部定義的消息格式Cosim message來交換信息。
2.1 Cosim消息的構成
Cosim message主要由兩個部分組成:(1) Cosim header是消息頭部分,主要由五個部分組成:DA,消息的目的地址;SA,消息的源地址;Type,消息的類型;Tol_len,消息的總長度,包括包頭長度;Seq_id,用于調試的消息序列號。(2) Cosim address是消息的地址格式,也由五個字段構成:devId,客戶端ID; devInstance,客戶端的實例號;slot,客戶端所處交換機機架的插槽號;chassis, 客戶端所處的交換機的機架號;if_id:客戶端內部的接口或端口號。主要地址primary address就是(devId, devInstance, slot, chassis)的集合primary address用于cosim server定位一個客戶端并轉發消息。絕對地址absolute address由primary address+if_id構成,用于發送消息到客戶端的一個特定端口。消息頭部中的DA和SA都是絕對地址。

圖2 Cosim message
2.2 Cosim消息的類型
Cosim系統中定義的消息類型包括:HELLO,ROUTE_INFO,CONTROL,PKT,TERNINATE。下面依次介紹以上幾種消息類型:(1) HELLO消息帶有客戶端接收端口的證書信息,當一個客戶端啟動聯網后,首先通過Cosim server 發一個HELLO消息給Cosim manager,Cosim server從消息的頭部SA中記錄客戶端的address。然后,Cosim manager保存來自客戶端的HELLO消息,并發送ROUTE_INFO消息給客戶端。之后,Cosim manager廣播收到HELLO消息給所有已存在的其他客戶端。證書信息的交換發生在新客戶端第一次連接時。(2) ROUTE_INFO:Cosim manager會發送ROUTE_INFO給各個clients,route_info是一個
3.1 芯片硬件功能介紹
該仿真系統所仿真的芯片是交換機系統中的Port ASIC, 簡稱為SL,該芯片主要對來自XAUI口的的數據包做進一步的處理,如打上內部的TAG和增加VLAN分組的標示,然后通過XGMII口連接到兩個交換機中的Bridge ASIC接口。
3.2 基于RTL side的SL軟件抽象模塊設計
RTL side是一個C語言寫的函數庫,這個C程序庫可以通過simv的DirectC接口直接被simv調用,這個函數庫的主要功能是用于管理server和chip之間的socket通信如打開關閉連接,交換數據等等。
每一個芯片都有多個端口可以發送和接收數據。從Server 接收到消息存儲在芯片的端口隊列里,當simv 準備好接收新的命令時,就從隊列里取出消息。發往其他方向的消息不在隊列里停留就直接發出去。這樣做的目的是因為RTL部分是整個Cosim系統的瓶頸,而Server任何時候都是準備接收進來的消息。simv使用該API去發送請求給server要求建立或者關閉特定芯片的連接。RTL virtual client會轉發上面的請求給server,在收到Server發送過來的確認信息后,返回成功或者失敗給simv。simv使用該API 接收從server發過來的數據。這包括對來自server的發向當前chip 的socket 消息的非阻塞的讀取,所有的信息都會被讀取并寫入相應端口的隊列。每一個消息會由原來的IOS-Server-RTL API的格式轉換成RTL-simv API的格式。之后,只有在sim_recv調用參數中指定的端口隊列的第一個消息會被讀取,并轉換為DirectC格式的以供simv讀取。simv使用該API發送數據到server。數據以DirectC格式的接收后,立刻被從RTL-simv API格式轉成IOS-server API格式,并被以阻塞的方式發送到server上去。
VCS的DirectC功能可以讓C語言寫的RTL client被編譯后和vcs仿真環境一起運行。第三節中描述的庫函數以externs方式聲明在verilog的Cosim wrapper文件里。這樣就可以使得verilog直接取調用它們,而這些庫函數本身就像是原生的verilog task/function一樣。
在Cosim集成模塊中該仿真器主要實現了以下功能(1)初始化所有芯片;(2)通知Cosim server所有芯片的存在;(3)發送chip init done消息給Cosim server;(4)輪詢接收消息,如cpu的操作或packet的傳輸,消息來自client發送到芯片的特定端口;(5)將仿真中產生的消息,如CPU讀數據,芯片的數據包輸出,中斷錯誤等等,發送回Cosim server。
Cosim 仿真系統共含有四個部分:Cosim launcher, Cosim server, Cosim manager, Cosim 客戶端。下面分別給出系統各個部分的仿真結果。
圖3中Launcher在讀取配置文件后,分別啟動了Cosim server,Cosim manager,Cosim client。整個Cosim系統都是通過Cosim launcher 這個perl腳本來啟動和初始化其它模塊的。主要就是讀取Cosim客戶端的配置文件,啟動Cosim server和Cosim客戶端。圖4中Cosim server 通過Cosim launcher 被調用運行,它的主要功能就是建立各個客戶端之間通信的一個中轉服務器,其他的客戶端都是通過server彼此連接的。Cosim server在建立socket之后就在不停的監聽socket,之后其他的客戶端各自連接上了cosim server,發送hello消息給server以及其他客戶端。如圖5所示,Cosim manager在啟動后會打印出當前的路由信息表,路由信息顯示當前所有建立連接的Cosim客戶端的端口對應關系。Cosim 客戶端運行結果如圖6所示SL 客戶端運行之后會接收來自診斷系統的IO訪問指令,返回對應的信息。該客戶端打印出了診斷系統訪問芯片的寄存器的過程以及數據包的路由信息。

圖3 Cosim Launcher 運行結果

圖4 Cosim server 運行結果

圖5 Cosim manager運行結果

圖6 SL芯片硬件客戶端仿真結果
本論文首先簡單介紹了仿真器的概念、結構以及發展歷史,然后介紹了主流的仿真器,分析了現有仿真的局限性,說明了本研究的目的以及文章的組織。接著本文引入了對Cosim的介紹,從它的特點和功能的角度分析了Cosim平臺,在此基礎上詳細闡述了Cosim平臺的體系架構和設計要素。由于嵌入式系統的傳統仿真器的局限性,它們沒有對軟硬件協同開發的方法學有強大的支持,在這種背景下,新的協同仿真器應運而生[8-10]。本文后半部分以嵌入式網絡ASIC芯片及其驅動開發為基礎詳細的探討了Cosim仿真器在開發芯片和驅動過程中的應用。
[1] 熊光澤,詹瑾瑜. 嵌入式軟硬件協同設計技術綜述[J]. 計算機應用,2006,26(4):279-282.
[2] 鮑華,洪一,郭二輝. 面向Soc的軟硬件協同驗證平臺設計[J]. 計算機工程,2009,35(8):1-4.
[3] 王少平,王京謙,錢瑋. 嵌入式系統的軟硬件協同設計[J]. 現代電子技術,2005,4(2):5-7.
[4] 鄭德春,姚慶棟. 基于軟硬件協同仿真平臺的仿真測試方法[J]. 電路與系統,2008(6):15-18.
[5] 李京波,董利民,吳武臣. SoC軟硬件協同驗證中的軟件仿真[J]. 電子工程師,2007(1):23-27.
[6] 柴旭東,李伯虎. 復雜產品協同仿真平臺的研究與實現[J]. 計算機集成制造系統,2002,(7):37-45.
[7] 熊光楞. 協同仿真與虛擬樣機技術[M]. 北京:清華大學出版社,2004.23-87.
[8] 郭斌,熊光楞. 支持復雜產品設計的協同仿真平臺研究[J]. 機械與電子,2002,(4):703-706.
[9] 茍凌怡,熊光楞. 支持虛擬樣機協同仿真平臺關鍵技術研究[J]. 系統仿真學報,2002,(3):34-38.
[10]燕雪峰,邸彥強. 協同仿真平臺中的仿真組件技術及其實現[J]. 計算機集成制造系統,2004,(10):32-35.
Switch ASIC Co-simulation System Design Based on Cosim
GUO Jia
(School of Information Science & Technology, Donghua University, Shanghai 201620, China)
In current background, the traditional development methodology has been unable to follow the market requirement due to its separated way of hardware and software development. For the limit of current simulators, we design and develop a new collaborative simulation platform called Cosim, which based on TCP/IP socket communication application program.Cosim simulation system is developed based on C language, Verilog, Linux. It is a switch ASIC simulation system based on software platform. Cosim simulation system demonstrates switch system’s packet transfer, router info and ASIC communication.
Embedded System; Co-development; Simulator; ASIC
TN91
A
1009-5160(2012)03-0077-04
郭佳(1986-),女,碩士,研究方向:控制理論與控制工程.