如何在 verilog 中制作 1 个周期的自上升信号?

How can I make 1 cycle self rising signal in verilog?

我不熟悉verilog,但我想制作如下所示的PKTEND 信号。 如您所见,当 FLAGA 下降时,该信​​号将从下降返回上升。

我想发出这样的 PKTEND 信号。 你能告诉我如何在 verilog 中发出那个信号吗?

module test ();

input flagA;
input flagB;
output pktend;
input clk;
input reset_n;

always @(posedge clk)
begin
if(!flagA) begin
pktend <= 1;
pktend <= 0;
pktend <= 1;
end

end



endmodule

Verilog(和更普遍的 HDL)不是 C - 它们(大体上)不以顺序方式运行。行

if(!flagA) begin
  pktend <= 1;
  pktend <= 0;
  pktend <= 1;
end

相当于

if(!flagA) begin
  pktend <= 1;
end

因为对 pktend 的三个赋值都及时发生在同一实例中。

您要查找的内容更类似于以下内容:

always@(posedge clk)
  flagA_prev <= flagA;

always @(negedge clk)
  if (!flagA && flagA_prev) //The flag was asserted up until now
    pktend <= 0;
  else
    pktend <= 1;

您可能需要额外的延迟周期才能正确匹配图表 - 我会把它留给您自己解决。我已将 pktend 设置为在下降沿变化,因此如果它被外部设备捕获,它在上升沿稳定 - 您可能需要更改此设置,具体取决于您的应用程序要求。