摘要: 應(yīng)用MicroBlaze軟核作為CPU的硬件平臺,在此平臺上設(shè)計了基于AXI總線的通用實(shí)時時鐘IP核。給出了創(chuàng)建IP核的過程和導(dǎo)入IP核的方法。介紹了實(shí)時時鐘的IP核結(jié)構(gòu),給出了IP核的結(jié)構(gòu)框圖。介紹了實(shí)時時鐘的原理,給出了實(shí)時時鐘各個模塊的核心代碼。
引言
MicroBlaze是可以嵌入到FPGA中的RISC處理器軟核,具有運(yùn)行速度快、占用資源少、可配置性強(qiáng)等優(yōu)點(diǎn),廣泛應(yīng)用于通信、軍事、高端消費(fèi)市場等領(lǐng)域。Xilinx公司的MicroBlaze 32位軟處理器核是支持CoreConnect總線的標(biāo)準(zhǔn)外設(shè)集合。MicroBlaze處理器運(yùn)行在150 MHz時鐘下,適合設(shè)計針對網(wǎng)絡(luò)、電信、數(shù)據(jù)通信和消費(fèi)市場的復(fù)雜嵌入式系統(tǒng)。
AXI是ARM公司提出的AMBA3.0協(xié)議中最重要的部分,是一種面向高性能、高帶寬、低延遲的片內(nèi)總線。AXI 總線技術(shù)不但使片上系統(tǒng)面積更小功耗更低,同時還獲得了更加優(yōu)異的性能。AXI 能達(dá)到這樣的技術(shù)指標(biāo)的一個主要原因,就是它的單向通道體系結(jié)構(gòu)。單向通道體系結(jié)構(gòu)使得片上的信息流只以單方向傳輸,減少了延時。AXI 技術(shù)滿足超高性能和復(fù)雜的片上系統(tǒng)設(shè)計的需求,因此AXI的與應(yīng)用也越來越廣泛[1]。隨著ARM公司與Xilinx公司的合作逐步加強(qiáng),Xilinx開始逐步在FPGA產(chǎn)品中大力推廣AXI總線技術(shù)。AXI在Xilinx公司的MicroBalze等CPU上面得到越來越重要的支持,必將成為未來的主流技術(shù)。
1 IP核的創(chuàng)建與導(dǎo)入
Xilinx的MicroBlaze軟核為用戶提供了大量的可用IP核,方便用戶開發(fā)縮短開發(fā)周期,降低成本。但是用戶的需求千差萬別,官網(wǎng)提供的IP核不可能滿足所有人的需求。因此開發(fā)環(huán)境支持用戶自定義IP核,根據(jù)用戶的不同需求,用戶可以通過定制的方式開發(fā)自己需要的IP核。在測控裝置的研發(fā)過程中,筆者發(fā)現(xiàn)插件上設(shè)計的RTC時鐘芯片,雖然具有掉電保持時間的功能。但是在完成裝置界面對時等功能時,對RTC芯片的讀寫操作顯示到界面上后,會有一定的延時,界面無法精確的顯示當(dāng)前的時間。因此設(shè)計一個通過自定制IP核的形式,實(shí)現(xiàn)實(shí)時時鐘時鐘的功能解決上述問題。開發(fā)環(huán)境中的Xilinx Platform Studio為IP核的定值與導(dǎo)入提供了向?qū)А?/p>
創(chuàng)建IP核的步驟如下:選擇Hardware→Create or Import Peripheral Wizward來打開創(chuàng)建和引入外設(shè)向?qū)А螕鬘ext按鈕。選擇Create templates for a new peripheral。默認(rèn)情況下新的外設(shè)將被存在pcores文件夾中方便查找。然后再次單擊Next按鈕。在Create PeripheralName and Version對話框中,輸入定制的IP核的名字,這里輸入本次定制IP核名稱為soft_rtc。下面是版本控制,可以根據(jù)需要修改。界面如圖1所示。
?
單擊Next按鈕,在Create PeripheralBus Interface 對話框中,選擇AXI4,這是新的外設(shè)將要連接的總線。對于簡單設(shè)計可以選擇AXI4_Lite;下一步在IPIF (IP 接口) 配置,這里配置接口的一些屬性,如是否是AXI 主/從設(shè)備等。所定制的IP是一個從設(shè)備,因而不需要使用主設(shè)備接口。數(shù)據(jù)寬度選擇默認(rèn)的32位,下一步選擇需number of use memory ranges數(shù)量,這里選1。界面如圖2所示。
?
接下來就是IPIC(IP 互聯(lián)),也就是IP的接口信號。接下來需要使用需要使用BFM總線功能模型對外設(shè)進(jìn)行仿真,本例不要使用。最后,需要選擇HDL類型、ISE工程支持和軟件驅(qū)動模板。此處使用Verilog模板,選擇后需IP接口仍然是VHDL編寫,只是用戶邏輯改用Verilog。如果不需要使用軟件驅(qū)動模板,可以不選。最后給出了外設(shè)的信息summary。完成上述步驟后,自定制的soft_rtc IP核的模版創(chuàng)建完成,只需根據(jù)需求對user_logic文件索要實(shí)現(xiàn)的功能編寫應(yīng)用代碼,并配置相應(yīng)的引腳。
完成user_logic的代碼編寫后,需要將完成的IP核導(dǎo)入工程。大致步驟如下:再次使用Hardware Create or Import Peripheral, 并單擊Next按鈕。選擇Import existing peripheral項,單擊Next按鈕再次輸入名稱soft_rtc,單擊Next按鈕,選擇Yes按鈕。下一步選中第一項HDL source files單擊Next按鈕,然后下一步驟選中第二項Use existing Peripheral Analysis Order files(*pao), Browse到相應(yīng)的目錄下,選中.pao文件,單擊打開,然后單擊Next按鈕;出現(xiàn)圖3所示的窗口時,選中左側(cè)AXI4Lite選項,然后單擊Next按鈕后面都選擇默認(rèn)選項直到出現(xiàn)結(jié)束窗口時選擇結(jié)束按鈕Finish按鈕。 這樣通過上述步驟完成了IP核的創(chuàng)建與導(dǎo)入。最后將IP核加入到工程中與AXI4Lite總線連接。完成IP核模版的創(chuàng)建與導(dǎo)入后,下一步就要進(jìn)行完成IP核user_logic文件的代碼設(shè)計。
2 soft_rtc IP核的設(shè)計
soft_rtc IP核中主要分為與上層接口的寄存器管理模塊、為IP核提供精確時鐘的 Clock分頻模塊和RTC的核心邏輯模塊[2]。IP核接口如圖4所示。
開發(fā)板上提供有25 MHz的晶振和16.384 MHz的晶振。為了計時的精度,將16.384 MHz的輸入信號引入soft_rtc模塊。Clock 分頻模塊將輸入的16.384 MHz準(zhǔn)晶振時鐘4分頻得到4.096 MHz的時鐘信號。分頻核心代碼如下:
always @(posedge clk_in)
begin
if(clk_div == 4'b0011)
clk_div <= 4'b0110;
else if(clk_div == 4'b0110)
clk_div <= 4'b1100;
else if(clk_div == 4'b1100)
clk_div <= 4'b1001;
else
clk_div <= 4'b0011;
end
寄存器控制模塊的主要功能是實(shí)現(xiàn)對RTC 模塊內(nèi)部各個寄存器的讀寫控制并為整個IP 模塊提供控制信號。提供上層應(yīng)用代碼與IP核代碼之間的接口。在這個模塊內(nèi)部包含對每個內(nèi)部功能寄存器的讀寫進(jìn)行控制的子模塊和對各個子模塊時鐘的總體分布控制[3]。本設(shè)計中一共定義了16個寄存器,主要有控制寄存器、狀態(tài)寄存器以及毫秒的讀寄存器、毫秒的寫寄存器;秒的讀寄存器、秒位寫寄存器、分位的讀寄存器、分位的寫寄存器、小時位的讀寄存器、小時位的寫寄存器、以及年月日的讀與寫寄存器等。
設(shè)置RTC核心代碼如下:
always @(posedge Bus2IP_Clk)
begin
if(Bus2IP_CS[0] && Bus2IP_WrCE[0] && (Bus2IP_Addr[9:2] == SETSECOND_Addr))
SetSecondRegister <= Bus2IP_Data[5:0];
……
end
讀RTC核心代碼如下:
assign IP2Bus_Data[15:0] = (Bus2IP_CS[0] && Bus2IP_RdCE[0] && (Bus2IP_Addr[9:2] == MSECOND_Addr))?{6'h00,GetMsecondRegister}:16'hzzzz;
……
RTC的核心邏輯模塊主要完成的功能就是精確計時。IP核中通過計數(shù)器的控制,毫秒逢1000進(jìn)位,秒、分和小時逢60進(jìn)位,月逢12進(jìn)位。設(shè)計時要全面考慮實(shí)際情況,注意對閏年以及不同月份天數(shù)不一樣等情況的處理。RTC計時的核心代碼如下:
always @(posedge SETTIME or posedge clk_jg)
begin
if(SETTIME)
SecondRegister <= SetSecondRegister;
else if((SecondRegister_B < 59) && Msecond_Carry)
SecondRegister <= SecondRegister + 1;
else if(Msecond_Carry)
SecondRegister <= 6'h00;
else
SecondRegister <= SecondRegister;
end
……
當(dāng)時鐘上升沿到來或者應(yīng)用程序發(fā)出設(shè)置時間指令后,進(jìn)行判斷:秒位如果小于59并且毫秒位有進(jìn)位,此時秒位計數(shù)器加1;如果秒位計數(shù)器大于或等于59時毫秒位有進(jìn)位則將秒位清零。其他情況秒位計數(shù)器保持原來數(shù)值。 其他的分、小時、日月年等計數(shù)依次類推。
結(jié)語
soft_rtc IP核應(yīng)用時,首先讀裝置中的硬件RTC芯片時間,獲取當(dāng)前時間后隨后寫入設(shè)計的soft_rtc IP核,這樣是soft_rtc時間與硬件RTC時間保持同步。后面裝置運(yùn)行過程中無論是保護(hù)事件上傳,還是錄波事件上傳等涉及到時間的讀寫操作都由soft_rtc IP核完成。避免了對硬件RTC芯片的反復(fù)操作,提高的穩(wěn)定性,節(jié)省了系統(tǒng)資源。設(shè)計完成后通過串口打印,或者通過通信幀將時間信息上傳到裝置界面顯示等多方面驗(yàn)證,經(jīng)過長時間運(yùn)行,時間精確可靠。此soft_rtc IP核方便移植可以推廣到后續(xù)的產(chǎn)品中。
參考文獻(xiàn)
[1] 田澤,曹慶年,劉天時,等. 嵌入式處理器S3C2440 Windows CE的RTC模塊設(shè)計與實(shí)現(xiàn)[J]. 計算機(jī)應(yīng)用與軟件,2007,24(3):3133.
[2] 周飚, 謝曉陽. 有限狀態(tài)機(jī)在RTC設(shè)計中的分析與應(yīng)用[J].計算機(jī)系統(tǒng)應(yīng)用,2008,17(5):7780.
[3] 戚戰(zhàn)鋒. RTC技術(shù)在系統(tǒng)集成中的應(yīng)用研究 [J].信息通信,2012(6):3738.
薩其日娜(工程師),從事電網(wǎng)自動化研究。
評論
查看更多