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

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

http://www.nowcoder.com/practice/e405fe8975e844c3ab843d72f168f9f4

米利状态机,三段式搞定。

第一个always时序初态和次态,第二个always组合逻辑描述状态转移,第三个always组合逻辑描述输出。输出可以不合并,编译器会帮你优化的。

`timescale 1ns/1ns

module seq_circuit(
   input    wire       C,
   input    wire       clk,
   input    wire       rst_n,
 
   output   reg        Y   
);
    
    localparam s1 = 4'b0001;
    localparam s2 = 4'b0010;
    localparam s3 = 4'b0100;
    localparam s4 = 4'b1000;
    reg[3:0] state;
    reg[3:0] next_state;
    
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)
            state <= s1;
        else
            state <= next_state;
    end

    always @(*)begin
        if(!rst_n)
            next_state <= s1;
        else begin
            case(state)
                s1:begin
                    if(C == 1'b0)
                        next_state = s1;
                    else
                        next_state = s2;        
                end
                s2:begin
                    if(C == 1'b0)
                        next_state = s4;
                    else
                        next_state = s2;       
                end
                s3:begin
                    if(C== 1'b1)
                        next_state = s3;
                    else
                        next_state = s1;        
                end                
                s4:begin
                    if(C == 1'b0)
                        next_state = s4;
                    else
                        next_state = s3;        
                end
                default:next_state = s1;
            endcase
        end
    end
    
    always @(*)begin
        if(!rst_n)
            Y = 1'b0;
        else begin
            case(state)
                s1:begin
                        Y = 1'b0;
                end
                s2:begin
                        Y = 1'b0;
                end
                s3:begin
                    if(C== 1'b0)
                        Y = 1'b0;
                    else
                        Y = 1'b1;
                end                
                s4:begin
                        Y = 1'b1;
                end
                default:Y = 1'b0;
            endcase
        end
    end
    
    
endmodule
全部评论
有个疑问,题目说用D触发器和必要的逻辑门实现,可以用状态积吗
点赞 回复 分享
发布于 2022-04-25 17:14

相关推荐

05-14 16:55
广州大学 Java
面试情况25届双非本科,有&nbsp;ACM&nbsp;竞赛经历,两段实习(小厂&nbsp;+&nbsp;独角兽)。以下为2024年11月到次年5月的春招及其补录面试情况,若对个人秋招经历感兴趣,可查看另一篇置顶文章。通过某区级供水国企汇丰科技:线上行为测评&nbsp;→&nbsp;Coding&nbsp;测试&nbsp;→&nbsp;线下技术&nbsp;&amp;&nbsp;HR&nbsp;面东方财富:一、二轮线上面,三轮线下技术面招银科技:一轮线上技术,二轮、三轮线下技术和HR元戎启行:三轮技术面&nbsp;+&nbsp;HR&nbsp;面,一共四面面试挂拼多多:客户端,三轮技术面挂,手撕没撕出来4399:一轮技术面挂微派:一轮技术面挂,手撕没撕出来以下是个人无意向故提前主动终止流程,以免影响其他候选人广州农商银行:线下笔试,一轮面试...
isjsns:同双非本,最后的总结那块挺赞同的,我们计院的就业数据也就那样,年包二十到四十万的人也有,但少之又少,周围有认识的地信和电子的也有二到四十万的,找的还不错的包括我基本都是春招才找到的,个人是感觉春招机会挺多的,也可能是像楼主一样年初又找了个实习加技术又沉淀了一波的原因,本来秋招结束都想摆了,最后还是熬出来了大家别放弃啊,双非本也有翻身的机会的
点赞 评论 收藏
分享
04-28 11:34
西北大学 运营
牛客4396号:不好意思,这个照片猛一看像丁真
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务