我不熟悉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
答案 0 :(得分:0)
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
设置为在负边缘上进行更改,以便在被外部设备捕获时在正边缘上保持稳定 - 您可能需要更改此设置,具体取决于您的应用程序要求。