張清勇,張丹紅,姜 文
(武漢理工大學(xué) 自動(dòng)化學(xué)院,湖北 武漢 430070)
?
基于PC機(jī)和運(yùn)動(dòng)控制卡的運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)
張清勇,張丹紅,姜 文
(武漢理工大學(xué) 自動(dòng)化學(xué)院,湖北 武漢 430070)
介紹了由PC機(jī)和運(yùn)動(dòng)控制卡構(gòu)成的運(yùn)動(dòng)控制系統(tǒng),設(shè)計(jì)了由FPGA和PCI專用接口芯片組成的運(yùn)動(dòng)控制卡PCI接口控制器,實(shí)現(xiàn)了上位機(jī)與運(yùn)動(dòng)控制卡之間靈活而高速地通信,理論最大通信速率最高可達(dá)140 MB/s。
運(yùn)動(dòng)控制卡;PCI總線;接口控制器;FPGA
運(yùn)動(dòng)控制卡是一種可用于各種運(yùn)動(dòng)控制場(chǎng)合的上位控制單元。工業(yè)運(yùn)動(dòng)控制系統(tǒng)中,大多數(shù)運(yùn)動(dòng)控制卡通過PCI總線與上位機(jī)通信,PCI總線接口控制器的性能直接決定了運(yùn)動(dòng)控制卡與上位機(jī)的通信性能。PCI總線規(guī)范十分復(fù)雜,采用CPLD或FPGA等可編程邏輯器件直接實(shí)現(xiàn)接口控制器在技術(shù)和經(jīng)濟(jì)上要求比較高[1],為了達(dá)到PCI規(guī)范的嚴(yán)格要求,需要作大量的邏輯驗(yàn)證、時(shí)序分析和程序調(diào)試,而采用專用PCI接口芯片和可編程邏輯器件相結(jié)合的設(shè)計(jì)方法可使設(shè)計(jì)開發(fā)者免除繁瑣的時(shí)序分析,增加接口設(shè)計(jì)的靈活性。
筆者設(shè)計(jì)的PCI接口控制器由專用PCI接口芯片和FPGA組成。PCI9054是美國PLX公司生產(chǎn)的一款32bit/33MHz的通用PCI總線控制芯片[2-5],突發(fā)傳輸速率可達(dá)到132 MB/s,能夠完成PCI總線信號(hào)與Local總線信號(hào)的相互轉(zhuǎn)換。
FPGA(field-programmable gate array),即現(xiàn)場(chǎng)可編程門陣列是在CPLD基礎(chǔ)上發(fā)展起來的新型高性能可編程邏輯器件[6],可完成極其復(fù)雜的時(shí)序與組合邏輯電路功能。該設(shè)計(jì)選用Altera公司Cyclone II系列的EP2C5T144完成PCI9054 Local總線與PCL6143 8086總線的對(duì)接。運(yùn)動(dòng)控制卡的大部分運(yùn)動(dòng)控制功能是由PCL6143實(shí)現(xiàn)的,EP2C5T144除了實(shí)現(xiàn)PCI9054與PCL6143總線接口的對(duì)接外,還可實(shí)現(xiàn)與PCI9054直接通信,以拓展運(yùn)動(dòng)控制卡的運(yùn)動(dòng)控制功能。
筆者的運(yùn)動(dòng)函數(shù)是通過PCI驅(qū)動(dòng)程序驅(qū)動(dòng)PCI總線傳輸數(shù)據(jù)至運(yùn)動(dòng)控制卡。運(yùn)動(dòng)控制卡實(shí)現(xiàn)各種速度和位置控制,并提供通用和專用I/O口與外界連接,系統(tǒng)結(jié)構(gòu)如圖1所示。系統(tǒng)中,上位機(jī)作為控制系統(tǒng)的核心部分[7-8],用戶通過操作界面直接調(diào)用運(yùn)動(dòng)函數(shù)庫的運(yùn)動(dòng)函數(shù),PCI插槽直接插入PC機(jī)中,板卡提供外部接口與伺服驅(qū)動(dòng)器、限位開關(guān)和指示燈等相連接。
圖1 運(yùn)動(dòng)控制系統(tǒng)總體結(jié)構(gòu)圖
所設(shè)計(jì)的運(yùn)動(dòng)控制卡主要分為通信部分和運(yùn)動(dòng)控制部分,通信部分采用PCI9054作為橋接芯片與上位機(jī)進(jìn)行通信,完成PCI總線信號(hào)到Local總線信號(hào)的轉(zhuǎn)換。FPGA用于實(shí)現(xiàn)PCI9054 Local總線與PCL6143 8086總線的邏輯粘合,保證PCI9054接收的上位機(jī)數(shù)據(jù)通過Local總線傳送至PCL6143,F(xiàn)PGA還可直接與PCI9054進(jìn)行通信。運(yùn)動(dòng)控制部分的大部分功能由PCL6143實(shí)現(xiàn),F(xiàn)PGA用來拓展PCL6143的功能。
PCI9054提供了PCI總線、EEPROM和Local總線3個(gè)接口,PCI總線接口與PC機(jī)的PCI總線相接,以完成PC機(jī)PCI總線到Local總線的橋接,并在兩者之間傳遞數(shù)據(jù)和信息。Local總線負(fù)責(zé)與外部設(shè)備的總線相接,外部設(shè)備通過簡(jiǎn)單的時(shí)序設(shè)計(jì)便可與PCI9054 Local端通信。
PCI9054具有3種工作模式:M模式、J模式和C模式。Local總線與PCI總線之間的數(shù)據(jù)傳輸有3種方式:PCI Initiator、PCI Target和DMA。該設(shè)計(jì)根據(jù)需求選擇了PCI9054數(shù)據(jù)傳輸方式為PCI Target,工作方式為C模式(數(shù)據(jù)、地址總線非復(fù)用),16位總線讀寫。在該工作模式中,字節(jié)使能信號(hào)LBE1#可等效為地址信號(hào)次低位LA1。由于PCI9054完成了PCI總線所需的全部時(shí)序,因此設(shè)計(jì)重點(diǎn)集中在Local總線,Local總線單周期寫時(shí)序圖如圖2所示。
圖2 Local總線單周期寫時(shí)序圖
Local總線的讀、寫時(shí)序基本相同,以PCI Target單周期寫為例,首先PCI9054通過驅(qū)動(dòng)LHOLD有效來申請(qǐng)Local總線的主控權(quán),如果Local總線空閑,F(xiàn)PGA驅(qū)動(dòng)LHOLDA有效以使PCI9054成為L(zhǎng)ocal總線的主控。隨后PCI9054驅(qū)動(dòng)ADS#有效,使得地址總線信號(hào)LA[ 31: 2]、字節(jié)使能信號(hào)LBE[ 3: 0]#和讀寫使能信號(hào)LW/R# 進(jìn)入有效狀態(tài),F(xiàn)PGA需對(duì)以上信號(hào)鎖存和譯碼來確定操作目標(biāo)和操作類型。目標(biāo)設(shè)備通過驅(qū)動(dòng)READY#信號(hào)有效,來通知PCI9054目標(biāo)設(shè)備已經(jīng)準(zhǔn)備好,這時(shí)PCI9054將數(shù)據(jù)傳輸?shù)綌?shù)據(jù)總線LD上,目標(biāo)設(shè)備需在下一個(gè)時(shí)鐘上升沿讀取數(shù)據(jù)。而后PCI9054驅(qū)動(dòng)BLAST#有效來表示單周期寫操作的結(jié)束。最后,PCI9054將使能LHOLD信號(hào)來釋放Local總線,F(xiàn)PGA也需使能LHOLDA信號(hào)。
PCL6143是美國NPM公司設(shè)計(jì)的一款高性能、低成本的專用運(yùn)動(dòng)控制器[9],用戶通過簡(jiǎn)單的內(nèi)部控制指令就可實(shí)現(xiàn)復(fù)雜的運(yùn)動(dòng)功能。PCL6143能夠進(jìn)行定速、直線加減速、S曲線加減速的速度控制,也可進(jìn)行連續(xù)運(yùn)動(dòng)、定長(zhǎng)運(yùn)動(dòng)、回原點(diǎn)運(yùn)動(dòng)等位置控制。1片PCL6143控制4個(gè)軸,用戶可以控制1個(gè)芯片或者多個(gè)芯片進(jìn)行多軸直線插補(bǔ),同時(shí)可對(duì)PCL各種運(yùn)動(dòng)狀態(tài)進(jìn)行監(jiān)視。此外,芯片可產(chǎn)生各種條件下的中斷信號(hào),還具有用于控制伺服馬達(dá)驅(qū)動(dòng)器的功能。
PCL6143 內(nèi)部集成有各種不同接口電路, 允許與 4 種類型的 CPU 連接, 分別是 Z80、8086、H8 和 68000??紤]到通用性,該設(shè)計(jì)選擇應(yīng)用廣泛的Intel接口(8086接口)實(shí)現(xiàn)16位數(shù)據(jù)傳輸。因運(yùn)動(dòng)控制功能已集成在芯片內(nèi)部,故設(shè)計(jì)重點(diǎn)為PCL6143的8086總線接口,接口單周期寫時(shí)序圖如圖3所示。
圖3 8086總線單周期寫時(shí)序圖
針對(duì)時(shí)序圖3的時(shí)序條件的具體說明如表1所示。8086總線單周期讀時(shí)序分析基本與寫時(shí)序一致,以寫時(shí)序?yàn)槔?,由圖3和表1可知,F(xiàn)PGA首先要驅(qū)動(dòng)地址總線A1~A4和片選信號(hào)CS#有效,且要滿足A1~A4和CS#的建立時(shí)間,在A1~A4保持有效至少10 ns和CS#保持有效至少4 ns后才能驅(qū)動(dòng)WR#有效。在CS#有效后若WRQ#有效,則PCL6143處于忙碌狀態(tài),請(qǐng)求CPU等待。待WRQ#無效后,CPU便將有效數(shù)據(jù)送至數(shù)據(jù)總線,等待至少12 ns后FPGA再置WR#為高電平,在WR#上升沿期間,數(shù)據(jù)被寫入至PCL6143。
表1 8086總線單周期寫時(shí)序表 ns
PCI總線接口控制器中PCI9054實(shí)現(xiàn)其與PC機(jī)PCI總線的通信,F(xiàn)PGA實(shí)現(xiàn)PCI9054 Local端與PCL6143的通信,以及與PCI9054 Local端的直接通信。通過對(duì)Local總線和8086總線的時(shí)序分析可知,Local總線屬于同步總線接口,而8086總線屬于異步總線接口,兩者的接口時(shí)序完全不符。由于組合邏輯電路的產(chǎn)生延時(shí)并不固定,且容易產(chǎn)生毛刺和亞穩(wěn)態(tài),通過簡(jiǎn)單組合邏輯電路將兩者進(jìn)行邏輯粘合的方案可行性不高,筆者采用的Local端接口電路方案如圖4所示。
圖4 Local端接口控制器電路圖
圖4中,F(xiàn)PGA分別驅(qū)動(dòng)Local總線和8086總線。FPGA驅(qū)動(dòng)模塊左側(cè)接口與Local總線屬于同步通信,為減小時(shí)鐘偏斜和時(shí)鐘抖動(dòng),使用FPGA的鎖相環(huán)和全局時(shí)鐘網(wǎng)絡(luò),且鎖相環(huán)的輸出經(jīng)過全局時(shí)鐘網(wǎng)絡(luò)和輸出引腳直接驅(qū)動(dòng)Local端時(shí)鐘。由于Local端只有一個(gè)從機(jī),不存在總線仲裁問題,因此PCI9054 LHOLD信號(hào)線隨時(shí)申請(qǐng)主控權(quán)便可隨時(shí)獲得LHOLDA信號(hào)的應(yīng)答。若將LHOLD和LHOLDA直接相連,很容易造成計(jì)算機(jī)運(yùn)行的不穩(wěn)定,這是因?yàn)楫?dāng)環(huán)境溫度、工作電壓等外界因素變化時(shí),大多數(shù)邏輯器件的引腳延時(shí)會(huì)有相應(yīng)的變化。利用D觸發(fā)器只在觸發(fā)時(shí)鐘有效邊沿對(duì)信號(hào)敏感的特性進(jìn)行設(shè)計(jì),可提高電路運(yùn)行的穩(wěn)定性,因此該設(shè)計(jì)將LHOLD在FPGA中經(jīng)D觸發(fā)器后輸出為L(zhǎng)HOLDA。
FPGA驅(qū)動(dòng)模塊右側(cè)接口與8086總線屬于異步通信,驅(qū)動(dòng)模塊需提供4根地址線供PCL6143片內(nèi)尋址。由于FPGA需要與PCI9054直接通信以實(shí)現(xiàn)運(yùn)動(dòng)控制功能,因此自身也需4根地址線供其片內(nèi)尋址。Local端的PCI_LA[4..2]和PCI_LBE1#用于片內(nèi)尋址,PCI_LA5用于片外尋址,以區(qū)分FPGA和PCL6143。
Local端接口控制器的主體部分是由有限狀態(tài)機(jī)實(shí)現(xiàn)的,所設(shè)計(jì)的狀態(tài)機(jī)采用高效的one-hot編碼,運(yùn)用三段式描述方法,使FSM做到同步寄存器輸出,消除了組合邏輯輸出的不穩(wěn)定與產(chǎn)生毛刺的隱患,且更利于時(shí)序路徑分析,在FPGA上的綜合與布局布線效果更佳。狀態(tài)機(jī)的狀體轉(zhuǎn)移圖如圖5所示。
圖5 接口控制器狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖
一個(gè)完備的狀態(tài)機(jī)應(yīng)該具備初始化狀態(tài)和默認(rèn)狀態(tài),所設(shè)計(jì)的狀體機(jī)初始化狀態(tài)和默認(rèn)狀態(tài)都為IDLE。該狀態(tài)機(jī)的轉(zhuǎn)移是由驅(qū)動(dòng)模塊的輸入信號(hào)PCI_ADS#、PCI_BLAST#、PCI_LW/R#和PCI_LA5的變化引起的。在初始狀態(tài)IDLE下,若Local端PCI_ADS#有效,則進(jìn)入狀態(tài)ADSready,在該狀態(tài)中鎖存PCI_LA[5:2]和PCI_LBE1#,根據(jù)最高位地址線PCI_LA5判斷此次讀寫操作是PCL6143還是FPGA,若PCI_LA5為低電平則進(jìn)入狀態(tài)PCL6143_CS,否則進(jìn)入狀態(tài)FPGA_CS。
針對(duì)PCL6143的讀寫操作,在狀態(tài)PCL6143_CS中,驅(qū)動(dòng)PCL6143片選信號(hào)PCL_CS#和地址信號(hào)FPGA_LA[4..1]有效,并判斷PCI_LW/R#,若為高電平則進(jìn)入狀態(tài)PCL6143_write,否則進(jìn)入狀態(tài)PCL6143_read。在狀態(tài)PCL6143_write或PCL6143_read中,驅(qū)動(dòng)PCL6143寫信號(hào)PCL_WR#或讀信號(hào)PCL_RD#有效,并進(jìn)入狀態(tài)PCL6143_dataready。在狀態(tài)PCL6143_dataready中判斷PCL_WRQ#,若有效則停留在原狀態(tài),否則驅(qū)動(dòng)PCI_READY#有效,即PCL6143已經(jīng)準(zhǔn)備好讀寫數(shù)據(jù),并進(jìn)入狀態(tài)PCL6143_datafinish。在狀態(tài)PCL6143_datafinish中,驅(qū)動(dòng)PCL_WR#和PCL_RD#無效,并判斷PCI_BLAST#,若無效則停留在原狀態(tài),即該次讀寫操作還未結(jié)束,否則驅(qū)動(dòng)PCI_READY#和PCL6143_CS#無效并進(jìn)入狀態(tài)STOP。在狀態(tài)STOP中,判斷PCI_LHOLD,若有效則停留在原狀態(tài),即PCI9054還未釋放Local總線,否則進(jìn)入狀態(tài)IDLE。
針對(duì)FPGA的讀寫操作,在狀態(tài)FPGA_CS中,判斷PCI_LW/R#,若為高電平則進(jìn)入狀態(tài)FPGA_write,否則讀取在狀態(tài)PCI_ADS#鎖存的PCI_LA[ 4..2] 和PCI_LBE1#地址值并獲取該地址中的數(shù)據(jù),進(jìn)入狀態(tài)FPGA_read。在狀態(tài)FPGA_read中,將要讀的數(shù)據(jù)送至數(shù)據(jù)總線PCI_LD[15:0]上,保證PCI9054在讀取Local端數(shù)據(jù)時(shí)已將數(shù)據(jù)準(zhǔn)備好,并進(jìn)入狀態(tài)FPGA_readdataready。在狀態(tài)FPGA_readdataready中,驅(qū)動(dòng)PCI_READY#有效,即通知PCI9054數(shù)據(jù)已經(jīng)準(zhǔn)備好,可以開始讀取數(shù)據(jù),并進(jìn)入狀態(tài)FPGA_datafinish。若此時(shí)處在狀態(tài)FPGA_write中,驅(qū)動(dòng)PCI_READY#有效,即通知PCI9054已經(jīng)準(zhǔn)備好接收數(shù)據(jù),并進(jìn)入狀態(tài)FPGA_writedataready。狀態(tài)FPGA_writedataready中,獲取數(shù)據(jù)總線PCI_LD[15:0]的數(shù)據(jù),并進(jìn)入狀態(tài)FPGA_datafinish。在狀態(tài)FPGA_datafinish中,驅(qū)動(dòng)狀態(tài)PCI_READY#無效,即通知PCI9054接收數(shù)據(jù)已經(jīng)完成,并進(jìn)入狀態(tài)STOP。在狀態(tài)STOP中,判斷PCI_LHOLD,若有效則停留在原狀態(tài),否則進(jìn)入狀態(tài)IDLE。
為了保證設(shè)計(jì)穩(wěn)定可靠,必須對(duì)設(shè)計(jì)附加時(shí)序約束,對(duì)綜合結(jié)果進(jìn)行時(shí)序分析。該設(shè)計(jì)采用TimeQuest Timing Analyzer時(shí)序分析工具對(duì)全局時(shí)鐘、全局I/O、輸入最大/最小延時(shí)和輸出最大/最小延時(shí)進(jìn)行約束,經(jīng)布局布線優(yōu)化后,時(shí)序分析報(bào)告結(jié)果顯示系統(tǒng)可以運(yùn)行的最高時(shí)鐘頻率fmax=69.99 MHz (period=14.288 ns ),時(shí)序余量slack=5.712 ns,完全滿足設(shè)計(jì)要求。
筆者提出了一種基于PC機(jī)和運(yùn)動(dòng)控制卡的運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)方案,選用專用接口芯片PCI9054避免了復(fù)雜的邏輯設(shè)計(jì)和時(shí)序分析,采用高性能FPGA實(shí)現(xiàn)了PCI9054與PCL6143的通信并可拓展PCL6143部分運(yùn)動(dòng)控制功能。同時(shí)重點(diǎn)討論了PCI總線接口控制器的實(shí)現(xiàn),分析了PCI9054 Local總線時(shí)序和PCL6143 8086總線時(shí)序,使用三段式狀態(tài)機(jī)實(shí)現(xiàn)了Local總線與8086總線的通信,以及FPGA與PCI9054的直接通信。靜態(tài)時(shí)序分析結(jié)果和現(xiàn)場(chǎng)通信測(cè)試表明,該設(shè)計(jì)穩(wěn)定可靠,通信高效流暢。
[1] 劉軍智,王亞海.基于PCI9054與FPGA結(jié)合的PXI 總線接口電路的設(shè)計(jì)[J].電子質(zhì)量,2010(7):9-11.
[2] 童鵬,吳新建.PCI9054芯片接口設(shè)計(jì)中若干問題的深入研究[J].電子技術(shù)應(yīng)用,2005,31(10):64-66.
[3] 韓雪峰,黃炎,楊濤.基于PCI總線的高速數(shù)據(jù)采集接口的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2005,21(8):71-73.
[4] 謝黎明,陳宏濤.DSP運(yùn)動(dòng)控制器與PCI總線的接口設(shè)計(jì)[J].新技術(shù)新工藝,2010(5):36-37.
[5] 張丹紅,張孝勇,劉文.基于PCI9054的數(shù)據(jù)通信接口卡設(shè)計(jì)[J].武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版),2013,35(3):305-308.
[6] 王金明.Verilog HDL程序設(shè)計(jì)教程[M].北京:人民郵電出版社,2004:1-8.
[7] 李穎,譚立新,張文凱.基于PC和運(yùn)動(dòng)控制卡的開放式運(yùn)動(dòng)控制系統(tǒng)[J].儀表技術(shù),2007(4):43-44.
[8] 何林,孟憲翠,董硯,等.基于DSP和CPLD的運(yùn)動(dòng)控制器簡(jiǎn)化設(shè)計(jì)與應(yīng)用[J].自動(dòng)化與儀表,2011(1):36-39.
[9] 羅繼合,劉建群,余孝偉,等.PCL6143運(yùn)動(dòng)控制器的原理及應(yīng)用[J].國外電子元器件,2008(1):48-51.
ZHANG Qingyong:Laboratory Technician; School of Automation, WUT, Wuhan 430070, China.
[編輯:王志全]
Design of Motion Control System Based on PC and Motion Control Card
ZHANGQingyong,ZHANGDanhong,JIANGWen
Firstly, motion control system structure based on PC and movement control card was introduced. Then the realization of interface controller between PCI bus and special motion control chip by use of interface chip PCI9054 and programmable logic device FPGA was mainly described. The interface controller also implements the direct communication between FPGA and PCI9054 to expand the function of PCL6143, which makes the motion control system more open-ended. The maximal theoretical communication rate is up to 140MB/s.
motion control card; PCI bus; interface controller; FPGA
2015-09-06.
張清勇(1984-),女,湖北仙桃人,武漢理工大學(xué)自動(dòng)化學(xué)院實(shí)驗(yàn)師.
湖北省自然科學(xué)基金資助項(xiàng)目(2013CFB335).
2095-3852(2015)06-0837-04
A
TP23
10.3963/j.issn.2095-3852.2015.06.038