Verilog刷题HDLBits——Exams/review2015 fancytimer

news2025/1/12 6:42:41

Verilog刷题HDLBits——Exams/review2015 fancytimer

  • 题目描述
  • 代码
  • 结果

题目描述

This is the fifth component in a series of five exercises that builds a complex counter out of several smaller circuits. You may wish to do the four previous exercises first (counter, sequence recognizer FSM, FSM delay, and combined FSM).

We want to create a timer with one input that:

  1. is started when a particular input pattern (1101) is detected,
  2. shifts in 4 more bits to determine the duration to delay,
  3. waits for the counters to finish counting, and
  4. notifies the user and waits for the user to acknowledge the timer.

The serial data is available on the data input pin. When the pattern 1101 is received, the circuit must then shift in the next 4 bits, most-significant-bit first. These 4 bits determine the duration of the timer delay. I’ll refer to this as the delay[3:0].

After that, the state machine asserts its counting output to indicate it is counting. The state machine must count for exactly (delay[3:0] + 1) * 1000 clock cycles. e.g., delay=0 means count 1000 cycles, and delay=5 means count 6000 cycles. Also output the current remaining time. This should be equal to delay for 1000 cycles, then delay-1 for 1000 cycles, and so on until it is 0 for 1000 cycles. When the circuit isn’t counting, the count[3:0] output is don’t-care (whatever value is convenient for you to implement).

At that point, the circuit must assert done to notify the user the timer has timed out, and waits until input ack is 1 before being reset to look for the next occurrence of the start sequence (1101).

The circuit should reset into a state where it begins searching for the input sequence 1101.

Here is an example of the expected inputs and outputs. The ‘x’ states may be slightly confusing to read. They indicate that the FSM should not care about that particular input signal in that cycle. For example, once the 1101 and delay[3:0] have been read, the circuit no longer looks at the data input until it resumes searching after everything else is done. In this example, the circuit counts for 2000 clock cycles because the delay[3:0] value was 4’b0001. The last few cycles starts another count with delay[3:0] = 4’b1110, which will count for 15000 cycles.
在这里插入图片描述

代码

module top_module (
    input clk,
    input reset,      // Synchronous reset
    input data,
    output [3:0] count,
    output counting,
    output done,
    input ack );
    
    parameter S=0,S1=1,S11=2,S110=3,B0=4,B1=5,B2=6,B3=7,COUNT=8,WAIT=9;
    reg[3:0] state,next_state;
    
    always@(*)
        case(state)
            S:		next_state=data?S1:S;
            S1:		next_state=data?S11:S;
            S11:	next_state=data?S11:S110;
            S110:	next_state=data?B0:S;
            B0:		next_state=B1;
            B1:		next_state=B2;
            B2:		next_state=B3;
            B3:		next_state=COUNT;
            COUNT:	next_state=done_counting?WAIT:COUNT;
            WAIT:	next_state=ack?S:WAIT;
        endcase
    
    always@(posedge clk)
        if(reset)
            state<=S;
    	else
            state<=next_state;
    
    wire shift_ena,done_counting;
    reg[31:0] cnt;
    reg[3:0] delay;
    
    always@(posedge clk)
        if(reset)
            begin
                cnt<=0;
                delay<=0;
            end
        else if(shift_ena)
            delay<={delay[2:0],data};
        else if(counting)
            cnt<=cnt+1;
        else
            cnt<=0;
            
    assign shift_ena = (state==B0)||(state==B1)||(state==B2)||(state==B3);
    assign counting = (state==COUNT);
    assign done = (state==WAIT);
    assign count = delay-cnt/1000;
    assign done_counting = (cnt==(delay+1)*1000-1);

endmodule

结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/112462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gateway中的限流与熔断

目录 1. 限流的使用场景 2. gateway限流实现 2.1 前提&#xff1a; 2.2 导入依赖包 2.3 在项目配置文件中配置redis 2.4 开发限流需要的Bean 2.5 为服务配置限流参数 2.6 压力测试 3. 熔断 3.1 熔断的使用场景 3.2 熔断配置 1. 限流的使用场景 为什么限流 限流就是限…

【点云检测】OpenPCDet 教程系列 [1] 安装 与 ROS运行

前言 主要是介绍库的使用&#xff0c;做笔记区 首先搜索的时候有个问题 一直在我脑子里 hhh 就是MMlab其实还有一个叫mmdetection3d 的库&#xff0c;然后搜的时候发现 hhh 有网友和我一样的疑惑&#xff1a; OpenPCDet和mmdetection3d有什么区别 ? - 知乎 (zhihu.com) 这…

在无序数组中求第K小的数

在无序数组中求第 KKK 小的数 改写快排的方法 【思路】在该无序数组中 随机 选择一个数 vvv&#xff0c;拿 vvv 去做整个数组的荷兰国旗问题&#xff0c;即将数组分成三个区域 “小于vvv | 等于 vvv | 大于 vvv”&#xff0c;每个区域都不要求有序&#xff0c;不过等于 vvv 的…

学习记录-mybatis+vue+elementUi实现分页查询(后端部分)

这一部分的实现确实让我学到不少东西。不管是后端还是前端部分的实现。 首先需要明确的是&#xff0c;实现分页查询&#xff0c;我们需要从前端获取到几个参数&#xff1f;第一个是当前在第几页&#xff0c;第二个是每一页有多少个值。分别叫做&#xff1a;currentPage和pageSi…

Redis集群之AKF架构原理

当我们搭建集群之前&#xff0c;先要想明白需要解决哪些问题&#xff0c;搞清楚这个之前先回想一下单节点、单实例、单机有哪些问题&#xff1f; 单点故障&#xff1a;只有一台Redis的话&#xff0c;如果出现故障&#xff0c;那么整个服务都不可用缓存容量&#xff1a;单台Red…

【Django项目开发】用户注册模型类、序列化器类、视图类设计(三)

文章目录一、模型类设计1、Django认证系统提供了用户模型类User&#xff0c;为什么还要定义User模型类?2、AbstractUser3、自定义用户模型类的字段有4、User模型类编写好了就可以了吗?二、序列化器类设计1、注意2、单字段进行校验3、用户认证的时候为什么不用create,而用crea…

C++构造函数和析构函数

&#xff08;一&#xff09;构造函数 要点 定义&#xff1a;构造函数 &#xff0c;是一种特殊的方法。主要用来在创建对象时初始化对象&#xff0c; 即为对象成员变量赋初始值&#xff0c;总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 &#xff0…

网络协议知识串讲-第38讲-用双十一的故事串起碎片的网络协议(中)

上一节我们讲到,手机App经过了一个复杂的过程,终于拿到了电商网站的SLB的IP地址,是不是该下单了? 别忙,俗话说的好,买东西要货比三家。大部分客户在购物之前要看很多商品图片,比来比去,最后好不容易才下决心,点了下单按钮。下单按钮一按,就要开始建立连接。建立连接…

Spring Cache(边路缓存)

一、Spring Cache介绍 Spring Cache 是Spring - context-xxx.jar中提供的功能&#xff0c;可以结合EHCache&#xff0c;Redis等缓存工具使用。给用户提供非常方便的缓存处理&#xff0c;缓存基本判断等操作,可以直接使用注解实现。 ​ 在包含了Spring - context-xxx.jar的Spri…

07---vue前端实现增删改查

前端VUE通过请求后端实现增删改查&#xff0c;文末会有前端完整代码 1、实现查询功能 一、实现三个条件一起查询 后台需要实现这三个条件的模糊查询 UserController.java //分页查询GetMapping("/page")public IPage<User> findPage(RequestParam Integer p…

【Jenkins】学习笔记

学习笔记一、Jenkins1.1、Jenkins的作用二、下载安装2.1、安装环境2.2、安装GitLab2.3、安装Jenkins三、Jenkins Git Maven 部署配置3.1、安装maven插件3.2、新建项目3.3、自动发布到测试服务器四、publish over ssh 配置4.1、超时机制4.2、shell的日志输出4.3、运行前清理五…

网络地址转换NAT

目录 IP 地址空间即将面临耗尽的危险 NAT 缓解 IP 地址空间耗尽的问题 NAT 的基本方法 VPN 的要点 IP 地址空间即将面临耗尽的危险 互联网采用了无分类编址方式、动态分配IP地址等措施来减缓IP地址空间耗尽的速度 但由于互联网用户数目的激增&#xff0c;特别是大量小型办公…

Linux搭建DHCP服务

DHCP(Dynamic Host Confifuration Protocol,动态主机配置协议)它可以为客户自动分配IP地址、以及缺省网关、DNS服务器的IP地址等TCP/IP参数。 简单说,就是在DHCP服务器上有一个存放着IP地址、网关、DNS等参数。当客户端请求使用时,服务器则负责将相应的参数分配给客户端,…

win10环境下基于face_recognition搭建自己的人脸识别软件

在win10环境下安装face_recognition&#xff0c;了解face_recognition中api的使用&#xff0c;如人脸截取、人脸矫正、人脸特征提取、人脸关键点提取、人脸mask获取、人脸特征比对等功能。最后构建自己的人脸数据库&#xff0c;使用knn实现人脸识别软件。 1、安装face_recogni…

【圣诞特辑】码一个漂漂亮亮的圣诞树(Single Dog版)

目录 前言 一、C语言版圣诞树 1.代码实现 2.效果图 二、python版圣诞树 1.代码实现 2.效果图​ 三、html5版圣诞树 1.代码实现 2.效果图 总结 前言 圣诞节即将来临&#xff0c;圣诞树也是必不可少的装饰之一。圣诞树是一棵绿叶繁茂的树&#xff0c;上面挂满了彩色的灯…

Nginx学习笔记2【尚硅谷】

host文件修改时&#xff0c;可以更改用户组权限或者复制到某个有权限的位置修改完再复制替换之前的文件。 在server{}中&#xff0c;listenserver_name两个加一起是唯一的。 代理服务器就是一个网关。 配置Nginx反向代理&#xff1a; 注意&#xff1a;在写proxy_pass时&#xf…

java+selenium环境搭建

目录 1.写在前面的话: 2.下载谷歌驱动 3.添加Selenium依赖(我这里添加的是4.0.0版本的) 4.在操作过程中可能出现的问题&解决办法 目录 1.写在前面的话: 2.下载谷歌驱动 3.添加Selenium依赖(我这里添加的是4.0.0版本的) 1.写在前面的话: (1)java版本最低要求为8,Chro…

SpringBoot整合Activemq

目录 一、Pom.xml 二、Spring配置文件 三、队列 四、主题 一、Pom.xml <dependencies><!-- activemq核心依赖包 --><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId><version>…

终生学习——读书有什么坏处

一般爱读书者往往受到赞扬&#xff0c;但仍然需要谨记一些读书的原则 目录 一、读书的整体观点 二、为什么需要知道读书的坏处 三、何时会出现读书的坏处 四、读书有什么坏处 1、100%全部相信书中的观点&#xff0c;进而实践了错误观点 2、不实践 五、如何杜绝读书的害处…

程序员为了少加班想了这几招

&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3; &#x1f38d;大家好&#xff0c;我是慕枫 &#x1f38d;前阿里巴巴高级工程师&#xff0c;InfoQ签约作者、阿里云专家博主&#xff0c;一直致力于用大白话讲解技术知识 &#x…