戴越,張林,劉廣民,張勇斌,荊奇,沈杰
(中國工程物理研究院機(jī)械制造工藝研究所,四川綿陽,621900)
隨著信息技術(shù)的發(fā)展與進(jìn)步,人類社會已經(jīng)進(jìn)入了數(shù)字化和智能化時代,計(jì)算機(jī)微機(jī)化得到快速發(fā)展,智能化、自動化系統(tǒng)實(shí)現(xiàn)了大規(guī)模應(yīng)用。其中具有多控制器的嵌入式系統(tǒng)憑借其小型化、功能多樣化的特點(diǎn)得到了不斷的改進(jìn)與發(fā)展[1-2]。多控制器之間的實(shí)時、可靠的數(shù)據(jù)通信則是保證嵌入式系統(tǒng)實(shí)現(xiàn)復(fù)雜功能和穩(wěn)定運(yùn)行的基礎(chǔ)和前提[3-4]。比如,在基于單片機(jī)和FPGA的嵌入系統(tǒng)中,單片機(jī)和FPGA需要在彼此之間以及與外部設(shè)備和遠(yuǎn)程中斷之間進(jìn)行大量的數(shù)據(jù)傳輸以滿足系統(tǒng)設(shè)備可以實(shí)現(xiàn)自動化、智能化應(yīng)用的要求[5-6]。為了保證系統(tǒng)可靠性,數(shù)據(jù)通信的高效性和準(zhǔn)確性就顯得尤為重要[7]。
本文主要針對應(yīng)用于脈沖電源的板上系統(tǒng)進(jìn)行通信方式設(shè)計(jì),該系統(tǒng)包含F(xiàn)PGA與單片機(jī)兩種控制器,信號傳輸過程具有傳輸距離短,傳輸速率要求高,傳輸可靠性要求高等特點(diǎn),針對此特點(diǎn),本文提出自定義并行總線通信設(shè)計(jì)方法,實(shí)現(xiàn)了單片機(jī)與FPGA之間數(shù)據(jù)的高速、可靠傳輸,為確保系統(tǒng)的穩(wěn)定運(yùn)行提供了重要技術(shù)保障?;谠撏ㄐ欧绞降拿}沖電源系統(tǒng)已經(jīng)使用一年多,未出現(xiàn)任何通信問題。
通信系統(tǒng)的方案對通信速率,數(shù)據(jù)傳輸準(zhǔn)確性起著決定性的作用。通信方式的選擇是系統(tǒng)方案的基礎(chǔ),決定了數(shù)據(jù)傳輸?shù)膮f(xié)議方式,通信總線的選擇,后期軟硬件的設(shè)置等。對通信系統(tǒng)的數(shù)據(jù)傳輸效率,傳輸距離,傳輸可靠性以及系統(tǒng)成本都有著決定性的影響。
現(xiàn)有常用的通信方式主要有兩種:串行通信與并行通信。串行通信是指使用一條數(shù)據(jù)線,將數(shù)據(jù)從低位到高位或從高位到低位由一個通信系統(tǒng)一位一位地依次傳輸?shù)搅硪粋€通信系統(tǒng),每一位數(shù)據(jù)傳輸時使用一定的時間長度,一般只需少數(shù)幾根傳輸線就能完成多系統(tǒng)之間的信息交換,成本低,適合遠(yuǎn)距離傳輸,但是由于傳輸線較少,存在著傳輸時間慢,效率較低的不足。并行通信指數(shù)據(jù)的各個數(shù)據(jù)位同時在多條數(shù)據(jù)線上進(jìn)行傳輸,與串行總線相反,其通信速度快,通信效率高,多用于需要實(shí)時、快速的場合,但是傳輸成本較高,不適宜遠(yuǎn)距離通信。并行傳輸和串行傳輸?shù)膮^(qū)別如圖1所示。在系統(tǒng)需要傳輸一個字節(jié),并行通信需要8根數(shù)據(jù)線傳輸數(shù)據(jù),而串行通信只需1根數(shù)據(jù)線,但并行傳輸速率約為串行傳輸?shù)?倍[8]。
圖1 并行通信系統(tǒng)與串行通信系統(tǒng)
根據(jù)現(xiàn)有硬件設(shè)計(jì)要求,本文所針對的單片機(jī)與FPGA通信總線基于同一硬件系統(tǒng),所以兩者信號傳輸距離短,且系統(tǒng)要求較高的數(shù)據(jù)信號傳輸速率,所以選用應(yīng)并行通信作為系統(tǒng)通信方式。
系統(tǒng)主要由三個模塊組成,包括人機(jī)交互接口(觸摸屏 )、MCU控制單元 (C8051)、FPGA控制單元 (Altera,EP4CE75FE23I7),如圖2所示。在觸摸屏上可實(shí)現(xiàn)對脈沖參數(shù)的設(shè)置并傳遞給MCU,同時觸摸屏也用于接收和實(shí)時顯示MCU反饋的電流、電壓參數(shù);MCU一方面與觸摸屏通信完成脈沖電參數(shù)的接收和解析,另一方面以自定義總線的方式進(jìn)行與FPGA之間通信,向FPGA發(fā)送設(shè)置的參數(shù),同時接收FPGA反饋的參數(shù);作為整個系統(tǒng)的控制核心,F(xiàn)PGA既與MCU通信以完成脈沖電參數(shù)的接收和電流、電壓參數(shù)的反饋,同時進(jìn)行相應(yīng)的電路控制。
圖2 系統(tǒng)數(shù)據(jù)通信框圖
其中,單片機(jī)與FPGA通信基于并行總線的選擇,提出了自定義并行總線。數(shù)據(jù)傳輸共設(shè)有40路IO線,其中8路總線用于控制數(shù)據(jù)傳輸,16路用于單片機(jī)向FPGA發(fā)送數(shù)據(jù),另16路用于單片機(jī)從FPGA接收數(shù)據(jù),采用雙向16位傳輸方案,可以滿足更大范圍的數(shù)據(jù)傳輸要求,滿足傳輸?shù)母咝室约昂笃跀?shù)據(jù)傳輸?shù)谋憬菪?、可靠性。具體總線設(shè)置如圖3所示。該系統(tǒng)可實(shí)現(xiàn)單片機(jī)與FPGA的異步雙向通信,實(shí)現(xiàn)上位數(shù)據(jù)的發(fā)送及下位數(shù)據(jù)的反饋。
圖3 單片機(jī)與FPGA通信總線示意圖
1.3.1 單片機(jī)芯片選擇
C8051F040是高度集成的混合信號SoC級微控制器芯片,具有與8051單片機(jī)兼容的高速CIP-51微控制器內(nèi)核,除了標(biāo)準(zhǔn)8051的數(shù)字外設(shè)部件外,片內(nèi)還集成了數(shù)據(jù)采集與控制系統(tǒng)中常用的模擬部件及其它一些數(shù)字外設(shè)部件。
C8051F040單片機(jī)系統(tǒng)控制器的內(nèi)核采用CIP-51微控制器,它與MCS-51指令集完全兼容,可以使用標(biāo)準(zhǔn)803x/805x匯編器和編譯器進(jìn)行軟件開發(fā)。CIP-51內(nèi)核具有標(biāo)準(zhǔn)8052的所有外設(shè)部件,包括5個16位的計(jì)數(shù)器/定時器、兩個全雙工UART串行接口、256字節(jié)內(nèi)部RAM、128字節(jié)特殊功能寄存器(SFR)地址空間及8個8位寬的I/O端口。該內(nèi)核采用流水線結(jié)構(gòu),與標(biāo)準(zhǔn)的8051結(jié)構(gòu)相比指令執(zhí)行速度有很大的提高。對于CIP-51內(nèi)核,70%的指令的執(zhí)行時間為1或2個系統(tǒng)時鐘周期,只有4條指令的執(zhí)行時間大于4個系統(tǒng)時鐘周期。CIP-51共有111條指令。CIP-51工作在最大系統(tǒng)時鐘頻率25MHz時,其峰值性能達(dá)到25MIPS。
1.3.2 FPGA 芯片選擇
FPGA的選用選擇Altera品牌,保證低成本應(yīng)用,滿足一定的容量,且芯片性能可以滿足一般的邏輯設(shè)計(jì)要求,在滿足性能要求的同時選擇性價比較高的類型,Cyclone IV是一款低成本、低功耗的FPGA結(jié)構(gòu),所以選擇Altera Cyclone IV系列的EP4CE75F23I7類型芯片,選擇配置方式為JTAG,便于實(shí)現(xiàn)在線調(diào)試,實(shí)現(xiàn)程序的實(shí)時改進(jìn)。
通信接口是通信系統(tǒng)的重要組成部分,是實(shí)現(xiàn)系統(tǒng)與外設(shè)及其他系統(tǒng)的通信的保證,單片機(jī)外圍設(shè)置16個數(shù)據(jù)輸出端口P5.0-P6.7、16個數(shù)據(jù)接收端口P3.0-P4.7以及8個通信控制總線端口P7.0-P7.7。
圖4 單片機(jī)外圍管腳設(shè)置
FPGA外圍借口設(shè)置與單片機(jī)相匹配,分別設(shè)置16個IO口P50-P67用于數(shù)據(jù)接收、16個IO口P30-P47用于數(shù)據(jù)發(fā)送以及8個通信控制總線IO口P70-P77。
3.1.1 并行接口輸入數(shù)據(jù)的過程
外設(shè)將數(shù)據(jù)送到“數(shù)據(jù)輸入線”,通過“輸入數(shù)據(jù)準(zhǔn)備好”狀態(tài)線通知CPU將數(shù)據(jù)從并行總線接口取走,接口先將數(shù)據(jù)鎖存到“輸入緩沖器”,接口在其內(nèi)“狀態(tài)寄存器”的相應(yīng)位置1,便于CPU查詢和接口向CPU發(fā)中斷請求之用。CPU從接口將數(shù)據(jù)取走后,通過“數(shù)據(jù)輸入回答”線通知外設(shè),已經(jīng)完成當(dāng)前數(shù)據(jù)讀取,可以進(jìn)行下一步動作,接口將“數(shù)據(jù)輸入準(zhǔn)備好”、“數(shù)據(jù)輸入回答” 信號清除,以便外設(shè)輸入下一個數(shù)據(jù)。
3.1.2 并行接口輸出數(shù)據(jù)的過程
與數(shù)據(jù)輸入相似,接口“數(shù)據(jù)輸出緩沖器”為空,“數(shù)據(jù)輸出準(zhǔn)備好”狀態(tài)線送 1,收到CPU 發(fā)送的數(shù)據(jù),將之復(fù)位清0,數(shù)據(jù)通過“數(shù)據(jù)輸出”線送到外設(shè),由“數(shù)據(jù)輸出準(zhǔn)備好”線通知外設(shè)接收數(shù)據(jù)。
單片機(jī)-FPGA通信程序的主體思路是:數(shù)據(jù)整體打包發(fā)送,即單片機(jī)連續(xù)發(fā)送多個數(shù)據(jù)給FPGA,F(xiàn)PGA接收完所有數(shù)據(jù)之后,以某種方式進(jìn)行校驗(yàn)(求和,或CRC),如果校驗(yàn)成功則視為發(fā)送成功,否則視為發(fā)送失敗,并重新發(fā)送數(shù)據(jù),當(dāng)多次發(fā)送失敗后,停止發(fā)送,并通過串口向上位機(jī)進(jìn)行可視化反饋,提醒用戶進(jìn)行相應(yīng)動作。同理當(dāng)FPGA向單片機(jī)反饋參數(shù)時,F(xiàn)PGA也連續(xù)向單片機(jī)發(fā)送多個數(shù)據(jù),單片機(jī)接收完所有數(shù)據(jù)后進(jìn)行校驗(yàn),如果連續(xù)多次都校驗(yàn)失敗,則向上位機(jī)報警,否則視為發(fā)送成功。
圖5 FPGA外圍管腳設(shè)置
3.2.1 單片機(jī)與FPGA數(shù)據(jù)傳輸實(shí)現(xiàn)
(1)單片機(jī)發(fā)送——FPGA接收數(shù)據(jù)
單片機(jī)將參數(shù)進(jìn)行打包定義,通過控制總線通知FPGA開始準(zhǔn)備接收數(shù)據(jù),F(xiàn)PGA接到通知后反饋準(zhǔn)備狀態(tài)。得知FPGA處于接收狀態(tài),將一個16位數(shù)據(jù)發(fā)送到并行總線上,其中數(shù)據(jù)高四位作為參數(shù)號位,用來說明當(dāng)前參數(shù)序號,便于FPGA判斷接收。串口P5.0-P5.7用于發(fā)送數(shù)據(jù)的低8位,P6.0-P6.7用于發(fā)送數(shù)據(jù)高8位,在完成單次數(shù)據(jù)上傳后通知FPGA開始接收,F(xiàn)PGA從總線上完成接收后進(jìn)行處理讀取當(dāng)前參數(shù)號并完成參數(shù)暫存,然后向單片機(jī)反饋本次接收成功指令。當(dāng)單片機(jī)接受到FPGA反饋后說明單次數(shù)據(jù)發(fā)送成功。單片機(jī)判斷是否完成所有數(shù)據(jù)的發(fā)送,如若未完成則繼續(xù)重復(fù)上一步驟發(fā)送,如若完成則發(fā)送校驗(yàn)和到FPGA并通知FPGA完成數(shù)據(jù)發(fā)送。當(dāng)FPGA判斷到接收到最后一個數(shù)據(jù)時,將接收數(shù)據(jù)進(jìn)行校驗(yàn)和運(yùn)算,然后與單片機(jī)端發(fā)送的校驗(yàn)和進(jìn)行比較以判斷本輪數(shù)據(jù)傳輸是否成功。
圖6 數(shù)據(jù)發(fā)送流程圖
成功后FPGA則向單片機(jī)反饋成功指令并完成接收數(shù)據(jù)的定義與幅值,如若校驗(yàn)和對比異常則說明數(shù)據(jù)傳輸異常,F(xiàn)PGA則向單片機(jī)反饋失敗指令,則系統(tǒng)需要重新進(jìn)行數(shù)據(jù)發(fā)送流程,如果多次失敗系統(tǒng)將會停止數(shù)據(jù)傳輸,單片機(jī)便向上位機(jī)反饋報警。
(2)FPGA發(fā)送——單片機(jī)接收數(shù)據(jù)
與單片機(jī)發(fā)送數(shù)據(jù)相似,兩者之間數(shù)據(jù)發(fā)送時機(jī)控制通過控制總線P7實(shí)現(xiàn),數(shù)據(jù)傳輸總線負(fù)責(zé)16位數(shù)據(jù),其中P3.0-P3.7為數(shù)據(jù)的低8位,P4.0-P4.7為數(shù)據(jù)高8位。傳輸流程與發(fā)送數(shù)據(jù)相似,均通過應(yīng)答機(jī)制實(shí)現(xiàn)FPGA與單片機(jī)交流,保證傳輸?shù)耐叫耘c準(zhǔn)確性。 FPGA將數(shù)據(jù)打包完成并上傳至數(shù)據(jù)總線,其中數(shù)據(jù)低4位為參數(shù)號,高12位為數(shù)據(jù)值。然后通過將控制總線置1告訴單片機(jī)接收數(shù)據(jù),單片機(jī)接收數(shù)據(jù)包并進(jìn)行解析暫存,然后通過控制線通知FPGA已完成當(dāng)前數(shù)據(jù)接收,可進(jìn)行后續(xù)動作。FPGA判斷數(shù)據(jù)是否全部發(fā)送完畢,如果未完成則重復(fù)上述操作繼續(xù)發(fā)送,否則則向單片機(jī)發(fā)送數(shù)據(jù)校驗(yàn)和,單片機(jī)端接收校驗(yàn)和之后與通過已接收數(shù)據(jù)計(jì)算出的校驗(yàn)和進(jìn)行比較,判斷本次數(shù)據(jù)傳輸總流程是否準(zhǔn)確完成。成功完成后單片機(jī)則向FPGA反饋成功指令,同時完成接收數(shù)據(jù)的存儲,并向觸摸屏反饋用于使用者對系統(tǒng)狀態(tài)的監(jiān)測。如若校驗(yàn)和對比異常則說明數(shù)據(jù)傳輸異常,單片機(jī)則向FPGA反饋失敗指令,則系統(tǒng)需要重新進(jìn)行數(shù)據(jù)發(fā)送流程,如果多次失敗系統(tǒng)將會停止數(shù)據(jù)傳輸,單片機(jī)便向上位機(jī)反饋報警。
圖7 單片機(jī)發(fā)送數(shù)據(jù)流程圖
圖8 FPGA接收數(shù)據(jù)流程圖
搭建FPGA-單片機(jī)板上系統(tǒng),該硬件系統(tǒng)可實(shí)現(xiàn)FPGA與51單片機(jī)之間的數(shù)據(jù)通信過程。然后基于此硬件系統(tǒng)進(jìn)行單片機(jī)-FPGA收發(fā)實(shí)驗(yàn),對單片機(jī)及FPGA通信變量數(shù)據(jù)進(jìn)行實(shí)時同步監(jiān)測,實(shí)驗(yàn)結(jié)果如圖9所示。首先進(jìn)行單片機(jī)發(fā)送數(shù)據(jù),F(xiàn)PGA接收數(shù)據(jù)實(shí)驗(yàn),單片機(jī)共向FPGA發(fā)送4個參數(shù)數(shù)據(jù),對比圖9(a)與圖9(b)可以看出,F(xiàn)PGA接收數(shù)據(jù)與單片機(jī)發(fā)送數(shù)據(jù)一致,完成單片機(jī)向FPGA發(fā)送數(shù)據(jù)過程。然后,進(jìn)行FPGA發(fā)送數(shù)據(jù),單片機(jī)接收數(shù)據(jù)實(shí)驗(yàn),F(xiàn)PGA端共向單片機(jī)端發(fā)送4個數(shù)據(jù), 對比圖9(c)與圖9(d)可以看出,單片機(jī)接收數(shù)據(jù)與FPGA端發(fā)送數(shù)據(jù)一致,完成FPGA向單片機(jī)發(fā)送數(shù)據(jù)過程。
圖9 通信實(shí)驗(yàn)數(shù)據(jù)收發(fā)狀態(tài)監(jiān)測
本文提出的基于FPGA與單片機(jī)的自定義總線通信系統(tǒng)可實(shí)現(xiàn)數(shù)據(jù)的穩(wěn)定傳輸,單次可完成16位數(shù)據(jù)收發(fā),具有較高的傳輸效率。采取雙向應(yīng)答機(jī)制進(jìn)行指令反饋保證傳輸可靠性。數(shù)據(jù)校驗(yàn)采用校驗(yàn)和方式進(jìn)行,校驗(yàn)方法簡單便捷,且穩(wěn)定性和準(zhǔn)確性較好。該傳輸流程具有錯誤自檢,自動重發(fā),異常報警等功能,適用性廣,可靠性強(qiáng),在多控制器的嵌入式系統(tǒng)開發(fā)中具有較高的實(shí)用價值。