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

推荐答案 测试一下

用 VERILOG 或VHDL写一段代码,实现 10进制计数器。(未知)

编程题 中等 笔试真题

参考答案

使用 Verilog 实现 10 进制计数器,计数范围 0-9,循环计数,并产生进位输出信号。 ```verilog module counter_10 ( input clk, input rst_n, // 异步低电平复位 output reg [3:0] count, // 4位二进制表示 0-9 output reg carry // 进位信号,计数到9时输出高电平 ); always @(posedge clk or negedge rst_n) begin if (!rst_n) begin count <= 4'd0; carry <= 1'b0; end else if (count == 4'd9) begin count <= 4'd0; carry <= 1'b1; // 产生进位脉冲 end else begin count <= count + 1'b1; carry <= 1'b0; end end endmodule ``` 说明: 1. 采用 4 位寄存器 count,取值范围 0-9,当计数到 9 时下一个时钟周期回 0 并输出高电平进位脉冲。 2. 使用异步低电平复位 rst_n,确保初始状态为 0。 3. 进位信号 carry 在 count==9 时置高,其他时刻为低,形成持续一个时钟周期的脉冲。 4. 注意:数值 10 在二进制表示为 4'b1010,但本计数器模 10,所以当 count 达到 9 后立即归零,不会出现 10。 5. 若要显示为 BCD 码,可直接使用 count 输出,因为 0-9 的 BCD 码与其二进制一致。 易错点: - 计数器宽度:需要至少 4 位,若用 3 位最大只能到 7,无法表示 9。 - 进位时机:应在 count==9 时产生进位,而不是 count==10。 - 复位:务必处理复位逻辑,否则初始状态不确定。

涉及知识点

  • VERILOG
  • Verilog
  • verilog
  • 复位
  • 时钟
← 上一题
登录后反馈错题
下一题 →