饱和计数器
本课属于 Coddy Verilog 学习旅程的“RTL 设计与验证”单元。第 17 课,共 38 课。
Fundamentals 使用了一个会回绕的计数器。饱和计数器则会在边界处停止,这对于有界计数很有用。为算术更新添加显式保护条件,并让使能和重置行为独立于限值。
相关代码片段;挑战中提供了周围的声明和连接。
always @(posedge clk) begin
if(rst) count <= 0;
else if(en && count != 15) count <= count + 1;
end计数达到最大值后会保持不变,而不会回绕到 0。
当计数器必须饱和而不是回绕时,要显式保护边界更新。
挑战
中等创建一个 4 位饱和计数器 q。同步 rst 会将其清零。在启用的时钟边沿,计数器递增,直到达到 15,然后保持为 15;在禁用的时钟边沿也保持不变。复位具有最高优先级。输出列:q。所有控制信号和数据在每个时钟上升沿之前都保持稳定;在上升沿之后观察结果。
完成 design.v,并保留其模块名称和端口。锁定的 testbench.v 会提供输入变化,并在输出稳定后打印输出。它使用模拟器参数(例如 +CASE=1)选择场景;不需要标准输入。不要在设计中添加打印语句、延迟或仿真终止操作。预期输出为每次观察一行十进制值,值之间以一个空格分隔,行末以换行符结束。
亲手试试
module dut (input clk, input rst, input en, output reg [3:0] q);
// 用你的设计替换此处的占位内容。
initial q = 0;
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
RTL 设计与验证中的所有课
自己练习: Verilog 在线编译器