FPGA Verilog HDL 系列实例--------4位二进制加减法计数器

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
  • 6
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实验一 算术逻辑单元 1. 实验目的 (1) 掌握运算器的工作原理。 (2) 验证运算器的功能 2. 实验要求 (1)基本要求 设计一个4的算术逻辑单元,满足以下要求。 ①4算术逻辑单元能够进行下列运算:加法、减法、加1、减1、与、或、非和传递。用3操作码进行运算,控制方式如下表所示。 运算操作码     运   算 对标识Z和C的影响 000 result ←A+B 影响标志Z和C 001 result ←A+1 影响标志Z和C 010 result ←A-B 影响标志Z和C 011 result ←A-1 影响标志Z和C 100 result←A and B 影响标志Z 101 result←A or B 影响标志Z 110 result← not B 影响标志Z 111 result←B 不影响标志Z和C ②设立两个标志触发器Z和C。当复信号reset为低电平时,将这两个标志触发器清零。当运算结束后,在时钟clk的上升沿改变标志触发器Z和C的值。运算结果改变标志触发器C、Z的情况如下:加法、减法、加1、减1运算改变Z、C;与、或、非运算改变Z,C保持不变;传送操作保持Z、C不变。因此在运算结束时Z、C需要两个D触发器保持。 ③为了保存操作数A和B,设计两个4寄存器A和B。当寄存器选择信号sel=0时,如果允许写信号write=1,则在时钟clk的上升沿将数据输入dinput送入A寄存器;当sel=1时,如果允许写信号write=1,则在时钟clk的上升沿将数据输入dinput送入B。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值