FPGA 07 基础 多功能定时器模块

您所在的位置:网站首页 计算器变音怎么设置的 FPGA 07 基础 多功能定时器模块

FPGA 07 基础 多功能定时器模块

2024-07-14 11:18| 来源: 网络整理| 查看: 265

在这里插入图片描述

FPGA 07 基础 多功能定时器模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PWWA2IXp-1627393947412)(img/blog_img/fpga/image-20210719155501686.png)]

模块名称: timer

主要功能 :通过配置输入端口有3个重要参数:来设置定时器模块实现 一次计数(定时)还是循环计数(定时)功能

​ CNT_ENABLE : 定时器使能开关(一次计数时,发送一个时钟周期的高电平脉冲信号,循环定时时,直接拉高)

​ MODE : =0 单次定时器计数 =1 循环定时计数

​ CNT_ARR[31:0] : 计数器重装载值,每次计数器的计数值计数到该位置以后,重新开始计数

​ 输出有两个信号:

​ Full_flag : 计数器计满标志信号.

​ ARR[31:0] : 实时(当前)计数器的计数值

实现(设计)流程:

​ 1、使用一个always 语句,判断是在 单次计数模式 还是循环计数模式,判断进入使能模式下后,

在循环模式下:判断是否 CNT_ENABLE =1 ,是的条件下,进行正常计数,到达最大值是计数器清零,重新开始计数。

在单次计数模式下: 我们为了让计数器进行单次的计数,设置了一个计数寄存器标志信号(oneshot),当标志信号位 1 时,计数器正常机器,计数器清零保持该状态。

​ 2、标志信号(oneshot)使用一个always块语句来判断,当MODE =0 时,如果CNT_ENABLE =1 ,设置 oneshot =1 ,如果计数器但前值==(CNT_ARR[31:0] 定时装载值-1),oneshot =0 ,停止计数,其余时刻保持该状态即可。

优势: 一个模块可以实现两个功能,模块复用的时候可以更加的方便。

timer.v 文件 //通用定时器模块 //描述: //通过定义 timer 里面的 input 的数值 // 得到 output 里面的数值,这样就可以得到我们想要的输出(2个 分别是 CNT_NOW 和 Full_Flag 两个输出信号) // 时钟和复位信号是输入信号,一般由系统给定 // CNT_ARR、MODE、CNT_ENABLE 可以自己给定固定值或者通过外部的输入给定一个值(信号) module timer( Clk , //时钟 Rst_n , //复位信号 CNT_ARR , //定时器重装载值(类似与32的重装载值) MODE , // Mode : 1 循环定时 Mode : 0 单次定时 CNT_ENABLE , //CNT_ENABLE : 1 定时器计数器使能,开始计数 //CNT_ENABLE : 0 定时器计数不使能,停止计数 CNT_NOW , //实时定时器计数器 Full_Flag //计数完成标志位 ); // 定义: input Clk ; input Rst_n; input [31:0]CNT_ARR ; //通用32位定时计数器 input MODE ; input CNT_ENABLE; output [31:0]CNT_NOW ; //当前32位定时计数器的值 output reg Full_Flag ; //计数完成标志位 //自己模块定义的信号 reg [31:0]cnt; //定义一个32位的计数器 reg oneshot ; //定义一个 单次计数值计满 触发信号 wire Full_Flag_r; //Full_Flag_r 用于延时Full_Flag 的一个周期 assign CNT_NOW = cnt; //定时器的值 assign Full_Flag_r = (CNT_NOW == CNT_ARR - 1)?1'b1:1'b0; //第1个 always 块 always@(posedge Clk) Full_Flag


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3