Пытаюсь удвоить клок задержками логики:
задержать клок на входе на четверть периода, затем подать входной и задержанный на XOR и получить удвоенный клок с примерно 50% duty cycle.
Ессно, решение кривое, но что-то более серьезное сейчас нет возможности делать (есть на то причины), нужно срочно как временное решение.
Вот код:
Код
library ieee;
use ieee.std_logic_1164.all;
entity OLED_interface is
port (
CLK_IN: in std_logic;
and1_sig_out, and2_sig_out: out std_logic;
CLK_OUT: out std_logic
);
end entity;
architecture OLED_interface_arch of OLED_interface is
attribute syn_keep: boolean;
signal and1_sig, and2_sig, CLK_OUT_sig: std_logic;
attribute syn_keep of and1_sig, and1_sig_out, and2_sig, and2_sig_out, CLK_OUT_sig: signal is true;
begin
and1_sig <= CLK_IN and '1';
and1_sig_out <= and1_sig;
and2_sig <= and1_sig and '1';
and2_sig_out <= and2_sig;
CLK_OUT_sig <= and2_sig xor CLK_IN;
CLK_OUT <= CLK_OUT_sig;
end;
первый and1_sig_out в timing simulation дает сдвиг клока, второй (and2_sig_out) не дает относительно первого - т.е. повторяет and1_sig_out в плане timingа. Это то что показывает ModelSim.
Кроме того, CLK_OUТ заткнут в нуле, XORа не делает с and2_sig...
Подскажите, в чем лажа ? (или может кто предложит более нормальное решение удвоения клока без PLLей при сохранении 40-60% duty cycle ?)