← 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