推荐答案
测试一下
题目
3使用简单的模块 ................................ ................................ ................................ ...........…
参考答案与知识点
参考答案
设计一个简单的4位同步复位计数器模块,端口包括时钟clk、同步复位rst_n、计数使能en和计数输出q[3:0]。采用Verilog HDL实现,模块定义如下:
module counter (
input clk,
input rst_n,
input en,
output reg [3:0] q
);
always @(posedge clk) begin
if (!rst_n)
q <= 4'b0000;
else if (en)
q <= q + 1'b1;
else
q <= q;
end
endmodule
分析:该模块使用同步复位(rst_n低有效),复位信号与时钟同步,避免异步复位带来的亚稳态问题。计数使能en为高时每时钟上升沿加1,否则保持不变。输出q为reg类型,在always块内赋值。注意使用非阻塞赋值(<=)以保证在同一个时钟沿多个赋值操作的正确顺序。若需要可加载初始值,可增加数据输入端口和加载控制信号。该设计体现了模块化、参数化思想,可扩展为任意位宽计数器。易错点:忘记将输出声明为reg、在多个always块中对同一变量赋值、漏掉else分支导致综合出锁存器、复位极性混淆等。
涉及知识点
- 模块端口定义与数据类型
- 同步复位与异步复位区别
- 阻塞赋值与非阻塞赋值规则
- 时序逻辑always块写法
- 避免综合出锁存器