触发阈值警报
本课属于 Coddy Verilog 学习旅程的“RTL 设计与验证”单元。第 35 课,共 38 课。
挑战
困难分 5 个步骤构建一个 Sample Monitor。只要 total 大于或等于无符号 limit(包括相等),就将组合报警信号置为高电平。每个时钟沿之后,报警信号反映更新后的 total,并随 limit 的变化而变化。即使 total=0,limit=0 也会使报警信号置为高电平。保留所有累加、使能、清零和计数行为。保留之前步骤中的所有内容,包括其测试平台和先前的输出行为。所有输入值都是已知的。每种场景最多有 40 个时钟沿,因此 total 可以用 16 位表示。固定测试平台会在场景 1-9 中打印 total,在场景 10-12 中打印 total 和 count,在场景 13-15 中打印 total、count 和 alarm。只评测此步骤启用的场景。
完成 design.v,并保留其模块名称和端口。锁定的 testbench.v 会提供输入变化,并在信号稳定后打印输出。它使用模拟器参数(例如 +CASE=1)选择场景;不需要标准输入。不要在设计中添加打印语句、延迟或仿真终止操作。预期输出是每次观测对应一行十进制值,值之间以一个空格分隔,并以换行符结尾。
亲手试试
module dut(input clk,rst,en,clear, input [7:0] data, input [15:0] limit, output reg [15:0] total, output reg [3:0] count, output alarm);
always @(posedge clk)begin
if(rst || clear)begin total<=0;count<=0;end
else if(en)begin
total<=total+data;
if(count!=15)count<=count+4'd1;
end
end
assign alarm=0;
endmoduleRTL 设计与验证中的所有课
自己练习: Verilog 在线编译器