基于VLSI 平臺(tái)的AVR 處理器仿真與設(shè)計(jì)
0 引言
隨著社會(huì)發(fā)展,工業(yè)控制及人們?nèi)粘I钤絹?lái)越追求精密控制,為滿足這種需求,微控制器得到了快速發(fā)展。微控制器(Micro Control Unit,MCU)又稱單片微型控制計(jì)算機(jī)或單片機(jī)。隨著大規(guī)模集成電路(LargeScale Integration,LSI)發(fā)展,MCU將原本分散的中央處理器(Central Processor Unit,CPU)、隨機(jī)存儲(chǔ)器(Ran-dom Access Memory,RAM)、只讀存儲(chǔ)器(Read OnlyMemory,ROM)、輸入/輸出接口(In/Out Ports,I/O)等集中于一塊單晶芯片內(nèi),形成一種芯片級(jí)計(jì)算系統(tǒng)。MCU主要用于控制,MCU構(gòu)成的系統(tǒng)有實(shí)時(shí)、快速的外部響應(yīng),能迅速采集到大量數(shù)據(jù),做出邏輯判斷與推理后實(shí)現(xiàn)對(duì)被控制對(duì)象的參數(shù)調(diào)整與控制。但是隨著對(duì)控制的要求增大,傳統(tǒng)MCU也越來(lái)越顯得捉襟見(jiàn)肘。為此使用專用應(yīng)用集成電路(Application Specific IntegratedCircuit,ASIC)器件在片內(nèi)實(shí)現(xiàn)與傳統(tǒng)MCU相兼容的核心,選用合適的片內(nèi)總線來(lái)連接外設(shè),構(gòu)成一個(gè)兼容傳統(tǒng)MCU平臺(tái),這種方法必會(huì)延續(xù)傳統(tǒng)MCU的生命力,使其獲得更大的發(fā)展。
1 MCU 簡(jiǎn)介
若將4位單片機(jī)的出現(xiàn)作為MCU的起點(diǎn),MCU的發(fā)展大致可以分為如下階段:初級(jí)階段(1971年-1976年)、8 位低性能階段(1976 年-1980 年)、8 位高性能階段(1980年-1983年)、16位階段(1983年至80年代末)、片上系統(tǒng)(System On-Chip,SoC)階段(1990-)。一個(gè)通用的MCU 由ROM、RAM、GPIO、串行設(shè)備(UART/SPI/IIC)、計(jì)數(shù)器/定時(shí)器(TIMER)等組成,并通過(guò)總線連接,如圖1所示。
傳統(tǒng)MCU 都需要一套指令集結(jié)構(gòu)(Instruction SetArchitecture,ISA)。從現(xiàn)階段主流體系結(jié)構(gòu)講,主要分為復(fù)雜指令集(Complex Instruction Set Computer,CISC)和精簡(jiǎn)指令集(Reduced Instruction Set Computer,RISC)。
RISC增加了運(yùn)行速度,大大減小了指令集數(shù)目,方便使用多級(jí)流水線結(jié)構(gòu),可增加寄存器數(shù)量。AVR單片機(jī)就是一款內(nèi)置FLASH的增強(qiáng)型RISC處理器[4].
另外MCU需要將數(shù)據(jù)和指令存儲(chǔ)于存儲(chǔ)器中。目前使用最多的兩種存儲(chǔ)器組織結(jié)構(gòu)分別為馮·諾依曼結(jié)構(gòu)(Von Neumann Architecture)和哈佛結(jié)構(gòu)(Harvard Ar-chitecture)。馮·諾依曼結(jié)構(gòu)將處理器指令和數(shù)據(jù)合并在一起存儲(chǔ),指向同一存儲(chǔ)器的不同物理地址。哈佛結(jié)構(gòu)將程序指令存儲(chǔ)和數(shù)據(jù)存儲(chǔ)分開(kāi),中央處理器先從程序指令存儲(chǔ)器中獲得指令譯碼后得到數(shù)據(jù)地址,再由此從數(shù)據(jù)存儲(chǔ)器中取得數(shù)據(jù),并進(jìn)行下一步操作。哈佛結(jié)構(gòu)的微處理器通常有很高的執(zhí)行效率。Atmel公司的AVR系列就是采用的哈佛結(jié)構(gòu)。
AVR單片機(jī)是由Atmel公司在1997年推出的高速8位MCU,內(nèi)置FLASH的增強(qiáng)型RISC處理器,可廣泛應(yīng)用于計(jì)算機(jī)外部子系統(tǒng)、工業(yè)生產(chǎn)和控制、儀器儀表、通信設(shè)備、家用電器等各個(gè)領(lǐng)域。大部分AVR片上資源豐富:如E2PROM,PWM,RTC,SPI,USART,TWI,ISP,AD,Analog Comparator,WDT等。AVR單片機(jī)內(nèi)嵌高質(zhì)量的FLASH程序存儲(chǔ)器,擦寫方便,支持ISP和IAP,便于產(chǎn)品的調(diào)試、開(kāi)發(fā)、生產(chǎn)、更新。內(nèi)嵌長(zhǎng)壽命的E2PROM可長(zhǎng)期保存關(guān)鍵數(shù)據(jù),避免斷電丟失。片內(nèi)大容量的RAM不僅能滿足一般場(chǎng)合的使用,同時(shí)也更有效地支持使用高級(jí)語(yǔ)言開(kāi)發(fā)系統(tǒng)程序,并可像8051單片機(jī)那樣擴(kuò)展外部RAM.
2 FPGA 簡(jiǎn)介
ASIC 是指依特定用途而設(shè)計(jì)的特殊規(guī)格邏輯電路。ASIC的最顯著特點(diǎn)是面向特定用戶需求,與通用集成電路相比有更小的體積、更低的功耗、較高的可靠性、較強(qiáng)的保密性和低成本等優(yōu)點(diǎn),但因?yàn)殚_(kāi)發(fā)較為復(fù)雜,所以研發(fā)周期較長(zhǎng)。
隨著電子工業(yè)技術(shù)的發(fā)展,ASIC的設(shè)計(jì)方法變得越簡(jiǎn)單,效率越高,可編程ASIC就是一個(gè)很有特色的設(shè)計(jì)分支,它主要利用可編程的集成電路如PLD(Program-mable Read Only Memory)等可編程邏輯電路來(lái)設(shè)計(jì)。
主要特點(diǎn)是直接提供軟件設(shè)計(jì)編程,完成ASIC電路功能,而不再通過(guò)集成電路工藝加工后得到成品。這種方法大大降低了開(kāi)發(fā)周期,且縮小了成本。
現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Ar-ray,FPGA)就是眾多PLD產(chǎn)品中應(yīng)用最為廣泛的一種,它采用了邏輯單元陣列(Logic Cell Array,LCA),內(nèi)部包含了可配置的邏輯模塊(Configurable Logic Block,CLB)、輸入/輸出模塊(Input Output Block,IOB)和內(nèi)部連線(Interconnect)。FPGA采用的是小型查找表來(lái)實(shí)現(xiàn)組合邏輯的,每個(gè)查找表連接到一個(gè)D觸發(fā)器的輸入端,觸發(fā)器再來(lái)驅(qū)動(dòng)其他的邏輯電路或者I/O,由此構(gòu)成即可實(shí)現(xiàn)組合邏輯功能又可實(shí)現(xiàn)時(shí)序邏輯功能的基本邏輯單元模塊,通過(guò)內(nèi)部連線互相連接。FPGA的邏輯是通過(guò)向內(nèi)部靜態(tài)存儲(chǔ)單元加載編程數(shù)據(jù)來(lái)實(shí)現(xiàn)的,存儲(chǔ)在存儲(chǔ)器單元中的值決定了邏輯單元的邏輯功能以及各模塊之間或模塊與I/O之間的聯(lián)系方式,并且最終決定了FPGA所實(shí)現(xiàn)的功能。由于FPGA采用查找表結(jié)構(gòu),而查找表本質(zhì)是一個(gè)小RAM,所以FPGA內(nèi)部信息掉電消失,上電需要重新進(jìn)行配置。FPGA支持多次重復(fù)編程。相對(duì)于其他的可編程器件,F(xiàn)PGA是ASIC電路中設(shè)計(jì)風(fēng)險(xiǎn)最小、開(kāi)發(fā)費(fèi)用最低、周期最短的器件之一。采用高速CMOS工藝,功耗低,可以與CMOS、TTL電平兼容。同時(shí)FPGA 的內(nèi)部邏輯和I/O 資源非常豐富,可以說(shuō)用FPGA芯片進(jìn)行小批量生產(chǎn),對(duì)于提高系統(tǒng)集成度、可靠性是很有幫助的。
在眾多PLD廠家中,XILINX公司的產(chǎn)品種類豐富,其開(kāi)發(fā)工具ISE為業(yè)界公認(rèn)的最好的開(kāi)發(fā)工具之一,且其芯片的性價(jià)比很高。所以,這里主要使用XILINX公司的產(chǎn)品。XILINX 公司主要FPGA 產(chǎn)品為SPARTAN系列和VIRTEX系列。前者面向低成本應(yīng)用,滿足一般的邏輯設(shè)計(jì)要求,后者面向高性能應(yīng)用,滿足高端要求。文中選擇Virtex-Ⅱ Pro 系列芯片作為開(kāi)發(fā)平臺(tái)。
這款芯片含有可編程輸入/輸出塊、可配置邏輯塊、嵌入式RAM塊、數(shù)字時(shí)鐘管理模塊、專用硬核以及豐富的布線資源。FPGA的設(shè)計(jì)過(guò)程是利用EDA工具將設(shè)計(jì)輸入轉(zhuǎn)化為FPGA芯片可運(yùn)行的過(guò)程,開(kāi)發(fā)的一般流程見(jiàn)圖2.
3 Virtual AVR 實(shí)現(xiàn)
通過(guò)對(duì)FPGA和MCU的深入了解,可知使用FPGA的豐富資源來(lái)虛擬出MCU是完全可行的。首先,需設(shè)計(jì)一個(gè)總體結(jié)構(gòu),如圖3所示。ROM用于存放被執(zhí)行程序及二進(jìn)制代碼,RAM 為運(yùn)行內(nèi)存,用總線將VirtualMCU Core與各外設(shè)相連。使用該結(jié)構(gòu)可簡(jiǎn)化設(shè)計(jì),無(wú)需對(duì)外設(shè)重復(fù)設(shè)計(jì),只要使Virtual MCU Core滿足同一接口即可。
Virtual MCU Core由幾部分構(gòu)成:算術(shù)邏輯單元,運(yùn)算的主要單元;譯碼器,由二進(jìn)制文件判斷指令類型并獲得源操作數(shù)和目的操作數(shù)等;寄存器,用于參加運(yùn)算和存儲(chǔ)某些中間值等。
Virtual AVR Core 以ATmega103處理器為參考,核心采用RISC結(jié)構(gòu),3級(jí)流水線結(jié)構(gòu),因?yàn)槭枪鸾Y(jié)構(gòu),所以分為數(shù)據(jù)存儲(chǔ)器和指令存儲(chǔ)器。它的處理器核心如圖4所示。同時(shí)ATmega103共有130條指令,每條指令都是固定結(jié)構(gòu),為16 位。在該設(shè)計(jì)中,移植了Open-Cores開(kāi)源組織的8位AVR核,它支持3級(jí)流水線,兼容標(biāo)準(zhǔn)AVR微處理器。[!--empirenews.page--]
ALU的實(shí)現(xiàn)采用模塊化設(shè)計(jì),共分為控制模塊、加減法模塊和乘除法模塊。3級(jí)流水線設(shè)計(jì)如下:
stage0:FETCH,給出指令地址,并讀取相應(yīng)的指令,主要由譯碼機(jī)構(gòu)負(fù)責(zé);stage1:ALU/MEM,ALU運(yùn)算,或數(shù)據(jù)存儲(chǔ)器操作,讀數(shù)據(jù)存儲(chǔ)器時(shí),在地址總線上給出正確的值,當(dāng)寫數(shù)據(jù)存儲(chǔ)器時(shí),不僅需要提供正確的地址,還需要在數(shù)據(jù)總線上提供正確的數(shù)據(jù),主要由運(yùn)算機(jī)構(gòu)和總線控制機(jī)構(gòu)負(fù)責(zé)。
Stage2:LOAD,從數(shù)據(jù)線上獲取數(shù)據(jù),存至寄存器中,主要由寄存器機(jī)構(gòu)負(fù)責(zé)。
在一個(gè)系統(tǒng)中光有處理器是不夠的,需要有豐富的外設(shè)來(lái)滿足各種控制要求或數(shù)據(jù)傳輸功能,而片內(nèi)總線便是將處理器與總線連接的重要途徑。文中采用Sili-core的Wishbone總線進(jìn)行設(shè)計(jì),具有簡(jiǎn)單、開(kāi)放、高效和方便實(shí)現(xiàn)等特點(diǎn),且完全開(kāi)放并沒(méi)有專利保護(hù)。Wish-bone有四種連接模式:點(diǎn)對(duì)點(diǎn)、數(shù)據(jù)流、共享總線和十字交叉互聯(lián)。文中使用共享總線連接方式,其中充當(dāng)Master為Virtual Core,而外設(shè)為Slaver.
為使Virtual Core能與外部器件進(jìn)行通信,需要外設(shè)的支持。外設(shè)按數(shù)據(jù)流類型分為串行和并行,常用的串行外設(shè)有SPI、I2C、UART 等,常用的并行外設(shè)有GPIO等。
4 硬件支持與測(cè)試
硬件環(huán)境主要分為兩部分:第一部分為核心板,用以支持Virtex-Ⅱ Pro的運(yùn)行;第二部分為底板,主要為添加外設(shè)環(huán)境,豐富系統(tǒng)的功能。選用XC2VP50FFG1152芯片作為核心的FPGA,在外圍又添加了DDR和SDRAM,方便自由選擇存儲(chǔ)器類型。FP-GA掉電后,內(nèi)容自動(dòng)消失,每上電需要重新配置,為讓FPGA 上電后自動(dòng)配置,需加一片PROM,使用XCF32P.FPGA采用并行主模式。底板上則是增加大量外設(shè):UART、PS2、VGA、ETHERNET、VIDEO、A/D、D/A、SD、USB等。
Virtual Core執(zhí)行的程序都是固化在ROM中,為達(dá)到測(cè)試要求,要多次更新ROM中內(nèi)容,為此使用嵌入式開(kāi)發(fā)套件(Embedded Development Kit,EDK)來(lái)開(kāi)發(fā)一個(gè)測(cè)試工具。首先將BRAM配置為雙端口RAM,一端口給Virtual Core來(lái)進(jìn)行讀取操作,一端口給EDK,來(lái)更新程序存儲(chǔ)器。同時(shí)EDK也可提供簡(jiǎn)單的控制任務(wù),如重啟Virtual Core 等,EDK 使用UART 和計(jì)算機(jī)進(jìn)行操作。為方便控制,設(shè)計(jì)一個(gè)較為簡(jiǎn)單的PC端串口程序,用于將EDK與PC交互,主要是將用戶的命令或文件經(jīng)串口發(fā)送至EDK,如圖5所示。搭建一個(gè)簡(jiǎn)易測(cè)試系統(tǒng),使用ISE工具,進(jìn)行綜合布局布線,其資源消耗如圖6所示。編寫一個(gè)跑馬燈程序,代碼如下:
使用WINAVR-GCC 編譯工具,編譯生成HEX 文件,后再轉(zhuǎn)化為BIN文件,將該BIN文件通過(guò)EDK組建更新ROM,觀察硬件LED,如圖7所示,其正常工作,Vir-tual AVR得到驗(yàn)證。
5 結(jié)語(yǔ)
隨著MCU 應(yīng)用范圍越來(lái)越寬,對(duì)MCU 要求也提高,尤其目前MCU逐漸進(jìn)入SoC時(shí)代,IP核復(fù)用將成為主流設(shè)計(jì)方法。為使老一代MCU延續(xù)生命力,開(kāi)發(fā)其兼容IP核,不僅能將以往代碼迅速移植到新系統(tǒng),且可加快新系統(tǒng)開(kāi)發(fā),將以往很多分立器件用邏輯功能實(shí)現(xiàn),集成于ASIC中,降低外圍硬件電路的設(shè)計(jì)。文中從模擬MCU核開(kāi)始,闡述了用FPGA來(lái)虛擬出傳統(tǒng)MCU的設(shè)計(jì)原理和方法,適度改變內(nèi)部結(jié)構(gòu),添加Wishbone總線,替代傳統(tǒng)MCU片內(nèi)總線,來(lái)完成MCU核與外設(shè)的連接,使傳統(tǒng)MCU變的更靈活。結(jié)果表明,實(shí)現(xiàn)了既定目標(biāo),與標(biāo)準(zhǔn)的微控制器兼容,系統(tǒng)運(yùn)行穩(wěn)定。該方法延續(xù)了傳統(tǒng)微控制器的生命力,能使其得到更大發(fā)展。由于Wishbone總線支持多主設(shè)備,今后可在一個(gè)FPGA 中集成多個(gè)MCU核,對(duì)于性能的提升將是質(zhì)的飛躍。





