题目:以01_011_0111... 这样类似有规律的序列的生成为例。
一般生成序列有两种方法:状态机、计数器。
针对这个题目,我们使用计数器实现更清晰明了。
代码实现如下:
`timescale 1ns/1ns
module seq;
reg clk ,
rst_n ;
reg [7:0] num1 ;
reg [7:0] num2 ;
reg seq_out ;
//initial:
initial begin
clk <= 1'b0;
rst_n <= 1'b0;
#40;
rst_n <= 1'b1;
#500;
$stop();
end
//clk:
always #5 clk = ~clk;
//num1:
always@(posedge clk or negedge rst_n)
if(!rst_n)
num1 <= 8'd1;
else if(num2 == num1)
num1 <= num1 + 1'b1;
else
num1 <= num1;
//num2:
always@(posedge clk or negedge rst_n)
if(!rst_n)
num2 <= 8'd0;
else if(num2 < num1)
num2 <= num2 + 1'b1;
else
num2 <= 8'd0;
//seq_out:
always@(posedge clk or negedge rst_n)
if(!rst_n)
seq_out <= 1'b0;
else if(num2 == 0)
seq_out <= 1'b0;
else
seq_out <= 1'b1;
endmodule