FPGA實(shí)現CAN總線(xiàn)通信節點(diǎn)設計

圖4 接收數據流程圖
2.2 FPGA 頂層模塊設計
FPGA頂層的模塊設計如圖5 所示。其中c lkdiv 模塊是將輸入的50MH z時(shí)鐘clock十分頻后作為模塊基準時(shí)鐘。SJACTROL模塊是控制總線(xiàn)通信的主模塊, 而RW 模塊則是根據主模塊的信號生成SJA1000所需要的讀寫(xiě)時(shí)序信號。SJACTROL模塊通過(guò)start和isw r兩個(gè)信號通知RW 模塊是否要進(jìn)行讀或寫(xiě)總線(xiàn)操作。若是寫(xiě)操作, 則將地址和數據通過(guò)Addrout和Dataout傳遞給RW, RW 將負責把數據準確地送到S JA1000的數據地址復用總線(xiàn)ADDR, 并驅動(dòng)SJA1000接收數據, 在寫(xiě)操作完成后發(fā)送w riteover信號通知SJACTROL寫(xiě)操作完成。讀操作時(shí)RW根據SJACTOL送來(lái)的地址, 從SJA1000的數據總線(xiàn)上讀取數據, 并將得到的數據通過(guò)Datasave 總線(xiàn)返回給SJACTROL。

圖5 頂層模塊設計
SJACTROL的狀態(tài)機通過(guò)5個(gè)狀態(tài)的轉換來(lái)實(shí)現控制: 空閑狀態(tài)、初始化狀態(tài)、查詢(xún)狀態(tài)、讀狀態(tài)、寫(xiě)狀態(tài)。RW 則是按照SJA1000的芯片數據手冊進(jìn)行時(shí)序邏輯設計。在編寫(xiě)模塊時(shí), 需注意雙向總線(xiàn)的編寫(xiě)技巧。雙向口最好在頂層定義, 否則模塊綜合的時(shí)候容易出錯。
3仿真結果
FPGA中利用Verilog 編程產(chǎn)生SJA1000的片選信號CS, 地址鎖存信號ALE, 讀寫(xiě)信號RD、WR.這些控制信號共同驅動(dòng)SJA1000進(jìn)行數據接收和發(fā)送。設計選取的是v irtex系列的芯片, 邏輯開(kāi)發(fā)在ISE 平臺上進(jìn)行。在FPGA 的調試階段, 使用xilinx的應用軟件 ChipScope pro( 在線(xiàn)邏輯分析儀) 來(lái)在線(xiàn)觀(guān)察FPGA設計內部信號的波形, 它比傳統的邏輯分析儀更方便。圖6為在線(xiàn)進(jìn)行數據傳送接收時(shí)的實(shí)際波形。

圖6SJA1000接收和發(fā)送數據的時(shí)序仿真
4 結束語(yǔ)
實(shí)現了CAN 總線(xiàn)的通信功能, 系統工作狀態(tài)良好。實(shí)踐證明CAN 通信節點(diǎn)采用FPGA作為核心控制單元, 與傳統的單片機設計相比, 更加靈活并且擴展性更強。
fpga相關(guān)文章:fpga是什么
通信相關(guān)文章:通信原理
晶振相關(guān)文章:晶振原理 雙絞線(xiàn)傳輸器相關(guān)文章:雙絞線(xiàn)傳輸器原理
評論