薛鵬舉,倪霞林
(福州大學(xué)機(jī)械工程及自動(dòng)化學(xué)院,福建福州350108)
基于現(xiàn)場(chǎng)可編程門(mén)陣列(field programmable gate array,F(xiàn)PGA)的電子系統(tǒng)設(shè)計(jì)技術(shù)是21世紀(jì)電子應(yīng)用工程師必備的基本技能之一,而基于FPGA的可編程片上系統(tǒng)(system on a programmable chip,SOPC)設(shè)計(jì)技術(shù)是當(dāng)前電子系統(tǒng)設(shè)計(jì)領(lǐng)域最前沿的技術(shù)之一。在SOPC技術(shù)的幫助下,使電子系統(tǒng)在IP核層次上的設(shè)計(jì)成為可能[1]。所謂IP核就是使用硬件描述語(yǔ)言(hardware description language,HDL)實(shí)現(xiàn)的一個(gè)可重用的邏輯單元,已經(jīng)過(guò)RTL級(jí)設(shè)計(jì)優(yōu)化和功能驗(yàn)證,但不包含任何具體的物理信息。因此,用戶(hù)可以綜合得到正確的門(mén)電路級(jí)設(shè)計(jì)網(wǎng)表,并可以進(jìn)行后續(xù)的結(jié)構(gòu)設(shè)計(jì),具有很大的靈活性。它允許用戶(hù)通過(guò)編寫(xiě)HDL代碼輕松地設(shè)計(jì)或改變系統(tǒng)的功能,而無(wú)需考慮設(shè)備的規(guī)格以及印刷電路板(printed circuit board,PCB)布局。本文展示了利用IP核設(shè)計(jì)CAN節(jié)點(diǎn)設(shè)的關(guān)鍵要素,提出一個(gè)系統(tǒng)的SPOC技術(shù)設(shè)計(jì)的基本方法。
CAN節(jié)點(diǎn)是指能夠掛接在CAN總線(xiàn)上的單元,并能通過(guò)CAN總線(xiàn)實(shí)現(xiàn)各個(gè)節(jié)點(diǎn)間的通信,以實(shí)現(xiàn)復(fù)雜的控制過(guò)程[2],當(dāng)前主要用于汽車(chē)的眾多傳感器間接收和發(fā)送節(jié)點(diǎn)信號(hào),是CAN-BUS的最重要的組件之一。一個(gè)CAN節(jié)點(diǎn)包括三大模塊:CAN協(xié)議、微處理器和用戶(hù)模塊。CAN協(xié)議模塊負(fù)責(zé)提供消息,而微處理器解釋它們并生成相應(yīng)指令,最后用戶(hù)模塊執(zhí)行這些指令。
在當(dāng)今的行業(yè),主流的CAN節(jié)點(diǎn)設(shè)計(jì)仍然在使用多芯片模塊。然而,這種設(shè)計(jì)方式確實(shí)降低了系統(tǒng)的穩(wěn)定性和可靠性,并且阻礙了設(shè)計(jì)的靈活性[3]。本文證明了采用SOPC技術(shù),將8051IP核、CAN IP核以及用戶(hù)自定義模塊復(fù)合在一個(gè)單一的FPGA芯片設(shè)計(jì)的可行性。
51系列單片機(jī)是基于哈佛體系結(jié)構(gòu)的8位微控制器[5]。8051IP核是使用硬件描述語(yǔ)言編寫(xiě)的,在QUARTUS II環(huán)境下可以被綜合成具體的硬件電路,并下載到FPGA中運(yùn)行。8051IP核源代碼是完全免費(fèi)的,可以從網(wǎng)站上下載。當(dāng)拿到一個(gè)IP核時(shí),如何使用這才是最重要的問(wèn)題。需明確的是8051IP核在使用ModelSim等仿真工具調(diào)試的時(shí)候,內(nèi)部使用的是虛擬內(nèi)存,這些內(nèi)存在真實(shí)的硬件中是不能使用的。因此,應(yīng)該用目標(biāo)FPGA中真實(shí)存在的內(nèi)存替換IP核中所有用于仿真的內(nèi)存,否則系統(tǒng)就會(huì)報(bào)錯(cuò)。對(duì)于51單片機(jī),只讀存儲(chǔ)器(ROM)和內(nèi)部的隨機(jī)存儲(chǔ)器(RAM)是必需的,而外部RAM可以沒(méi)有。由于ROM和內(nèi)部RAM是用來(lái)存儲(chǔ)程序和數(shù)據(jù)的功能,存儲(chǔ)器的大小和數(shù)據(jù)總線(xiàn)的寬度必須要正確定義。推薦ROM的容量為8KB×8bit,片上RAM的容量為128Byte×8bit。利用C51編譯器,將51單片機(jī)源程序編譯生成后綴為hex的可執(zhí)行代碼,然后裝載到實(shí)例化好的ROM中即可。需要注意的是:傳統(tǒng)的51單片機(jī)外部使用的是復(fù)用總線(xiàn),即地址總線(xiàn)和數(shù)據(jù)總線(xiàn)占用的是相同的引腳,而通過(guò)8051IP核實(shí)例化出來(lái)的51單片機(jī)采用的是非復(fù)用總線(xiàn)。目前,大多數(shù)CPU和外圍設(shè)備都是采用非復(fù)用總線(xiàn)結(jié)構(gòu),所以8051IP核可以很容易與它們互連。另一點(diǎn)需要注意的是8051IP核的IO端口是單向的,這與傳統(tǒng)51單片機(jī)的雙向IO口有明顯區(qū)別。如果想使用具有雙向功能的IO口,必須自己實(shí)例化一個(gè)外部轉(zhuǎn)換電路。最后需要強(qiáng)調(diào)的是,對(duì)于任何一款芯片,時(shí)鐘是必不可少的東西,就像是CPU的“心臟”。為了獲得合適的時(shí)鐘信號(hào),通常還需要實(shí)例化一個(gè)鎖相環(huán)(PLL)電路。一個(gè)完整的8051系統(tǒng)的結(jié)構(gòu)(圖1)用原理圖的方式來(lái)連接各個(gè)模塊。
圖1 8051系統(tǒng)結(jié)構(gòu)
現(xiàn)場(chǎng)總線(xiàn)是用于生產(chǎn)現(xiàn)場(chǎng),測(cè)量和控制設(shè)備上,實(shí)現(xiàn)雙向、串行、多點(diǎn)通信的數(shù)據(jù)總線(xiàn)。在制造業(yè)、冶金、交通、建筑、工業(yè)控制、汽車(chē)行業(yè)以及其他領(lǐng)域的自動(dòng)化系統(tǒng)具有廣闊的應(yīng)用前景。CAN是控制器局域網(wǎng)絡(luò)(controller area network)的簡(jiǎn)稱(chēng),最開(kāi)始用于在汽車(chē)內(nèi)部零件測(cè)量與執(zhí)行之間的數(shù)據(jù)通信[3]。CAN屬于現(xiàn)場(chǎng)總線(xiàn)的范疇,是一種有效支持分布式控制和實(shí)時(shí)控制的串行通信網(wǎng)絡(luò)?,F(xiàn)在,有很多公司根據(jù)CAN協(xié)議開(kāi)發(fā)出具有CAN通信功能的微控制器芯片,例如摩托羅拉的MC68HC05X4、英特爾的82527、飛利浦的82C250等。然而,傳統(tǒng)51單片機(jī)片內(nèi)部并沒(méi)有集成CAN控制器。以往通常會(huì)使用SJA1000作為CAN通信的控制器。這種設(shè)計(jì)方式有一些顯著的缺點(diǎn),例如:增加了芯片的數(shù)量,擴(kuò)大了電路板的總體面積,降低了系統(tǒng)編程的靈活性?,F(xiàn)在使用IP核重用技術(shù)綜合8051IP核和CAN IP核,就好像生產(chǎn)出一款就有CAN通信功能的8051內(nèi)核單片機(jī)。要實(shí)現(xiàn)這兩個(gè)IP核的互連,就必須弄清兩個(gè)IP核對(duì)外的接口,也就是IP核使用的總線(xiàn)類(lèi)型。
在CAN IP核中有兩種形式的總線(xiàn),復(fù)用總線(xiàn)和非復(fù)用總線(xiàn)——Wishbone總線(xiàn)[4]。Wishbone總線(xiàn)是在IP核之間建立一個(gè)通用接口完成互連,可以用于在軟核、固核以及硬核之間進(jìn)行互聯(lián)。Wishbone規(guī)范具有如下特點(diǎn):簡(jiǎn)單、緊湊,需要很少的邏輯門(mén);數(shù)據(jù)總線(xiàn)寬度可以是8-64位;支持大端(big-endian)和小端(little-endian)。通過(guò)前面的介紹得知8051IP核例化后外部使用的是非復(fù)用總線(xiàn),因此為了讓兩個(gè)IP核能方便地互連起來(lái),對(duì)于CAN IP核采用Wishbone總線(xiàn)形式。
CAN IP核在默認(rèn)情況下使用的是復(fù)用總線(xiàn),必須通過(guò)修改IP核源文件中的代碼來(lái)啟用Wishbone總線(xiàn)。需要注意的是:Wishbone總線(xiàn)的具體實(shí)現(xiàn)是不需要自己編寫(xiě)的,因?yàn)镃AN IP核中已實(shí)現(xiàn),只需在can_tov.v文件中,添加聲明:define CAN_WISHBONE_IF,來(lái)啟動(dòng)該總線(xiàn)。經(jīng)過(guò)測(cè)試,發(fā)現(xiàn)如果只是做上述修改,兩個(gè)IP核之間并不能很好地通信。原因其實(shí)很簡(jiǎn)單,兩個(gè)IP核之間雖然外部都是使用非復(fù)用總線(xiàn)技術(shù),但是8051IP核的總線(xiàn)接口類(lèi)型并不是Wishbone總線(xiàn)。因此,需要認(rèn)真研究這兩條總線(xiàn)的連接細(xì)節(jié),它們的通信方式很相近,造成上述結(jié)果的主要因素是CAN IP核的片選信號(hào)有問(wèn)題。同樣是在can_tov.v文件中,修改assign CS=cs_sync2&(~cs_sync3)語(yǔ)句為assign CS=wb_cyc_i&wb_stb_i。從這里也可以看出,如果選中實(shí)例化好的CAN控制器,需要將wb_cyc_i和wb_stb_i同時(shí)置為1。一個(gè)完整的CAN節(jié)點(diǎn)的結(jié)構(gòu)如圖2所示。
圖2 CAN節(jié)點(diǎn)結(jié)構(gòu)
完成了自定義IP核后,下一個(gè)步驟是如何將它們連接起來(lái)。采用原理圖的方式進(jìn)行連接。如圖3所示,連接wrx_o引腳到wb_we_i引腳,p1_o[3]引腳到wb_rst_引腳,int0_i[0..0]引腳到irq_on引腳,datax_o[7..0]總線(xiàn)到wb_dat_i[7..0]總線(xiàn),datax_i[7..0]總線(xiàn)到wb_dat_o[7..0]總線(xiàn),adrx_[9..0]總線(xiàn)到wb_stb_i&wb_cyc_i&wb_adr_i[7..0]總線(xiàn)。還必須將wb_clk_i和clk_i連接到外部時(shí)鐘信號(hào)。wb_std_i和wb_cyc_i信號(hào)是非常重要的,它們共同構(gòu)成了芯片的片選信號(hào)。當(dāng)上述所有任務(wù)完成后會(huì)得到如圖3所示的結(jié)果。
圖3 8051 IP核與CAN IP核連接原理圖
在使用Keil編寫(xiě)具體的CAN測(cè)試程序前,需要定義如下寄存器:
#define MODR(*(unsigned char volatile xdata*)0x0300)
#define CMR(*(unsigned char volatile xdata*)0x0301)
#define SR(*(unsigned char volatile xdata*)0x0302)
#define IR(*(unsigned char volatile xdata*)0x0303)
#define IER(*(unsigned char volatile xdata*)0x0304)
#define BTR0(*(unsigned char volatilexdata*)0x0306)
#define BTR1(*(unsigned char volatilexdata*)0x0307)
#define OCR(*(unsigned char volatile xdata*)0x0308)
#define ACR(*(unsigned char volatile xdata*)0x0310)
……
上述都是CAN控制器的內(nèi)部寄存器,須將其映射到相應(yīng)的地址。地址的第9位和第10位恒為1,就是對(duì)應(yīng)wb_std_i和wb_cyc_i引腳置1,保證片選信號(hào)有效。可以在Keil下編寫(xiě)一個(gè)應(yīng)用程序,然后編譯并生成hex文件,用它來(lái)替換之前在ROM中的hex文件。最后編譯、綜合整個(gè)Quartus II項(xiàng)目。實(shí)驗(yàn)結(jié)果如下。
圖4顯示了從FPGA目標(biāo)板發(fā)送數(shù)據(jù)“0f21 31 41 51 61 71 81”到PC機(jī)上的虛擬CAN節(jié)點(diǎn)。
圖4 從FPGA發(fā)送數(shù)據(jù)到PC
圖5 顯示了PC機(jī)上的虛擬CAN節(jié)點(diǎn)發(fā)送數(shù)據(jù)“55 02 03 04 05 06 07 08”到FPGA目標(biāo)板,并且FPGA通過(guò)串口將其回送到PC機(jī)的串口上。在PC機(jī)上使用串口調(diào)試助手觀察結(jié)果如圖5所示。
圖5 從PC發(fā)送數(shù)據(jù)到FPGA
文中詳細(xì)描述了利用SOPC技術(shù)設(shè)計(jì)CAN節(jié)點(diǎn)的細(xì)節(jié)。借助合理的用戶(hù)自定義模塊接口,CAN節(jié)點(diǎn)在不同場(chǎng)景的應(yīng)用得以實(shí)現(xiàn),并且通過(guò)這種新方法設(shè)計(jì)出來(lái)的CAN總線(xiàn)也取得令人滿(mǎn)意的結(jié)果。
綜上,基于IP核的設(shè)計(jì)是將所有組件的節(jié)點(diǎn)在單個(gè)芯片上實(shí)例化,系統(tǒng)的性能更穩(wěn)定,更可靠。在使用IP核技術(shù)時(shí),實(shí)例化相應(yīng)的模塊后關(guān)鍵步驟是正確處理不同模塊之間的通信接口。IP核的可重用和可重構(gòu),使電子系統(tǒng)的設(shè)計(jì),從原來(lái)的硬件布局變?yōu)檐浖幊?,顯著降低了開(kāi)發(fā)成本,縮短了開(kāi)發(fā)周期,增強(qiáng)了穩(wěn)定性,并且具有更高的靈活性。因此,基于SOPC技術(shù)的設(shè)計(jì)方式已經(jīng)成為電子系統(tǒng)設(shè)計(jì)的必然趨勢(shì)。
[1]WISHBONE System-On-Chip Interconnection Architecture for Portable IP Cores.2002,7.
[2]Information onhttp://www.opencores.org.
[3]Information on http://www.oreganosystems.at.
[4]Altera Corp.CycloneII Device Handbook.Altera,2005.
[5]Jianguo Han and Guiyun Tian:Foundation and Application of Microcontroller.2004.