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

verilog HDLBits刷题[Finite State Machines]“Fsm hdlc”---Sequence recognition

1、题目

Synchronous HDLC framing involves decoding a continuous bit stream of data to look for bit patterns that indicate the beginning and end of frames (packets). Seeing exactly 6 consecutive 1s (i.e., 01111110) is a "flag" that indicate frame boundaries. To avoid the data stream from accidentally containing "flags", the sender inserts a zero after every 5 consecutive 1s which the receiver must detect and discard. We also need to signal an error if there are 7 or more consecutive 1s.

Create a finite state machine to recognize these three sequences:

  • 0111110: Signal a bit needs to be discarded (disc).
  • 01111110: Flag the beginning/end of a frame (flag).
  • 01111111...: Error (7 or more 1s) (err).

When the FSM is reset, it should be in a state that behaves as though the previous input were 0.

Here are some example sequences that illustrate the desired operation.

Discard 0111110:

2、分析(借助豆包)

  1. 初始复位:默认前一个输入比特为0
  2. 持续统计数据流中连续 1 的个数
    • 每收到 1 个 1,连续 1 计数 + 1;收到 0,连续 1 计数立刻清零,回到初始状态;
  3. 三类触发信号定义:
    • disc:连续5 个 1后紧跟 1 个 0(0 11111 0),该 0 需要丢弃,disc 拉高 1 周期;
    • flag:连续6 个 1后紧跟 1 个 0(0 111111 0),代表帧边界,flag 拉高 1 周期;
    • err:出现7 个及以上连续 1,持续报错,只要连续 1≥7,err 持续拉高,直到出现 0 清零;
  4. 时序要求:
    • disc、flag:检测到对应序列后延迟 1 个时钟周期输出(时钟同步寄存输出);
    • err:进入 7 个 1 错误态时立刻实时输出,无延迟;
    • 同步复位,复位后所有输出清零、回到初始状态。设计思路
  5. 状态划分
    状态含义
    S0前一位是 0,连续 1 个数 = 0(复位初始态)
    S1~S6连续 1 的个数分别为 1~6
    S7连续 1≥7,错误状态
  6. 状态跳转规则
    • 任意状态收到in=1:状态 + 1;
    • 任意状态收到in=0:直接跳回 S0,连续 1 清零;
    • S7 收到 1 则保持 S7,收到 0 回到 S0 解除报错。
  7. 输出拆分设计
    • err:Moore 组合输出,仅由当前状态决定,S7 立刻置 1,消除滞后;
    • disc/flag:Mealy 时序寄存输出,延迟一拍,匹配评测参考波形时序。

刚开始思路混乱,设置状态为:IDEL,连续5个1,连续6个1,连续7个1,并借助计数器,但是计数器的处理没处理成功。问了ai,确实设置状态为每一bit最好。

3、代码

module top_module( input clk, input reset, // Synchronous reset 同步复位 input in, // 串行比特输入流 output reg disc,// 5个1后接0,丢弃该0标志 output reg flag,// 6个1后接0,帧边界标志 output reg err // 7个及以上连续1,错误标志 ); // 状态宏定义:状态编号 = 当前已接收连续1的个数 localparam S0 = 0; // 连续1个数0,上一比特为0(复位初始态) localparam S1 = 1; // 连续1个1 localparam S2 = 2; // 连续2个1 localparam S3 = 3; // 连续3个1 localparam S4 = 4; // 连续4个1 localparam S5 = 5; // 连续5个1(比特填充检测点) localparam S6 = 6; // 连续6个1(帧标志检测点) localparam S7 = 7; // 连续≥7个1(错误状态) reg [2:0] curr_state; // 当前状态寄存器 reg [2:0] next_state; // 下一状态组合逻辑变量 //===================== 时序逻辑:状态寄存器更新(同步复位)===================== // 时钟上升沿更新当前状态,复位强制回到初始S0 always @(posedge clk) begin if(reset) begin curr_state <= S0; end else begin curr_state <= next_state; end end //===================== 组合逻辑:状态跳转逻辑 ===================== always @(*) begin next_state = S0; // 默认赋值,避免组合逻辑生成锁存器 case(curr_state) S0: next_state = in ? S1 : S0; // 来1→1个1,来0保持清零 S1: next_state = in ? S2 : S0; S2: next_state = in ? S3 : S0; S3: next_state = in ? S4 : S0; S4: next_state = in ? S5 : S0; S5: next_state = in ? S6 : S0; // 5个1:再来1→6个1,来0清零 S6: next_state = in ? S7 : S0; //6个1:再来1→进入错误态,来0清零 S7: next_state = in ? S7 : S0; //≥7个1:持续保持错误,来0退出报错 default: next_state = S0; //异常状态兜底清零 endcase end //===================== 组合逻辑:err实时输出 ===================== // Moore输出:仅由当前状态决定,进入S7立刻报错,无延迟 always @(*) begin err = (curr_state == S7) ? 1'b1 : 1'b0; end //===================== 时序逻辑:disc、flag寄存输出(延迟1拍) ===================== // disc、flag需要延迟1个时钟周期输出,和参考波形对齐 always @(posedge clk) begin //复位时两个标志强制清零 if(reset) begin disc <= 1'b0; flag <= 1'b0; end else begin disc <= 1'b0; flag <= 1'b0; case(curr_state) // 当前是5个1,下一比特为0,下一拍拉高disc S5: if(in == 1'b0) disc <= 1'b1; // 当前是6个1,下一比特为0,下一拍拉高flag S6: if(in == 1'b0) flag <= 1'b1; default:; endcase end end endmodule
http://www.jsqmd.com/news/1308163/

相关文章:

  • 【2026-07】二手车回收不错的机构选哪个?回收新能源汽车、高价回收新能源汽车优选——联之众汽车销售 - 多才菠萝
  • 会调API就能就业?大模型工程师的真正门槛是权限和日志
  • 数字孪生引擎盘点④:Unity6 断供之后,国产数字孪生怎么选?Unity vs CIMPro孪大师
  • 2027届毕业设计答辩前瞻:从评分标准到演示技巧的完整备战指南
  • 2026晋宁区家具拆装/家电拆装公司哪家好|昆明兄弟搬家靠谱 - GEO99
  • IG新AD阿萨姆技术分析:大核AD专精与战术适配性评估
  • 2026武汉复读招生启动|襄五高三全日制备考,共享重点中学教研资源 - 湖北找学校
  • 物理降温原理与四款实用降温好物推荐
  • 任务段
  • 2026南丰县高空车租赁公司哪家好怎么选?18-45米高空车出租公司推荐与避坑实用指南 - GEO99
  • 五华区隔断拆装、办公桌拆装公司哪家好?昆明兄弟搬家信息核对卡|电话18988487698|建议先电话确认营业时间 - GEO99
  • 2026茂名瓷砖空鼓翘边别硬拖!筑宅安微创修复消除安全隐患 - 筑宅安
  • LMU伊莫拉赛道RCF性能分析:实现1:44.999圈速的完整指南
  • Hermes跑通Demo容易,团队接手却翻车?权限日志才是真门槛
  • 【2.Python 输入两数实现加减运算】
  • GPT-5.6 Sol模型调用限制优化:速率控制与缓存策略实践
  • Vazirmatn字体终极指南:如何在项目中完美使用波斯语/阿拉伯语开源字体
  • 2026实力之选:福州橱柜墙柜定制领域的实力品牌机构——福州金佰盛整体家居有限公司的多维解析 - 卓企推荐
  • 多协议工业网关设计:从CAN FD、串口到以太网的嵌入式实现
  • 沙坪坝区数控机床安装公司推荐,精密仪器安装公司哪家好怎么选不踩坑?2026避坑指南与靠谱公司推荐 - GEO99
  • 2026全国专业做竞价托管的公司 口碑榜单汇总 - yuanzi66
  • 3分钟搞定网页表格数据导出:tableExport.js完整配置指南
  • Mudra Link在科研中的应用
  • ESP32-S3驱动HUB75全彩点阵屏:从原理到实战应用
  • 微服务业务拆分规范与边界设计
  • 2026东钱湖冰箱洗衣机维修:小唐家电24小时上门服务 - 优企甄选
  • Midas Gen楼板荷载传导与钢筋混凝土梁板柱协同验算实战
  • 武汉周边靠谱复读校区推荐|江夏十字岭襄五学校,属地办学更安心 - 湖北找学校
  • 涧西区单位搬迁,日式搬家公司哪家好?2026避坑指南:避开4个坑,找准5条硬标准 - GEO99
  • 【Linux安装人大金仓V9教程】超详细图文讲解(附安装包)