题解 | #根据状态转移表实现时序电路#

根据状态转移表实现时序电路

https://www.nowcoder.com/practice/455c911bee0741bf8544a75d958425f7

`timescale 1ns/1ns

module seq_circuit(
      input                A   ,
      input                clk ,
      input                rst_n,
 
      output   wire        Y   
);


reg Y1;
reg Q1, Q2;
reg Q1n,Q2n;
always@(posedge clk or negedge rst_n)begin 
if (!rst_n) begin
        Y1 <= 0;
        Q1 <= 0;
        Q2 <= 0;
        Q1n<=0;
        Q2n<=0;
end else begin
Q1<=Q1n;
Q2<=Q2n;
end


end

always @(*) begin
    
        case ({Q1, Q2})
            2'b00: begin 
                if (A == 0) begin
                    Q1n = 1'b0;
                    Q2n = 1'b1;
                    Y1 = 1'b0;
                end else if (A == 1) begin
                    Q1n = 1'b1;
                    Q2n = 1'b1;
                    Y1 = 1'b0;
                end
            end
            2'b01: begin 
                if (A == 0) begin
                    Q1n = 1'b1;
                    Q2n = 1'b0;
                    Y1 = 1'b0;
                end else if (A == 1) begin
                    Q1n = 1'b0;
                    Q2n = 1'b0;
                    Y1 = 1'b0;
                end
            end
            2'b10: begin 
                if (A == 0) begin
                    Q1n = 1'b1;
                    Q2n = 1'b1;
                    Y1 = 1'b0;
                end else if (A == 1) begin
                    Q1n = 1'b0;
                    Q2n = 1'b1;
                    Y1 = 1'b0;
                end
            end
            2'b11: begin 
                if (A == 0) begin
                    Q1n = 1'b0;
                    Q2n = 1'b0;
                    Y1 = 1'b1;
                end else if (A == 1) begin
                    Q1n = 1'b1;
                    Q2n = 1'b0;
                    Y1 = 1'b1;
                end
            end
            default: begin
                Q1n = 1'b0;
                Q2n = 1'b0;
                Y1 = 1'b0;
            end
        endcase
    end


// 用 assign 语句,将 Y1 的值赋给 Y
assign Y = Y1;
endmodule

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务