0

0

【Verilog刷题篇】硬件工程师进阶1|序列检测

看不見的法師

看不見的法師

发布时间:2025-04-26 13:30:35

|

377人浏览过

|

来源于php中文网

原创

前言硬件工程师近年来也开始慢慢吃香,校招进大厂年薪总包不下30-40w的人数一大把!而且大厂人数并没有饱和! - 本期是【verilog刷题篇】硬件工程师进阶1|序列检测,有不懂的地方可以评论进行讨论!推荐给大家一款刷题、面试的神器,我也是用这一款神器进行学习verilog硬件代码的!~链接如下:刷题面试神器跳转链接也欢迎大家去牛客查看硬件工程师招聘职位的各类资料,并进行提前批投递面试!小白新手可以通过该神器进行日常的刷题、看大厂面经、学习计算机基础知识、与大牛面对面沟通~ 刷题的图片已经放在下面了~q1:输入序列连续的序列检测

问题描述:请编写一个序列检测模块,检测输入信号a是否满足01110001序列,当信号满足该序列,给出指示信号match。

模块的接口信号图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

模块的时序图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

输入描述: clk:系统时钟信号 rst_n:异步复位信号,低电平有效 a:单比特信号,待检测的数据

Anyword
Anyword

AI文案写作助手和文本生成器,具有可预测结果的文案 AI

下载

输出描述: match:当输入信号a满足目标序列,该信号为1,其余时刻该信号为0

案例代码:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">`timescale 1ns/1nsmodule sequence_detect(input clk,input rst_n,input a,output reg match);    parameter zero = 4'd0;       parameter one = 4'd1;       parameter two = 4'd2;       parameter three = 4'd3;       parameter four = 4'd4;       parameter five = 4'd5;       parameter six = 4'd6;       parameter seven = 4'd7;     parameter    eight=4'd8;       reg [3:0] cu_st;    always@(posedge clk or negedge rst_n)        begin            if(!rst_n)begin                cu_st<=zero;                match<=1'b0;end            else begin                case(cu_st)                    zero:if(a==1'b0)begin                                cu_st<=one;                                match<=1'b0;end                                            else begin                                 cu_st<=zero;                                 match<=1'b0; end                    one:if(a==1'b1)begin                                cu_st<=two;                                match<=1'b0;end                                            else begin                                 cu_st<=one;                                 match<=1'b0; end                    two:if(a==1'b1)begin                                cu_st<=three;                                match<=1'b0;end                                            else begin                                 cu_st<=one;                                 match<=1'b0; end                    three:if(a==1'b1)begin                                cu_st<=four;                                match<=1'b0;end                                            else begin                                 cu_st<=one;                                 match<=1'b0; end                    four:if(a==1'b0)begin                                cu_st<=five;                                match<=1'b0;end                                            else begin                                 cu_st<=zero;                                 match<=1'b0; end                    five:if(a==1'b0)begin                                cu_st<=six;                                match<=1'b0;end                                            else begin                                 cu_st<=two;                                 match<=1'b0; end                    six:if(a==1'b0)begin                                cu_st<=seven;                                match<=1'b0;end                                            else begin                                 cu_st<=two;                                 match<=1'b0; end                    seven:if(a==1'b1)begin                                cu_st<=eight;                                match<=1'b0;end                                            else begin                                 cu_st<=one;                                 match<=1'b0; end                    eight:if(a==1'b1)begin                                cu_st<=three;                                match<=1'b1;end                                            else begin                                 cu_st<=one;                                 match<=1'b1; end                    default:begin cu_st<=zero;                        match<=1'b0;end                endcase                                            end        end endmodule</code>
Q2: 含有无关项的序列检测

问题描述:请编写一个序列检测模块,检测输入信号a是否满足011XXX110序列(长度为9位数据,前三位是011,后三位是110,中间三位不做要求),当信号满足该序列,给出指示信号match。

程序的接口信号图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

程序的功能时序图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

输入描述: clk:系统时钟信号 rst_n:异步复位信号,低电平有效 a:单比特信号,待检测的数据

输出描述: match:当输入信号a满足目标序列,该信号为1,其余时刻该信号为0

案例代码:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">`timescale 1ns/1nsmodule sequence_detect(input clk,input rst_n,input a,output reg match);    reg [8:0] a_temp;    always@(posedge clk or negedge rst_n)        begin            if(!rst_n)                a_temp<=9'b0;            else                a_temp<={a_temp[7:0],a};                    end    always@(posedge clk or negedge rst_n)        begin            if(!rst_n)                match<=1'b0;            else if(a_temp[8:6]==3'b011&&a_temp[2:0]==3'b110)                match<=1'b1;            else                match<=1'b0;                end               endmodule</code>
Q3:不重叠序列检测

问题描述:请编写一个序列检测模块,检测输入信号(a)是否满足011100序列, 要求以每六个输入为一组,不检测重复序列,例如第一位数据不符合,则不考虑后五位。一直到第七位数据即下一组信号的第一位开始检测。当信号满足该序列,给出指示信号match。当不满足时给出指示信号not_match。

模块的接口信号图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

模块的时序图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

输入描述: clk:系统时钟信号 rst_n:异步复位信号,低电平有效 a:单比特信号,待检测的数据

输出描述: match:当输入信号a满足目标序列,该信号为1,其余时刻该信号为0 not_match:当输入信号a不满足目标序列,该信号为1,其余时刻该信号为0

案例代码:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">`timescale 1ns/1nsmodule sequence_detect(input clk,input rst_n,input data,output reg match,output reg not_match);reg [5:0]cs;reg [5:0]ns;reg [5:0]count;always@(posedge clk or negedge rst_n)   if(!rst_n)   count<=0;   else if (count>=5)     count<=0;    else    count<=count+1;   always@(posedge clk or negedge rst_n)if(!rst_n)begin   ns<=0;   cs<=0;   endelse    cs<=ns;parameter IDLE=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6;parameter NOT_MATCH=7;always@(*)  case(cs)    IDLE:ns = (data==0)? s1:NOT_MATCH;    s1:ns =   (data==1)? s2:NOT_MATCH;    s2:ns =   (data==1)? s3:NOT_MATCH;    s3:ns =   (data==1)? s4:NOT_MATCH;    s4:ns =   (data==0)? s5:NOT_MATCH;    s5:ns =   (data==0)? s6:NOT_MATCH;    s6:ns =   (data==0)? s1:NOT_MATCH;    NOT_MATCH:ns = (data==0&&count == 5)? s1:NOT_MATCH;endcasealways@(posedge clk or negedge rst_n)  if(!rst_n)begin    match<=0;    not_match<=0;    end    else if (count == 5)begin                if(ns==s6)begin        match<=1;        not_match<=0;     end    else begin            match<=0;       not_match<=1;        end    end     else begin        match <= 1'b0;        not_match <= 1'b0;    end            endmodule</code>
Q4:输入序列不连续的序列检测

问题描述:请编写一个序列检测模块,输入信号端口为data,表示数据有效的指示信号端口为data_valid。当data_valid信号为高时,表示此刻的输入信号data有效,参与序列检测;当data_valid为低时,data无效,抛弃该时刻的输入。当输入序列的有效信号满足0110时,拉高序列匹配信号match。

模块的接口信号图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

模块的时序图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

输入描述: clk:系统时钟信号 rst_n:异步复位信号,低电平有效 data:单比特信号,待检测的数据 data_valid:输入信号有效标志,当该信号为1时,表示输入信号有效

输出描述: match:当输入信号data满足目标序列,该信号为1,其余时刻该信号为0

案例代码:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">`timescale 1ns/1nsmodule sequence_detect(input clk,input rst_n,input data,input data_valid,output reg match);    parameter [3:0] data_ref = 4'b0110;    reg [3:0] data_in;    always @(posedge clk or negedge rst_n)        if(!rst_n) data_in <= 4'b0000;        else if(data_valid) data_in <= {data_in[2:0],data};    always @(posedge clk or negedge rst_n) begin        if(!rst_n) match <= 1'b0;        else if((data_in[2:0] == 3'b011) && (!data))  match <= 1'b1;        else match <= 1'b0;    end    endmodule</code>
Q5:信号发生器

问题描述:请编写一个信号发生器模块,根据波形选择信号wave_choise发出相应的波形:wave_choice=0时,发出方波信号;wave_choice=1时,发出锯齿波信号;wave_choice=2时,发出三角波信号。

模块的接口信号图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

模块的时序图如下:

【Verilog刷题篇】硬件工程师进阶1|序列检测

输入描述: clk:系统时钟信号 rst_n:异步复位信号,低电平有效 wave_choise:2比特位宽的信号,根据该信号的取值不同,输出不同的波形信号

输出描述: wave:5比特位宽的信号,根据wave_choise的值,输出不同波形的信号

案例代码:

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">`timescale 1ns/1nsmodule signal_generator(input clk,input rst_n,input [1:0] wave_choise,output reg [4:0]wave);    reg [4:0] cnt;    reg k;    always @(posedge clk or negedge rst_n) begin        if(!rst_n) begin            cnt <= 5'd0;            wave <= 5'd0;        end        else begin            case(wave_choise)                2'd0:begin                    if(cnt == 5'd19) begin                        cnt <= 5'd0;                        wave <= 5'd0;                    end                    else if(cnt>=5'd9 && cnt<5'd19)begin                        cnt <= cnt + 1'b1;                        wave <= 5'd20;                    end                    else begin                        cnt <= cnt + 1'b1;                        wave <= 5'd00;                    end                end                2'd1:begin                    if(wave >= 5'd20)                        wave <= 5'd0;                    else                        wave <= wave + 1'b1;                end                2'd2:begin                    if(wave == 5'd0) begin                        k <= 1'b0;                        wave <= wave + 1'b1;                    end                    else if(wave == 5'd20) begin                        k <= 1'b1;                        wave <= wave - 1'b1;                    end                    else if(k == 1'b0 && wave < 5'd20)                        wave <= wave + 1'b1;                    else if(k == 1'b1 && wave > 5'd0)                        wave <= wave - 1'b1;                    else                        wave <= wave - 1'b1;                end                default:begin wave <= wave;end            endcase        end    end  endmodule</code>
总结:小白跟大牛都在用的平台硬件工程师近年来也开始慢慢吃香,校招进大厂年薪总包不下30-40w的人数一大把!而且大厂人数并没有饱和! - 本期是【Verilog刷题篇】硬件工程师从0到入门3|组合逻辑复习+时序逻辑入门,有不懂的地方可以评论进行讨论!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1848

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

614

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2356

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

47

2026.01.19

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

28

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

68

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

164

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

84

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

114

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 4.1万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

React 教程
React 教程

共58课时 | 5.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号