【发布时间】:2021-07-12 18:01:26
【问题描述】:
我创建了一个最多计数为 30 的计数器。我有一个输出信号 out。在两个特定计数时,即当计数器达到 10 (first) 和当计数器达到 15 (second) 时,我希望输出变低。不知何故,我在这里遗漏了一个基本逻辑,因为只有一个特定的计数(10 或 15)我才能使输出为零。
这里是代码
module user_def_pulse(
output integer counter,
output reg out,
input clk, reset
);
parameter no_of_counts = 30;
parameter first = 10;
parameter second = 15;
initial
begin
counter = 0;
out = 1'b0;
end
always @(posedge clk)
begin
if (reset)
begin
counter <= 1'b0;
end
else if (counter == no_of_counts)
begin
counter <= 1'b0;
out <= 1'b0;
end
else
begin
if ((counter == first) || (counter == second))
out <= 1'b0;
else
begin
counter <= counter + 1;
out <= 1'b1;
$display($time," The value of counter is %d", counter);
end
end
end
endmodule
这里是测试台
module user_def_pulse_tb(
);
parameter time_period = 10;
wire [31:0] COUNTER;
wire OUT;
reg CLK, RESET;
user_def_pulse udp1 (.counter(COUNTER), .out(OUT), .clk(CLK), .reset(RESET));
initial
begin
CLK = 1'b0;
RESET = 1'b1;
#20 RESET = 1'b0;
end
always
#time_period CLK = ~CLK;
endmodule
这是输出波形。
【问题讨论】: