【IC设计】牛客网-序列检测习题总结
文章目录
- 状态机基础知识
- VL25 输入序列连续的序列检测
- VL26 含有无关项的序列检测
- VL27 不重叠序列检测
- VL28 输入序列不连续的序列检测
- 参考资料
状态机基础知识
VL25 输入序列连续的序列检测
`timescale 1ns/1ns
module sequence_detect(input clk,input rst_n,input a,output reg match);//这题就是普通的状态机,需要注意的是:// @当输入不能跳转到下一个状态时,可以复用前面的序列// @这题是的Moore状态机,输出只和当前状态有关//定义状态空间(状态参数、状态寄存器)parameter IDLE = 0 ;parameter S0 = 1 ;parameter S1 = 2 ;parameter S2 = 3 ;parameter S3 = 4 ;parameter S4 = 5 ; parameter S5 = 6 ;parameter S6 = 7 ;parameter S7 = 8 ;reg [3:0] curr_state,next_state;// 1.打一拍更新现态always@(posedge clk or negedge rst_n) beginif(~rst_n) begincurr_state <= IDLE;end else begincurr_state <= next_state;endend// 2.组合逻辑根据现态和输入生成次态always@(*) begincase(curr_state)IDLE : next_state = (a == 0) ? S0 : IDLE ;S0 : next_state = (a == 1) ? S1 : S0 ;S1 : next_state = (a == 1) ? S2 : S0 ;S2 : next_state = (a == 1) ? S3 : S0 ;S3 : next_state = (a == 0) ? S4 : S0 ;S4 : next_state = (a == 0) ? S5 : S1 ;S5 : next_state = (a == 0) ? S6 : S1 ;S6 : next_state = (a == 1) ? S7 : S1 ;S7 : next_state = (a == 0) ? IDLE:S2 ;default: next_state = IDLE;endcaseend// 3.Moore型FSM,根据当前状态生成输出always@(posedge clk or negedge rst_n) beginif(~rst_n) beginmatch <= 0;end else if(curr_state == S7) beginmatch <= 1;end else beginmatch <= 0;endend
endmodule
VL26 含有无关项的序列检测
两种方法:
法一、用寄存器维护一个存储序列的寄存器
法二、用状态机来做
这里我用寄存器来做。
`timescale 1ns/1ns
module sequence_detect(input clk,input rst_n,input a,output reg match);reg [8:0] curr_seq;// 1.维护存储序列的寄存器always@(posedge clk or negedge rst_n) beginif(~rst_n) begincurr_seq <= 9'bxxx_xxx_xxx;end else begincurr_seq <= {curr_seq[7:0],a};endend// 2.判断序列是否模式匹配always@(posedge clk or negedge rst_n) beginif(~rst_n) beginmatch <= 0;end else if(curr_seq[2:0] == 3'b110 && curr_seq[8:6] == 3'b011) beginmatch <= 1;end else beginmatch <= 0;endend
endmodule
VL27 不重叠序列检测
通过计数器进行分组序列检测,每组判断一次
注意点:
- 计数器计算到6时才进行判断
- 在分组中一旦错误,直接FAIL
- 注意需要处理FAIL的状态跳转
- 注意寄存器的初始值,要计数6个就1~6,初值为0
module sequence_detect(input clk,input rst_n,input data,output reg match,output reg not_match
);//分组序列检测//注意点://@计数器计算到6时才进行判断//@在分组中一旦错误,直接FAIL//@注意需要处理FAIL的状态跳转//@注意寄存器的初始值,要计数6个就1~6,初值为0// 定义状态空间和状态寄存器parameter IDLE = 0 ,S1 = 1 ,S2 = 2 ,S3 = 3 ,S4 = 4 ,S5 = 5 ,S6 = 6 ,FAIL = 7 ;reg [2:0] curr_state,next_state;reg [2:0] cnt;// 利用计数器进行分组always@(posedge clk or negedge rst_n ) beginif(~rst_n) begincnt <= 'b0;end else beginif(cnt == 3'd6) cnt <= 'b1;else cnt <= cnt + 1;endend// 1.次态更新现态always@(posedge clk or negedge rst_n) beginif(~rst_n) begincurr_state = IDLE;end else begincurr_state = next_state;endend// 2.组合逻辑生成次态always@(*) begincase(curr_state)IDLE : next_state = (data==0) ? S1 : FAIL ;S1 : next_state = (data==1) ? S2 : FAIL ;S2 : next_state = (data==1) ? S3 : FAIL ;S3 : next_state = (data==1) ? S4 : FAIL ;S4 : next_state = (data==0) ? S5 : FAIL ;S5 : next_state = (data==0) ? S6 : FAIL ;S6 : next_state = (data==0) ? S1 : FAIL ;FAIL : next_state = (cnt == 6 && data ==0) ? S1 : FAIL;default : next_state = IDLE ; endcaseend // 3.根据现态生成输出,波形match没有打拍直接组合逻辑输出always@(*) beginif(~rst_n) beginmatch <= 0;not_match <= 0;end else if(cnt == 6 ) beginif(curr_state == S6) beginmatch <= 1;not_match <= 0;end else beginmatch <= 0;not_match <= 1;endendelse beginmatch <= 0;not_match <= 0;endend
endmodule
VL28 输入序列不连续的序列检测
`timescale 1ns/1ns
module sequence_detect(input clk,input rst_n,input data,input data_valid,output reg match
);//输入数据不连续的序列检测,在状态跳转时需要考虑data_validparameter IDLE = 5'b00001;parameter S1 = 5'b00010;parameter S2 = 5'b00100;parameter S3 = 5'b01000;parameter S4 = 5'b10000;parameter STATE_WIDTH = 5;reg [STATE_WIDTH - 1 : 0] cs;reg [STATE_WIDTH - 1 : 0] ns;always@(posedge clk or negedge rst_n) beginif(!rst_n) begincs <= IDLE;endelse begincs <= ns;endendalways@(*) begincase(cs)IDLE : beginif( data_valid ) beginns = data == 0 ? S1 : IDLE ; end else beginns = cs;endendS1 : beginif( data_valid ) beginns = data == 1 ? S2 : S1;end else beginns = cs;endendS2 : beginif( data_valid ) beginns = data == 1 ? S3 : S1;end else beginns = cs;endendS3 : beginif( data_valid ) beginns = IDLE;end else beginns = cs;endendendcaseendalways@(posedge clk or negedge rst_n) beginif(!rst_n) beginmatch <= 0;endelse beginif(cs == S3 && data == 0 && data_valid == 1) beginmatch <= 1;endelse beginmatch <= 0;endendend
endmodule
参考资料
- 正点原子领航者配套PPT
- 牛客网Verilog刷题
相关文章:

【IC设计】牛客网-序列检测习题总结
文章目录 状态机基础知识VL25 输入序列连续的序列检测VL26 含有无关项的序列检测VL27 不重叠序列检测VL28 输入序列不连续的序列检测参考资料 状态机基础知识 VL25 输入序列连续的序列检测 timescale 1ns/1ns module sequence_detect(input clk,input rst_n,input a,output re…...

python爬虫登录到海康相机管理页面
简述 1.最近接到个任务是在管理页面更改相机的某个参数,下载官方的sdk貌似没有提供这个接口,所以只能自己写爬虫登录发请求了。 1.主要步骤 1.1 发送get请求获取到salt,sessionID,challenge等信息 http://admin:123456192.168.…...

9.Docker网络
文章目录 1、Docker网络简介2、常用基本命令3、网络模式对比举例3.1、bridge模式3.2、host模式3.3、none模式3.4、container模式3.5、自定义网络 1、Docker网络简介 作用: 容器间的互联和通信以及端口映射容器IP变动时候可以通过服务名直接进行网络通信而不受到影…...

Windows VS2022 C语言使用 sqlite3.dll 访问 SQLite数据库
今天接到一个学生C语言访问SQLite数据库的的需求: 第一步,SQLite Download Page下载 sqlite3.dll 库 下载解压,发现只有两个文件: 于是使用x64 Native Tools Command Prompt 终端 生成 sqlite3.lib 和 sqlite3.exp文件 LIB -def:sqlite3.def -out:sqlite3.lib -machin…...

java库和包的概念
在Java中,"库"和"包"是两个不同的概念,但它们之间存在着密切的关联。 库(Library) 定义:库是一组已经编写好的代码和资源,用于解决特定的问题或提供特定的功能。它可以包含一个或多个…...

mysql内存结构
一:逻辑存储结构:表空间->段->区->页->行、 表空间:一个mysql实例对应多个表空间,用于存储记录,索引等数据。 段:分为数据段,索引段,回滚段。innoDB是索引组织表&…...

Python | Leetcode Python题解之第111题二叉树的最小深度
题目: 题解: class Solution:def minDepth(self, root: TreeNode) -> int:if not root:return 0que collections.deque([(root, 1)])while que:node, depth que.popleft()if not node.left and not node.right:return depthif node.left:que.appen…...

c++二进制输出
输入一个数,输出n个数,数可以是0或1;输入:4输出:0010;提示:本题要用到rand(),srand(time(0));代码如下:#include<bits/stdc.h> #include<windows.h> using namespace s…...

5. C++网络编程-UDP协议的实现
UDP是无连接的。 UDP Server网络编程基本步骤 创建socket,指定使用UDP协议将socket与地址和端口绑定使用recv/send接收/发送数据 由于UDP是无连接的,直接侦听就行使用close关闭连接 这个UDP接收数据的时候用的API是recvfrom,发送数据是sendto 客户端 …...

Altium Designer 中键拖动,滚轮缩放,并修改缩放速度
我的版本是AD19,其他版本应该都一样。 滚轮缩放 首先,要用滚轮缩放,先要调整一下AD 设置,打开Preferences,在Mouse Wheel Configuration 里,把Zoom Main Window 后面Ctrl 上的对勾取消掉,再把…...

python从入门到精通04
一、编写英文月份词典 month_num int(input("请输入您想要查询的月份:")) month_list [January,February,March,April,May,June,July,August,September,October,November,December] print("您查询的月份单词是:", month_list[mon…...

tomcat三级指导
版本 ./catalina.sh linux version.bat win 1.确认是否使用了tomcat管理后台 我们先找到配置文件:tomcat主目录下/conf/server.xml 可以查看到连接端口,默认为8080 然后查看manager-gui管理页面配置文件,是否设置了用户登录 配置文件…...

不知道是该怎么引用多个函数片段?具体示例如代码
🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…...

P3128 [USACO15DEC] Max Flow P题解(树上差分,最近公共祖先,图论)
前言: 题目链接:P3128 [USACO15DEC] Max Flow P - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 讲解: 这一题含金量真算高的,包含了建树(用了图论的知识),求最近公共祖先(倍增法…...

在Linux上面部署ELK
注明:一下的软件需要自己准备 一、准备环境: 1.两台elasticsearch主机4G内存 2.两台elasticsearch配置主机名node1和node2(可以省略) #vim /etc/hostname #reboot 3. 两台elasticsearch配置hosts文件 #vim /etc/hosts 192.168.1.1 node1 192…...

Langchain-Chatchat的markdownHeaderTextSplitter使用
文章目录 背景排查步骤官方issue排查测试正常对话测试官方默认知识库Debug排查vscode配置launch.json命令行自动启动condadebug知识库搜索测试更换ChineseRecursiveTextSplitter分词器 结论 关于markdownHeaderTextSplitter的探索标准的markdown测试集Langchain区分head1和head…...

掩码生成蒸馏——知识蒸馏
摘要 https://arxiv.org/pdf/2205.01529 知识蒸馏已成功应用于各种任务。当前的蒸馏算法通常通过模仿教师的输出来提高学生的性能。本文表明,教师还可以通过指导学生的特征恢复来提高学生的表示能力。从这一观点出发,我们提出了掩码生成蒸馏(…...

【C#实战】Newtonsoft.Json基类子类解析
情景再现 假设你有如下类: public class Item {public int Id;public string Name; }public class Weapon: Item {public int CurrentAmmo; }public class Inventory {public List<Item> Items; } 其中你序列化的是Inventory类,Items列表里混杂着…...

表达式求值的相关语法知识(C语言)
目录 整型提升 整型提升的意义 整型提升规则 整型提升实例 算术转换 赋值转换 操作符的属性 C语言的语法并不能保证表达式的执行路径唯一!!! 问题表达式 整型提升 C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这…...

开发中遇到Electron自定义窗口的问题
开发中遇到Electron自定义窗口的问题 使用VUE3 Electron 开发一个音乐软件,自定义导航栏的放大、缩小和关闭。 其中使用ipcRenderer进行联系Electron,进行放大、缩小和关闭操作。 遇到问题 遇到__dirname is not defined in ES module scope //在V…...

c# sqlite使用
安装包 使用 const string strconn "Data Sourcedata.db"; using (SQLiteConnection conn new SQLiteConnection(strconn)) {conn.Open();var cmd conn.CreateCommand();cmd.CommandText "select 1";var obj cmd.ExecuteScalar();MessageBox.Show(ob…...

39、Flink 的窗口剔除器(Evictors)详解
Evictors Flink 的窗口模型允许在 WindowAssigner 和 Trigger 之外指定可选的 Evictor,通过 evictor(...) 方法传入 Evictor。 Evictor 可以在 trigger 触发后、调用窗口函数之前或之后从窗口中删除元素, Evictor 接口提供了两个方法实现此功能&#x…...

Flutter 中的 DefaultTabController 小部件:全面指南
Flutter 中的 DefaultTabController 小部件:全面指南 在Flutter中,DefaultTabController是一个用于管理Tab控制器的widget,它允许你控制Tab视图的初始索引和动态更新。这个组件在实现具有可滚动标签页的界面时非常有用,例如在设置…...

C++技能进阶指南——多态语法剖析
前言:多态是面向对象的三大特性之一。顾名思义, 多态就是多种状态。 那么是什么的多种状态呢? 这里的可能有很多。比如我们去买火车票, 有普通票, 学生票; 又比如我们去旅游, 有儿童票ÿ…...

Linux内存管理--系列文章肆
一、引子 上篇文章介绍了目标文件,也就是讲到编译过程中的汇编这个阶段。本篇要讲目标文件怎么变成一个可执行文件的,介绍编译过程中的链接。 链接主要分为两种,静态链接和动态链接。它们本质上的区别,是在程序的编译和运行过程中…...

kali下载zsteg和stegpy
1.kali下载zsteg 从 GitHub 上克隆zsteg到kali git clone https://github.com/zed-0xff/zsteg 切换目录 cd zsteg 用于安装名为 zsteg 的 Ruby Gem 包 gem install zsteg 2.kali下载stegpy 下载网站内的stegpy-master压缩包GitCode - 开发者的代码家园 并拉到kali中 切换到s…...

前端面试题日常练-day34 【面试题】
题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末。 1. jQuery中,以下哪个选项用于筛选出第一个匹配的元素? a) first() b) get(0) c) eq(0) d) find(":first") 2. 在jQuery中,以下哪个选项用于在元素上…...

网站笔记:huggingface model memory calculator
Model Memory Utility - a Hugging Face Space by hf-accelerate 这个工具可以计算在 Hugging Face Hub上托管的大型模型训练和执行推理时所需的vRAM内存量。模型所需的最低推荐vRAM内存量表示为“最大层”的大小,模型的训练大约是其大小的4倍(针对Adam…...

SpringBoot2.0.x旧版集成Swagger UI报错Unable to infer base url...解决办法
一、问题描述 1.1项目背景 SpringBoot2.0.9的旧版项目维护开发,集成Swagger-ui2.9.2无法访问的问题。不用想啊,这种老项目是各种过滤器拦截器的配置,访问不到,肯定是它们在作妖。懂得都懂啊,这里交给大家一个排错的办…...

软件项目详细设计说明书实际项目参考(word原件下载及全套软件资料包)
系统详细设计说明书案例(直接套用) 1.系统总体设计 2.性能设计 3.系统功能模块详细设计 4.数据库设计 5.接口设计 6.系统出错处理设计 7.系统处理规定 软件开发全文档下载(下面链接或者本文末个人名片直接获取):软件开发全套资料-…...