FPGA Verilog HDL 系列实例--------十进制加减法计数器
来源:互联网 发布:维普软件 编辑:程序博客网 时间:2024/04/29 00:30
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 ) begin22 if ( cnt >= 32'd3000000 ) 23 b <= 1 ;24 else 25 cnt <= cnt + 1'b1 ;26 27 end28 else begin b <= 1'b0 ;29 cnt <= 0 ;30 end31 end32 end33 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 end46 else if ( up_down ==0 & data_r == 0) 47 48 begin 49 c = 1;50 data_r <= 9;51 end52 else53 begin 54 if ( up_down ==1) begin //加计数55 data_r <= data_r +1; 56 c = 0 ; 57 end58 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 begin71 Y_r = 7'b1111111;72 case (data_r )73 4'b0000: Y_r = 7'b0111111; // 074 4'b0001: Y_r = 7'b0000110; // 175 4'b0010: Y_r = 7'b1011011; // 276 4'b0011: Y_r = 7'b1001111; // 377 4'b0100: Y_r = 7'b1100110; // 478 4'b0101: Y_r = 7'b1101101; // 579 4'b0110: Y_r = 7'b1111101; // 680 4'b0111: Y_r = 7'b0000111; // 781 4'b1000: Y_r = 7'b1111111; // 882 4'b1001: Y_r = 7'b1101111; // 983 4'b1010: Y_r = 7'b1110111; // A84 4'b1011: Y_r = 7'b1111100; // b85 4'b1100: Y_r = 7'b0111001; // c86 4'b1101: Y_r = 7'b1011110; // d87 4'b1110: Y_r = 7'b1111001; // E88 4'b1111: Y_r = 7'b1110001; // F89 default: Y_r = 7'b0000000;90 endcase91 end 92 endmodule
- FPGA Verilog HDL 系列实例--------十进制加减法计数器
- FPGA Verilog HDL 系列实例--------4位二进制加减法计数器
- FPGA Verilog HDL 系列实例
- FPGA Verilog HDL 系列实例--------D 触发器
- FPGA Verilog HDL 系列实例--------寄存器
- FPGA Verilog HDL 系列实例--------双向移位寄存器
- FPGA Verilog HDL 系列实例--------数据选择器
- FPGA Verilog HDL 系列实例--------序列信号发生器
- FPGA Verilog HDL 系列实例--------3-8译码器
- FPGA Verilog HDL 系列实例--------8-3优先编码器
- FPGA Verilog HDL 系列实例--------半加器与全加器
- FPGA Verilog HDL 系列实例--------多位数值比较器
- FPGA Verilog HDL 系列实例--------8-3优先编码器
- FPGA Verilog HDL 系列实例--------顺序脉冲发生器
- FPGA Verilog HDL 系列实例--------直流电机PWM控制
- FPGA Verilog HDL 系列实例--------卡式电话计费器
- FPGA Verilog HDL 系列实例--------步进电机驱动控制
- FPGA Verilog HDL 系列实例--------二进制与格雷码的转换
- FPGA Verilog HDL 系列实例--------4位二进制加减法计数器
- JavaSE基础复习六:多线程
- 这个“单”到底应该谁来买?
- 学习OpenCV——HOG
- UIPopoverController优化
- FPGA Verilog HDL 系列实例--------十进制加减法计数器
- 为什么要用面向对象码代码= =、
- Top 10 Programming Fonts
- Android 针对WebView开发
- Win7、VS2008、OpenCV2.3.1出现“丢失tbb_debug.dll”错误
- FPGA Verilog HDL 系列实例--------多位数值比较器
- 关系:一对一、一对多,多对多。
- Ext 异步提交文件
- 成绩处理