博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【连载】 FPGA Verilog HDL 系列实例--------十进制加减法计数器
阅读量:5068 次
发布时间:2019-06-12

本文共 3946 字,大约阅读时间需要 13 分钟。

  

Verilog HDL 之 十进制加减法计数器

一、原理

  上面的一个实验我们介绍了二进制计数器, 这个实验我们介绍非二进制计数器。在非二进制计数器中我们最常用的就是十进制计数器。下面设计一个8421码十进制计数器为例

该计数器可以通过一个控制信号决定计数器时加计数还是减计数,另外,该寄存器还有一个清零输入,低电平有效。还有一个load装载数据的信号输入,用于预置数据;还有一个C的输出,用于计数器的级联。其功能表如表1.1所示。

二、实现

在设计文件中输入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 counter10 ( load ,clr ,c ,DOUT ,clk, up_down ,DIN ,seven_seg ,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 output [7:0] seven_seg; 21 wire [3:0] DOUT ; 22 reg    [3:0] data_r; 23 24 /***************** 例化去抖模块  *************************************/ 25 wire     clk_r ; 26 qu_dou qu_dou ( 27 .clk (sysclk) , 28 .rst (rst) , 29 .a (clk), 30 .b  (clk_r)); 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 if ( up_down ==1 & data_r == 9) 42             begin 43                 c = 1; 44                 data_r <= 4'b0000; 45             end 46         else if ( up_down ==0 & data_r == 0) 47             48             begin 49                 c = 1; 50                 data_r <= 9; 51             end 52         else 53             begin 54                 if (  up_down ==1)    begin     //加计数 55                     data_r <= data_r +1;  56                     c = 0 ;                 57                     end 58                 else   begin                //减计数 59                     data_r <= data_r -1 ;  60                     c = 0 ; 61                 end             62             end    63     end    64 /*****************************数码管*********************************/    65 assign seven_seg ={
1'b1,~Y_r}; 66 reg [6:0] Y_r; 67 68 69 always @(data_r ) 70 begin 71 Y_r = 7'b1111111; 72 case (data_r ) 73 4'b0000: Y_r = 7'b0111111; // 0 74 4'b0001: Y_r = 7'b0000110; // 1 75 4'b0010: Y_r = 7'b1011011; // 2 76 4'b0011: Y_r = 7'b1001111; // 3 77 4'b0100: Y_r = 7'b1100110; // 4 78 4'b0101: Y_r = 7'b1101101; // 5 79 4'b0110: Y_r = 7'b1111101; // 6 80 4'b0111: Y_r = 7'b0000111; // 7 81 4'b1000: Y_r = 7'b1111111; // 8 82 4'b1001: Y_r = 7'b1101111; // 9 83 4'b1010: Y_r = 7'b1110111; // A 84 4'b1011: Y_r = 7'b1111100; // b 85 4'b1100: Y_r = 7'b0111001; // c 86 4'b1101: Y_r = 7'b1011110; // d 87 4'b1110: Y_r = 7'b1111001; // E 88 4'b1111: Y_r = 7'b1110001; // F 89 default: Y_r = 7'b0000000; 90 endcase 91 end 92 endmodule

 

 

 

 

 

转载于:https://www.cnblogs.com/kongtiao/archive/2011/09/02/2151868.html

你可能感兴趣的文章
Git的使用--打tag
查看>>
F# 编程 借助 F# 构建 MVVM 应用程序
查看>>
ACFUN切换代码自用。。。
查看>>
网卡流量检测.py
查看>>
【转】Android的权限permission
查看>>
ajax
查看>>
poj1981 Circle and Points 单位圆覆盖问题
查看>>
POP的Stroke动画
查看>>
线程同步机制初识 【转载】
查看>>
Oracle 游标使用全解
查看>>
SQL语句在查询分析器中可以执行,代码中不能执行
查看>>
yii 1.x 添加 rules 验证url数组
查看>>
html+css 布局篇
查看>>
银行排队问题(详解队列)
查看>>
序列化和反序列化(1)---[Serializable]
查看>>
SQL优化
查看>>
用C语言操纵Mysql
查看>>
轻松学MVC4.0–6 MVC的执行流程
查看>>
4.9 Parser Generators
查看>>
redis集群如何清理前缀相同的key
查看>>