← eetop.cn_数字IC设计工程师笔试面试经典100题(大部分有答案)
推荐答案
测试一下
题目
数字电路设计当然必问Verilog/VHDL,如设计计数器。(未知)
参考答案与知识点
参考答案
设计一个模N计数器是数字电路面试的经典题目。以下以模8计数器为例,采用Verilog实现,使用同步复位和使能控制。代码:
module counter_mod8 (
input clk,
input rst_n,
input en,
output reg [2:0] count,
output reg overflow
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
count <= 3'b0;
overflow <= 1'b0;
end else if (en) begin
if (count == 3'd7) begin
count <= 3'b0;
overflow <= 1'b1;
end else begin
count <= count + 1'b1;
overflow <= 1'b0;
end
end else begin
overflow <= 1'b0;
end
end
endmodule
解析:计数器是时序逻辑的基本单元,考察对时钟沿触发、复位(异步/同步)、计数使能、溢出标志的理解。本设计采用异步复位(低有效)使计数器在复位时归零;当使能信号en高电平时,每个时钟上升沿计数加1;到达最大值时下一周期归零并输出overflow脉冲。易错点:计数器的位宽需满足模数(2^3=8),溢出信号只维持一个时钟周期;若需要同步复位,应将复位信号敏感表去掉,仅在if内检测。更复杂的题目可能要求可预置数、加减控制、多个计数器级联等,但核心思想一致。
涉及知识点
- 计数器模数与位宽关系
- 同步复位与异步复位区别
- 上升沿触发与敏感列表
- 使能信号与边沿检测
- 溢出标志的产生时序