Verilog HDL 之 序列信号发生器
一、原理
在数字电路中, 序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号.能产生这种信号的逻辑器件就称为序列信号发生器.根据结构不同,它可分为反馈移位型和计数型两种。
移位型序列信号发生器是由移位寄存器和组合电路两部分构成,组合电路的输出,作为移位寄存器的串行输入。
计数型序列信号发生器能产生多组序列信号,这是移位型发生器所没有的功能.计数型序列信号发生器是由计数器和组合电路构成的。
本实验的目的就是设计一个序列信号发生器。设计产生序列11100100、11100100、···的计数型序列信号发生器电路。
二、实现
在设计文件中输入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 xlgen ( Q ,clk ,res ,rst ,sysclk ); 4 5 input clk ; 6 wire clk ; 7 input res ; 8 wire res ; 9 input sysclk ; 10 input rst ; 11 12 output Q ; 13 reg Q ; 14 reg [7:0] Q_r ; 15 16 /***************** 例化去抖模块 *************************************/ 17 wire clk_r ; 18 qu_dou qu_dou ( 19 .clk (sysclk) , 20 .rst (rst) , 21 .a (clk), 22 .b (clk_r)); 23 24 //******************************************************************** 25 26 always @( posedge clk_r or posedge res) 27 begin 28 29 if (res ==1) begin 30 Q <= 1'b0; 31 Q_r <= 8'b11100100 ; 32 end 33 else 34 begin 35 Q <= Q_r[7]; 36 Q_r <= Q_r<<1; 37 Q_r[0] <=Q; 38 end 39 end 40 41 endmodule