HDLBits刷题记录——FSM之Serial receiver with parity checking

导言

状态机这部分我一直理解得不太清楚,这一章节得习题花了比较长的时间。带校验码的串行接收器这题本身也不是非常难,解题关键在于读懂题目。HDLBits的题目往往由简到难,这道题之前有只要求描述状态转移以及FSM加Datapath两题。

  • 串行接收器的传输协议是1bit开始标志位+8bit数据+1bit结束标志位。开始接收标志是in=0,满足条件后连续传输1byte即8bit的数据(LSB到MSB),结束接收标志是in=1。
  • 传输线空闲IDLE时,输入in为置高状态。如果检测不到结束标志,则持续检测直到in=1出现,此时没有done信号的输出并丢弃此周期传输的数据。
  • 需要注意的是:观察波形可以看出,输出信号done是在接收结束后的下一个周期有效。输出的数据是在done有效的时候进行输出。
  • 采取奇校验的方式验证数据传输正确与否,因而多了1bit的校验位。done输出的条件变成:数据接收结束并且校验通过。

思路

  • FSM转换是关键,包括空闲状态、数据传输状态、校验状态、结束状态、等待状态。
    • IDLE:空闲状态,等待传输开始标志。一旦检测到0,则进入下一状态。
    • START:表示数据接收开始,可立即进入数据传输状态。
    • S0~S7:S0到S7都是数据传输状态,原则是这一位传完即对下一位传输。在最后一位数据传输完成以后,进入PARITY状态。
    • PARITY:校验传输状态,一方面根据此刻parity模块的输出信号odd来判断校验结果,另一方面根据此状态下in的值判断是否进入STOP状态。
    • STOP:进入结束状态则表明传输完成,检测下一轮接收开始信号。若按照预期的情况出现,则可以进入IDLE状态准备下一轮接收;否则进入WAIT。
    • WAIT:结束标志位没有按照预期的情况出现,说明接收不成功。停留在此状态,直到结束标志位出现,一旦出现即可进入IDLE状态准备下一轮接收。
  • done信号出现的时刻是STOP状态的下一时刻(见波形图)。红圈是parity校验位采集沿,绿圈是结束标志位采集沿,起作用的odd值正是两个圈中间的时间段。
    在这里插入图片描述

代码

module top_module(
    input clk,
    input in,
    input reset,    // Synchronous reset
    output [7:0] out_byte,
    output done
); 
    // Modify FSM and datapath from Fsm_serialdata
    parameter IDLE=4'd0,START=4'd1,S0=4'd2,S1=4'd3,S2=4'd4,S3=4'd5,S4=4'd6;
    parameter S5=4'd7,S6=4'd8,S7=
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值