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

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

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

`timescale 1ns/1ns

/*
    本题给出的状态转移图是典型的时序电路状态转移示例,
    当被转移状态有多位数据时,需要分别分析每一位的状态转移函数。

    根据时序电路的定义,电路的下一状态不仅与当前的输入信号有关,还与当前状态有关。
    因此要分析状态Q1,Q0当前状态和当前输入对下一状态的影响。

    图中Q1(n+1)在Q1当前状态和A都不变的情况下还发生了转变,因此其结果肯定还与Q0当前状态有关。
    经过卡诺图分析得知,(特别注意:~(A^B)=(~A~B+AB),这一步是化简状态函数的关键)
    Q1(n+1)=A^Q1(n)^Q0(n)。

    据状态转移表观察知,Q0(n+1)和 Q0(n)、A有关,再经过卡诺图化简得知,Q0(n+1)=~Q0(n)

    题目中给出的输入信号没有Q1和Qn,但根据题目可知,Q1和Qn保存了电路的状态,因此,Q1和Q0应当在编码时使用寄存器变量定义。

    对于电路数据Y,根据卡诺图化简,得到 Y = Q1 & Q0
*/

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

    output Y;

    reg[1:0]    q;

    // q[1]
    always@(posedge clk, negedge rst_n)
    begin
        if(~rst_n)
            q[1] <= 1'b0;
        else
            q[1] <= A ^ q[1] ^ q[0];
    end

    // q[0]
    always@(posedge clk, negedge rst_n)
    begin
        if(~rst_n)
            q[0] <= 1'b0;
        else
            q[0] <= ~q[0];
    end

    assign Y = q[1]&q[0];        

endmodule //seq_circuit

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-29 11:57
投递浪潮等公司10个岗位
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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