一.简介 :线性序列机是用来产生无周期的信号的一种方法,与有限状态机产生这种信号相比更简单。
二.设计
- 目的:产生一路无周期信号。
- 输入输出接口:
信号名 I/O 位宽 功能 clk I 1 50MHz时钟 rst_n I 1 复位 out O 1 无周期序列信号
3.设计思想:用计数器对时钟周期个数计数,根据相应时钟下的单个周期时间和计数个数可确定某个时刻的时间,确定时间后在需要的时间点转换电平。
4.verilog代码:
//线性序列机
module line_state(
clk , rst_n ,
out
);
input clk;
input rst_n;
output reg out;
//------------------------------
reg [9:0] cnt;
wire add_cnt;
wire end_cnt;
always @( posedge clk or negedge rst_n ) begin
if( !rst_n )
cnt <= 10'd0;
else if( add_cnt ) begin
if( end_cnt )
cnt <= 10'd0;
else
cnt <= cnt + 1'b1;
end
end
assign add_cnt = 1'b1;
assign end_cnt = add_cnt && cnt == 1000-1;
//------------------------------
always @( posedge clk or negedge rst_n ) begin
if( !rst_n )
out <= 1'b0;
else begin
case( cnt )
0 : out <= 1'b0;
10 : out <= 1'b1;
25 : out <= 1'b0;
100: out <= 1'b1;
125: out <= 1'b0;
300: out <= 1'b1;
410: out <= 1'b0;
456: out <= 1'b1;
500: out <= 1'b0;
510: out <= 1'b1;
560: out <= 1'b0;
600: out <= 1'b1;
630: out <= 1'b0;
670: out <= 1'b1;
800: out <= 1'b0;
850: out <= 1'b1;
900: out <= 1'b0;
910: out <= 1'b1;
950: out <= 1'b0;
990: out <= 1'b1;
endcase
end
end
endmodule
5.ModelSim仿真: