← 2017 · 复旦微2017年校招笔试题 笔试

推荐答案 测试一下

写 verilog 代码。题目大概的意思:输入 in,输出 out,对输入 in 维持的周期

编程题 中等 笔试真题

参考答案

题目描述较为简略,常见理解为:输入in,输出out,要求out在in为高电平期间维持一个时钟周期的高电平脉冲(即上升沿检测)。实现方法:使用两级触发器对in进行同步与延迟,通过组合逻辑检测上升沿(in_d1 && ~in_d2),输出一个时钟周期宽度的脉冲。另一种理解是直接输出in本身(out=in),但过于简单,不符合编程题典型考点。以下给出标准上升沿检测Verilog代码: module edge_detector ( input clk, input rst_n, input in, output reg out ); reg in_d1, in_d2; always @(posedge clk or negedge rst_n) begin if (!rst_n) begin in_d1 <= 1'b0; in_d2 <= 1'b0; end else begin in_d1 <= in; in_d2 <= in_d1; end end always @(posedge clk or negedge rst_n) begin if (!rst_n) begin out <= 1'b0; end else begin out <= in_d1 & ~in_d2; end end endmodule 注意:out在时钟沿赋值,保证同步输出;若需组合逻辑,可将out定义为wire并assign out = in_d1 & ~in_d2;复位采用异步低有效。本题主要考察同步设计、边沿检测原理及Verilog时序描述。

涉及知识点

  • 同步设计(多级触发器)
  • 边沿检测原理(上升沿/下降沿)
  • 时序逻辑与组合逻辑区别
  • Verilog reg与wire声明
  • 异步复位与同步释放
← 上一题
登录后反馈错题
下一题 →