【连载】|【连载】 FPGA Verilog HDL 系列实例--------4位二进制加减法计数器

【连载】 FPGA Verilog HDL 系列实例
Verilog HDL 之 4位二进制加减法计数器
一、原理
计数器是数字系统中用的较多的基本逻辑器件。它不仅能记录输入时钟脉冲的个数,还可以实现分频、定时等功能。
计数器的种类很多。按脉冲方式可以分为同步计数器和异步计数器;按进制可以分为二进制计数器和非二进制计数器;按计数过程数字的增减,可分为加计数器、减计数器和可逆计数器。
本实验就是设计一个4位二进制加减法计数器,该计数器可以通过一个控制信号决定计数器时加计数还是减计数,另外,该寄存器还有一个清零输入,低电平有效。还有一个load装载数据的信号输入,用于预置数据;还有一个C的输出,用于计数器的级联。其功能表如表1.1所示;
【连载】|【连载】 FPGA Verilog HDL 系列实例--------4位二进制加减法计数器
文章图片

表1.14位二进制加减法计数器功能表
二、实现
在设计文件中输入Verilog代码

1 /****************************** 分频模块*************************************/
2
3 `timescale 1 ns / 1 ps
4 module qu_dou ( clk ,rst , a ,b);
5
6 inputclk ;
7 wireclk ;
8 inputrst ;
9 inputa ;
10 wirea ;
11
12 outputb ;
13 regb ;
14
15 reg[31:0]cnt ;
16 regclkout ;
17 always @ ( posedge clk or negedge rst )
18begin
19if ( rst == 1'b0 )
20cnt <= 0 ;
21elsebeginif ( a==1'b1 ) begin
22if ( cnt >= 32'd3000000 )
23b <= 1 ;
24else
25cnt <= cnt + 1'b1 ;
26
27end
28else begin b <= 1'b0 ;
29cnt <= 0 ;
30end
31end
32end
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 wireclk_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)
36begin
37if ( clr == 1)//同步清零
38data_r <= 0;
39else if ( load == 1) //同步预置
40data_r <= DIN;
41else begin if ( up_down ==1)
42begin
43if ( data_r == 4'b1111)begin//加计数
44data_r <= 4'b0000;
45c = 1;
46end
47elsebegin//减计数
48data_r <= data_r +1;
49c = 0 ;
50end
51end
52else
53begin
54if ( data_r == 4'b0000)begin//加计数
55data_r <= 4'b1111;
56c = 1;
57end
58elsebegin//减计数
59data_r <= data_r -1;
60c = 0 ;
61end
62end
63end
64end
65 endmodule









【【连载】|【连载】 FPGA Verilog HDL 系列实例--------4位二进制加减法计数器】转载于:https://www.cnblogs.com/kongtiao/archive/2011/09/01/2151856.html

    推荐阅读