FPGA 07 基础 多功能定时器模块 |
您所在的位置:网站首页 › 计算器变音怎么设置的 › FPGA 07 基础 多功能定时器模块 |
模块名称: 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 |