三个输入:
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