У меня есть плата Altera C4E6/E10-CORE с Altera Cyclone IV. Я ее сконфигурировал такой реализацией триггера:
Код:
module sr_latch(input s, r, output p, q);
assign q = ~(r | p);
assign p = ~(s | q);
endmodule
Код:
module top(input clk,
input [1:0] key,
output [7:0] ledr);
assign ledr[7:2] = 6'b0;
sr_latch sr_latch
(
.s(~key[0]),
.r(~key[1]),
.q(ledr[0]),
.p(ledr[1])
);
endmodule
Почему при нажатии на кнопки (две штуки) загорается то один диод, то другой, чередуясь, и не гаснут, если кнопку отпустить? Вроде если кнопку отпускаешь, тогда сигнал на входе триггера меняется и триггер переходит в другое состояние. Если с s и r убрать инверсию, то тогда диоды загораются только в момент нажатия и гаснут, если кнопку отпустить:
Код:
module top(input clk,
input [1:0] key,
output [7:0] ledr);
assign ledr[7:2] = 6'b0;
sr_latch sr_latch
(
.s(key[0]),
.r(key[1]),
.q(ledr[0]),
.p(ledr[1])
);
endmodule
Объясните, пожалуйста, почему такая разница? В первом случае диод не гаснет, если кнопку отпустить, во втором гаснет.