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

HDLbits: Fsm serial

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

module top_module(input clk,input in,input reset,    // Synchronous resetoutput done
); parameter IDLE = 3'b000, START = 3'b001, DATA = 3'b010, STOP = 3'b100, bit_counter_end = 4'd7;reg [2:0] state,next_state;reg [3:0] bit_counter;always@(*)begincase(state)START: next_state = DATA;DATA: next_state = (bit_counter >= bit_counter_end)? (in?STOP:IDLE):DATA;STOP: next_state = in?IDLE:START;IDLE: next_state = in?IDLE:START;default: next_state = IDLE;endcaseendalways@(posedge clk)beginif(reset)state <= IDLE;elsestate <= next_state;endalways@(posedge clk)beginif(reset)bit_counter <= 4'd0;            else if(state == DATA)bit_counter <= bit_counter + 4'd1;  elsebit_counter <= 4'd0;endassign done = (state == STOP);    endmodule

时序图如下,有误:

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

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

module top_module(input clk,input in,input reset,    // Synchronous resetoutput done
); parameter IDLE = 4'b0000, START = 4'b0001, DATA = 4'b0010, STOP = 4'b0100, ERROR = 4'b1000, bit_counter_end = 4'd7;reg [3:0] state,next_state;reg [3:0] bit_counter;always@(*)begincase(state)START: next_state = DATA;DATA: next_state = (bit_counter >= bit_counter_end)? (in?STOP:ERROR):DATA;STOP: next_state = in?IDLE:START;ERROR: next_state = in?IDLE:ERROR;IDLE: next_state = in?IDLE:START;default: next_state = IDLE;endcaseendalways@(posedge clk)beginif(reset)state <= IDLE;elsestate <= next_state;endalways@(posedge clk)beginif(reset)bit_counter <= 0;            else if(state == DATA)          bit_counter <= bit_counter + 1;elsebit_counter <= 0;endassign done = (state == STOP);    endmodule

http://www.lryc.cn/news/193796.html

相关文章:

  • LuaJit交叉编译移植到ARM Linux
  • 【RocketMQ系列一】初识RocketMQ
  • 【06】基础知识:React组件实例三大核心属性 - ref
  • Bootstrap-媒体类型
  • spring Cloud笔记--服务治理Eureka
  • pdf压缩文件怎么压缩最小?pdf压缩方法汇总
  • Golang学习记录:基础篇练习(一)
  • sql注入(7), python 实现盲注爆破数据库名, 表名, 列名
  • 2021年12月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 卡尔曼家族从零解剖-(01)预备知识点
  • 技术分享| 二进制部署MySQL
  • 3.1 模板测试与深度测试(Stencil Test Z Test)
  • 一些常见的必须会的谭浩强基本代码大全也是常考的应试是没问题的
  • C语言天花板——指针(进阶1)
  • 二、深度测试(Z Test)
  • Vue_Bug VUE-ADMIN-TEMPLATE-MASTER electron build后无法登录
  • 睡衣内衣服装商城小程序的作用是什么
  • idea怎么设置作者信息(详细)
  • 产品经理如何有效跟进开发进度?
  • 【已解决】Qt无法追踪到mouse移动事件
  • Dubbo从0到1——万字完整学习笔记
  • Rust初接触
  • shell脚本学习笔记03(小滴课堂)
  • 软件工程和计算机科学与技术学习方向区别
  • React常用hooks总结
  • 【算法学习】-【滑动窗口】-【找到字符串中所有字母异位词】
  • 利用python学习如何处理需要登录的网站
  • vue适配各个屏幕
  • 在conda创建的虚拟环境中安装jupyter以及使用
  • 【Java 8的新特性】