← 数字IC设计经典笔试题

推荐答案 测试一下

数字电路设计当然必问Verilog/VHDL,如设计计数器。(未知)

编程题 中等 笔试真题

参考答案

由于题目未明确计数器的具体功能,参考答案以典型模10计数器为例,使用Verilog实现,具备同步复位和使能功能,参数化设计便于扩展。 module counter #(parameter WIDTH = 4, MAX = 9) ( input clk, input rst_n, input en, output reg [WIDTH-1:0] cnt, output reg carry ); always @(posedge clk or negedge rst_n) begin if (!rst_n) begin cnt <= 0; carry <= 0; end else if (en) begin if (cnt == MAX) begin cnt <= 0; carry <= 1; end else begin cnt <= cnt + 1; carry <= 0; end end else begin carry <= 0; end end endmodule 说明: 1. 同步复位使用非阻塞赋值,复位电平为低(rst_n),满足绝大多数设计规范。 2. 使能信号en高电平有效,仅在使能时计数器递增。 3. 采用参数化设计,WIDTH决定位宽,MAX决定最大计数值,便于复用。 4. 产生进位信号carry,当计数值达到MAX时拉高一个时钟周期。 5. 若设计为异步复位,可将敏感列表中的negedge rst_n去掉,但异步复位在FPGA中需要谨慎处理亚稳态。 6. 面试中常问的扩展:如何设计模可调计数器(通过输入端口设置模值)?如何实现双向计数器?如何添加加载功能?建议在回答时体现模块化、可重用思维。

涉及知识点

  • 同步复位与异步复位的区别
  • 非阻塞赋值在时序逻辑中的使用
  • 参数化模块设计(parameter)
  • 计数器进位信号的产生
  • Verilog always块敏感列表
← 上一题
登录后反馈错题
下一题 →