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