【IC设计项目】基于APB协议的32位递减计数器

功能特性

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然后继续保持。

在这里插入图片描述
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值