基于CPLD的PLC背板總線協(xié)議接口芯片設(shè)計
信號包括數(shù)據(jù)/地址信號、復(fù)位信號Reset、中斷信號INT.主機和從機協(xié)議芯片的內(nèi)部結(jié)構(gòu)框圖相同,如圖3 所示。
協(xié)議芯片內(nèi)部有狀態(tài)機控制器、幀控制器、移位寄存器、接收/發(fā)送FIFO 和讀寫緩存。單片機發(fā)送的周期性、非周期性數(shù)據(jù)幀,首先都寫到寫緩存,在發(fā)送FIFO 中進行排隊發(fā)送,在SPI 時鐘SCLK 的驅(qū)動下數(shù)據(jù)幀被轉(zhuǎn)換為串行數(shù)據(jù)發(fā)送到背板總線;在SPI 時鐘的作用下, 接收來自背板總線上的串行數(shù)據(jù);在狀態(tài)機和幀控制器的協(xié)調(diào)下,接收FIFO 中的有效數(shù)據(jù)幀被提取并放進讀緩存區(qū),等待單片機來讀取,如果是非周期性數(shù)據(jù)則發(fā)中斷信號通知單片機來取數(shù)據(jù)。讀緩存中的周期性數(shù)據(jù)是可以覆蓋的,新接收到的周期性數(shù)據(jù)直接覆蓋舊的周期性數(shù)據(jù),而非周期性數(shù)據(jù)是單獨存放的,不能覆蓋,由單片機讀取并清除。
圖3 協(xié)議芯片內(nèi)部結(jié)構(gòu)框圖
協(xié)議芯片使得外接的單片機可以在空閑的情況下訪問讀緩存和寫緩存,單片機不必頻繁地通過中斷技術(shù)處理周期性數(shù)據(jù),也使得PLC 主機可以無等待地訪問從機的周期性數(shù)據(jù)。
3 基于CPLD 的協(xié)議芯片實現(xiàn)
3.1 CPLD 芯片選型。
本設(shè)計選用lattice 公司的MachXO 系列芯片,該系列CPLD 集成了部分FPGA 的功能, 除了內(nèi)置豐富的LUT 資源以外,還有大量分布式的SRAM 位和嵌入式的專用于FIFO 設(shè)計的SRAM 塊, 并有模擬鎖相環(huán)(PLL)支持時鐘信號的倍頻、分頻等,I/O引腳可配置成1.2/1.5/1.8/3.3V 電平兼容。
3.2 基于Verilog HDL 語言的硬件程序設(shè)計
本設(shè)計采用Verilog HDL 語言進行協(xié)議芯片的程序設(shè)計,Verilog HDL 語言是一種硬件描述語言,設(shè)計數(shù)字芯片時可以按照層次描述,并可以進行時序建模。本設(shè)計采用混合設(shè)計模式,主要設(shè)計的模塊有狀態(tài)機、協(xié)議幀檢測、FIFO 控制器設(shè)計等。
1)狀態(tài)機設(shè)計。
協(xié)議芯片的頂層模塊是狀態(tài)控制器部分,協(xié)議芯片共有四個狀態(tài), 分別處理基于Verilog HDL 程序語言的狀態(tài)機描述偽代碼如下:
2)協(xié)議幀檢測。
本協(xié)議芯片的幀校驗和采用簡單的加和形式進行,在接收一方,如果數(shù)據(jù)幀中有用數(shù)據(jù)的加和同后續(xù)的校驗和字節(jié)相同,則協(xié)議是正確的,否則丟棄該幀。協(xié)議幀校驗和計算的代碼如下:
3)FIFO 設(shè)計。
FIFO 利用了MachXO 系列CPLD 的嵌入式SRAM 塊的資源,Lattice 公司的ispLEVER 7.0 軟件提供了可配置的IP 軟核,該軟核可以采用基于嵌入式SRAM 塊實現(xiàn), 也可以使用查找表實現(xiàn),F(xiàn)IFO 的IP 核框圖如圖4 所示,F(xiàn)IFO 的可配置參數(shù)包括FIFO字節(jié)深度、EmptyFull、AlmostEmpty 和AlmostFull觸發(fā)字節(jié)深度、數(shù)據(jù)寬度、大小端模式等。
評論