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

news/2024/7/5 4:53:56

✅作者简介:大家好我是:嵌入式基地,是一名嵌入式工程师,希望一起努力,一起进步!
📃个人主页:嵌入式基地
🔥系列专栏:FPGA Verilog 习题专栏
💬网上关于嵌入式的面试练习网站很少,这里给大家推荐一款Verilog 在线刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习
微信公众号:嵌入式基地

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

  • 习题一:根据状态转移表实现时序电路
  • 习题二:根据状态转移图实现时序电路
  • 习题三:ROM的简单实现
  • 习题四:边沿检测
  • 结束语

习题一:根据状态转移表实现时序电路

  • 点击查看习题解析

描述

  • 某同步时序电路转换表如下,请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。

  • 电路的接口如下图所示

输入描述

  • input A
  • input clk
  • input rst_n

输出描述

  • output wire Y

代码实现

`timescale 1ns/1ns

module seq_circuit(
      input                A   ,
      input                clk ,
      input                rst_n,
 
      output   wire        Y   
);
    reg q0, q1;
    
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) begin
            q1 <= 0;
        end
        else begin
            q1 <= A ^ q0 ^ q1;
        end
    end
    
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) begin
            q0 <= 0;
        end
        else begin
            q0 <= ~q0;
        end
    end
    assign Y = q0 & q1;
endmodule


习题二:根据状态转移图实现时序电路

  • 点击查看习题解析

描述

  • 某同步时序电路的状态转换图如下,→上表示“C/Y”,圆圈内为现态,→指向次态。
  • 请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。
  • 电路的接口如下图所示,C是单bit数据输入端。

输入描述

  • input C
  • input clk
  • input rst_n

输出描述

  • output wire Y

代码实现

`timescale 1ns/1ns

module seq_circuit(
   input                C   ,
   input                clk ,
   input                rst_n,
 
   output   wire        Y   
);
    parameter ST0 = 2'b00;
    parameter ST1 = 2'b01;
    parameter ST2 = 2'b10;
    parameter ST3 = 2'b11;
    
    reg[1:0] cur_state;
    reg[1:0] next_state;
    reg Y_r;

    always@(posedge clk or negedge rst_n)
        if(!rst_n)
            cur_state <= ST0;
        else
            cur_state <= next_state;

    always@(*)
        case (cur_state)
            ST0: begin
                if(C == 1'b0) begin
                    next_state = ST0;
                end else begin
                    next_state = ST1;
                end
            end
            ST1: begin
                if(C == 1'b0) begin
                    next_state = ST3;
                end else begin
                    next_state = ST1;
                end
            end
            ST2: begin
                if(C == 1'b0) begin
                    next_state = ST0;
                end else begin
                    next_state = ST2;
                end
            end
            ST3: begin
                if(C == 1'b0) begin
                   next_state = ST3;
                end else begin
                    next_state = ST2;
                end
            end
        endcase

        always@(*)
        case (cur_state)
            ST0: begin
               Y_r = 1'b0;
            end
            ST1: begin
               Y_r = 1'b0;
            end
            ST2: begin
                if(C == 1'b1)
                    Y_r = 1'b1;
                else
                    Y_r = 1'b0;
            end
            ST3: begin
                Y_r = 1'b1;
            end
        endcase
    assign Y = Y_r;
endmodule

习题三:ROM的简单实现

  • 点击查看习题解析

描述

  • 实现一个深度为8,位宽为4bit的ROM,数据初始化为0,2,4,6,8,10,12,14。可以通过输入地址addr,输出相应的数据data。
  • 接口信号图如下:
  • 使用Verilog HDL实现以上功能并编写testbench验证。

输入描述

  • clk:系统时钟
  • rst_n:异步复位信号,低电平有效
  • addr:8bit位宽的无符号数,输入到ROM的地址

输出描述

  • data:4bit位宽的无符号数,从ROM中读出的数据

代码实现

`timescale 1ns/1ns
module rom(
	input clk,
	input rst_n,
	input [7:0]addr,
	
	output [3:0]data
);
	reg [3:0] rom_data [7:0];
	
	assign data = rom_data[addr];
//保持ROM中的数据不变	
	always @(posedge clk or negedge rst_n)
		if (!rst_n) 
			begin
				rom_data[0] <= 4'd0;
				rom_data[1] <= 4'd2;
				rom_data[2] <= 4'd4;
				rom_data[3] <= 4'd6;		
				rom_data[4] <= 4'd8;
				rom_data[5] <= 4'd10;
				rom_data[6] <= 4'd12;
				rom_data[7] <= 4'd14;
			end
		else 
			begin
				rom_data[0] <= rom_data[0];
				rom_data[1] <= rom_data[1];
				rom_data[2] <= rom_data[2];
				rom_data[3] <= rom_data[3];		
				rom_data[4] <= rom_data[4];
				rom_data[5] <= rom_data[5];
				rom_data[6] <= rom_data[6];
				rom_data[7] <= rom_data[7];
			end
endmodule

习题四:边沿检测

  • 点击查看习题解析

描述

  • 有一个缓慢变化的1bit信号a,编写一个程序检测a信号的上升沿给出指示信号rise,当a信号出现下降沿时给出指示信号down。

  • 注:rise,down应为单脉冲信号,在相应边沿出现时的下一个时钟为高,之后恢复到0,一直到再一次出现相应的边沿。

  • 使用Verilog HDL实现以上功能并编写testbench验证。

输入描述

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

输出描述

  • rise:单比特信号,当输入信号a出现上升沿时为1,其余时刻为0
  • down:单比特信号,当输入信号a出现下降沿时为1,其余时刻为0

代码实现

`timescale 1ns/1ns
module edge_detect(
	input clk,
	input rst_n,
	input a,
	
	output reg rise,
	output reg down
);
	
	reg a_tem;

//缓存a的数值	
	always @(posedge clk or negedge rst_n)
		if (!rst_n)
			a_tem <= 1'b0;
		else
			a_tem <= a;
			
//检测边沿,给出相应的信号
	always @(posedge clk or negedge rst_n)
		if (!rst_n)	
			begin 
				rise <= 1'b0;
				down <= 1'b0;
			end
		else if (!a_tem && a)   		//当前一时刻a=0,当前时刻a=1,表示a出现一次上升沿
			begin
				rise <= 1'b1;
				down <= 1'b0;
			end
		else if	(a_tem && !a)			//当前一时刻a=1,当前时刻a=0,表示a出现一次下降沿
			begin
				down <= 1'b1;
				rise <= 1'b0;
			end
		else 
			begin
				down <= 1'b0;
				rise <= 1'b0;
			end
endmodule


结束语

你想要的牛客都有,各种大厂面试真题在等你哦!快快通过下方链接注册加入刷题大军吧!
💬刷题神器,从基础到大厂面试题👉点击跳转刷题网站


http://lihuaxi.xjx100.cn/news/133258.html

相关文章

信奥中的数学基础:因式分解

【小蓝本】因式分解技巧 合集 【小蓝本】因式分解技巧 合集_哔哩哔哩_bilibili 小蓝本一本学完&#xff0c;降维打击初中所有因式分解 小蓝本一本学完&#xff0c;降维打击初中所有因式分解_哔哩哔哩_bilibili 一次性搞定因式分解&#xff08;13种解法大全&#xff09; 一次…

丁鹿学堂:移动端开发之css常用单位总结

css中常见的单位 我们使用css的长度单位&#xff0c;最常用的是px。其实&#xff0c;css中除了px 之外&#xff0c;还有很多长度单位。今天就跟大家分享一下。 css中长度单位的分类 我们把css中的长度单位分成两类。 一类是绝对长度单位。 绝对长度单位不受其他任何东西的影…

fastlio2 论文笔记

贡献 点云不需要提特征&#xff0c;直接用原始点云和地图对齐。ikd-tree&#xff0c;对点云增量增删、降采样。运算效率高&#xff0c;各种arm板子上都能跑。 继承fastlio优点 考虑反向传播&#xff0c;提升运动补偿精度。推导公式&#xff0c;找到等效计算卡尔曼增益的方法…

青少年python系列 35.自定义函数

青少年python教学视频ppt源码 青少年python系列目录_老程序员115的博客-CSDN博客 使用过了Python自带的函数&#xff0c;你有什么感觉&#xff1f;是不是觉得让你的编程更加顺畅、代码变得更加简洁了呢&#xff1f;可是有时发现Python自带的函数无法满足我们的编程需求&#x…

python疫苗预约系统毕业设计开题报告

本文给出的python毕业设计开题报告&#xff0c;仅供参考&#xff01;&#xff08;具体模板和要求按照自己学校给的要求修改&#xff09; 选题目的和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于web网页的疫苗预约系统&#xff0c;整个网站项目使用了B/S架构…

校园网站设计,校园门户网站,学校官网,python计算机毕业设计

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于python的校园网站&#xff0c;整体网站系统基于B/S架构&#xff0c;技术上使用基于python的Django框架来实现&#xff1b;通过后台添加设置校园信息、录入和管理校园资讯、校园风光、学校分院信息、老师…

发明专利一般多长时间受理

一般发明专利多长时间受理? 一般在二周左右下发专利受理通知书。 具体专利受理流程如下&#xff1a; 1、提供交底书&#xff0c;委托代理机构撰写申请文件 2、递交申请文件&#xff0c;取得专利局的受理通知书&#xff0c;确定申请日&#xff0c;递交文件当日也可以递交提前公…

11.4 - 每日一题 - 408

每日一句&#xff1a;如果觉得你的人生还不够完美&#xff0c;那就再努力那么一丢丢&#xff0c;因为努力到一定程度&#xff0c;总会带给你意想不到的惊喜。 数据结构 1 在线索化二叉树t中&#xff0c;t所指结点没有左子树的充要条件是_______ A. t- >lchild NULLB. t-…