码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • HDLbits: Fsm serial


    根据题意设计了四个状态,写出代码如下:

    1. module top_module(
    2. input clk,
    3. input in,
    4. input reset, // Synchronous reset
    5. output done
    6. );
    7. parameter IDLE = 3'b000, START = 3'b001, DATA = 3'b010, STOP = 3'b100, bit_counter_end = 4'd7;
    8. reg [2:0] state,next_state;
    9. reg [3:0] bit_counter;
    10. always@(*)begin
    11. case(state)
    12. START: next_state = DATA;
    13. DATA: next_state = (bit_counter >= bit_counter_end)? (in?STOP:IDLE):DATA;
    14. STOP: next_state = in?IDLE:START;
    15. IDLE: next_state = in?IDLE:START;
    16. default: next_state = IDLE;
    17. endcase
    18. end
    19. always@(posedge clk)begin
    20. if(reset)
    21. state <= IDLE;
    22. else
    23. state <= next_state;
    24. end
    25. always@(posedge clk)begin
    26. if(reset)
    27. bit_counter <= 4'd0;
    28. else if(state == DATA)
    29. bit_counter <= bit_counter + 4'd1;
    30. else
    31. bit_counter <= 4'd0;
    32. end
    33. assign done = (state == STOP);
    34. endmodule

    时序图如下,有误:

    参考网上的答案,加入了一个ERROR状态表示例题时序图"?"的时候,下面代码没问题了

    注意bit_counter计数的那块如果用state==DATA判断,那么上面长度判断就得用7,如果用next_state==DATA判断,上面长度判断就得用8

    1. module top_module(
    2. input clk,
    3. input in,
    4. input reset, // Synchronous reset
    5. output done
    6. );
    7. parameter IDLE = 4'b0000, START = 4'b0001, DATA = 4'b0010, STOP = 4'b0100, ERROR = 4'b1000,
    8. bit_counter_end = 4'd7;
    9. reg [3:0] state,next_state;
    10. reg [3:0] bit_counter;
    11. always@(*)begin
    12. case(state)
    13. START: next_state = DATA;
    14. DATA: next_state = (bit_counter >= bit_counter_end)? (in?STOP:ERROR):DATA;
    15. STOP: next_state = in?IDLE:START;
    16. ERROR: next_state = in?IDLE:ERROR;
    17. IDLE: next_state = in?IDLE:START;
    18. default: next_state = IDLE;
    19. endcase
    20. end
    21. always@(posedge clk)begin
    22. if(reset)
    23. state <= IDLE;
    24. else
    25. state <= next_state;
    26. end
    27. always@(posedge clk)begin
    28. if(reset)
    29. bit_counter <= 0;
    30. else if(state == DATA)
    31. bit_counter <= bit_counter + 1;
    32. else
    33. bit_counter <= 0;
    34. end
    35. assign done = (state == STOP);
    36. endmodule

  • 相关阅读:
    MySQL 内部组件结构以及SQL执行逻辑
    在自己电脑上的idea运行java web项目 如何用外网访问
    Python 代码学习
    Java实体映射工具MapStruct使用详解
    ant.design 的 Pro Component 的 ProTable 清除表单内容的方法
    自己最好的canny实现(c#)
    PM和PMO到底有什么区别?如何提升组织效能?
    CCF中国开源大会专访 | 刘旭东:着眼“开源联合”,实现“聚力共赢”
    [第一章]1.4 条件概率及派生的三个公式
    电商API接口的定义|接口的几个应用场景
  • 原文地址:https://blog.csdn.net/weixin_41004238/article/details/133834006
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号