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