当前位置: 首页 > news >正文

【FSM-3: 串行序列】

FSM-3:串行序列

  • 1 Serial receiver

FSM使用总结:

  • 所有涉及输出的driver原则上用cur_sta;若是使用nxt_sta的相当于是提前一拍知道结果,所以对于输出必须要使用clocked reg,这样才能和cur_sta对应起来;
  • 描述声明状态按照cur_sta的为准,这样输出才能按照cur_sta的为准;

1 Serial receiver






module top_module(
    input clk,
    input in,
    input reset,    // Synchronous reset
    output done
); 

    parameter S0 = 5'b0_0000;	//Start
    parameter S1 = 5'b0_0001;	//Data
    parameter S2 = 5'b0_0010;	//Stop
    parameter S3 = 5'b0_0100;	//OK
    parameter S4 = 5'b0_1000;	//Error
    parameter S5 = 5'b1_0000;	//wait_finish
    
    reg[5 -1:0] cur_sta;
    reg[5 -1:0] nxt_sta;
    
    //==State transition
    always @(*) begin
          case(cur_sta)
                S0: nxt_sta = (in==1'b0) ? S1: S0;
                S1: nxt_sta = (cnt==7) ? S2 : S1;
                S2: nxt_sta = (in==1'b1) ? S3 : S4;
                S3: nxt_sta = (in==1'b1) ? S0 : S1;
                S4: nxt_sta = (in==1'b1) ? S0 : S5;
                S5: nxt_sta = (in==1'b1) ? S0 : S5;
        		default : nxt_sta = S0;
        endcase
    end
    
    //==State Flop-Flop
    always @(posedge clk) begin
        if(reset) begin
            cur_sta <= S0;
        end else begin
           cur_sta <= nxt_sta; 
        end
    end
    
    //==State Output
    reg[8 -1:0] cnt;
    
    always @(posedge clk) begin
        if(reset) begin
            cnt <= 0;
        end else begin
            case(cur_sta) 
                S0: cnt <= 0;
                S1: cnt <= cnt + 1;
                S2: cnt <= 0;
                default: cnt <= 0;
            endcase
        end
    end
    
    assign done = (cur_sta==S3); 
        
endmodule

题目:




module top_module(
    input clk,
    input in,
    input reset,    // Synchronous reset
    output [7:0] out_byte,
    output done
); //

    // Use FSM from Fsm_serial
    parameter S0 = 5'b0_0000;	//Start
    parameter S1 = 5'b0_0001;	//Data
    parameter S2 = 5'b0_0010;	//Stop
    parameter S3 = 5'b0_0100;	//OK
    parameter S4 = 5'b0_1000;	//Error
    parameter S5 = 5'b1_0000;	//wait_finish
    
    reg[5 -1:0] cur_sta;
    reg[5 -1:0] nxt_sta;
    
    //==State transition
    always @(*) begin
          case(cur_sta)
                S0: nxt_sta = (in==1'b0) ? S1: S0;
                S1: nxt_sta = (cnt==7) ? S2 : S1;
                S2: nxt_sta = (in==1'b1) ? S3 : S4;
                S3: nxt_sta = (in==1'b1) ? S0 : S1;
                S4: nxt_sta = (in==1'b1) ? S0 : S5;
                S5: nxt_sta = (in==1'b1) ? S0 : S5;
        		default : nxt_sta = S0;
        endcase
    end
    
    //==State Flop-Flop
    always @(posedge clk) begin
        if(reset) begin
            cur_sta <= S0;
        end else begin
           cur_sta <= nxt_sta; 
        end
    end
    
    //==State Output
    reg[8 -1:0] cnt;
    
    always @(posedge clk) begin
        if(reset) begin
            cnt <= 0;
        end else begin
            case(cur_sta) 
                S0: cnt <= 0;
                S1: cnt <= cnt + 1;
                S2: cnt <= 0;
                default: cnt <= 0;
            endcase
        end
    end
    
    assign done = (cur_sta==S3); 
    // New: Datapath to latch input bits.
    reg[8 -1:0] data;
    
    always @(posedge clk) begin
        if(reset) begin
            data <= 0;
        end else begin
            case(cur_sta)
                S1: data[cnt] <= in;
                S2: data <= data;
                default: data <= data;
            endcase
        end
    end
    
    assign out_byte = (done==1) ? data : 0;

endmodule

相关文章:

  • 40岁开始学Java:Java中ASCII和Unicode的区别
  • Jenkins 删除历史构建记录
  • FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)
  • ‘QDesktopWidget::availableGeometry‘: Use QGuiApplication::screens()
  • 突破光学成像局限:全视野光学血管造影技术新进展
  • 【SDR课堂第12讲】AD9361毛刺问题总结
  • LeetCode 解题思路 9(Hot 100)
  • [python] del
  • 20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡为ext4格式
  • 【Linux】冯诺依曼体系结构-操作系统
  • Stable Diffusion模型采样方法与参数配置详解(含步数及画风适配表)
  • 弧度与角度之间的转换公式
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.3.1 避免频繁更新(Update by Query的代价)
  • 计算机毕业设计SpringBoot+Vue.js社区养老服务平台(源码+文档+PPT+讲解)
  • 命名管道(用命名管道模拟server和client之间的通信)
  • 关于elementui的时间组件与后端时间和oracle数据库时间的对应格式
  • 计算机毕业设计Python小说推荐系统 K-means聚类推荐算法 深度学习 Kears 小说数据分析 可视化 Scrapy爬虫 协同过滤
  • 物业管理系统源码 物业小程序源码
  • 如何将JAR交由Systemctl管理?
  • 扩展用户空间
  • 品牌设计公司网站/汕头seo快速排名
  • 网站建设手机版模板/自己做的网站怎么推广
  • 济南网站建设选聚搜网络一x/重庆关键词自动排名
  • 建设一个网站要钱吗/天津seo推广服务
  • 怎样做淘宝联盟网站/深圳关键词优化怎么样
  • 百度提交网站收录/百度知道问答首页