FPGA硬件工程师Verilog面试题(基础篇一)

简介: FPGA硬件工程师Verilog面试题(基础篇一)

52a92ec414c54e1ca58cb2f1cff9806d.png


习题一:四选一多路器



状态转换:

d0 11

d1 10

d2 01

d3 00

  • 信号示意图:

5f0920e8cebb457c9b7e064591089a9e.png

波形示意图:


4ce0948ba4694effa77572dfe736ba06.png


输入描述

  • 输入信号 d1,d2,d3,d4 sel
  • 类型 wire

输出描述

  • 输出信号 mux_out
  • 类型 wire


代码实现

`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
    assign mux_out = sel[0]?(sel[1]?d0:d2):(sel[1]?d1:d3);
endmodule

习题二:异步复位的串联T触发器



9e8850ca34d14b338f69ade72bef07fc.png


波形示意图:


38324c0c7ba148148649521536705dab.png

输入描述

  • 输入信号 data, clk, rst
  • 类型 wire
  • 在testbench中,clk为周期5ns的时钟,rst为低电平复位

输出描述

  • 输出信号 q
  • 类型 reg


代码实现


`timescale 1ns/1ns
module Tff_2 (
input wire data, clk, rst,
output reg q  
);
reg q1;
always @ ( posedge clk or negedge rst)
if (~rst) begin
  q1 <= 1'b0;
  q <= 1'b0;
end 
else begin
    if (data) begin
      q1 <= !q1;
  end
  if (q1) begin
      q <= !q;
    end
end 
endmodule 



习题三:奇偶校验


  • 点击进行在线练习
    描述
  • 现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果(1输出奇校验,0输出偶校验)
  • 信号示意图:27475f35f4bf45fb9fc9310d764c70b3.png

波形示意图:


2756b615dc31487c9bbaae2450307d10.png

输入描述

  • 输入信号 bus sel
  • 类型 wire

输出描述

  • 输出信号 check
  • 类型 wire

代码实现

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
wire odd;
assign odd = ^bus;
assign check = sel?odd:~odd;
endmodule 

习题四:移位运算与乘法


  • 点击进行在线练习
    描述
  • 已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效)
  • 信号示意图:


029ed524fd9d45598b239bbd4db3cac4.png


波形示意图:



29e3e6e6eec34af1a46a2744435392da.png


输入描述

  • 输入信号 d, clk, rst
  • 类型 wire
  • 在testbench中,clk为周期5ns的时钟,rst为低电平复位

输出描述

  • 输出信号 input_grant out
  • 类型 reg


代码实现

`timescale 1ns/1ns
module multi_sel(
input [7:0]d ,
input clk,
input rst,
output reg input_grant,
output reg [10:0]out
);
reg [1:0]cnt;
reg [7:0]din;
always@(posedge clk or negedge rst) begin
  if(!rst) begin
    cnt <= 0;
    out <= 0;
    input_grant <= 0;
    din <= 0;
  end
  else begin
    cnt <= cnt+1;
    case (cnt)
      0: begin
        din <= d;
        input_grant <= 1;
        out <= d;
      end
      1: begin
        input_grant <= 0;
        out <= (din<<2)-din;
      end   
      2: begin
        input_grant <= 0;
        out <= (din<<3)-din;
      end
      3: begin
        input_grant <= 0;
        out <= (din<<3);
      end 
    endcase
  end
end
endmodule


习题五:位拆分与运算



现在输入了一个压缩的16位数据,其实际上包含了四个数据[3:0][7:4][11:8][15:12],


现在请按照sel选择输出四个数据的相加结果,并输出valid_out信号(在不输出时候拉低)


0: 不输出且只有此时的输入有效


1:输出[3:0]+[7:4]


2:输出[3:0]+[11:8]


3:输出[3:0]+[15:12]


信号示意图:



cd0c9a26bece4537a5a1082cf6b2f7c0.png



波形示意图:


b0d50ce315324257a6639dd18bfbf78e.png

输入描述

  • 输入信号 d, clk, rst
  • 类型 wire
  • 在testbench中,clk为周期5ns的时钟,rst为低电平复位

输出描述

  • 输出信号 validout out
  • 类型 reg

代码实现

`timescale 1ns/1ns
module data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,
output reg[4:0]out,
output reg validout
);
reg [15:0]data_lock;  
always@(posedge clk or negedge rst) begin
  if (!rst)
    data_lock <= 0;
  else if(!sel)
    data_lock <= d;
end
always@(posedge clk or negedge rst) begin
  if (!rst) begin
    out <= 'b0;
    validout <=0;
  end 
  else begin
    case(sel)
      0:begin  
        out <= 'b0;
        validout <=0;
      end
      1:begin  
        out <= data_lock[3:0]+data_lock[7:4];
        validout <=1;   
      end
      2:begin  
        out <= data_lock[3:0]+data_lock[11:8];
        validout <=1;       
      end     
      3:begin  
        out <= data_lock[3:0]+data_lock[15:12];
        validout <=1;       
      end 
        endcase
  end
end
endmodule


相关文章
|
15天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
49 2
|
7月前
|
编解码 算法 异构计算
基于FPGA的NC图像质量评估verilog实现,包含testbench和MATLAB辅助验证程序
在Vivado 2019.2和Matlab 2022a中测试的图像质量评估算法展示了效果。该算法基于NC指标,衡量图像与原始图像的相似度,关注分辨率、色彩深度和失真。提供的Verilog代码段用于读取并比较两个BMP文件,计算NC值。
|
4月前
|
网络协议 网络架构
OSPF邻居关系建立失败?揭秘网络工程师面试中最常见的难题,这些关键步骤你掌握了吗?网络配置的陷阱就在这里!
【8月更文挑战第19天】OSPF是网络工程中确保数据高效传输的关键协议。但常遇难题:路由器间无法建立OSPF邻居关系,影响网络稳定并成为面试热点。解决此问题需检查网络连通性(如使用`ping`),确认OSPF区域配置一致(通过`show running-config`),校准Hello与Dead计时器(配置`hello`和`dead`命令),及核查IP地址和子网掩码正确无误(使用`ip address`)。系统排查上述因素可确保OSPF稳定运行。
77 2
|
5月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
升级版FPGA MSK调制解调系统集成AWGN信道模型,支持在Vivado 2019.2中设置不同SNR仿真误码率。示例SNR值从0到15,结果展示解调质量随SNR提升。MATLAB仿真验证了MSK性能,图片显示了仿真结果。 ### 理论概要 研究聚焦于软件无线电中的MSK调制解调,利用Verilog实现。MSK是一种相位连续、恒包络的二进制调制技术,优点包括频谱效率高。系统采用无核设计,关键模块包括调制器、解调器和误码检测。复位、输入数据、中频信号等关键信号通过Verilog描述,并通过Chipscope在线观察。
108 6
基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误码率统计模块
|
4月前
|
运维 Kubernetes 关系型数据库
云计算运维工程师面试技巧
【8月更文挑战第6天】
409 1
|
5月前
|
算法 网络协议 Linux
|
5月前
|
C语言 芯片 异构计算
FPGA新起点V1开发板(六-语法篇)——verilog简介+基础语法
FPGA新起点V1开发板(六-语法篇)——verilog简介+基础语法
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```
|
6月前
|
存储 异构计算 内存技术
【硬件工程师面试宝典】常见面试题其一
- Setup时间:时钟前数据需稳定的最小时间。 - Hold时间:时钟后数据需保持稳定的时间。 - 竞争现象:不同路径信号汇合导致输出不稳定。 - 冒险现象:竞争引起的短暂错误状态。 - D触发器实现2倍分频电路。
90 5
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
摘要: 在FPGA上实现了图像直方图均衡化算法,通过MATLAB2022a与Vivado2019.2进行仿真和验证。核心程序涉及灰度直方图计算、累积分布及映射变换。算法旨在提升图像全局对比度,尤其适合低对比度图像。FPGA利用可编程增益器和查表技术加速硬件处理,实现像素灰度的均匀重分布,提升视觉效果。![image preview](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_a075525027db4afbb9c0529921fd0152.png)