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
相关文章:
HDLbits: Fsm serial
根据题意设计了四个状态,写出代码如下: module top_module(input clk,input in,input reset, // Synchronous resetoutput done ); parameter IDLE 3b000, START 3b001, DATA 3b010, STOP 3b100, bit_counter_end 4d7;reg [2:0] state,next_sta…...
LuaJit交叉编译移植到ARM Linux
简述 Lua与LuaJit的主要区别在于LuaJIT是基于JIT(Just-In-Time)技术开发的,可以实现动态编译和执行代码,从而提高了程序的运行效率。而Lua是基于解释器技术开发的,不能像LuaJIT那样进行代码的即时编译和执行。因此&…...
【RocketMQ系列一】初识RocketMQ
您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…...
【06】基础知识:React组件实例三大核心属性 - ref
一、 ref 了解 理解 组件内的标签可以定义 ref 属性来标识自己 使用 1、字符串形式的 ref 定义:<input ref"input"/> 获取:this.refs.input2、回调形式的 ref 定义:<input ref{currentNode > this.input curren…...
Bootstrap-媒体类型
加上媒体查询之后,只有在特定的设备之下才能起作用!!!...
spring Cloud笔记--服务治理Eureka
服务治理:Eureka 服务治理 主要用来实现各个微服务实例的自动化注册与发现 服务注册: 服务治理框架中,通常会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号,版本号&#x…...
pdf压缩文件怎么压缩最小?pdf压缩方法汇总
PDF是一种常见的文件格式,通常用于电子文档和印刷品,由于PDF文件通常包含大量的元数据、字体、图像和其他元素,因此它们的大小可能会非常大。 为了解决这个问题,我们可以使用一些PDF压缩工具来帮助我们,以便我们能够更…...
Golang学习记录:基础篇练习(一)
Golang学习记录:基础篇练习(一) 1、九九乘法表2、水仙花数3、斐波那契数列4、编写一个函数,求100以内的质数5、统计字符串里面的字母、数字、空格以及其他字符的个数6、二维数组对角线的和7、冒泡排序算法8、选择排序算法9、二分查…...
sql注入(7), python 实现盲注爆破数据库名, 表名, 列名
python 实现盲注 该python脚本根据之前介绍的盲注原理实现, 对于发送的注入请求没有做等待间隔, 可能给目标服务器造成一定 压力, 所以仅限于本地测试使用. import requests, time# 时间型盲注 def time_blind(base_url, cookie):for length in range(1, 20): # 测试数据库名…...
2021年12月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python编程(1~6级)全部真题・点这里 C/C编程(1~8级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行以下程序 a[33,55,22,77] a.sort() for i in a:print(i)运行…...
卡尔曼家族从零解剖-(01)预备知识点
讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/133846882 文末正下方中心提供了本人 联系…...
技术分享| 二进制部署MySQL
一、介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System&#x…...
3.1 模板测试与深度测试(Stencil Test Z Test)
一、模板测试(Stencil Test) 模板测试可以实现的一些效果图 1.是什么 ①从渲染管线出发:模板测试是在逐片源操作阶段,透明测试之后,深度测试之前的位置。 ②从书面概念上理解 说到模板测试,就要先说道模…...
一些常见的必须会的谭浩强基本代码大全也是常考的应试是没问题的
//1. 1£¡+2£¡+3£¡+...20! /* #include <stdio.h> int main() {int i;long sum=0,k=1;for(i=1;i<=20;i++){k*=i;sum+=k;}printf("%d",sum); } *///方法2 /* #include <stdio.h> int main() {int i,j;long sum=0,k;for(i…...
C语言天花板——指针(进阶1)
接上次的指针初阶(http://t.csdnimg.cn/oox5s),这次我们继续的探寻指针的奥秘,发车咯!!!🚗🚗🚗 一、字符指针 可以看到我们将指针p给打印出来,就是…...
二、深度测试(Z Test)
1.是什么 ①从渲染管线出发 ②书面上理解 所谓深度测试,就是针对当前对象在屏幕上(更准确的说是frame buffer)对应的像素点,讲对象自身的深度值与当前该像素点缓存的深度值进行比较,如果通过了,本对象再改…...
Vue_Bug VUE-ADMIN-TEMPLATE-MASTER electron build后无法登录
Bug描述: VUE-ADMIN-TEMPLATE-MASTER 项目在经过 electron 的 build 命令后,无法登录 问题原因: 大部分vue 前段项目 会使用 js-cookie 这个库 来操作浏览器的cookie 然而这个库 在electron下 会无法使用 (最坑的是还没报错&…...
睡衣内衣服装商城小程序的作用是什么
服装行业一直都是市场很重要的组成部分,每个人都需要,且根据品牌、样式作用等可以细分很多类目,其中睡衣内衣也有不小的市场规模,从业商家多、市场需求度高。 但同时睡衣内衣经营痛点也比较明显。 当今消费者习惯于线上消费&…...
idea怎么设置作者信息(详细)
目录 一:在Java类的开头自动注释作者名字和日期等信息 二:给Java的方法注释作者名字和日期等信息 1. 不可修改的模板:Postfix Completion 2. 可修改的模板:Live Templates tips:首先给大家推荐两款好用的免费软件&…...
产品经理如何有效跟进开发进度?
作为产品经理,很难跟进开发过程。随着软件开发的复杂性和不断变化的产品环境,产品经理必须保持在开发过程的顶端,并确保目标得到满足。产品经理如何跟进开发进度? 第一步是对开发过程本身有一个扎实的理解。产品经理必须熟悉开发过…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
