基于Verilog HDL語言的CAN總線控制器設(shè)計(jì)及驗(yàn)證
CAN_Core為CAN協(xié)議控制器的核心部分,完成CAN協(xié)議中的數(shù)據(jù)鏈路層的全部功能以及物理層的部分功能,包括LLC子層的接收濾波、超載通知和恢復(fù)管理、MAC子層的數(shù)據(jù)封裝/拆裝、幀編碼、媒體訪問管理、錯(cuò)誤檢測(cè)、錯(cuò)誤標(biāo)定、應(yīng)答和串行化/解串行化、以及物理層的位編碼/解碼、位定時(shí)和同步。CAN_Registers為一寄存器組,外部微處理器可以通過地址直接訪問這些寄存器。根據(jù)功能框圖,設(shè)計(jì)了CAN總線控制器的程序結(jié)構(gòu),如圖3所示。
1.3 CAN總線各個(gè)功能模塊的設(shè)計(jì)
1.3.1 CAN_IML設(shè)計(jì)
參照SJA1000,設(shè)計(jì)FPGA CAN總線控制器的接口,如圖4所示。
圖中Port_0_io_7到Port_0_io_0為地址/數(shù)據(jù)復(fù)合總線。Cs_can_i為片選輸入信號(hào)。當(dāng)Cs_can_i為0時(shí)允許訪問CAN總線控制器。Ale_i為1時(shí),允許對(duì)寄存器進(jìn)行賦值。Rd_i和Wr_i為微處理器的讀使能信號(hào)和寫使能信號(hào)。Irq_on為中斷輸出信號(hào),用于中斷微處理器。Rst_i為復(fù)位輸入,用于復(fù)位CAN接口。Clkout_o為FPGA CAN控制器提供給微處理器的時(shí)鐘輸出信號(hào),時(shí)鐘分頻寄存器可禁止該引腳輸出。Bus_off_on控制總線關(guān)閉和總線開放接口,Tx_o和Rx_i與收發(fā)器相連,向總線發(fā)送和接收數(shù)據(jù)。
1.3.2 CAN_Registers設(shè)計(jì)
設(shè)計(jì)的CAN總線控制器的寄存器模塊包括以下寄存器:模式寄存器、命令寄存器、狀態(tài)寄存器、中斷寄存器、中斷使能寄存器、總線定時(shí)寄存器0~1、仲裁丟失捕獲寄存器、錯(cuò)誤代碼捕獲寄存器、錯(cuò)誤報(bào)警限制寄存器、接收錯(cuò)誤計(jì)數(shù)器、發(fā)送錯(cuò)誤計(jì)數(shù)器、驗(yàn)收代碼寄存器0~3、驗(yàn)收屏蔽寄存器0~3、接收信息計(jì)數(shù)器和接收/發(fā)送緩沖器。
1.3.3 CAN_Core設(shè)計(jì)
CAN_Core為整個(gè)CAN控制器的核心,負(fù)責(zé)處理CAN的協(xié)議。核心模塊由4個(gè)部分組成,結(jié)構(gòu)如圖5所示。
下面簡(jiǎn)單介紹CAN_Core模塊中的位流處理器、位時(shí)序邏輯。
位流處理器是CAN總線控制器中控制數(shù)據(jù)流的發(fā)生器。它還執(zhí)行總線上的錯(cuò)誤檢測(cè)、仲裁、填充和錯(cuò)誤處理等功能。主要有接收模塊、發(fā)送模塊、錯(cuò)誤管理模塊、CRC校驗(yàn)、驗(yàn)收濾波、FIFO等6個(gè)模塊組成,如圖6所示。其中CRC校驗(yàn)、FIFO、驗(yàn)收濾波在所執(zhí)行的項(xiàng)目中已經(jīng)有他人設(shè)計(jì)完成。
位時(shí)序邏輯的設(shè)計(jì)包括位定時(shí)設(shè)計(jì)、采樣點(diǎn)設(shè)計(jì)、位同步設(shè)計(jì)3部分。下面以定位時(shí)為例介紹其設(shè)計(jì)。
位定時(shí)設(shè)計(jì) 在位定時(shí)設(shè)計(jì)中采用了一個(gè)有3個(gè)狀態(tài)的狀態(tài)機(jī)。3個(gè)狀態(tài)分別對(duì)應(yīng)的是同步段和相位緩沖段1以及相位緩沖段2。傳播段占用的時(shí)間短,在控制上沒有特別的意義,僅作為物理層的傳播延時(shí),所以沒有設(shè)計(jì)進(jìn)狀態(tài)機(jī),位定時(shí)部分的狀態(tài)機(jī)設(shè)計(jì)如圖7所示。
評(píng)論