展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 硬件相关 > Verilog刷题攻略|硬件工程师进阶序列检测

Verilog刷题攻略|硬件工程师进阶序列检测

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

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

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

模块的接口信号图如下:

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

模块的时序图如下:

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

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

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

案例代码:

代码语言:javascript代码运行次数:0运行复制
`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
Q2: 含有无关项的序列检测

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

程序的接口信号图如下:

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

程序的功能时序图如下:

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

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

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

案例代码:

代码语言:javascript代码运行次数:0运行复制
`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
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运行复制
`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
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运行复制
`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
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运行复制
`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
总结:小白跟大牛都在用的平台硬件工程师近年来也开始慢慢吃香,校招进大厂年薪总包不下30-40w的人数一大把!而且大厂人数并没有饱和! - 本期是【Verilog刷题篇】硬件工程师从0到入门3|组合逻辑复习+时序逻辑入门,有不懂的地方可以评论进行讨论!
本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
硬件相关 硬件
相关文章 更多
精品专题 更多
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

PDF教程

PDF教程适合刚接触PDF文件的用户,本文整理PDF打开、编辑、转换、合并、压缩等常见基础操作。通过这些教程可以快速了解PDF文件怎么处理,解决办公、学习和资料科整理中的常见问题。使用极轻PDF可在线完成多种PDF操作,适合新手快速上手。

Mac软件 更多
灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Menuist
Menuist

Menuist 是一款面向 macOS 的 Finder 右键菜单增强工具,主要用来补充新建文件、快捷导航等常用操作,让日常文件管理和访问路径时更高效、更顺手。

Mole
Mole

Mole 是一款专为 Mac 设计的深度清理优化工具,涵盖缓存清理、应用管理及实时状态监控等功能。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

PinStack
PinStack

PinStack是一款轻量级的Windows平台剪贴板管理工具,优化您的剪贴板使用体验。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Seer
Seer

Seer是一款在Win平台下的空格键功能增强效率工具,只需轻敲空格键,就能预览几乎任何格式的文件。它更适合把零散的小功能集中起来使用,处理高频琐碎任务时会更省事。