【连载】 FPGA Verilog HDL 系列实例--------顺序脉冲发生器

【连载】 FPGA Verilog HDL 系列实例  

Verilog HDL 之 顺序脉冲发生器

一、原理

  在数字电路中,能按一定时间、一定顺序轮流输出脉冲波形的电路称为顺序脉冲发生器。 在数字系统中,常用来控制某些设备按照事先规定的顺序进行运算或操作。
  顺序脉冲发生器也称脉冲分配器或节拍脉冲发生器,一般由计数器(包括移位寄存器型计数器)和译码器组成。作为时间基准的计数脉冲由计数器的输入端送入,译码器即将计数器状态译成输出端上的顺序脉冲,使输出端上的状态按一定时间、一定顺序轮流为1,或者轮流为0。顺序脉冲发生器分为计数器型顺序脉冲发生器和移位型顺序脉冲发生器。
  计数器型顺序脉冲发生器一般用按自然态序计数的二进制计数器和译码器构成。移位型顺序脉冲发生器由移位寄存器型计数器加译码电路构成。其中环形计数器的输出就是顺序脉冲,故可不加译码电路就可直接作为顺序脉冲发生器。

二、实现

在设计文件中输入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 pulsegen ( Q ,clr ,clk ,sysclk , rst);
4
5 input clr ;
6 wire clr ;
7 input clk ;
8 wire clk ;
9 input sysclk ;
10 wire sysclk ;
11 input rst ;
12 wire rst ;
13
14 output [7:0] Q ;
15 wire [7:0] Q ;
16 reg [7:0] temp ;
17 reg x;
18
19 /***************** 例化去抖模块 *************************************/
20 wire clk_r ;
21 qu_dou qu_dou (
22 .clk (sysclk) ,
23 .rst (rst) ,
24 .a (clk),
25 .b (clk_r));
26
27 //********************************************************************
28 assign Q =temp;
29 always @ ( posedge clk_r or posedge clr )
30 begin
31 if ( clr==1)
32 begin
33 temp <= 8'b00000001;
34 x= 0 ;
35 end
36 else
37 begin
38 x<= temp[7] ;
39 temp <= temp<<1 ;
40 temp[0] <=x;
41 end
42 end
43 endmodule

 

 

 

 

 

 

 

posted @ 2011-09-03 08:50  让linux飞一会儿  阅读(4235)  评论(0编辑  收藏  举报