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
复制代码

你可能感兴趣的:(FPGA学习)