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