本文主要是介绍根据状态转移图实现时序电路 (三段式状态机),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
看图编程
*
**
代码
module seq_circuit(input C ,input clk ,input rst_n,output wire Y
);
reg [1:0] current_stage ;
reg [1:0] next_stage ;
reg Y_reg; //输出//第一段 : 初始化当前状态和下一个状态
always @(posedge clk or negedge rst_n)beginif(!rst_n)begincurrent_stage <= 2'b00 ;next_stage <= 2'b00 ;end else begincurrent_stage <= next_stage ;end
end//第二段 : 翻译状态转换图
always @ (*)begincase(current_stage)2'b00:begin next_stage = (C==1 ? 2'b01 : 2'b00); end2'b01:begin next_stage = (C==1 ? 2'b01 : 2'b11); end2'b11:begin next_stage = (C==1 ? 2'b10 : 2'b11); end2'b10:begin next_stage = (C==1 ? 2'b10 : 2'b00); endendcase
end//第三段 : 控制输出
always @ (*)beginif(!rst_n)beginY_reg <= 1'b0;endelse begincasex({current_stage,C})3'b00_x : Y_reg <= 1'b0 ;3'b01_x : Y_reg <= 1'b0 ;3'b11_x : Y_reg <= 1'b1 ;3'b10_1 : Y_reg <= 1'b1 ;3'b10_0 : Y_reg <= 1'b0 ;endcaseendendassign Y = Y_reg ;
endmodule
这篇关于根据状态转移图实现时序电路 (三段式状态机)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!