【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…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...