如何从verilog

时间:2017-10-06 07:40:41

标签: variables verilog

我有一个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

1 个答案:

答案 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