如何在 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
设置为在下降沿变化,因此如果它被外部设备捕获,它在上升沿稳定 - 您可能需要更改此设置,具体取决于您的应用程序要求。
我不熟悉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
设置为在下降沿变化,因此如果它被外部设备捕获,它在上升沿稳定 - 您可能需要更改此设置,具体取决于您的应用程序要求。