← 数字IC设计工程师笔试面试经典100题(大部分有答案)

推荐答案 测试一下

设计输入。 Verilog或VHDL编写代码。

编程题 中等 笔试真题

参考答案

该题要求用Verilog或VHDL编写代码实现一个设计输入模块。由于题目未具体指定功能,以常见笔试题“同步复位D触发器”为例进行解析。 Verilog代码: module d_flip_flop ( input wire clk, input wire rst_n, input wire d, output reg q ); always @(posedge clk or negedge rst_n) begin if (!rst_n) q <= 1'b0; else q <= d; end endmodule 解析: - 信号定义:clk(时钟)、rst_n(低电平有效异步复位)、d(数据输入)、q(输出)。 - always块敏感列表:posedge clk(上升沿触发)和negedge rst_n(异步复位)。 - 复位逻辑:当rst_n为低时,q清零;否则时钟上升沿将d传至q。 易错点: - 复位方式选择:异步复位信号应在敏感列表中列出,同步复位则只敏感时钟沿,复位判断在内部用if实现。 - 阻塞与非阻塞赋值:时序逻辑应使用非阻塞赋值(<=)避免竞争。 - 端口方向:输入用input,输出用output或inout。 - 位宽扩展:若数据位宽不为1,定义d和q为[N-1:0]并相应调整。 若题目要求其他设计(如计数器、状态机),核心思路类似:明确端口、时钟域、复位策略,遵循Verilog/VHDL语法规范。 VHDL示例(同步复位): entity d_ff is port ( clk : in std_logic; rst : in std_logic; d : in std_logic; q : out std_logic ); end d_ff; architecture rtl of d_ff is begin process(clk) begin if rising_edge(clk) then if rst = '1' then q <= '0'; else q <= d; end if; end if; end process; end rtl;

涉及知识点

  • Verilog/VHDL时序逻辑设计
  • 同步与异步复位区别
  • 阻塞与非阻塞赋值
  • 敏感列表与触发沿
  • 端口声明语法
← 上一题
登录后反馈错题
下一题 →