FPGA硬件工程师Verilog面试题(五)

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: FPGA硬件工程师Verilog面试题(五)

88a749c7dd364bd49d099f36597095b0.png


习题一:输入序列连续的序列检测



描述


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

模块的接口信号图如下:


e9d7e3813f9e482b83e726947f5fa08c.png


模块的时序图如下:


51a5c1aef05c4fdf9878268bcac8b80e.png


  • 请使用Verilog HDL实现以上功能,并编写testbench验证模块的功能


输入描述


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


输出描述


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


代码实现

`timescale 1ns/1ns
module sequence_detect(
  input clk,
  input rst_n,
  input a,
  output reg match
  );
  reg [7:0] a_tem;
  always @(posedge clk or negedge rst_n)
    if (!rst_n)
      begin 
        match <= 1'b0;
      end
    else if (a_tem == 8'b0111_0001)
      begin
        match <= 1'b1;
      end
    else 
      begin 
        match <= 1'b0;
      end
  always @(posedge clk or negedge rst_n)
    if (!rst_n)
      begin 
        a_tem <= 8'b0;
      end
    else 
      begin
        a_tem <= {a_tem[6:0],a};
      end
endmodule

习题二:含有无关项的序列检测



描述


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


程序的接口信号图如下:



4dcfd754dce84e65b0f038eb9a80f87c.png

程序的功能时序图如下:



1b6abedadceb45a4bda1b9cee276029a.png

  • 请使用Verilog HDL实现以上功能,并编写testbench验证模块的功能。 要求代码简洁,功能完整。


输入描述


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


输出描述


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


代码实现

`timescale 1ns/1ns
module sequence_detect(
  input clk,
  input rst_n,
  input a,
  output match
  );
  reg [8:0] a_tem;
  reg match_f;
  reg match_b;
  always @(posedge clk or negedge rst_n)
    if (!rst_n)
      begin 
        match_f <= 1'b0;
      end
    else if (a_tem[8:6] == 3'b011)
      begin
        match_f <= 1'b1;
      end
    else 
      begin 
        match_f <= 1'b0;
      end
  always @(posedge clk or negedge rst_n)
    if (!rst_n)
      begin 
        match_b <= 1'b0;
      end
    else if (a_tem[2:0] == 3'b110)
      begin
        match_b <= 1'b1;
      end
    else 
      begin 
        match_b <= 1'b0;
      end
  always @(posedge clk or negedge rst_n)
    if (!rst_n)
      begin 
        a_tem <= 9'b0;
      end
    else 
      begin
        a_tem <= {a_tem[7:0],a};
      end
  assign match = match_b && match_f;
endmodule


习题三:不重叠序列检测



描述


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


模块的接口信号图如下:


ad7237a8d7684a8a91bd98332f37ec48.png


模块的时序图如下:


95ff4e6c288c4aa8a2bfb0882a5a58ad.png


请使用Verilog HDL实现以上功能,要求使用状态机实现,画出状态转化图。并编写testbench验证模块的功能。


输入描述

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

输出描述

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

代码实现

`timescale 1ns/1ns
module sequence_detect(
  input clk,
  input rst_n,
  input data,
  output reg match,
  output reg not_match
  );
    parameter ZERO=0, ONE=1, TWO=2, THREE=3, FOUR=4, FIVE=5, SIX=6, FAIL=7;
    reg [2:0] state, nstate;
    reg [2:0] cnt;
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            cnt <= 0;
        else
            cnt <= cnt==6? 1: cnt+1; 
    end
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            state <= ZERO;
        else
            state <= nstate;
    end
    always@(*) begin
        if(~rst_n)
            nstate = ZERO;
        else
            case(state)
                ZERO : nstate = data? FAIL : ONE;
                ONE  : nstate = data? TWO  : FAIL;
                TWO  : nstate = data? THREE: FAIL;
                THREE: nstate = data? FOUR : FAIL;
                FOUR : nstate = data? FAIL : FIVE;
                FIVE : nstate = data? FAIL : SIX;
                SIX  : nstate = data? FAIL : ONE;
                FAIL : nstate = cnt==6&&data==0? ONE: FAIL;
                default: nstate = ZERO;
            endcase
    end
    always@(*) begin
        if(~rst_n) begin
            match     = 0;
            not_match = 0;
        end
        else begin
            match     = cnt==6&&state==SIX;
            not_match = cnt==6&&state==FAIL;
        end
    end
endmodule

习题四:输入序列不连续的序列检测



描述


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


模块的接口信号图如下:

9c5a3978b18f4e728215da83217e05f5.png• 模块的时序图如下:


12792bd9654c4817ba56ba8687474050.png


请使用状态机实现以上功能,画出状态转移图并使用Verilog HDL编写代码实现以上功能,并编写testbench验证模块的功能.


输入描述


clk:系统时钟信号

rst_n:异步复位信号,低电平有效

data:单比特信号,待检测的数据

data_valid:输入信号有效标志,当该信号为1时,表示输入信号有效


输出描述


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


代码实现


`timescale 1ns/1ns
module sequence_detect(
  input clk,
  input rst_n,
  input data,
  input data_valid,
  output reg match
  );
    reg [3:0] data_r;
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            data_r <= 4'b0;
        else
            data_r <= data_valid? {data_r[2:0], data}: data_r;
    end
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            match <= 0;
        else
            match <= data_r[2:0]==3'b011 && data==1'b0 && data_valid;
    end
//  always@(posedge clk or negedge rst_n) begin
//     if(~rst_n)
//         match <= 0;
//     else
//         match <= data_r==4'b0110;
//  end
endmodule
相关文章
|
1月前
|
编解码 算法 异构计算
基于FPGA的NC图像质量评估verilog实现,包含testbench和MATLAB辅助验证程序
在Vivado 2019.2和Matlab 2022a中测试的图像质量评估算法展示了效果。该算法基于NC指标,衡量图像与原始图像的相似度,关注分辨率、色彩深度和失真。提供的Verilog代码段用于读取并比较两个BMP文件,计算NC值。
|
1月前
|
算法 异构计算
m基于FPGA的MPPT最大功率跟踪算法verilog实现,包含testbench
该内容包括三部分:1) 展示了Vivado 2019.2和Matlab中关于某种算法的仿真结果图像,可能与太阳能光伏系统的最大功率点跟踪(MPPT)相关。2) 简述了MPPT中的爬山法原理,通过调整光伏电池工作点以找到最大功率输出。3) 提供了一个Verilog程序模块`MPPT_test_tops`,用于测试MPPT算法,其中包含`UI_test`和`MPPT_module_U`两个子模块,处理光伏电流和电压信号。
25 1
|
17天前
|
存储 异构计算 内存技术
【硬件工程师面试宝典】常见面试题其一
- Setup时间:时钟前数据需稳定的最小时间。 - Hold时间:时钟后数据需保持稳定的时间。 - 竞争现象:不同路径信号汇合导致输出不稳定。 - 冒险现象:竞争引起的短暂错误状态。 - D触发器实现2倍分频电路。
30 5
|
1月前
|
人工智能 开发工具 Python
2024年利用Python突破验证码限制,2024年最新Python高级开发工程师面试题
2024年利用Python突破验证码限制,2024年最新Python高级开发工程师面试题
2024年利用Python突破验证码限制,2024年最新Python高级开发工程师面试题
|
23天前
|
算法 计算机视觉 异构计算
基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
摘要: 在FPGA上实现了图像直方图均衡化算法,通过MATLAB2022a与Vivado2019.2进行仿真和验证。核心程序涉及灰度直方图计算、累积分布及映射变换。算法旨在提升图像全局对比度,尤其适合低对比度图像。FPGA利用可编程增益器和查表技术加速硬件处理,实现像素灰度的均匀重分布,提升视觉效果。![image preview](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_a075525027db4afbb9c0529921fd0152.png)
|
27天前
|
安全 网络安全 网络协议
精选30道“渗透测试工程师”面试题
渗透测试 信息收集 网络安全 web安全
37 3
|
1月前
|
分布式计算 监控 大数据
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
40 1
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
|
17天前
【硬件工程师面试宝典】常见面试题其二
检查单片机上电不运行:电源电压、时钟信号、复位电路、程序烧录。三极管特性:输出特性曲线和转移特性曲线。频率响应指系统对不同频率信号的响应,稳定要求幅度和相位不变。改变响应曲线方法:调整反馈、使用滤波器、改变元件参数。差分运放相位补偿通过在反馈回路加电容,波特图显示补偿效果。基本放大电路类型有共射、共集、共基,差分结构用于抗干扰和提高共模抑制比。电阻电容串联,电容电压为低通滤波,电阻电压为高通滤波。选择电阻考虑阻值、功率、温度系数、精度和尺寸。CMOS电路传递低电平用N管。电流偏置电路通过R1、Q1产生稳定电流。施密特电路回差电压由R1、R2决定。LC振荡器的哈特莱、科尔皮兹、克拉
17 0
|
1月前
|
存储 算法 异构计算
m基于FPGA的多功能信号发生器verilog实现,包含testbench,可以调整波形类型,幅度,频率,初始相位等
使用Vivado 2019.2仿真的DDS信号发生器展示了正弦、方波、锯齿波和三角波的输出,并能调整幅度和频率。DDS技术基于高速累加器、查找表和DAC,通过频率控制字和初始相位调整产生各种波形。Verilog程序提供了一个TEST模块,包含时钟、复位、信号选择、幅度和频率控制输入,以生成不同波形。
66 18
|
1月前
|
SQL 分布式计算 算法
程序员必备的面试技巧——大数据工程师面试必备技能
程序员必备的面试技巧——大数据工程师面试必备技能
52 0