看图编程
*
**
代码
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