三个输入:
1、时钟信号clk
2、复位信号rst_n
3、控制信号C
一个输出
4、状态机输出Y
这道题考的其实是数电知识,只要将状态转换图化成状态表,我们就会发现这道题与上一道题的思路是完全一样的,都是编译一个状态机,编译方法我在上一道题的帖子中已经讲过,这里不再喝赘述,如果想学习,请移步以下连接:
这道题的状态表如下:
根据状态表编译的Verilog程序如下:
`timescale 1ns/1ns module seq_circuit( input C , input clk , input rst_n, output wire Y ); reg [1:0] q; reg Y_reg; always@(posedge clk or negedge rst_n) if(rst_n == 1'b0) q <= 2'b00; else if(C == 1'b0) case(q) 2'b00:begin q <= 2'b00; end 2'b01:begin q <= 2'b11; end 2'b10:begin q <= 2'b00; end 2'b11:begin q <= 2'b11; end default:begin q <= 2'b00; end endcase else if(C == 1'b1) case(q) 2'b00:begin q <= 2'b01; end 2'b01:begin q <= 2'b01; end 2'b10:begin q <= 2'b10; end 2'b11:begin q <= 2'b10; end default:begin q <= 2'b00; end endcase always@(*) if(rst_n == 1'b0) Y_reg = 1'b0; else if(q == 2'b10 && C == 1'b1) Y_reg = 1'b1; else if(q == 2'b11) Y_reg = 1'b1; else Y_reg = 1'b0; assign Y = Y_reg; endmodule