我有一个HDL模块,输出跟随输入,当输入信号为二进制0时,输出保持为0但输入变为1时,输出变为1预设的时钟周期数(signal_length)。即输入可以保持高电平,假设为65或66个时钟周期,但输出应保持高电平达预设的时钟周期数。我试图用Verilog完成任务。但我有一个错误,我不知道如何纠正。希望有人可以提供帮助。
module last_ind
#(
parameter MAX_LENGTH = 262144,
parameter signal_length
)
(
input clk,
input [17:0] pkt_length,
input tdata,
output tlast
);
reg [17:0] cnt = 0;
always @ (posedge clk)
begin
if ((tdata==1) && (cnt<signal_length))
tlast <= 1;
else
cnt <= 0;
end
assign cnt <= cnt + 1'b1;
endmodule
答案 0 :(得分:1)
也许这样的事情会发生。它应该保持signal_length周期的信号,并在tdata得到&#39; 0时重置。你决定使用正确的协议。
reg [17:0] cnt = signal_length;
always @ (posedge clk) begin
if (cnt < signal_lenth)
cnt <= cnt + 1;
else if (cnt == signal_length + 1 && tdata == 1 && tlast == 0) begin
cnt <= 0;
tlast <= 1;
end
else if (tdata == 0) begin
cnt <= sighal_length + 1;
tlast <= 0;
end
else
tlast <= 0;
end