引言
當前廣泛應用的車載總線技術(如CAN、VAN、LIN等總線) 由于缺少確定性、同步性及容錯機制等并不能滿足要求,FlexRay聯盟推進了FlexRay的標準化,使之成為了新一代汽車內部網絡通信協議[1]。FlexRay關注的是當今汽車行業的一些核心需求[2],包括更快的數據速率、更靈活的數據通信、更全面的拓撲選擇和容錯運算。
FlexRay總線中的每個接入端稱為節點。節點主要由電源供給系統(Power Supply)、總線驅動器(Bus Driver)、固化有FlexRay通信協議的通信控制器(Communication Controller) 及主機(Host)4個部分組成。通信控制器是通信節點的核心器件。它主要的功能有媒體接入控制、時鐘同步、編解碼、協議操作控制等[3]。媒體接入控制功能是通信控制器的核心功能,解決數據進入FlexRay通信控制器的方式,為通信控制器的編解碼功能做好時間準備以及數據準備[4]。
本文提出一種FlexRay通信控制器媒體接入控制的設計方法。該方法直接訪問內存,大大縮短了獲取配置的時間;設計更加精簡,能夠保證通信的穩定性。
1 媒體接入控制的設計
本文提出的基于內存方式實現媒體接入控制的方法包括以下步驟:首先,媒體接入控制模塊的所有子模塊在統一時鐘域下工作[5],用戶把與媒體接入控制相關的配置信息寫入內存;然后,媒體接入控制的各個子模塊直接從內存中讀取該信息。媒體接入控制原理圖如圖1所示。
時鐘產生模塊根據用戶的配置信息,對控制器晶振產生的最小時鐘節拍按照協議規定形成系統所需要的時鐘周期;控制模塊根據用戶配置的信息將時鐘周期進一步劃分為4個獨立的段,即靜態段、動態段、符號窗口、網絡空閑段;計時器模塊根據用戶配置信息實現計時功能,用來記錄媒體接入控制所需要的時間。
圖1 媒體接入控制原理圖
1.1 時鐘產生模塊
時鐘產生模塊實現媒體接入控制所需要的時鐘周期,為編解碼功能做好時間準備,同時把該信息傳遞給控制模塊。該模塊首先從內存中讀取所需配置信息,主要有gMacroPerCycle、gdStaticSlot、pMicroPerCycle。時鐘產生模塊根據這些配置信息進行初始化操作,然后等待晶振的最小時鐘節拍(vMicrotick)。當最小時鐘節拍大于等于pMicroPerCycle/(gMacroPerCycle-1)時,該模塊產生周期。
時鐘產生模塊處理流程如圖2所示。
圖2 時鐘產生模塊處理流程
1.2 控制模塊
控制模塊主要為FlexRay通信控制器的媒體接入控制功能提供所需的時隙劃分,主要有靜態段(static segment)、動態段(dynamic segment)、符號窗口(symbol window)、網絡空閑段(network idle time)[3]。
本文提出的基于內存的方式實現控制功能的思路如下[6]:首先從內存中讀取所需要的配置信息,主要有gdstaticSloc、gNumberOfMinislots、gdSymbolWindow、gdActionPointOffset、gdMinislotActionPointOffset。當接收到時鐘產生模塊提供的周期開始信號時,控制模塊根據gdstaticSloc實現周期中的靜態段。靜態段使用靜態槽實現TDMA,以協調數據的傳輸。在每個通道,通信控制器上設置一個槽計數器(vslotcounter),統計靜態槽的個數。當時鐘周期開始的時候,設置槽計數器的值為1;當槽結束的時候,槽計數器的值加1。對于一個具體的簇,靜態槽的總數是一定的,由參數gNumberOfStaticSlots確定。對于每個靜態槽,FlexRay通信控制器根據用戶的配置和MAC模塊當前的操作模式決定是否為編解碼模塊提供數據。
根據gNumberOfMinislots,該模塊實現周期中的動態段。動態段使用動態槽實現事件觸發的媒體接入方法,以協調數據的發送。通信控制器在每個通道上設置一個動態槽計數器,統計動態槽的個數。每個動態槽根據zMinislot來計數,當有數據傳送時,動態槽可能占用多個zMinislot;當沒有數據傳送時,動態槽占用一個zMinislot。所以動態槽的大小是根據是否有數據發送決定的。對于一個具體的簇,zMinislot的總數是一定的,由參數gNumberOfMinislots確定;最后它根據gdSymbolWindow實現周期中的符號窗口。最后一個周期中剩下的時間就是網絡空閑段。
具體處理流程如圖3所示。
圖3 處理流程
2 設計驗證
確保設計正確性的關鍵是設計驗證,主要通過邏輯功能仿真[5]。邏輯功能仿真是在不考慮信號延遲的情況下對設計的邏輯功能進行驗證。驗證過程是:首先編寫好設計的HDL代碼;然后編寫對應的TestBench,對設計進行關鍵性的驗證;最后利用仿真軟件ModelSim進行模擬,查看波形或者輸出,若發現錯誤則查找錯誤原因、修改代碼或者測試文件,直到符合設計要求。
設計驗證的首要工作是根據FlexRay協議設定具體的參數。具體參數的設定如下: gMacroPerCycle=48,gdStaticSlot=4,pMicroPerCycle=672,gNumberOfMinislots=15,gdSymbolWindow=3,gdActionPointOffset=1,gdMinislotActionPointOffset=1。
圖4 時鐘產生模塊的周期信號圖
圖5 控制模塊的四個段
圖4是時鐘產生模塊的周期信號圖。從圖中可以看到,時鐘產生模塊需要等待晶振的最小時鐘節拍信號,然后進行判斷產生周期信號。當周期信號開始時,周期編號從默認的63變為 0,然后一直編號下去直到63。
圖5是對圖4產生的周期信號開始周期的四個段的劃分。從圖中可以看到,0周期分為靜態段、動態段、符號窗口、網絡空閑段。
圖6是靜態段的媒體接入方式。從圖中可以看到,槽計數器(vslotcounter)從1開始編號直到用戶配置的值。在第一個靜態槽實現了媒體接入。
圖7是動態段的媒體接入方式。從圖中可以看到,周期8的動態段有動態槽計數器zMinislot,從0開始編號直到用戶配置的值。在第5個動態槽實現了媒體接入。
圖6 靜態段的媒體接入方式
圖7 動態段的媒體接入方式
結語
本文介紹了基于FlexRay協議的媒體接入控制的設計過程,并進行了設計驗證。從仿真結果分析,它符合協議的要求,能夠生成通信控制器的時鐘周期,將時鐘周期進一步劃分為4個段,并且給出靜態段和動態段的具體媒體接入方式。