当前位置: 首页 > news >正文

记一次数字前端设计面试(含问题和verilog设计)

一、基础概念

1. 组合逻辑 vs. 时序逻辑

组合逻辑和时序逻辑可是数字电路里的重要概念。组合逻辑呢,简单来说,它的输出仅仅取决于当前的输入,不依赖过去的状态。打个比方,就像一个简单的加法器电路,输入两个数字,立马就能得到它们相加的结果,输出和之前的输入状态没啥关系。而时序逻辑就不一样啦,它的输出不仅和当前输入有关,还依赖于过去的状态,也就是有“记忆”功能。像触发器电路就是典型的时序逻辑,它能记住之前的状态,并根据当前输入和之前状态来决定输出。

同步复位和异步复位也各有特点。同步复位呢,优点在于复位信号的作用和时钟同步,这样能保证系统在时钟的有效沿进行复位操作,使得电路状态变化更加稳定和可预测。缺点就是如果时钟信号有问题,比如时钟丢失或者不稳定,复位可能就没办法正常进行啦。异步复位就不一样,它不管时钟状态如何,只要复位信号有效,就立马进行复位操作,这在一些需要快速响应复位的场景很有用。不过呢,异步复位可能会引入复位信号毛刺的问题,这可能会导致电路误动作。要避免复位信号毛刺,可以采用一些方法,比如对复位信号进行滤波处理,或者使用专门的同步电路来处理复位信号,让它在进入关键电路前变得稳定。

2. 建立时间(Setup Time)与保持时间(Hold Time)

建立时间就是在时钟有效沿到来之前,数据必须保持稳定的最小时间。保持时间则是在时钟有效沿到来之后,数据必须保持稳定的最小时间。要是违反了这些约束,可就麻烦啦!建立时间不满足,可能会导致数据在时钟有效沿到来时还没稳定,从而使得触发器采集到错误的数据;保持时间不满足,数据可能在时钟有效沿之后很快发生变化,同样会让触发器采集到错误的值,这都会影响整个电路的正常运行。

要是出现建立时间和保持时间违例,有不少方法可以修复。比如调整电路布局布线,减少信号传输延迟,让数据能按时到达触发器;还可以优化逻辑设计,减少逻辑级数,这样也能加快数据的传输速度,满足建立时间要求。另外,调整时钟信号的相位,让它和数据信号更好地配合,也能解决保持时间的问题。

3. 逻辑门与电路优化

用基本逻辑门实现一个2:1多路复用器(MUX),可以这样做:用两个与门(AND)分别连接两个输入信号和选择信号,再用一个或门(OR)把这两个与门的输出信号组合起来。简单来说,当选择信号为0时,选中一个输入信号;当选择信号为1时,选中另一个输入信号。

在数字电路里常用与非门(NAND)代替与门(AND),这是有原因的。与非门只需要较少的晶体管就能实现,相比与门,它的硬件实现更简单,占用面积更小。而且与非门的逻辑功能很灵活,通过对输入信号取反,就能实现与门的功能。所以从硬件成本和设计灵活性的角度考虑,与非门更受欢迎。

😜这里可以插入一个思考的表情包,表示这些基础概念需要好好琢磨。

二、设计能力

4. 代码实现

用Verilog编写一个带异步复位、同步使能的D触发器,可以这样写:

module d_ff (
    input wire clk,
    input wire rst_n,
    input wire en,
    input wire d,
    output reg q
);
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            q <= 1'b0;
        end else if (en) begin
            q <= d;
        end
    end
endmodule

检测输入信号的上升沿,可以通过一个寄存器和一个比较逻辑来实现。RTL代码如下:

module detect_rise (
    input wire clk,
    input wire rst_n,
    input wire in,
    output reg rise_detected
);
    reg in_reg;
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            in_reg <= 1'b0;
            rise_detected <= 1'b0;
        end else begin
            in_reg <= in;
            rise_detected <= (!in_reg && in);
        end
    end
endmodule

原理就是用一个寄存器存储前一个时钟

在这里插入图片描述
点击跳转练习verilog

相关文章:

  • Vue3可用的图片预览插件【vue3-photo-preview】
  • Android第六次面试总结(自定义 View与事件分发)
  • trae 配置 gradle springboot项目
  • 【gradio】从零搭建知识库问答系统-Gradio+Ollama+Qwen2.5实现全流程
  • java中MyBatis项目的搭建与配置
  • MaxKB 如何通过Nginx修改浮框提示文字
  • 【记录】并行运行olmocr把服务器跑崩
  • vmware虚拟机突然连不上网
  • EF Core 异步方法
  • 高性能 Android 自定义 View:数据渲染与事件分发的双重优化
  • @Resource 与 @Autowired:Spring 中的依赖注入注解大比拼
  • gz sim机器人SDF模型 [持续更新]
  • trino查询mysql报Unknown or incorrect time zone: ‘Asia/Shanghai‘
  • Maven插件学习(一)——生成可执行的 JAR 文件
  • Redis集群哨兵相关面试题
  • SSM驾校预约管理系统
  • 【开题报告+论文+源码】基于SpringBoot的智能安全与急救知识科普系统设计与实现
  • 字节跳动前端开发实习生面试总结
  • Pytorch学习笔记(一)Learn the Basics - Quickstart
  • 辉视智慧会所:一键“唤”醒高端服务,乐享智慧生活新“声”级!
  • 大连做外贸建站的专业公司/如何制作网站二维码
  • 云速建站与传统网站的区别/西安网站建设公司电话
  • 网站UI怎么做/口碑营销有哪些
  • 西安seo网站关键词优化/整合营销传播的六种方法
  • 独立网站商城/大连网站建设
  • web网站开发源代码/seo教学免费课程霸屏