这里写自定义目录标题
功能特性
Simple Timer是一个32位的减法计数器,支持以下特性:、
FS001:32位计数器
FS002:支持预设一个计数初始值
FS003:支持读取当前计数值
FS004:当计数器计数到0时,产生中断。中断一直保持直到被写清。
FS005:支持外部输入信号EXTIN直接作为计数使能信号,高电平有效。
FS006:支持外部输入信号EXTIN从0到1的跳变作为计数使能信号。
FS007:当计数器计数到0的同时,刚好发生了一次软件的中断写清操作,则软件操作的优先级更高(即此时不产生中断)。
FS008:支持APB寄存器读写逻辑采用独立时钟,当没有读写操作时该时钟处于关闭状态(时钟的关闭控制逻辑在此模块外部处理)
FS009:支持Component ID寄存器和Peripheral ID寄存器。
FS010:支持ECO寄存器。
FS011:支持APB2接口。
详细设计
模块架构
Simple Timer模块在系统中的位置如下图所示:
Simple Timer模块的微架构如下图所示:
功能设计
APB接口
APB在本次项目中的作用是对寄存器进行读写,读写操作需要满足APB的状态和时序,这一点在testbench 中体现。
APB写操作
APB写操作满足时序如图所示。
T0-T1阶段:此时APB总线为空闲阶段,此时的PSEL须为低电平,PENABLE须为低电平。
T1-T2阶段:此时为预备阶段,PCLK上升沿触发,传输地址和数据,PSEL需设置为高电平,PWRITE须设置为高电平表示此时为写操作。
T2-T3阶段:此时为传输阶段,PCLK上升沿触发,PENABLE须设置为高电平。
T3-T4阶段:此时为一个传输周期结束后的空闲状态,PSEL与PENABLE须为低电平。
APB读操作
APB读操作满足时序如图所示。
T0-T1阶段:此时APB总线为空闲阶段,PENABLE须为低电平。
T1-T2阶段:此时为预备阶段,PCLK上升沿触发,传输地址和数据,PSEL需设置为高电平,PWRITE须设置为低电平表示此时为读操作。
T2-T3阶段:此时为传输阶段,PCLK上升沿触发,PENABLE须设置为高电平。
T3-T4阶段:此时为一个传输周期结束后的空闲状态,PENABLE须为低电平。
递减计数
实现递减计数这个功能,需要满足三个条件。递减计数控制端开启,设置计数初始值,设置计数为零的重置值。
开启计数控制端
如上图所示,开启计数控制端最终要使得外部信号EXTIN从0到1跳变的时候dec_ctrl能够开启。
通过同步寄存器,当EXTIN信号到达ext_delay时,此时的ext_sync2正在经历上一个时刻的0,通过逻辑表达式获得edge_detect为高电平。因此这种传输方式能够使得EXTIN触发计数器的开启。
在rtl代码中实现的方式为阻塞赋值
设置计数初始值和重置值
本项目中的计数方式为将初始值赋给nxt_curr_val,PCLK上升沿触发nxt_curr_val阻塞赋值给reg_curr_val,EXTIN触发使得dec_ctrl改变再次触发reg_curr_val将自减的值直接赋给nxt_curr_val。
当检测到reg_curr_val为0时将重置值直接赋给nxt_curr_val。
RTL中的体现为如下。
中断产生与清除
计数中断的产生需要满足条件当reg_curr_val的值为1,同时控制寄存器的中断使能开启。
中断清除的目的是将中断寄存器reg_time_int原本的1变为0,中断写清发生在当计数到0时,同时用APB写操作给写清操作发送1,此时需要优先软件写清将reg_time_int原本的1变为0。
要完成以上的步骤,rtl部分需要完成对reg_curr_val检测,testbench部分需要完成对控制寄存器第四位的写1。
Component ID,Peripheral ID和ECO寄存器
为了方便设备驱动软件的管理,以及方便兼容同一外设的不同分支版本,Simper Timer模块支持可读的ID寄存器,分为Component ID和Peripheral ID。软件可以从ID识别出模块类型和版本信息。
本模块还支持4bit的ECOREVNUM信号设计,该信号连接到Peripheral ID,用来指示在芯片开发流程中的ECO版本修改信息。在前端设计中,该信号连接到tie-low的标准单元,在ECO过程中,可通过修改标准单元类型来改变版本号。
接口信号与时序
信号名 IO方向 位宽 时钟域 功能描述
PCLK Input PCLK 总线时钟,同步所有传输,正时钟沿触发所有信号
PRESETn Input PCLK 总线复位信号低有效,复位系统与总线
PSEL Input PCLK 选择信号
PADDR Input [11:2] PCLK 32位系统地址总线
PENABLE Input PCLK 指示APB操作的第二个周期
PWRITE Input PCLK 读写操作:1-写,0-读
PWDATA Input [31:0] PCLK 写操作主传给从的数据总线,推荐最少32位数据总线带宽。
PRDATA Output [31:0] PCLK 读操作返回给主的数据总线,推荐最少32位数据总线带宽。
PREADY Input PCLK 外设用这个信号去扩展APB传输
PSLVERR Output PCLK 这个信号表明一次传输失败
EXTIN Input PCLK 计数使能信号
TIMERINT Output PCLK 写清中断输出信号
编程方法
初始化流程
在使用Timer之前需要先对其进行初始化配置,按照如下步骤:
步骤1:打开控制寄存器
步骤2:给计数初始值赋值
步骤3:给重置值赋值
步骤4:给中断写清操作写1
中断处理流程
流程图如图所示,首先需要开启计数,具体内容在递减计数那一小节,按照设计要求当软件中断来临时,软件的优先级比计数中断优先级高,这种情况下能够改变中断寄存器的值,将之前的1改变为0,直至下一次的单独的计数中断来临将中断寄存器的值重新置为1然后继续保持。
![]() |