赞
踩
Verilog HDL 之 4位二进制加减法计数器
一、原理
计数器是数字系统中用的较多的基本逻辑器件。它不仅能记录输入时钟脉冲的个数,还可以实现分频、定时等功能。
计数器的种类很多。按脉冲方式可以分为同步计数器和异步计数器;按进制可以分为二进制计数器和非二进制计数器;按计数过程数字的增减,可分为加计数器、减计数器和可逆计数器。
本实验就是设计一个4位二进制加减法计数器,该计数器可以通过一个控制信号决定计数器时加计数还是减计数,另外,该寄存器还有一个清零输入,低电平有效。还有一个load装载数据的信号输入,用于预置数据;还有一个C的输出,用于计数器的级联。其功能表如表1.1所示;
表1.1 4位二进制加减法计数器功能表
二、实现
在设计文件中输入Verilog代码
1 /****************************** 分频模块 *************************************/ 2 3 `timescale 1 ns / 1 ps 4 module qu_dou ( clk ,rst , a ,b ); 5 6 input clk ; 7 wire clk ; 8 input rst ; 9 input a ; 10 wire a ; 11 12 output b ; 13 reg b ; 14 15 reg [31:0] cnt ; 16 reg clkout ; 17 always @ ( posedge clk or negedge rst ) 18 begin 19 if ( rst == 1'b0 ) 20 cnt <= 0 ; 21 else begin if ( a==1'b1 ) begin 22 if ( cnt >= 32'd3000000 ) 23 b <= 1 ; 24 else 25 cnt <= cnt + 1'b1 ; 26 27 end 28 else begin b <= 1'b0 ; 29 cnt <= 0 ; 30 end 31 end 32 end 33 34 35 endmodule
功能实现
1 `timescale 1 ns / 1 ps 2 3 module counter4 ( load ,clr ,c ,DOUT ,clk, up_down ,DIN ,sysclk , rst ); 4 5 input load ; 6 input clk; 7 wire load ; 8 input clr ; 9 wire clr ; 10 input up_down ; 11 wire up_down ; 12 input [3:0] DIN ; 13 wire [3:0] DIN ; 14 input sysclk ; 15 input rst ; 16 17 output c ; 18 reg c ; 19 output [3:0] DOUT ; 20 wire [3:0] DOUT ; 21 reg [3:0] data_r; 22 23 /***************** 例化去抖模块 *************************************/ 24 wire clk_r ; 25 qu_dou qu_dou ( 26 .clk (sysclk) , 27 .rst (rst) , 28 .a (clk), 29 .b (clk_r)); 30 31 //********************************************************************* 32 33 34 assign DOUT = data_r; 35 always @ ( posedge clk_r or posedge clr or posedge load) 36 begin 37 if ( clr == 1) //同步清零 38 data_r <= 0; 39 else if ( load == 1) //同步预置 40 data_r <= DIN; 41 else begin if ( up_down ==1) 42 begin 43 if ( data_r == 4'b1111) begin //加计数 44 data_r <= 4'b0000; 45 c = 1; 46 end 47 else begin //减计数 48 data_r <= data_r +1; 49 c = 0 ; 50 end 51 end 52 else 53 begin 54 if ( data_r == 4'b0000) begin //加计数 55 data_r <= 4'b1111; 56 c = 1; 57 end 58 else begin //减计数 59 data_r <= data_r -1; 60 c = 0 ; 61 end 62 end 63 end 64 end 65 endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。