微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于MicroBlaze的AXI总线实时时钟IP核设计

基于MicroBlaze的AXI总线实时时钟IP核设计

时间:12-13 来源:互联网 点击:

得到4.096 MHz的时钟信号。分频核心代码如下:
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

寄存器控制模块的主要功能是实现对RTC 模块内部各个寄存器的读写控制并为整个IP 模块提供控制信号。提供上层应用代码与IP核代码之间的接口。在这个模块内部包含对每个内部功能寄存器的读写进行控制的子模块和对各个子模块时钟的总体分布控制[3]。本设计中一共定义了16个寄存器,主要有控制寄存器、状态寄存器以及毫秒的读寄存器、毫秒的写寄存器;秒的读寄存器、秒位写寄存器、分位的读寄存器、分位的写寄存器、小时位的读寄存器、小时位的写寄存器、以及年月日的读与写寄存器等。

设置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的核心逻辑模块主要完成的功能就是精确计时。IP核中通过计数器的控制,毫秒逢1000进位,秒、分和小时逢60进位,月逢12进位。设计时要全面考虑实际情况,注意对闰年以及不同月份天数不一样等情况的处理。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 <= 6h00;
else
SecondRegister <= SecondRegister;
end
……
  当时钟上升沿到来或者应用程序发出设置时间指令后,进行判断:秒位如果小于59并且毫秒位有进位,此时秒位计数器加1;如果秒位计数器大于或等于59时毫秒位有进位则将秒位清零。其他情况秒位计数器保持原来数值。 其他的分、小时、日月年等计数依次类推。

结语
  soft_rtc IP核应用时,首先读装置中的硬件RTC芯片时间,获取当前时间后随后写入设计的soft_rtc IP核,这样是soft_rtc时间与硬件RTC时间保持同步。后面装置运行过程中无论是保护事件上传,还是录波事件上传等涉及到时间的读写操作都由soft_rtc IP核完成。避免了对硬件RTC芯片的反复操作,提高的稳定性,节省了系统资源。设计完成后通过串口打印,或者通过通信帧将时间信息上传到装置界面显示等多方面验证,经过长时间运行,时间精确可靠。此soft_rtc IP核方便移植可以推广到后续的产品中。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top