防空兵指揮學院 張春生 宋 磊 張海瑞
SOPC設計中自定義IP的開發(fā)
防空兵指揮學院 張春生 宋 磊 張海瑞
近年來,隨著微電子工業(yè)的飛速發(fā)展,作為可編程邏輯器件之一的FPGA(Field Programmable Gate Array,現(xiàn)場可編程邏輯門陣列)得到了越來越廣泛的應用,其設計性能和性價比已完全能夠與ASIC抗衡。SOPC(System On a Programmable Chip,片上可編程系統(tǒng))技術正是在可編程邏輯器件的基礎上發(fā)展起來的一種靈活、高效的嵌入式系統(tǒng)解決方案。它將處理器、存儲器、I/O口、LVDS和UART等系統(tǒng)設計所需要的部件集成到一片F(xiàn)PGA器件上,各個部件一般都以IP核的形式構成一個可編程的片上系統(tǒng),它所具有的靈活性、低成本等特點讓系統(tǒng)設計者獲益匪淺。
1.IP核。SOPC的主要思想是提供1個IP庫,用戶從IP庫中選擇IP核來組裝系統(tǒng),因此IP核是SOPC設計的關鍵技術之一。雖然IP核一詞在眾多場合中已被多次使用,但它并沒有一個統(tǒng)一的定義。IP核從概念上可以理解為將一些在數(shù)字電路中常用但比較復雜的功能塊,如FIR濾波器、SDRAM控制器、UART控制器等設計成可修改參數(shù)的模塊,讓其他用戶可以直接調用這些模塊的組件,這樣就可以大大減輕工程師的負擔,避免了人員的重復勞動,也縮短了系統(tǒng)的開發(fā)時間。
2.SOPC技術與IP核。IP核設計一般可以有3種方法,即EDA廠商提供、用戶自己定義和第3方提供。一般來說,EDA廠商及第3方提供的IP核在功能上都是通用的,但是在進行SOC設計時,用戶經常有特殊需求,這時必須通過自定義邏輯來實現(xiàn)所需要的功能。所以在進行SOC設計時,如何靈活地加入用戶自定義邏輯就顯得尤為重要。
1.常用的SOPC開發(fā)。在進行SOPC系統(tǒng)開發(fā)時,首先要做的是選擇FPGA平臺、處理器方案以及開發(fā)軟件,目前常用的是由世界上2大主要的FPGA器件生產廠商所提供SOPC方案及相關開發(fā)套件:一是Altera公司的FPGA產品,采用Nios處理器軟核或硬核ARM,開發(fā)工具由QuartusⅡ和SOPC Builder組成。二是Xilinx公司的FPGA產品,基于Microblaze軟核或Powerpc405硬核,開發(fā)工具由ISE和EDK組成。
2.基于EDK的SOPC開發(fā)過程。下面就以Xilinx公司的軟件EDK為例介紹SOPC系統(tǒng)的開發(fā)過程。EDK有一個友好的圖形用戶界面,通過這個界面,用戶可以從Xilinx提供的IP庫中選取一些組件,比如處理器、SDRAM、Flash、各種I/O等,并可通過選擇配置相應的參數(shù)。EDK有一個十分重要的功能就是在進行SOPC設計時,如果用戶有特殊功能需求,但IP庫中沒有,用戶可以加入自定義的邏輯來實現(xiàn),SOPC的開發(fā)流程如圖1所示。
圖1 SOPC開發(fā)流程
1.系統(tǒng)開發(fā)設計要求。這里以1個在控制系統(tǒng)中常用的脈沖寬度調制電路(PWM)為實例,設計1個PWM用戶邏輯并利用EDK將它集成到SOPC系統(tǒng)中。我們事先假定FPGA中已經存在1個基于Microblaze的嵌入式系統(tǒng)中,在此前提下將PWM外設集成到OPB總線上,并進行功能驗證。PWM的具體設計要求如下:要求信號周期可調,脈沖的寬度可調,可以控制PWM的輸出使能,PWM直接通過1個FPGA管腳輸出。按照以上設計要求,我們設定PWM外設共有3個寄存器,分別為Clock_Divisor寄存器、Duty_Cycle寄存器和Control寄存器。
2.模塊功能設計。PWM外設的核心是1個計數(shù)器,由Clock_Divisor寄存器來控制計數(shù)周期,當計數(shù)器的計數(shù)值大于Clock_Divisor寄存器的設定值時,計數(shù)器清零;否則,在時鐘信號觸發(fā)下,輸出使能控制位為1時計數(shù)器進行加1計數(shù)。PWM模塊的輸出是計數(shù)器的計數(shù)值與Duty_Cycle比較的結果,當輸出使能有效并且計數(shù)值大于Duty_Cycle寄存器的值時,輸出為1。
3.模塊集成。在XPS集成開發(fā)環(huán)境中,集成了一個creat/ import peripheral向導工具,利用該向導工具就能輕松地創(chuàng)建或導入一個用戶自定義的外設。在向導中,我們只需確定與總線的接口是3個32位的寄存器即可,向導完成設計后,工程目錄(project)中會自動生成drivers和pcores這2個文件夾,這2個文件夾中包含了自定義外設的相關信息,drivers文件夾里以應用程序接口函數(shù)API的形式提供了自定義外設的驅動程序,從而完成了對外設的讀寫和測試,用戶在開發(fā)包含自定義外設的高層應用軟件時就可以直接調用這些接口函數(shù)。
4.外線與總線的接口描述。在pcores文件夾目錄下有3個文件比較重要,即user_logic、MPD和PAO文件。user_logic文件是集成工具生成的用戶模板文件,該文件中給出了OPB總線的接口信號,用戶只需根據(jù)接口信號的驅動要求,在用戶模板中就能完成模塊的功能設計。PWM外設與總線的接口描述如下所示:
5.功能驗證。在自定義外設集成到系統(tǒng)中后,通過調用仿真模型生成器(SimGen),生成仿真文件,然后利用Modelsim仿真軟件對系統(tǒng)進行仿真,通過仿真我們就能夠快速驗證自定義邏輯的功能是否正確,PWM外設仿真波形如圖2所示。
在圖2中,pwm_out是PWM的輸出信號,opb_abus、opb_dbus和opb_select分別是OPB總線的地址總線、數(shù)據(jù)總線和片選信號。我們在應用程序中對PWM的3個寄存器進行3次配置:第一次把占空比設置成1:1;第二次設置成2:1;最后將輸出使能關閉。