Verilog D-Flip-Flop 在异步复位后不重新锁存
Verilog D-Flip-Flop not re-latching after asynchronous reset
我有一个带异步复位和使能功能的触发器。这是我的代码:
module DFF_aSR(in, enable, clock, reset, out);
input in, enable, clock, reset;
output out;
reg out;
always @ (posedge clock or posedge reset) begin
if (reset) begin
out <= 1'b0;
end
else if (enable) begin
out <= in;
end
end
endmodule
但是这是我得到的波形,它表明复位后没有发生重新锁定,为什么会这样?
锁存器输出应该变高 if/when 时钟上升沿出现,数据 stable 变高,复位 stable 变低。我看到的唯一这样的边缘是在第一个复位脉冲之前。如果您希望锁存器在例如时间 110ns,您应该确保在此之前复位输入变低。如果您的意图是复位应该是边沿触发而不是电平触发,您可能需要使用一对触发器,一个由时钟触发,另一个由复位触发,接线使得第一个的 D 输出连接到 Q 的第二个,第二个的 D 连接到第一个的 /Q。将锁存器的输出送入 XOR 门将产生一个信号,指示哪个信号具有最近的上升沿(警告:同时上升沿可能触发亚稳态)。您似乎想要的信号可以通过将锁存数据的 "AND" 与 XOR 的输出以及可能的一些避险门一起形成。
我有一个带异步复位和使能功能的触发器。这是我的代码:
module DFF_aSR(in, enable, clock, reset, out);
input in, enable, clock, reset;
output out;
reg out;
always @ (posedge clock or posedge reset) begin
if (reset) begin
out <= 1'b0;
end
else if (enable) begin
out <= in;
end
end
endmodule
但是这是我得到的波形,它表明复位后没有发生重新锁定,为什么会这样?
锁存器输出应该变高 if/when 时钟上升沿出现,数据 stable 变高,复位 stable 变低。我看到的唯一这样的边缘是在第一个复位脉冲之前。如果您希望锁存器在例如时间 110ns,您应该确保在此之前复位输入变低。如果您的意图是复位应该是边沿触发而不是电平触发,您可能需要使用一对触发器,一个由时钟触发,另一个由复位触发,接线使得第一个的 D 输出连接到 Q 的第二个,第二个的 D 连接到第一个的 /Q。将锁存器的输出送入 XOR 门将产生一个信号,指示哪个信号具有最近的上升沿(警告:同时上升沿可能触发亚稳态)。您似乎想要的信号可以通过将锁存数据的 "AND" 与 XOR 的输出以及可能的一些避险门一起形成。