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

推荐答案 测试一下

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

编程题 中等 笔试真题

参考答案

使用Verilog HDL实现10进制计数器(模10计数器),计数范围0~9,循环计数。采用同步复位和时钟上升沿触发。代码如下: ```verilog module decade_counter ( input clk, input rst_n, // 异步低电平复位 output reg [3:0] cnt // 4位BCD输出 ); always @(posedge clk or negedge rst_n) begin if (!rst_n) cnt <= 4'b0; else if (cnt == 4'd9) cnt <= 4'b0; else cnt <= cnt + 1'b1; end endmodule ``` 解析:1. `cnt`为4位寄存器,表示0~9的十进制计数值,注意避免使用8位等多余位宽。2. 复位逻辑:低电平复位时清零;当计数到9时,下一时钟周期回到0;否则加1。3. 注意比较条件使用`cnt == 4'd9`,而不是`4'd10`,因为计数到9后需要归零。4. 若使用同步复位,则将复位条件置于`posedge clk`触发的always块内,且敏感列表只含`clk`。5. 综合时需注意避免产生锁存器,所有分支均已覆盖(复位、计数终点、递增)。6. 若需输出BCD码,直接使用`cnt`;若需7段显示等,需额外译码。7. 可扩展为带有使能端的计数器:在递增条件中增加`if (en) cnt <= ...`。

涉及知识点

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